summaryrefslogtreecommitdiffstats
path: root/uiframe-iui/src/main/resources/webroot/vendor/ict
diff options
context:
space:
mode:
Diffstat (limited to 'uiframe-iui/src/main/resources/webroot/vendor/ict')
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardConfig-jq.json33
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT-jq.js246
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT.css203
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.css241
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.min.css175
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/components.css14133
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/facebox.css83
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/ict-chart-dashboard.css143
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/transition.css63
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.js544
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js206
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js.map157
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.js7473
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.min.js2665
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/d3.min.js6152
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/facebox.js382
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/portlet-draggable-jq.js65
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/c3Chart.js59
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-barchart-c3.js29
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-linechart-c3.js41
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-barchart-c3.js67
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-linechart-c3.js81
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/index3.html143
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/CPU统计.pngbin0 -> 8273 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/Thumbs.dbbin0 -> 25600 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/closelabel.pngbin0 -> 168 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/delete.pngbin0 -> 3029 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/loading.gifbin0 -> 2767 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/open.pngbin0 -> 3692 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove.pngbin0 -> 3391 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove_red.pngbin0 -> 3405 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/shrink.pngbin0 -> 3602 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/告警统计.pngbin0 -> 9662 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计A.pngbin0 -> 5805 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计B.pngbin0 -> 4343 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计C.pngbin0 -> 9994 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/日志统计.pngbin0 -> 5935 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-barchart-c3.js34
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-linechart-c3.js40
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-barchart-c3.js68
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-linechart-c3.js98
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json86
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json.sdn36
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig.json83
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardICT.js291
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.css257
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.min.css175
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/components.css14135
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/facebox.css83
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/ict-chart-dashboard.css155
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/transition.css64
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js6194
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js.map2369
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.js544
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js206
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js.map157
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.js7473
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.min.js2665
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/d3.min.js6152
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/facebox.js388
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/portlet-draggable-jq.js66
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/c3Chart.js59
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-barchart-c3.js29
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-linechart-c3.js41
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-barchart-c3.js67
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-linechart-c3.js81
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/index3.html142
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.css293
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js435
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js.bak413
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/CPU统计.pngbin0 -> 8273 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/Thumbs.dbbin0 -> 27136 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/alarm.pngbin0 -> 4152 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/bar.svg27
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/closelabel.pngbin0 -> 168 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/cpu.pngbin0 -> 7559 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/delete.pngbin0 -> 3029 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/gauge.svg15
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/line.svg36
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/lineBar.svg37
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/loading.gifbin0 -> 2767 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/map.svg53
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/open.pngbin0 -> 3535 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/pie.svg14
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove.pngbin0 -> 3216 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove_red.pngbin0 -> 3214 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/shrink.pngbin0 -> 3347 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/stacked.svg12
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/zoom.pngbin0 -> 3100 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/告警统计.pngbin0 -> 9662 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计A.pngbin0 -> 5805 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计B.pngbin0 -> 4343 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计C.pngbin0 -> 9994 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/日志统计.pngbin0 -> 5935 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/index4.html99
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/avalon.js5279
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/d3.js9925
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/facebox.js380
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/freewall.js1317
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/css/serverPageTable.css29
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_close.pngbin0 -> 3300 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_open.pngbin0 -> 3304 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/readme.txt70
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable.js217
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable_demo.html51
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverpagetable.css70
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap-dt.css7067
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap.min.css6235
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.js1972
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.min.js619
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap2-typeahead.min.js145
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/jquery-ui.css1908
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/multi-handle-slider.css53
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/index.html67
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/external/jquery/jquery.js9815
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/Thumbs.dbbin0 -> 8704 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_18_b81900_40x40.pngbin0 -> 418 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_20_666666_40x40.pngbin0 -> 312 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_flat_10_000000_40x100.pngbin0 -> 205 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_f6f6f6_1x400.pngbin0 -> 262 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_fdf5ce_1x400.pngbin0 -> 348 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_65_ffffff_1x400.pngbin0 -> 207 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_gloss-wave_35_f6a828_500x100.pngbin0 -> 5815 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.pngbin0 -> 278 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_75_ffe45c_1x100.pngbin0 -> 328 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_222222_256x240.pngbin0 -> 6922 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_228ef1_256x240.pngbin0 -> 4549 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ef8c08_256x240.pngbin0 -> 4549 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffd27a_256x240.pngbin0 -> 4549 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffffff_256x240.pngbin0 -> 6299 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/index.html684
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.css1908
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.js16753
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.css1775
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.js5102
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.css963
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css894
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.css962
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.min.css882
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/avalon.modern.js4481
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/jquery-1.10.2.min.js2640
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/multi-handle-slider.js64
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/demo.html17
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skill.css74
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skillsData.js38
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/sunburst.js321
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap-wizard/jquery.bootstrap.wizard.min.js152
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap-dt.css7067
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap.min.css6246
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.eotbin0 -> 20127 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.svg288
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.ttfbin0 -> 45404 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woffbin0 -> 23424 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff2bin0 -> 18028 bytes
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.js1972
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.min.js619
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap2-typeahead.min.js145
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict-wizard.js129
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict_wizard_view.html141
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.10.2.min.js2640
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.js10319
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.js2625
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.map1209
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.js9179
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.js2393
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.map1130
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.js526
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.min.js125
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ngict-component.css467
-rw-r--r--uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/plugins.css1532
170 files changed, 208737 insertions, 0 deletions
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardConfig-jq.json b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardConfig-jq.json
new file mode 100644
index 00000000..85c47468
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardConfig-jq.json
@@ -0,0 +1,33 @@
+{
+ "chartTypes": {
+ "c3Chart": {
+ "typeId": "c3Chart",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "性能统计C",
+ "placeholderId": "placeholderC3",
+ "plotCallbackName": "c3ChartDemo",
+ "plotSize": "size21",
+ "plotControlCallback": "true"
+ },
+ "ictCPULineC3": {
+ "typeId": "ictCPULineC3",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "ICT服务器CPU使用率",
+ "placeholderId": "placeholderC3_1",
+ "plotCallbackName": "ICT_CPU_UsageLine_C3",
+ "plotSize": "size21"
+ },
+ "currentAlarm": {
+ "typeId": "currentAlarm",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "当前告警",
+ "placeholderId": "placeholderC3_2",
+ "plotCallbackName": "AlarmCount_BarChart_C3",
+ "plotSize": "size21"
+ }
+ },
+ "initPlots": [
+ "c3Chart"
+ ],
+ "languages": {}
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT-jq.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT-jq.js
new file mode 100644
index 00000000..12680c68
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT-jq.js
@@ -0,0 +1,246 @@
+var DashboardICT = function () {
+
+ var chartObjs;
+ var plotsSelected;
+ var plotControlCallbacks = {};
+ var plotControlHtmlFrags = {};
+
+ var wall;
+
+ var addDroppableItem = function () {
+ $(".column.sortable").droppable({
+ accept: ".draggableItems",
+ drop: function (event, ui) {
+ //var dropLocation = $( ".plotsWrapper" );
+ var plotTypeId = $(ui.draggable).attr("id");
+ if ($("#" + chartObjs[plotTypeId].placeholderId).length > 0) {
+ alert("Plot already exits!");
+ return;
+ }
+ addDraggablePortlet(this, plotTypeId);
+ }
+ });
+ }
+
+ var addDraggablePortlet = function (droppableItem, plotTypeId) {
+
+ var portletId = chartObjs[plotTypeId].typeId;
+ var portletLabel = chartObjs[plotTypeId].plotLabel;
+ var placeholderId = chartObjs[plotTypeId].placeholderId;
+ var plotCallback = eval(chartObjs[plotTypeId].plotCallbackName);
+ var plotSize = "size11";
+ if (chartObjs[plotTypeId].plotSize) {
+ plotSize = chartObjs[plotTypeId].plotSize;
+ }
+ plotSize = "";
+
+ var faceboxDivIndex = $("a[rel=facebox]").length + 1;
+ var portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder"></div>' +
+ '</div>' +
+ '</a>' +
+ '</div>';
+
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ plotControlHtmlFrags[plotTypeId] +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ '</a>' +
+ '</div>';
+ }
+
+ //插入图例
+ //$(droppableItem).before(portletHtml);
+ $(droppableItem).prepend(portletHtml);
+
+ //添加图例控制回调
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ plotControlCallbacks[plotTypeId](plotCallback, placeholderId);
+ }
+
+ plotCallback(placeholderId);
+
+ var args = [placeholderId];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+
+ $.facebox.settings.closeImage = '/web/newict/framework/thirdparty/facebox/closelabel.png';
+ $.facebox.settings.loadingImage = '/web/newict/framework/thirdparty/facebox/loading.gif';
+ $('a[rel*=facebox]').facebox();
+
+ addDroppableItem();
+
+ //调整放大后的宽度
+ var portlet = $("#" + portletId + ".portlet");
+ if ($(portlet).parent().hasClass("col-md-6")) {
+ $("a > div", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ } else {
+ $("a > div", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+ /* if(plotSize == "size21"){
+ $("div[flot_id=" + placeholderId + "]").addClass("flot-placeholder-wrapper-portlet-wide");
+ }else{
+ $("div[flot_id=" + placeholderId + "]").removeClass("flot-placeholder-wrapper-portlet-wide");
+ } */
+ }
+
+ return {
+
+ init: function () {
+
+ $.ajax({
+ async: false,
+ "type": "GET",
+ url: "/web/newict/framework/thirdparty/dashboard/DashboardConfig-jq.json",
+ dataType: "json",
+ "success": function (res, textStatus, jqXHR) {
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ //初始化左边的图列类型列表
+ chartObjs = res.chartTypes;
+ var chartSelectHtml = "";
+ for (var chartObj in chartObjs) {
+ chartSelectHtml =
+ '<div id="' + chartObjs[chartObj].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartObj].imageURL + '">' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ }
+ //初始化已选图例
+ plotsSelected = res.initPlots;
+ },
+ "error": function () {
+ alert("Config file load error!");
+ }
+ });
+
+ //组件放大显示插件
+ $.facebox.settings.closeImage = '/web/newict/framework/thirdparty/dashboard/images/closelabel.png';
+ $.facebox.settings.loadingImage = '/web/newict/framework/thirdparty/dashboard/images/loading.gif';
+ $('a[rel*=facebox]').facebox();
+ PortletDraggable.init();
+ //Portlet
+ $(".draggableItems").draggable({
+ //containment:"body",
+ revert: false,
+ appendTo: "div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ $("#deleteIcon").droppable({
+ accept: ".portlet",
+ drop: function () {
+ if ($("#deleteIcon .top").hasClass("deleteIconHidden")) {
+ //$( "#droppableItem" ).removeClass("droppedOver");
+ var portletRemoveId = $(".ui-sortable-helper").attr("id");
+ if (portletRemoveId != "droppable") {
+ $("#" + portletRemoveId).remove();
+ }
+ }
+ },
+ tolerance: "touch",
+ over: function (event, ui) {
+ //$( "#droppableItem" ).addClass("droppedOver");
+ }
+ });
+ addDroppableItem();
+ $(".sidebar-toggler").click(function () {
+ $("#cf5 img.top").toggleClass("scale");
+ $("#cf5 img.bottom").toggleClass("rotate");
+
+ $(".plotsWrapper").toggleClass("dashboardExpand", 500, "linear");
+ $(".plotItemsSelectionWrapper").toggleClass("sideBarClose", 500, "linear");
+
+ setTimeout(function () {
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ }, 500);
+ });
+ $('.plotItemsSelectionWrapper').slimScroll({
+ position: 'right',
+ width: '177px',
+ height: '630px',
+ color: 'rgb(100, 150, 240)',
+ railColor: '#fff',
+ railOpacity: 0.3
+ });
+ $('.slimScrollDiv').css({
+ 'float': 'left',
+ 'margin-right': '-100%',
+ 'margin-top': '10px'
+ });
+ $("#deleteIcon").click(function () {
+ if ($("#deleteIcon .bottom").hasClass("deleteIconHidden")) {
+ $("#deleteIcon .top").addClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").removeClass("deleteIconHidden", 500);
+ //添加删除小图标
+ $(".removeflot").addClass("removeIcon");
+ $(".removeflot.removeIcon").click(function () {
+ var placeholderId = $(".flot-placeholder", $(this).parent()).attr("id");
+ if ($.facebox.intervals[placeholderId]) {
+ clearInterval($.facebox.intervals[placeholderId]);
+ }
+ $(this).parent().remove();
+ });
+ } else {
+ $("#deleteIcon .top").removeClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").addClass("deleteIconHidden", 500);
+ //去掉删除小图标
+ $(".removeflot.removeIcon").removeClass("removeIcon");
+ }
+ });
+ //初始化已选图例
+ for (var i = 0; i < plotsSelected.length; i++) {
+ /* var portlets = $(".portlet-sortable");
+ var maxIndex = portlets.length -1;
+ addDraggablePortlet(portlets[maxIndex], plotsSelected[i]); */
+ addDraggablePortlet($(".column.sortable")[i % 2], plotsSelected[i]);
+ }
+
+ /* setTimeout(function () {
+ var charts = $.facebox.charts;
+ for(var chart in charts){
+ charts[chart].resize();
+ }
+ }, 700); */
+
+ },
+
+ saveSelectedPlots: function () {
+ var placeholders = [];
+ var plots = $(".flot-placeholder");
+ $.each(plots, function (index, plot) {
+ placeholders.push($(plot).attr('id'));
+ });
+ plotsSelected = [];
+ for (var chartObj in chartObjs) {
+ if (jQuery.inArray(chartObjs[chartObj].placeholderId, placeholders) > -1) {
+ plotsSelected.push(chartObj);
+ }
+ }
+ return plotsSelected;
+ },
+
+ addPlotControlCallbacks: function (plotId, callback) {
+ plotControlCallbacks[plotId] = callback;
+ },
+
+ addPlotControlHtmlFrags: function (plotId, htmlFrag) {
+ plotControlHtmlFrags[plotId] = htmlFrag;
+ }
+ }
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT.css
new file mode 100644
index 00000000..1a4fa39d
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/DashboardICT.css
@@ -0,0 +1,203 @@
+.droppable {
+ height: 254px;
+ /*height: 600px;*/
+ opacity: 0.0;
+}
+
+.draggableItemsWrapper {
+ opacity: 0.8;
+ background: #F7F7F7;
+ position: fixed;
+ width: 100%;
+ height: 70px;
+ overflow: auto;
+ margin: 5px;
+ top: 0px;
+}
+
+.draggableItems {
+ display: inline-block;
+ /* width: 70px; */
+ color: black;
+ /*background-color: #4b8df8;*/
+ padding: 1px;
+ padding-left: 5px;
+ padding-right: 5px;
+ margin-right: 5px;
+ font-size: 1.8em;
+ /*margin-bottom: 10px;*/
+ border: 1px solid #e1e1e1 !important;
+ border-bottom: 0px !important;
+ cursor: pointer;
+}
+
+.droppedOver {
+ background-color: red;
+}
+
+/*.plotItemsSelectionWrapper{
+ width: 160px;
+ float: left;
+ position: relative;
+ margin-right: -100%;
+ height:600px;
+ margin-top: 10px;
+ overflow-y:auto;
+}*/
+.sideBarHeader {
+ float: left;
+ display: block;
+ width: 160px;
+ height: 75px;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+.sideBarClose {
+ width: 0px !important;
+}
+
+.dashboardExpand {
+ margin-left: 10px !important;
+}
+
+.dashBoardWrapper {
+ overflow-x: auto;
+}
+
+.delete-icon {
+ float: right;
+ padding: 5px;
+ cursor: pointer;
+}
+
+.delete-icon img {
+ position: fixed;
+ right: 10px;
+}
+
+.deleteIconHidden {
+ opacity: 0;
+}
+
+.removeIcon {
+ width: 22px;
+ height: 22px;
+ float: right;
+ margin-right: -30px;
+ margin-top: -20px;
+ background: url(images/delete.png) no-repeat 0px 0px;
+ cursor: pointer;
+}
+
+.portletLabel {
+ color: #B1B1B1;
+ width: 122px;
+ height: 32px;
+ float: left;
+}
+
+.col-md-6.column.sortable.ui-sortable {
+ padding-left: 5px !important;
+}
+
+.col-padding-adjust {
+ padding-right: 5px !important;
+}
+
+.dashBoardBody {
+ width: 100%;
+ /*height:830px;*/
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.widePortlet {
+ width: 600px !important;
+}
+
+.freeDragBlock {
+ display: block;
+ width: 300px !important;
+ height: 270px !important;
+}
+
+.freeDragBlockWide {
+ display: block;
+ width: 600px !important;
+ height: 270px !important;
+}
+
+.brickDraggable {
+ float: left;
+ display: block;
+ cursor: default;
+ /*overflow: hidden;*/
+}
+
+.size11 {
+ height: 250px !important;
+ width: 280px !important;
+}
+
+/*
+.size21 {
+ height: 250px !important;
+ width: 566px !important;
+}
+.size22 {
+ height: 506px !important;
+ width: 566px !important;
+}
+*/
+.size21 {
+ height: 250px;
+ width: 566px;
+}
+
+.size22 {
+ height: 506px;
+ width: 566px;
+}
+
+/*
+.size11 {
+ height: 250px !important;
+ width: 25% !important;
+}
+.size21 {
+ height: 250px !important;
+ width: 51% !important;
+}
+.size22 {
+ height: 506px !important;
+ width: 51% !important;
+}*/
+.c3PlotTypes {
+ float: right;
+}
+
+.legendC3 {
+ width: 50%;
+ top: 12%;
+ position: absolute;
+ right: 5%;
+ z-index: 99;
+}
+
+.legendC3 span {
+ width: 33.333333%;
+ display: inline-block;
+ text-align: center;
+ cursor: pointer;
+ color: white;
+}
+
+.initBlock {
+ opacity: 0 !important;
+}
+
+.dashBoardHeader {
+ position: relative;
+ z-index: 99999;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.css
new file mode 100644
index 00000000..e78d0a4b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.css
@@ -0,0 +1,241 @@
+/*-- Chart --*/
+
+.c3 svg {
+ font: 10px sans-serif;
+}
+
+.c3 path, .c3 line {
+ fill: none;
+ stroke: #000;
+}
+
+.c3 text {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+.c3-legend-item-tile,
+.c3-xgrid-focus,
+.c3-ygrid,
+.c3-event-rect,
+.c3-bars path {
+ shape-rendering: crispEdges;
+}
+
+.c3-chart-arc path {
+ stroke: #fff;
+
+}
+
+.c3-chart-arc text {
+ fill: #fff;
+ font-size: 13px;
+}
+
+/*-- Axis --*/
+
+.c3-axis-x .tick {
+}
+
+.c3-axis-x-label {
+}
+
+.c3-axis-y .tick {
+}
+
+.c3-axis-y-label {
+}
+
+.c3-axis-y2 .tick {
+}
+
+.c3-axis-y2-label {
+}
+
+/*-- Grid --*/
+
+.c3-grid line {
+ stroke: #aaa;
+}
+
+.c3-grid text {
+ fill: #aaa;
+}
+
+.c3-xgrid, .c3-ygrid {
+ stroke-dasharray: 3 3;
+}
+
+.c3-xgrid-focus {
+}
+
+/*-- Text on Chart --*/
+
+.c3-text {
+}
+
+.c3-text.c3-empty {
+ fill: #808080;
+ font-size: 2em;
+}
+
+/*-- Line --*/
+
+.c3-line {
+ stroke-width: 1px;
+}
+
+/*-- Point --*/
+
+.c3-circle._expanded_ {
+ stroke-width: 1px;
+ stroke: white;
+}
+
+.c3-selected-circle {
+ fill: white;
+ stroke-width: 2px;
+}
+
+/*-- Bar --*/
+
+.c3-bar {
+ stroke-width: 0;
+}
+
+.c3-bar._expanded_ {
+ fill-opacity: 0.75;
+}
+
+/*-- Arc --*/
+
+.c3-chart-arcs-title {
+ dominant-baseline: middle;
+ font-size: 1.3em;
+}
+
+/*-- Focus --*/
+
+.c3-target.c3-focused {
+ opacity: 1;
+}
+
+.c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {
+ stroke-width: 2px;
+}
+
+.c3-target.c3-defocused {
+ opacity: 0.3 !important;
+}
+
+/*-- Region --*/
+
+.c3-region {
+ fill: steelblue;
+ fill-opacity: .1;
+}
+
+/*-- Brush --*/
+
+.c3-brush .extent {
+ fill-opacity: .1;
+}
+
+/*-- Select - Drag --*/
+
+.c3-dragarea {
+}
+
+/*-- Legend --*/
+
+.c3-legend-item {
+ font-size: 12px;
+}
+
+.c3-legend-item-hidden {
+ opacity: 0.15;
+}
+
+.c3-legend-background {
+ opacity: 0.75;
+ fill: white;
+ stroke: lightgray;
+ stroke-width: 1
+}
+
+/*-- Tooltip --*/
+
+.c3-tooltip-container {
+ z-index: 10;
+}
+
+.c3-tooltip {
+ border-collapse: collapse;
+ border-spacing: 0;
+ background-color: #fff;
+ empty-cells: show;
+ width: auto;
+ -webkit-box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ -moz-box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ opacity: 0.9;
+}
+
+.c3-tooltip tr {
+ border: 1px solid #CCC;
+}
+
+.c3-tooltip th {
+ background-color: #aaa;
+ font-size: 14px;
+ padding: 2px 5px;
+ text-align: left;
+ color: #FFF;
+}
+
+.c3-tooltip td {
+ font-size: 13px;
+ padding: 3px 6px;
+ background-color: #fff;
+ border-left: 1px dotted #999;
+}
+
+.c3-tooltip td > span {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin-right: 6px;
+}
+
+.c3-tooltip td.value {
+ text-align: right;
+}
+
+.c3-area {
+ stroke-width: 0;
+ opacity: 0.2;
+}
+
+.c3-chart-arcs .c3-chart-arcs-background {
+ fill: #e0e0e0;
+ stroke: none;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-unit {
+ fill: #000;
+ font-size: 16px;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-max {
+ fill: #777;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-min {
+ fill: #777;
+}
+
+.c3-chart-arc .c3-gauge-value {
+ fill: #000;
+ /* font-size: 28px !important;*/
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.min.css
new file mode 100644
index 00000000..984561f7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/c3.min.css
@@ -0,0 +1,175 @@
+.c3 svg {
+ font: 10px sans-serif
+}
+
+.c3 line, .c3 path {
+ fill: none;
+ stroke: #000
+}
+
+.c3 text {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none
+}
+
+.c3-bars path, .c3-event-rect, .c3-legend-item-tile, .c3-xgrid-focus, .c3-ygrid {
+ shape-rendering: crispEdges
+}
+
+.c3-chart-arc path {
+ stroke: #fff
+}
+
+.c3-chart-arc text {
+ fill: #fff;
+ font-size: 13px
+}
+
+.c3-grid line {
+ stroke: #aaa
+}
+
+.c3-grid text {
+ fill: #aaa
+}
+
+.c3-xgrid, .c3-ygrid {
+ stroke-dasharray: 3 3
+}
+
+.c3-text.c3-empty {
+ fill: gray;
+ font-size: 2em
+}
+
+.c3-line {
+ stroke-width: 1px
+}
+
+.c3-circle._expanded_ {
+ stroke-width: 1px;
+ stroke: #fff
+}
+
+.c3-selected-circle {
+ fill: #fff;
+ stroke-width: 2px
+}
+
+.c3-bar {
+ stroke-width: 0
+}
+
+.c3-bar._expanded_ {
+ fill-opacity: .75
+}
+
+.c3-chart-arcs-title {
+ dominant-baseline: middle;
+ font-size: 1.3em
+}
+
+.c3-target.c3-focused {
+ opacity: 1
+}
+
+.c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {
+ stroke-width: 2px
+}
+
+.c3-target.c3-defocused {
+ opacity: .3 !important
+}
+
+.c3-region {
+ fill: #4682b4;
+ fill-opacity: .1
+}
+
+.c3-brush .extent {
+ fill-opacity: .1
+}
+
+.c3-legend-item {
+ font-size: 12px
+}
+
+.c3-legend-item-hidden {
+ opacity: .15
+}
+
+.c3-legend-background {
+ opacity: .75;
+ fill: #fff;
+ stroke: #d3d3d3;
+ stroke-width: 1
+}
+
+.c3-tooltip-container {
+ z-index: 10
+}
+
+.c3-tooltip {
+ border-collapse: collapse;
+ border-spacing: 0;
+ background-color: #fff;
+ empty-cells: show;
+ -webkit-box-shadow: 7px 7px 12px -9px #777;
+ -moz-box-shadow: 7px 7px 12px -9px #777;
+ box-shadow: 7px 7px 12px -9px #777;
+ opacity: .9
+}
+
+.c3-tooltip tr {
+ border: 1px solid #CCC
+}
+
+.c3-tooltip th {
+ background-color: #aaa;
+ font-size: 14px;
+ padding: 2px 5px;
+ text-align: left;
+ color: #FFF
+}
+
+.c3-tooltip td {
+ font-size: 13px;
+ padding: 3px 6px;
+ background-color: #fff;
+ border-left: 1px dotted #999
+}
+
+.c3-tooltip td > span {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin-right: 6px
+}
+
+.c3-tooltip td.value {
+ text-align: right
+}
+
+.c3-area {
+ stroke-width: 0;
+ opacity: .2
+}
+
+.c3-chart-arcs .c3-chart-arcs-background {
+ fill: #e0e0e0;
+ stroke: none
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-unit {
+ fill: #000;
+ font-size: 16px
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-max, .c3-chart-arcs .c3-chart-arcs-gauge-min {
+ fill: #777
+}
+
+.c3-chart-arc .c3-gauge-value {
+ fill: #000
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/components.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/components.css
new file mode 100644
index 00000000..5c6dd352
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/components.css
@@ -0,0 +1,14133 @@
+/***
+Rounded corners reset
+***/
+/* Reset rounded corners for all elements */
+div,
+input,
+select,
+textarea,
+span,
+img,
+table,
+label,
+td,
+th,
+p,
+a,
+button,
+ul,
+code,
+pre,
+li {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+/* except below bootstrap elements */
+.img-circle {
+ border-radius: 50% !important;
+}
+
+.img-rounded {
+ border-radius: 6px !important;
+}
+
+/***
+General reset
+***/
+/* Set default body */
+body {
+ color: #333333;
+ font-family: "Open Sans", sans-serif;
+ padding: 0px !important;
+ margin: 0px !important;
+ font-size: 13px;
+ direction: ltr;
+}
+
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't
+ properly apply the media queries in Bootstrap's CSS. To address this,
+ you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix.
+*/
+@-webkit-viewport {
+ width: device-width;
+}
+
+@-moz-viewport {
+ width: device-width;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@-o-viewport {
+ width: device-width;
+}
+
+@viewport {
+ width: device-width;
+}
+
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width,
+ and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied
+*/
+@-ms-viewport {
+ width: auto !important;
+}
+
+/* Custom scrollbars for webkit browsers */
+::-webkit-scrollbar {
+ width: 12px;
+}
+
+::-webkit-scrollbar-track {
+ background-color: #eaeaea;
+ border-left: 1px solid #cecece;
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: #cecece;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #aaaaaa;
+}
+
+::-webkit-scrollbar-track {
+ border-radius: 0;
+ box-shadow: none;
+ border: 0;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 0;
+ box-shadow: none;
+ border: 0;
+}
+
+/***
+General typography
+***/
+/* Headings */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: "Open Sans", sans-serif;
+ font-weight: 300;
+}
+
+h1 {
+ font-size: 33px;
+}
+
+h2 {
+ font-size: 27px;
+}
+
+h3 {
+ font-size: 23px;
+}
+
+h4 {
+ font-size: 17px;
+}
+
+h5 {
+ font-size: 13px;
+}
+
+h6 {
+ font-size: 12px;
+}
+
+/* Headings helper text */
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+ color: #444444;
+}
+
+/* Block headings */
+h1.block,
+h2.block,
+h3.block,
+h4.block,
+h5.block,
+h6.block {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+/* Links */
+a {
+ text-shadow: none;
+ color: #5b9bd1;
+}
+
+a:hover {
+ color: #3175af;
+}
+
+a:focus, a:hover, a:active {
+ outline: 0;
+}
+
+/* Horizontal break */
+hr {
+ margin: 20px 0;
+ border: 0;
+ border-top: 1px solid #eee;
+ border-bottom: 0;
+}
+
+/* Unstyled List */
+.list-unstyled li > .list-unstyled {
+ margin-left: 25px;
+}
+
+/* Code */
+code {
+ border: 1px solid #e1e1e1;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+}
+
+/* Disabled Navigation Link */
+.disabled-link .disable-target {
+ opacity: 0.5 !important;
+ filter: alpha(opacity=50) !important;
+}
+
+.disabled-link .disable-target:hover {
+ cursor: not-allowed !important;
+}
+
+.disabled-link:hover {
+ cursor: not-allowed !important;
+}
+
+/***
+Utilities
+***/
+/* Links */
+a:hover {
+ cursor: pointer;
+}
+
+/* Primary Link */
+.primary-link {
+ color: #65A0D0;
+ font-weight: 600;
+}
+
+.primary-link:hover {
+ color: #5194ca;
+}
+
+/* Rounded Element */
+.rounded-2 {
+ border-radius: 2px !important;
+}
+
+.rounded-3 {
+ border-radius: 3px !important;
+}
+
+.rounded-4 {
+ border-radius: 4px !important;
+}
+
+/* Circle Element */
+.circle {
+ border-radius: 25px !important;
+}
+
+.circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+/* General utilities */
+.display-none,
+.display-hide {
+ display: none;
+}
+
+.hidden {
+ display: none !important;
+}
+
+.primary-font {
+ font-family: "Open Sans", sans-serif !important;
+}
+
+.bold {
+ font-weight: 700 !important;
+}
+
+.thin {
+ font-weight: 300 !important;
+}
+
+.uppercase {
+ text-transform: uppercase !important;
+}
+
+.fix-margin {
+ margin-left: 0px !important;
+}
+
+.border {
+ border: 1px solid red;
+}
+
+.font-hg {
+ font-size: 23px;
+}
+
+.font-lg {
+ font-size: 18px;
+}
+
+.font-md {
+ font-size: 14px;
+}
+
+.font-sm {
+ font-size: 13px;
+}
+
+.font-xs {
+ font-size: 11px;
+}
+
+.inline {
+ display: inline;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.text-align-reverse {
+ text-align: right;
+}
+
+/* Margin and padding utilities */
+.no-space {
+ margin: 0px !important;
+ padding: 0px !important;
+}
+
+.no-margin {
+ margin: 0;
+}
+
+.margin-bottom-5 {
+ margin-bottom: 5px;
+}
+
+.margin-bottom-10 {
+ margin-bottom: 10px !important;
+}
+
+.margin-top-10 {
+ margin-top: 10px !important;
+}
+
+.margin-top-15 {
+ margin-top: 15px !important;
+}
+
+.margin-bottom-15 {
+ margin-bottom: 15px !important;
+}
+
+.margin-bottom-20 {
+ margin-bottom: 20px !important;
+}
+
+.margin-top-20 {
+ margin-top: 20px !important;
+}
+
+.margin-bottom-25 {
+ margin-bottom: 25px !important;
+}
+
+.margin-bottom-30 {
+ margin-bottom: 30px !important;
+}
+
+.margin-right-10 {
+ margin-right: 10px !important;
+}
+
+/* IE8 & IE9 mode utilities */
+.visible-ie8 {
+ display: none;
+}
+
+.ie8 .visible-ie8 {
+ display: inherit !important;
+}
+
+.visible-ie9 {
+ display: none;
+}
+
+.ie9 .visible-ie9 {
+ display: inherit !important;
+}
+
+.hidden-ie8 {
+ display: inherit;
+}
+
+.ie8 .hidden-ie8 {
+ display: none !important;
+}
+
+.hidden-ie9 {
+ display: inherit;
+}
+
+.ie9 .hidden-ie9 {
+ display: none !important;
+}
+
+/***
+Responsive Utils
+***/
+@media (max-width: 1024px) {
+ .hidden-1024 {
+ display: none;
+ }
+}
+
+@media (max-width: 480px) {
+ .hidden-480 {
+ display: none;
+ }
+}
+
+@media (max-width: 320px) {
+ .hidden-320 {
+ display: none;
+ }
+}
+
+/***
+Demo Utils
+***/
+.scrollspy-example {
+ position: relative;
+ height: 200px;
+ margin-top: 10px;
+ overflow: auto;
+}
+
+.util-btn-margin-bottom-5 .btn {
+ margin-bottom: 5px !important;
+}
+
+.util-btn-group-margin-bottom-5 .btn-group {
+ margin-bottom: 5px !important;
+}
+
+/***
+Users
+***/
+.user-info {
+ margin-bottom: 10px !important;
+}
+
+.user-info img {
+ float: left;
+ margin-right: 5px;
+}
+
+.user-info .details {
+ display: inline-block;
+}
+
+.user-info .label {
+ font-weight: 300;
+ font-size: 11px;
+}
+
+/***
+Top News Blocks(new in v1.2.2)
+***/
+.top-news {
+ color: #fff;
+ margin: 8px 0;
+}
+
+.top-news em {
+ font-size: 13px;
+ margin-bottom: 8px;
+ margin-bottom: 0;
+ font-style: normal;
+ display: block;
+}
+
+.top-news em i {
+ font-size: 14px;
+}
+
+.top-news span {
+ font-size: 18px;
+ margin-bottom: 5px;
+ display: block;
+ text-align: left;
+}
+
+.top-news a {
+ display: block;
+ text-align: left;
+ padding: 10px;
+ position: relative;
+ margin-bottom: 10px;
+}
+
+.top-news a .top-news-icon {
+ right: 8px;
+ bottom: 15px;
+ opacity: 0.3;
+ font-size: 35px;
+ position: absolute;
+ filter: alpha(opacity=30);
+ /*For IE8*/
+}
+
+/***
+Block Images(new in v1.2.2)
+***/
+.blog-images {
+ margin-bottom: 0;
+}
+
+.blog-images li {
+ padding: 0;
+ margin: 0;
+ display: inline;
+}
+
+.blog-images li a:hover {
+ text-decoration: none;
+}
+
+.blog-images li img {
+ width: 50px;
+ height: 50px;
+ opacity: 0.6;
+ margin: 0 2px 8px;
+}
+
+.blog-images li img:hover {
+ opacity: 1;
+ box-shadow: 0 0 0 4px #72c02c;
+ transition: all 0.4s ease-in-out 0s;
+ -moz-transition: all 0.4s ease-in-out 0s;
+ -webkit-transition: all 0.4s ease-in-out 0s;
+}
+
+/***
+Sidebar Tags
+***/
+.sidebar-tags li {
+ padding: 0;
+}
+
+.sidebar-tags li a {
+ color: #555;
+ font-size: 12px;
+ padding: 3px 5px;
+ background: #f7f7f7;
+ margin: 0 2px 5px 0;
+ display: inline-block;
+}
+
+.sidebar-tags li a:hover, .sidebar-tags li a:hover i {
+ background: #EEE;
+ text-decoration: none;
+ -webkit-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ transition: all 0.3s ease-in-out;
+}
+
+.sidebar-tags li a i {
+ color: #777;
+}
+
+/***
+Custom vertical inline menu
+***/
+.ver-inline-menu {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.ver-inline-menu li {
+ position: relative;
+ margin-bottom: 1px;
+}
+
+.ver-inline-menu li i {
+ width: 37px;
+ height: 37px;
+ display: inline-block;
+ color: #b9cbd5;
+ font-size: 15px;
+ padding: 12px 10px 10px 8px;
+ margin: 0 8px 0 0;
+ text-align: center;
+ background: #e0eaf0 !important;
+}
+
+.ver-inline-menu li a {
+ font-size: 14px;
+ font-weight: 300;
+ color: #557386;
+ display: block;
+ background: #f0f6fa;
+ border-left: solid 2px #c4d5df;
+}
+
+.ver-inline-menu li:hover a {
+ background: #e0eaf0;
+ text-decoration: none;
+}
+
+.ver-inline-menu li:hover i {
+ color: #fff;
+ background: #c4d5df !important;
+}
+
+.ver-inline-menu li.active a {
+ border-left: solid 2px #0c91e5;
+}
+
+.ver-inline-menu li.active i {
+ background: #0c91e5 !important;
+}
+
+.ver-inline-menu li.active a, .ver-inline-menu li.active i {
+ color: #fff;
+ background: #169ef4;
+ text-decoration: none;
+}
+
+.ver-inline-menu li.active a, .ver-inline-menu li:hover a {
+ font-size: 14px;
+}
+
+.ver-inline-menu li.active:after {
+ content: '';
+ display: inline-block;
+ border-bottom: 6px solid transparent;
+ border-top: 6px solid transparent;
+ border-left: 6px solid #169ef4;
+ position: absolute;
+ top: 12px;
+ right: -5px;
+}
+
+@media (max-width: 767px) {
+ .ver-inline-menu > li.active:after {
+ display: none;
+ }
+}
+
+/***
+Separated List
+***/
+.list-separated {
+ margin-top: 10px;
+ margin-bottom: 15px;
+}
+
+.list-separated > div {
+ border-right1: 1px solid #f5f5f5;
+}
+
+.list-separated > div:last-child {
+ border-right: 0;
+}
+
+@media (max-width: 767px) {
+ .list-separated {
+ /* 767px */
+ }
+
+ .list-separated > div {
+ margin-bottom: 20px;
+ }
+}
+
+/***
+Number & Chart Stats
+***/
+.number-stats {
+ margin: 10px 0;
+}
+
+.number-stats .stat-number {
+ display: inline-block;
+ margin: 0 5px;
+}
+
+.number-stats .stat-number .title {
+ font-size: 13px;
+ margin-bottom: 3px;
+ color: #B8C3C7;
+}
+
+.number-stats .stat-number .number {
+ font-size: 27px;
+ line-height: 27px;
+ color: #7D8C9D;
+}
+
+.number-stats .stat-chart {
+ display: inline-block;
+ margin: 0 5px;
+}
+
+.number-stats > div {
+ border-right: 1px solid #f5f5f5;
+}
+
+.number-stats > div:last-child {
+ border-right: 0;
+}
+
+.number-stats .stat-left {
+ float: right;
+}
+
+.number-stats .stat-left .stat-number {
+ float: right;
+ text-align: right;
+}
+
+.number-stats .stat-left .stat-chart {
+ float: right;
+}
+
+.number-stats .stat-right {
+ float: left !important;
+}
+
+.number-stats .stat-right .stat-number {
+ float: left;
+ text-align: left;
+}
+
+.number-stats .stat-right .stat-chart {
+ float: left;
+}
+
+.number-stats .stat-number {
+ float: left;
+ text-align: left;
+}
+
+.number-stats .stat-chart {
+ float: left;
+}
+
+/***
+General User Record Listing
+***/
+.general-item-list > .item {
+ padding: 10px 0;
+ border-bottom: 1px solid #F1F4F7;
+}
+
+.general-item-list > .item:last-child {
+ border-bottom: 0;
+}
+
+.general-item-list > .item > .item-head {
+ margin-bottom: 5px;
+}
+
+.general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after {
+ content: " ";
+ display: table;
+}
+
+.general-item-list > .item > .item-head:after {
+ clear: both;
+}
+
+.general-item-list > .item > .item-head > .item-details {
+ display: inline-block;
+ float: left;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-pic {
+ height: 35px;
+ margin-right: 10px;
+ -webkit-border-radius: 100%;
+ -moz-border-radius: 100%;
+ -ms-border-radius: 100%;
+ -o-border-radius: 100%;
+ border-radius: 100%;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-name {
+ display: inline-block;
+ margin-right: 10px;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-label {
+ color: #C0C9CC;
+}
+
+.general-item-list > .item > .item-head > .item-status {
+ color: #C0C9CC;
+ top: 10px;
+ position: relative;
+ display: inline-block;
+ float: right;
+}
+
+.general-item-list > .item > .item-head > .item-status > .badge {
+ margin-top: -2px;
+}
+
+.general-item-list > .item > .item-body {
+ color: #96a5aa;
+}
+
+/***
+File dropzone
+***/
+.file-drop-zone {
+ border: 2px dashed #ddd;
+ padding: 30px;
+ text-align: center;
+}
+
+.file-drop-zone.file-drop-zone-over {
+ border-color: #aaa;
+}
+
+/***
+Fontawesome Icons
+***/
+[class^="fa-"],
+[class^="glyphicon-"],
+[class^="icon-"],
+[class*=" fa-"],
+[class*=" glyphicon-"],
+[class*=" icon-"] {
+ display: inline-block;
+ margin-top: 1px;
+ font-size: 14px;
+ *margin-right: .3em;
+ line-height: 14px;
+ -webkit-font-smoothing: antialiased;
+}
+
+/* Make font awesome icons fixed width */
+li [class^="fa-"],
+li [class^="glyphicon-"],
+li [class^="icon-"],
+li [class*=" fa-"],
+li [class*=" glyphicon-"],
+li [class*=" icon-"] {
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+}
+
+li [class^="glyphicon-"],
+li [class*=" glyphicon-"] {
+ top: 2px;
+}
+
+li [class^="icon-"],
+li [class*=" icon-"] {
+ top: 1px;
+ position: relative;
+}
+
+li [class^="fa-"].icon-large,
+li [class^="glyphicon-"].icon-large,
+li [class^="icon-"].icon-large,
+li [class*=" fa-"].icon-large,
+li [class*=" glyphicon-"].icon-large,
+li [class*=" icon-"].icon-large {
+ /* increased font size for icon-large */
+ width: 1.5625em;
+}
+
+/* Icon sizing */
+.fa-sm,
+.icon-sm {
+ font-size: 12px;
+}
+
+.fa-lg,
+.icon-lg {
+ font-size: 16px !important;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+/* Icon coloring */
+.icon-state-default {
+ color: #c6c6c6;
+}
+
+.icon-state-success {
+ color: #45B6AF;
+}
+
+.icon-state-info {
+ color: #89C4F4;
+}
+
+.icon-state-warning {
+ color: #dfba49;
+}
+
+.icon-state-danger {
+ color: #F3565D;
+}
+
+/***
+Font Awesome 4.x Demo
+***/
+.fa-item {
+ font-size: 14px;
+ padding: 10px 10px 10px 20px;
+}
+
+.fa-item i {
+ font-size: 16px;
+ display: inline-block;
+ width: 20px;
+ color: #333;
+}
+
+.fa-item:hover {
+ cursor: pointer;
+ background: #eee;
+}
+
+/***
+Simple Line Icons Demo
+***/
+.simplelineicons-demo .item-box {
+ display: inline-block;
+ font-size: 16px;
+ margin: 0 -0.22em 1em 0;
+ padding-left: 1em;
+ width: 100%;
+}
+
+.simplelineicons-demo .item-box .item {
+ background-color: #fff;
+ color: #33383e;
+ border-radius: 8px;
+ display: inline-block;
+ padding: 10px;
+ width: 100%;
+}
+
+.simplelineicons-demo .item-box .item span {
+ font-size: 22px;
+}
+
+@media only screen and (min-width: 768px) {
+ .simplelineicons-demo .item-box {
+ width: 33.333%;
+ }
+}
+
+/***
+Glyphicons Demo
+***/
+.glyphicons-demo ul {
+ padding-left: 0;
+ padding-bottom: 1px;
+ margin-bottom: 20px;
+ list-style: none;
+ overflow: hidden;
+}
+
+.bs-glyphicon-class {
+ text-align: center;
+}
+
+.bs-glyphicons {
+ padding-left: 0;
+ padding-bottom: 1px;
+ margin-bottom: 20px;
+ list-style: none;
+ overflow: hidden;
+}
+
+.glyphicons-demo ul li {
+ float: left;
+ width: 25%;
+ height: 115px;
+ padding: 10px;
+ margin: 0 -1px -1px 0;
+ font-size: 14px;
+ line-height: 1.4;
+ text-align: center;
+ border: 1px solid #ddd;
+}
+
+.glyphicons-demo .glyphicon {
+ display: block;
+ margin: 5px auto 10px;
+ font-size: 24px;
+ color: #444;
+}
+
+.glyphicons-demo ul li:hover {
+ background-color: rgba(86, 61, 124, 0.1);
+}
+
+@media (min-width: 768px) {
+ .glyphicons-demo ul li {
+ width: 12.5%;
+ }
+}
+
+/***
+Customized Bootstrap Alerts
+***/
+.alert {
+ border-width: 1px;
+}
+
+.alert.alert-borderless {
+ border: 0;
+}
+
+/***
+Bootstrap Alerts
+***/
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+ color: #31708f;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+ color: #8a6d3b;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+/***
+Custom Bootstrap Badges
+***/
+.badge {
+ font-size: 11px !important;
+ font-weight: 300;
+ text-align: center;
+ height: 18px;
+ padding: 3px 6px 3px 6px;
+ -webkit-border-radius: 12px !important;
+ -moz-border-radius: 12px !important;
+ border-radius: 12px !important;
+ text-shadow: none !important;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.badge.badge-roundless {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+.badge.badge-empty {
+ display: inline-block;
+ padding: 0;
+ min-width: 8px;
+ height: 8px;
+ width: 8px;
+}
+
+/* Badge variants */
+.badge-default {
+ background-color: #c6c6c6;
+ background-image: none;
+}
+
+.badge-primary {
+ background-color: #428bca;
+ background-image: none;
+}
+
+.badge-info {
+ background-color: #89C4F4;
+ background-image: none;
+}
+
+.badge-success {
+ background-color: #45B6AF;
+ background-image: none;
+}
+
+.badge-danger {
+ background-color: #F3565D;
+ background-image: none;
+}
+
+.badge-warning {
+ background-color: #dfba49;
+ background-image: none;
+}
+
+/* Fix badge position for navs */
+.nav.nav-pills > li > a > .badge,
+.nav.nav-stacked > li > a > .badge {
+ margin-top: -2px;
+}
+
+/***
+Dropdown Menu Badges
+***/
+.dropdown-menu > li > a > .badge {
+ position: absolute;
+ margin-top: 1px;
+ right: 3px;
+ display: inline;
+ font-size: 11px;
+ font-weight: 300;
+ text-shadow: none;
+ height: 18px;
+ padding: 3px 6px 3px 6px;
+ text-align: center;
+ vertical-align: middle;
+ -webkit-border-radius: 12px !important;
+ -moz-border-radius: 12px !important;
+ border-radius: 12px !important;
+}
+
+.dropdown-menu.badge-roundless {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+/***
+Customized Bootstrap Buttons
+***/
+/* Default buttons */
+.btn {
+ border-width: 0;
+ padding: 7px 14px;
+ font-size: 14px;
+ outline: none !important;
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.btn.dropdown-toggle, .btn-group .btn.dropdown-toggle, .btn:hover, .btn:disabled, .btn[disabled], .btn:focus, .btn:active, .btn.active {
+ outline: none !important;
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.btn-default {
+ border-width: 1px;
+ padding: 6px 13px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+/* Bootstrap buttons */
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {
+ color: #333;
+ background-color: #ededed;
+ border-color: #b3b3b3;
+}
+
+.open .btn-default.dropdown-toggle {
+ color: #333;
+ background-color: #ededed;
+ border-color: #b3b3b3;
+}
+
+.btn-default:active, .btn-default.active {
+ background-image: none;
+ background-color: #e0e0e0;
+}
+
+.btn-default:active:hover, .btn-default.active:hover {
+ background-color: #e6e6e6;
+}
+
+.open .btn-default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-default > i {
+ color: #aaa;
+}
+
+.btn-default > i[class^="icon-"],
+.btn-default > i[class*="icon-"] {
+ color: #8c8c8c;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {
+ color: #fff;
+ background-color: #3379b5;
+ border-color: #2a6496;
+}
+
+.open .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #3379b5;
+ border-color: #2a6496;
+}
+
+.btn-primary:active, .btn-primary.active {
+ background-image: none;
+ background-color: #2d6ca2;
+}
+
+.btn-primary:active:hover, .btn-primary.active:hover {
+ background-color: #3071a9;
+}
+
+.open .btn-primary.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #45B6AF;
+ border-color: #3ea49d;
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {
+ color: #fff;
+ background-color: #3b9c96;
+ border-color: #307f7a;
+}
+
+.open .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #3b9c96;
+ border-color: #307f7a;
+}
+
+.btn-success:active, .btn-success.active {
+ background-image: none;
+ background-color: #348a84;
+}
+
+.btn-success:active:hover, .btn-success.active:hover {
+ background-color: #37918b;
+}
+
+.open .btn-success.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
+ background-color: #45B6AF;
+ border-color: #3ea49d;
+}
+
+.btn-success .badge {
+ color: #45B6AF;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #89C4F4;
+ border-color: #72b8f2;
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {
+ color: #fff;
+ background-color: #68b4f1;
+ border-color: #43a1ed;
+}
+
+.open .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #68b4f1;
+ border-color: #43a1ed;
+}
+
+.btn-info:active, .btn-info.active {
+ background-image: none;
+ background-color: #51a8ef;
+}
+
+.btn-info:active:hover, .btn-info.active:hover {
+ background-color: #5aadf0;
+}
+
+.open .btn-info.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
+ background-color: #89C4F4;
+ border-color: #72b8f2;
+}
+
+.btn-info .badge {
+ color: #89C4F4;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #dfba49;
+ border-color: #dbb233;
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {
+ color: #fff;
+ background-color: #daae2b;
+ border-color: #bb9521;
+}
+
+.open .btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #daae2b;
+ border-color: #bb9521;
+}
+
+.btn-warning:active, .btn-warning.active {
+ background-image: none;
+ background-color: #c89f23;
+}
+
+.btn-warning:active:hover, .btn-warning.active:hover {
+ background-color: #d0a625;
+}
+
+.open .btn-warning.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
+ background-color: #dfba49;
+ border-color: #dbb233;
+}
+
+.btn-warning .badge {
+ color: #dfba49;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #F3565D;
+ border-color: #f13e46;
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {
+ color: #fff;
+ background-color: #f1353d;
+ border-color: #ec111b;
+}
+
+.open .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #f1353d;
+ border-color: #ec111b;
+}
+
+.btn-danger:active, .btn-danger.active {
+ background-image: none;
+ background-color: #ef1d26;
+}
+
+.btn-danger:active:hover, .btn-danger.active:hover {
+ background-color: #f0262f;
+}
+
+.open .btn-danger.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
+ background-color: #F3565D;
+ border-color: #f13e46;
+}
+
+.btn-danger .badge {
+ color: #F3565D;
+ background-color: #fff;
+}
+
+/* Button sizes */
+.btn > i {
+ font-size: 14px;
+}
+
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ vertical-align: middle;
+}
+
+.btn-lg > i {
+ font-size: 18px;
+}
+
+.btn-sm,
+.btn-xs {
+ padding: 4px 10px 5px 10px;
+ font-size: 13px;
+ line-height: 1.5;
+}
+
+.btn-sm > i,
+.btn-xs > i {
+ font-size: 13px;
+}
+
+.btn-xs {
+ padding: 1px 5px;
+}
+
+.btn-xs > i {
+ font-size: 12px;
+}
+
+/* Small button in button group */
+.btn-group .input-sm .btn-default {
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+/* Arrow link */
+.btn-arrow-link {
+ vertical-align: middle;
+ display: inline-block;
+ font-size: 13px;
+}
+
+.btn-arrow-link > i {
+ font-size: 14px;
+ line-height: 14px;
+ vertical-align: top;
+ margin: 2px 3px 2px 3px;
+ color: #999;
+}
+
+.btn-arrow-link.btn-arrow-link-lg {
+ font-size: 14px;
+}
+
+.btn-arrow-link.btn-arrow-link-lg > i {
+ font-size: 16px;
+ line-height: 16px;
+ margin: 2px 3px 1px 3px;
+}
+
+/* Circle Buttons */
+.btn-circle {
+ border-radius: 25px !important;
+}
+
+.btn-circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.btn-circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.btn-circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+.btn-icon-only {
+ height: 34px;
+ width: 34px;
+ text-align: center;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.btn-icon-only > [class^="icon-"],
+.btn-icon-only > i {
+ text-align: center;
+ margin-top: 2px;
+}
+
+.btn-sm > [class^="glyphicon-"],
+.btn-sm > [class*=" glyphicon-"],
+.btn-sm > i {
+ font-size: 13px;
+}
+
+.btn-xs > [class^="glyphicon-"],
+.btn-xs > [class*=" glyphicon-"],
+.btn-xs > i {
+ font-size: 11px;
+}
+
+.btn-group.btn-group-circle > .btn:first-child {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.btn-group.btn-group-circle > .btn:last-child {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-group.btn-group-devided > .btn {
+ margin-right: 5px;
+}
+
+.btn-group.btn-group-devided > .btn:last-child {
+ margin-right: 0;
+}
+
+.btn-group-vertical.btn-group-vertical-circle > .btn:first-child {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+.btn-group-vertical.btn-group-vertical-circle > .btn:last-child {
+ border-radius: 0 0 25px 25px !important;
+}
+
+/***
+Image Carousel
+***/
+.carousel.image-carousel .carousel-inner {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.carousel.image-carousel .carousel-control i {
+ position: absolute;
+ top: 40%;
+}
+
+.carousel.image-carousel.image-carousel-hoverable .carousel-control i {
+ display: none;
+}
+
+.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i {
+ display: inline-block;
+}
+
+.carousel.image-carousel .carousel-control.left i {
+ left: 10px;
+}
+
+.carousel.image-carousel .carousel-control.right i {
+ right: 10px;
+}
+
+.carousel.image-carousel .carousel-indicators {
+ margin-top: 10px;
+ bottom: -7px;
+}
+
+.carousel.image-carousel .carousel-indicators li {
+ background-color: #666;
+}
+
+.carousel.image-carousel .carousel-indicators li.active {
+ background-color: #666;
+}
+
+.carousel.image-carousel .carousel-caption {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 15px 15px 25px 15px;
+ background: #333333;
+ background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2,
+.carousel.image-carousel .carousel-caption p {
+ text-align: left;
+ line-height: 20px;
+ color: #ffffff;
+}
+
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2 {
+ margin: 0 0 5px;
+}
+
+.carousel.image-carousel .carousel-caption h4 a,
+.carousel.image-carousel .carousel-caption h3 a,
+.carousel.image-carousel .carousel-caption h2 a {
+ color: #aaa;
+}
+
+.carousel.image-carousel .carousel-caption p {
+ margin-bottom: 0;
+}
+
+.carousel.image-carousel .carousel-caption .item {
+ margin: 0;
+}
+
+/***
+Charts and statistics
+***/
+.chart,
+.pie,
+.bars {
+ overflow: hidden;
+ height: 300px;
+ width: 100%;
+ font-family: "Open Sans", sans-serif !important;
+ font-size: 14px;
+}
+
+/***
+Statistic lists
+***/
+.item-list.table .percent {
+ width: 30px;
+ float: right;
+ margin-right: 10px;
+ margin-top: 3px;
+}
+
+/***
+Chart tooltips
+***/
+.chart-tooltip {
+ clear: both;
+ z-index: 100;
+ background-color: #736e6e !important;
+ padding: 5px !important;
+ color: #fff;
+}
+
+.chart-tooltip .label {
+ clear: both;
+ display: block;
+ margin-bottom: 2px;
+}
+
+/***
+Mini chart containers
+***/
+.bar-chart,
+.line-chart {
+ display: none;
+}
+
+/***
+Chats
+***/
+.chats {
+ margin: 0;
+ padding: 0;
+ margin-top: -15px;
+}
+
+.chats li {
+ list-style: none;
+ padding: 5px 0;
+ margin: 10px auto;
+ font-size: 12px;
+}
+
+.chats li .body {
+ display: block;
+}
+
+.chats li .avatar {
+ height: 45px;
+ width: 45px;
+ -webkit-border-radius: 50% !important;
+ -moz-border-radius: 50% !important;
+ border-radius: 50% !important;
+}
+
+.chats li.in .avatar {
+ float: left;
+ margin-right: 10px;
+}
+
+.chats li.out .avatar {
+ float: right;
+ margin-left: 10px;
+}
+
+.chats li .name {
+ color: #3590c1;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.chats li .datetime {
+ color: #333;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.chats li .message {
+ display: block;
+ padding: 5px;
+ position: relative;
+}
+
+.chats li.in .message {
+ text-align: left;
+ border-left: 2px solid #1BBC9B;
+ margin-left: 65px;
+ background: #fafafa;
+}
+
+.chats li.in .message .arrow {
+ display: block;
+ position: absolute;
+ top: 5px;
+ left: -8px;
+ width: 0;
+ height: 0;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #1BBC9B;
+}
+
+.chats li.out .message {
+ border-right: 2px solid #F3565D;
+ margin-right: 65px;
+ background: #fafafa;
+ text-align: right;
+}
+
+.chats li.out .message .arrow {
+ display: block;
+ position: absolute;
+ top: 5px;
+ right: -8px;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-left: 8px solid #F3565D;
+}
+
+.chats li.out .name,
+.chats li.out .datetime {
+ text-align: right;
+}
+
+.chat-form {
+ margin-top: 15px;
+ padding: 10px;
+ background-color: #e9eff3;
+ overflow: hidden;
+ clear: both;
+}
+
+.chat-form .input-cont {
+ margin-right: 40px;
+}
+
+.chat-form .input-cont .form-control {
+ border: 1px solid #ddd;
+ width: 100% !important;
+ margin-top: 0;
+ background-color: #fff !important;
+}
+
+.chat-form .input-cont .form-control:focus {
+ border: 1px solid #4b8df9 !important;
+}
+
+.chat-form .btn-cont {
+ margin-top: -42px;
+ position: relative;
+ float: right;
+ width: 44px;
+}
+
+.chat-form .btn-cont .arrow {
+ position: absolute;
+ top: 17px;
+ right: 43px;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #4d90fe;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.chat-form .btn-cont .btn {
+ margin-top: 8px;
+}
+
+.chat-form .btn-cont:hover .arrow {
+ border-right-color: #0362fd;
+}
+
+.chat-form .btn-cont:hover .btn {
+ background-color: #0362fd;
+}
+
+/***
+Customized Bootstrap Close Icon
+***/
+/*
+.close {
+ display: inline-block;
+ margin-top: 0px;
+ margin-right: 0px;
+ width: 9px;
+ height: 9px;
+ background-repeat: no-repeat !important;
+ text-indent: -10000px;
+ outline: none;
+ background-image: url("../img/remove-icon-small.png") !important;
+}
+*/
+/***
+Customized Bootstrap Dropdowns
+***/
+/***
+Dropdowns
+***/
+.dropup.open > .dropdown-toggle,
+.dropdown.open > .dropdown-toggle {
+ border-color: #ddd;
+}
+
+/***
+Dropdown Menu
+***/
+.dropdown-menu {
+ min-width: 175px;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ list-style: none;
+ text-shadow: none;
+ padding: 0px;
+ margin: 10px 0px 0px 0px;
+ background-color: #fffff;
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ border: 1px solid #eee;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.dropdown-menu li.divider {
+ background: #f1f3f6;
+}
+
+.dropdown-menu li > a {
+ padding: 8px 14px;
+ color: #555;
+ text-decoration: none;
+ display: block;
+ clear: both;
+ font-weight: 300;
+ line-height: 18px;
+ white-space: nowrap;
+}
+
+.dropdown-menu li > a > [class^="fa-"],
+.dropdown-menu li > a > [class*=" fa-"] {
+ color: #888;
+}
+
+.dropdown-menu li > a > [class^="icon-"],
+.dropdown-menu li > a > [class*=" icon-"] {
+ color: #666;
+}
+
+.dropdown-menu li > a > [class^="glyphicon-"],
+.dropdown-menu li > a > [class*=" glyphicon-"] {
+ color: #888;
+}
+
+.dropdown-menu li > a:hover,
+.dropdown-menu .active > a,
+.dropdown-menu .active > a:hover {
+ text-decoration: none;
+ background-image: none;
+ background-color: #f6f6f6;
+ color: #555;
+ filter: none;
+}
+
+.dropdown-menu.bottom-up {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+
+.dropdown > .dropdown-menu,
+.dropdown-toggle > .dropdown-menu,
+.btn-group > .dropdown-menu {
+ margin-top: 10px;
+}
+
+.dropdown > .dropdown-menu:before,
+.dropdown-toggle > .dropdown-menu:before,
+.btn-group > .dropdown-menu:before {
+ position: absolute;
+ top: -8px;
+ left: 9px;
+ right: auto;
+ display: inline-block !important;
+ border-right: 8px solid transparent;
+ border-bottom: 8px solid #e0e0e0;
+ border-left: 8px solid transparent;
+ content: '';
+}
+
+.dropdown > .dropdown-menu:after,
+.dropdown-toggle > .dropdown-menu:after,
+.btn-group > .dropdown-menu:after {
+ position: absolute;
+ top: -7px;
+ left: 10px;
+ right: auto;
+ display: inline-block !important;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #fff;
+ border-left: 7px solid transparent;
+ content: '';
+}
+
+.dropdown > .dropdown-menu.pull-left:before,
+.dropdown-toggle > .dropdown-menu.pull-left:before,
+.btn-group > .dropdown-menu.pull-left:before {
+ left: auto;
+ right: 9px;
+}
+
+.dropdown > .dropdown-menu.pull-left:after,
+.dropdown-toggle > .dropdown-menu.pull-left:after,
+.btn-group > .dropdown-menu.pull-left:after {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown > .dropdown-menu.pull-right:before,
+.dropdown-toggle > .dropdown-menu.pull-right:before,
+.btn-group > .dropdown-menu.pull-right:before {
+ left: auto;
+ right: 9px;
+}
+
+.dropdown > .dropdown-menu.pull-right:after,
+.dropdown-toggle > .dropdown-menu.pull-right:after,
+.btn-group > .dropdown-menu.pull-right:after {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown.dropup > .dropdown-menu,
+.dropdown-toggle.dropup > .dropdown-menu,
+.btn-group.dropup > .dropdown-menu {
+ margin-top: 0px;
+ margin-bottom: 10px;
+}
+
+.dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before,
+.dropdown-toggle.dropup > .dropdown-menu:after,
+.dropdown-toggle.dropup > .dropdown-menu:before,
+.btn-group.dropup > .dropdown-menu:after,
+.btn-group.dropup > .dropdown-menu:before {
+ display: none !important;
+}
+
+/* Dropdown submenu support for Bootsrap 3 */
+.dropdown-submenu {
+ position: relative;
+}
+
+.dropdown-submenu > .dropdown-menu {
+ top: 5px;
+ left: 100%;
+ margin-top: -6px;
+ margin-left: -1px;
+}
+
+.dropdown-submenu > a:after {
+ position: absolute;
+ display: inline-block;
+ font-size: 14px;
+ right: 7px;
+ top: 7px;
+ font-family: FontAwesome;
+ height: auto;
+ content: "\f105";
+ font-weight: 300;
+}
+
+.dropdown-submenu:hover > .dropdown-menu {
+ display: block;
+}
+
+.dropdown-submenu:hover > a:after {
+ border-left-color: #ffffff;
+}
+
+.dropdown-submenu.pull-left {
+ float: none;
+}
+
+.dropdown-submenu.pull-left > .dropdown-menu {
+ left: -100%;
+ margin-left: 10px;
+}
+
+.dropup .dropdown-submenu > .dropdown-menu {
+ top: auto;
+ bottom: 0;
+ margin-top: 0;
+ margin-bottom: -2px;
+}
+
+.nav.pull-right > li > .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu:before,
+.nav > li > .dropdown-menu.pull-right:before {
+ right: 12px;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu:after,
+.nav > li > .dropdown-menu.pull-right:after {
+ right: 13px;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right .dropdown-menu {
+ right: 100%;
+ left: auto;
+ margin-right: -1px;
+ margin-left: 0;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .navbar-nav .open .dropdown-menu {
+ position: absolute;
+ float: left;
+ width: auto;
+ margin-top: 0;
+ background-color: #ffffff;
+ border: 1px solid #efefef;
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ padding: 6px 0 6px 13px;
+ color: #333;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:active {
+ ackground-color: #eee;
+ }
+}
+
+/***
+Dropdown Checkboxes
+***/
+.dropdown-content {
+ padding: 5px;
+}
+
+.dropdown-content form {
+ margin: 0;
+}
+
+.dropdown.inline .dropdown-menu {
+ display: inline-block;
+ position: relative;
+}
+
+.dropdown-radiobuttons,
+.dropdown-checkboxes {
+ padding: 5px;
+}
+
+.dropdown-radiobuttons label,
+.dropdown-checkboxes label {
+ display: block;
+ font-weight: 300;
+ color: #333;
+ margin-bottom: 4px;
+ margin-top: 4px;
+}
+
+.dropdown-radiobuttons label .radio,
+.dropdown-checkboxes label .radio {
+ margin-right: 3px;
+}
+
+/***
+System feeds
+***/
+.feeds {
+ margin: 0px;
+ padding: 0px;
+ list-style: none;
+}
+
+.feeds li {
+ background-color: #fafafa;
+ color: #82949a;
+ margin-bottom: 7px;
+}
+
+.feeds li:before, .feeds li:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.feeds li:after {
+ clear: both;
+}
+
+.feeds li:last-child {
+ margin-bottom: 0px;
+}
+
+.feeds li .col1 {
+ float: left;
+ width: 100%;
+ clear: both;
+}
+
+.feeds li .col1 > .cont {
+ float: left;
+ margin-right: 75px;
+ overflow: hidden;
+}
+
+.feeds li .col1 > .cont > .cont-col1 {
+ float: left;
+ margin-right: -100%;
+}
+
+.feeds li .col1 > .cont > .cont-col1 > .label {
+ display: inline-block;
+ padding: 5px 4px 6px 5px;
+ vertical-align: middle;
+ text-align: center;
+}
+
+.feeds li .col1 > .cont > .cont-col1 > .label > i {
+ text-align: center;
+ font-size: 14px;
+}
+
+.feeds li .col1 > .cont > .cont-col2 {
+ float: left;
+ width: 100%;
+}
+
+.feeds li .col1 > .cont > .cont-col2 > .desc {
+ margin-left: 35px;
+ padding-top: 4px;
+ padding-bottom: 5px;
+ overflow: hidden;
+}
+
+.feeds li .col2 {
+ float: left;
+ width: 75px;
+ margin-left: -75px;
+}
+
+.feeds li .col2 > .date {
+ padding: 4px 9px 5px 4px;
+ text-align: right;
+ font-style: italic;
+ color: #c1cbd0;
+}
+
+/***
+Form Layouts
+****/
+/* Static info */
+.static-info {
+ margin-bottom: 10px;
+}
+
+.static-info .name {
+ font-size: 14px;
+}
+
+.static-info .value {
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.static-info.align-reverse .name, .static-info.align-reverse .value {
+ text-align: right;
+}
+
+/* Help blocks */
+.help-block {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.help-inline {
+ font-size: 13px;
+ color: #737373;
+ display: inline-block;
+ padding: 5px;
+}
+
+.form-inline input {
+ margin-bottom: 0px !important;
+}
+
+/* Control Label */
+.control-label {
+ margin-top: 1px;
+}
+
+.control-label .required {
+ color: #e02222;
+ font-size: 12px;
+ padding-left: 2px;
+}
+
+.form {
+ padding: 0 !important;
+}
+
+.form .form-body {
+ padding: 10px;
+}
+
+.portlet.light .form .form-body {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.form .form-actions {
+ padding: 20px 10px;
+ margin: 0;
+ background-color: #f5f5f5;
+ border-top: 1px solid #e5e5e5;
+ *zoom: 1;
+}
+
+.portlet.light .form .form-actions {
+ background: none;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.portlet .form .form-actions {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.form .form-actions:before, .form .form-actions:after {
+ content: " ";
+ display: table;
+}
+
+.form .form-actions:after {
+ clear: both;
+}
+
+.form .form-actions.right {
+ padding-left: 0;
+ padding-right: 10px;
+ text-align: right;
+}
+
+.portlet.light .form .form-actions.right {
+ padding-right: 0;
+}
+
+.form .form-actions.left {
+ padding-left: 10px;
+ padding-right: 0;
+ text-align: left;
+}
+
+.portlet.light .form .form-actions.left {
+ padding-left: 0;
+}
+
+.form .form-actions.nobg {
+ background-color: transparent;
+}
+
+.form .form-actions.top {
+ margin-top: 0;
+ margin-bottom: 20px;
+ border-top: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.portlet.light .form .form-actions.top {
+ background: none;
+}
+
+.form .form-actions .btn-set {
+ display: inline-block;
+}
+
+@media (max-width: 767px) {
+ .form .form-actions {
+ /* 767px */
+ }
+
+ .form .form-actions .btn-set {
+ margin-bottom: 3px;
+ margin-top: 3px;
+ float: left !important;
+ }
+}
+
+.form .form-section {
+ margin: 30px 0px 25px 0px;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #eee;
+}
+
+.form .form-section:first-child {
+ margin-top: 5px;
+}
+
+/* Checkboxes */
+.checkbox,
+.form-horizontal .checkbox {
+ padding: 0;
+}
+
+.checkbox > label,
+.form-horizontal .checkbox > label {
+ padding-left: 0;
+}
+
+.checkbox-list > label {
+ display: block;
+}
+
+.checkbox-list > label.checkbox-inline {
+ display: inline-block;
+}
+
+.checkbox-list > label.checkbox-inline:first-child {
+ padding-left: 0;
+}
+
+/* Radio buttons */
+.radio-list > label {
+ display: block;
+}
+
+.radio-list > label.radio-inline {
+ display: inline-block;
+}
+
+.radio-list > label.radio-inline:first-child {
+ padding-left: 0;
+}
+
+/* Radio buttons in horizontal forms */
+.form-horizontal .radio-list .radio {
+ padding-top: 1px;
+}
+
+.form-horizontal .radio-list > label {
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio > span {
+ margin-top: 2px;
+}
+
+/* Rows seperated form layout */
+.form .form-row-seperated .portlet-body {
+ padding: 0;
+}
+
+.form .form-row-seperated .form-group {
+ margin: 0;
+ border-bottom: 1px solid #efefef;
+ padding: 15px 0;
+}
+
+.form .form-row-seperated .form-group.last {
+ border-bottom: 0;
+ margin-bottom: 0;
+ padding-bottom: 13px;
+}
+
+.form .form-row-seperated .form-group .help-block {
+ margin-bottom: 0;
+}
+
+.form .form-row-seperated .form-body {
+ padding: 0;
+}
+
+.form .form-row-seperated .form-actions {
+ padding-left: 15px !important;
+ padding-right: 15px !important;
+}
+
+/* Form bordered */
+.form .form-bordered .form-group {
+ margin: 0;
+ border-bottom: 1px solid #efefef;
+}
+
+.form .form-bordered .form-group > div {
+ padding: 15px;
+ border-left: 1px solid #efefef;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-group > div {
+ /* 991px */
+ border-left: 0;
+ }
+}
+
+.form .form-bordered .form-group.last {
+ border-bottom: 0;
+}
+
+.form .form-bordered .form-group .control-label {
+ padding-top: 20px;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-group .control-label {
+ /* 991px */
+ padding-top: 10px;
+ }
+}
+
+.form .form-bordered .form-group .help-block {
+ margin-bottom: 0;
+}
+
+.form .form-bordered .form-group .form-control {
+ margin: 0;
+}
+
+.form .form-bordered .form-body {
+ margin: 0;
+ padding: 0;
+}
+
+.form .form-bordered .form-actions {
+ margin-top: 0;
+ padding-left: 16px !important;
+ padding-right: 16px !important;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-actions {
+ /* 991px */
+ padding-left: 15px !important;
+ padding-right: 15px !important;
+ }
+}
+
+/* Horizontal bordered form */
+.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+.form .form-horizontal.form-bordered.form-row-stripped .form-control {
+ background: #fff !important;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div {
+ background-color: #ffffff;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+/***
+Forms
+***/
+/* Input placeholder font color */
+.form-control::-moz-placeholder {
+ color: #b3b3b3;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #b3b3b3;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #b3b3b3;
+}
+
+/* Form inputs */
+.form-control {
+ font-size: 14px;
+ font-weight: normal;
+ color: #333;
+ background-color: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #999;
+ outline: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eeeeee;
+}
+
+.form-control.height-auto {
+ height: auto;
+}
+
+.form-control.form-control-solid {
+ background-color: #F1F3F8;
+ border-color: #F1F3F8;
+ color: #A6B2BA;
+}
+
+.form-control.form-control-solid:focus {
+ border-color: #e3e7f1;
+}
+
+.form-control.form-control-solid::-moz-placeholder {
+ color: #acb7be;
+ opacity: 1;
+}
+
+.form-control.form-control-solid:-ms-input-placeholder {
+ color: #acb7be;
+}
+
+.form-control.form-control-solid::-webkit-input-placeholder {
+ color: #acb7be;
+}
+
+/* Form uneditable input */
+.uneditable-input {
+ padding: 6px 12px;
+ min-width: 206px;
+ font-size: 14px;
+ font-weight: normal;
+ height: 34px;
+ color: #333;
+ background-color: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+/* Form input sizing */
+.input-mini {
+ width: 45px !important;
+}
+
+.input-xsmall {
+ width: 80px !important;
+}
+
+.input-small {
+ width: 145px !important;
+}
+
+.input-medium {
+ width: 240px !important;
+}
+
+.input-large {
+ width: 320px !important;
+}
+
+.input-xlarge {
+ width: 420px !important;
+}
+
+.input-inline {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+}
+
+.form-group .input-inline {
+ margin-right: 5px;
+}
+
+.input-sm {
+ height: 28px;
+ padding: 5px 10px;
+ font-size: 13px;
+}
+
+select.input-sm {
+ height: 28px;
+ line-height: 28px;
+ padding: 2px 10px;
+}
+
+@media (max-width: 768px) {
+ /* 768px */
+ .input-large {
+ width: 250px !important;
+ }
+
+ .input-xlarge {
+ width: 300px !important;
+ }
+}
+
+/* Input groups */
+.input-group .btn-default {
+ border-color: #e5e5e5;
+}
+
+.input-group .input-group-addon {
+ border-color: #e5e5e5;
+ background: #e5e5e5;
+ min-width: 39px;
+}
+
+.input-group .input-group-addon > i {
+ color: #999;
+}
+
+/* Input spinner */
+input[type="text"].spinner,
+input[type="password"].spinner,
+input[type="datetime"].spinner,
+input[type="datetime-local"].spinner,
+input[type="date"].spinner,
+input[type="month"].spinner,
+input[type="time"].spinner,
+input[type="week"].spinner,
+input[type="number"].spinner,
+input[type="email"].spinner,
+input[type="url"].spinner,
+input[type="search"].spinner,
+input[type="tel"].spinner,
+input[type="color"].spinner {
+ background-image: url("../img/input-spinner.gif") !important;
+ background-repeat: no-repeat;
+ background-position: right 8px;
+}
+
+/* Form labels */
+label {
+ font-weight: 400;
+ font-size: 14px;
+}
+
+/* Static form control */
+.form-control-static {
+ margin: 2px 0;
+ display: inline-block;
+}
+
+/* Feedback states */
+.has-success .help-block,
+.has-success .help-inline,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #d6e9c6;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .form-control:focus {
+ border-color: #bbdba1;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ border-color: #d6e9c6;
+ background-color: #dff0d8;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .help-inline,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #faebcc;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-warning .form-control:focus {
+ border-color: #f5d89e;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ border-color: #faebcc;
+ background-color: #fcf8e3;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .help-inline,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #ebccd1;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-error .form-control:focus {
+ border-color: #dca7b0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ border-color: #ebccd1;
+ background-color: #f2dede;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+/* Circle Inputs */
+.input-circle {
+ border-radius: 25px !important;
+}
+
+.input-circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.input-circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.input-circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.input-circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+/***
+Custom icon buttons
+***/
+.icon-btn {
+ height: 60px;
+ min-width: 80px;
+ margin: 5px 5px 0 0;
+ border: 1px solid #ddd;
+ padding: 12px 0px 0px 0px;
+ background-color: #fafafa;
+ background-image: none;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ display: inline-block;
+ color: #646464;
+ text-shadow: none;
+ text-align: center;
+ cursor: pointer;
+ position: relative;
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+}
+
+.icon-btn:hover {
+ text-decoration: none;
+ border-color: #999;
+ color: #444;
+ text-shadow: 0 1px 0px white;
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn:hover > .badge {
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn > div {
+ margin-top: 5px;
+ margin-bottom: 20px;
+ color: #000;
+ font-size: 12px;
+ font-weight: 300;
+}
+
+.icon-btn > .badge {
+ position: absolute;
+ font-size: 11px;
+ font-weight: 300;
+ top: -5px;
+ right: -5px;
+ padding: 3px 6px 3px 6px;
+ color: white;
+ text-shadow: none;
+ border-width: 0;
+ border-style: solid;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn > i {
+ font-size: 18px;
+}
+
+.ie8 .icon-btn:hover {
+ filter: none;
+}
+
+/***
+Input icons
+***/
+.input-icon {
+ position: relative;
+}
+
+.input-icon > .form-control {
+ padding-left: 33px;
+}
+
+.input-group .input-icon > .form-control {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.input-icon > i {
+ color: #ccc;
+ display: block;
+ position: absolute;
+ margin: 11px 2px 4px 10px;
+ z-index: 3;
+ width: 16px;
+ height: 16px;
+ font-size: 16px;
+ text-align: center;
+}
+
+.modal .input-icon > i {
+ z-index: 10055;
+}
+
+.has-success .input-icon > i {
+ color: #45B6AF;
+}
+
+.has-warning .input-icon > i {
+ color: #dfba49;
+}
+
+.has-info .input-icon > i {
+ color: #89C4F4;
+}
+
+.has-error .input-icon > i {
+ color: #F3565D;
+}
+
+.input-icon.right > .form-control {
+ padding-right: 33px;
+ padding-left: 12px;
+}
+
+.input-group .input-icon.right > .form-control {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-icon.right > i {
+ right: 8px;
+ float: right;
+}
+
+.input-icon.input-icon-lg > i {
+ margin-top: 16px;
+}
+
+.input-icon.input-icon-sm > i {
+ margin-top: 8px;
+ font-size: 13px;
+}
+
+/***
+Customized Bootstrap Labels
+***/
+.label {
+ text-shadow: none !important;
+ font-size: 13px;
+ font-weight: 300;
+ padding: 3px 6px 3px 6px;
+ color: #fff;
+ font-family: "Open Sans", sans-serif;
+}
+
+.label.label-sm {
+ font-size: 12px;
+ padding: 0px 4px 1px 4px;
+}
+
+h1 .label, h2 .label, h3 .label, h4 .label, h5 .label, h6 .label {
+ font-size: 75%;
+}
+
+/* Labels variants */
+.label-default {
+ background-color: #c6c6c6;
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: #adadad;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover, .label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #45B6AF;
+}
+
+.label-success[href]:hover, .label-success[href]:focus {
+ background-color: #37918b;
+}
+
+.label-info {
+ background-color: #89C4F4;
+}
+
+.label-info[href]:hover, .label-info[href]:focus {
+ background-color: #5aadf0;
+}
+
+.label-warning {
+ background-color: #dfba49;
+}
+
+.label-warning[href]:hover, .label-warning[href]:focus {
+ background-color: #d0a625;
+}
+
+.label-danger {
+ background-color: #F3565D;
+}
+
+.label-danger[href]:hover, .label-danger[href]:focus {
+ background-color: #f0262f;
+}
+
+/***
+Iconic labels
+***/
+.label.label-icon {
+ padding: 4px 0px 4px 4px;
+ margin-right: 2px;
+ text-align: center !important;
+}
+
+.label.label-icon > i {
+ font-size: 12px;
+ text-align: center !important;
+}
+
+.ie8 .label.label-icon, .ie9 .label.label-icon {
+ padding: 3px 0px 3px 3px;
+}
+
+/***
+Text states
+***/
+.text-default {
+ color: #c6c6c6;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+.text-success {
+ color: #45B6AF;
+}
+
+.text-info {
+ color: #89C4F4;
+}
+
+.text-warning {
+ color: #dfba49;
+}
+
+.text-danger {
+ color: #F3565D;
+}
+
+/***
+Customized List Group
+***/
+/* Contextual variants */
+.list-group .list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+.list-group a.list-group-item-success {
+ color: #3c763d;
+}
+
+.list-group a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+.list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group .list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+.list-group a.list-group-item-info {
+ color: #31708f;
+}
+
+.list-group a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+.list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group .list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+.list-group a.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+.list-group a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+.list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group .list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+.list-group a.list-group-item-danger {
+ color: #a94442;
+}
+
+.list-group a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+.list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+/***
+UI Loading
+***/
+.loading-message {
+ display: inline-block;
+ min-width: 125px;
+ margin-left: -60px;
+ padding: 10px;
+ margin: 0 auto;
+ color: #000 !important;
+ font-size: 13px;
+ font-weight: 400;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.loading-message.loading-message-boxed {
+ border: 1px solid #ddd;
+ background-color: #eee;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.loading-message > span {
+ line-height: 20px;
+ vertical-align: middle;
+}
+
+.page-loading {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ min-width: 125px;
+ margin-left: -60px;
+ margin-top: -30px;
+ padding: 7px;
+ text-align: center;
+ color: #333;
+ font-size: 13px;
+ border: 1px solid #ddd;
+ background-color: #eee;
+ vertical-align: middle;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.page-loading > span {
+ line-height: 20px;
+ vertical-align: middle;
+}
+
+.page-spinner-bar {
+ position: fixed;
+ z-index: 10051;
+ width: 100px;
+ top: 40%;
+ left: 50%;
+ margin-left: -55px;
+ text-align: center;
+}
+
+.page-spinner-bar > div {
+ margin: 0 5px;
+ width: 18px;
+ height: 18px;
+ background: #eee;
+ border-radius: 100% !important;
+ display: inline-block;
+ -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+ animation: bounceDelay 1.4s infinite ease-in-out;
+ /* Prevent first frame from flickering when animation starts */
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.page-spinner-bar .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s;
+}
+
+.page-spinner-bar .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s;
+}
+
+.block-spinner-bar {
+ display: inline-block;
+ width: 80px;
+ text-align: center;
+}
+
+.block-spinner-bar > div {
+ margin: 0 2px;
+ width: 15px;
+ height: 15px;
+ background: #eee;
+ border-radius: 100% !important;
+ display: inline-block;
+ -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+ animation: bounceDelay 1.4s infinite ease-in-out;
+ /* Prevent first frame from flickering when animation starts */
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.block-spinner-bar .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s;
+}
+
+.block-spinner-bar .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s;
+}
+
+/***
+Metro icons
+***/
+[class^="m-icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-top: 3px;
+ line-height: 14px;
+ vertical-align: top;
+ background-image: url(../img/syncfusion-icons.png);
+ background-position: 0 0;
+ background-repeat: no-repeat;
+}
+
+[class^="m-icon-big-"] {
+ display: inline-block;
+ width: 30px;
+ height: 30px;
+ margin: 6px;
+ vertical-align: middle;
+ background-image: url(../img/syncfusion-icons.png);
+ background-position: 0 0px;
+ background-repeat: no-repeat;
+}
+
+/* large icons */
+.btn.m-icon-big {
+ padding: 9px 16px 8px 16px;
+}
+
+.btn.m-icon-big.m-icon-only {
+ padding: 9px 8px 8px 0px;
+}
+
+.btn.m-icon-big [class^="m-icon-big-"] {
+ margin: 0 0 0 10px;
+}
+
+.btn.m-icon-ony > i {
+ margin-left: 0px;
+}
+
+/* default icons */
+.btn.m-icon {
+ padding: 7px 14px 7px 14px;
+}
+
+.btn.m-icon [class^="m-icon-"] {
+ margin: 4px 0 0 5px;
+}
+
+.btn.m-icon.m-icon-only {
+ padding: 7px 10px 7px 6px;
+}
+
+/* white icon */
+.m-icon-white {
+ background-image: url(../img/syncfusion-icons-white.png);
+}
+
+/* Misc */
+.m-icon-swapright {
+ background-position: -27px -10px;
+}
+
+.m-icon-swapdown {
+ background-position: -68px -10px;
+}
+
+.m-icon-swapleft {
+ background-position: -8px -10px;
+}
+
+.m-icon-swapup {
+ background-position: -46px -10px;
+}
+
+.m-icon-big-swapright {
+ background-position: -42px -28px;
+}
+
+.m-icon-big-swapdown {
+ background-position: -115px -28px;
+}
+
+.m-icon-big-swapleft {
+ background-position: -6px -28px;
+}
+
+.m-icon-big-swapup {
+ background-position: -78px -28px;
+}
+
+/***
+Customized Bootstrap Modal
+***/
+.modal {
+ z-index: 10050 !important;
+ outline: none;
+ overflow-y: auto !important;
+ /* Fix content shifting to the right on modal open due to scrollbar closed */
+}
+
+.modal .modal-header {
+ border-bottom: 1px solid #EFEFEF;
+}
+
+.modal .modal-header h3 {
+ font-weight: 300;
+}
+
+.modal .modal-header .close {
+ margin-top: 0px !important;
+}
+
+.modal .modal-dialog {
+ z-index: 10051 !important;
+}
+
+.modal > .loading {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-top: -22px;
+ margin-left: -22px;
+}
+
+.modal.in .page-loading {
+ display: none;
+}
+
+.modal-open {
+ overflow-y: auto !important;
+}
+
+.modal-open-noscroll {
+ overflow-y: hidden !important;
+}
+
+.modal-backdrop {
+ border: 0;
+ outline: none;
+ z-index: 10049;
+}
+
+.modal-backdrop, .modal-backdrop.fade.in {
+ background-color: #333 !important;
+}
+
+/* Full width modal */
+.modal-full.modal-dialog {
+ width: 99%;
+}
+
+@media (max-width: 768px) {
+ .modal-full.modal-dialog {
+ width: auto;
+ }
+}
+
+/***
+Notes
+***/
+.note {
+ margin: 0 0 20px 0;
+ padding: 15px 30px 15px 15px;
+ border-left: 5px solid #eee;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.note h1,
+.note h2,
+.note h3,
+.note h4,
+.note h5,
+.note h6 {
+ margin-top: 0;
+}
+
+.note h1 .close,
+.note h2 .close,
+.note h3 .close,
+.note h4 .close,
+.note h5 .close,
+.note h6 .close {
+ margin-right: -10px;
+}
+
+.note p {
+ font-size: 13px;
+}
+
+.note p:last-child {
+ margin-bottom: 0;
+}
+
+.note code,
+.note .highlight {
+ background-color: #fff;
+}
+
+.note.note-default {
+ background-color: lightgray;
+ border-color: #a0a0a0;
+ color: #333333, 80%;
+}
+
+.note.note-default.note-bordered {
+ background-color: #c9c9c9;
+ border-color: #a5a5a5;
+}
+
+.note.note-primary {
+ background-color: #5697d0;
+ border-color: #2a7696;
+ color: #D8E3F2, 80%;
+}
+
+.note.note-primary.note-bordered {
+ background-color: #468dcb;
+ border-color: #2c7c9e;
+}
+
+.note.note-success {
+ background-color: #eef7ea;
+ border-color: #bbdba1;
+ color: #3c763d, 80%;
+}
+
+.note.note-success.note-bordered {
+ background-color: #e2f1dc;
+ border-color: #c1dea8;
+}
+
+.note.note-info {
+ background-color: #eef7fb;
+ border-color: #91d9e8;
+ color: #31708f, 80%;
+}
+
+.note.note-info.note-bordered {
+ background-color: #ddeff8;
+ border-color: #9adcea;
+}
+
+.note.note-warning {
+ background-color: #fcf8e3;
+ border-color: #f2cf87;
+ color: #8a6d3b, 80%;
+}
+
+.note.note-warning.note-bordered {
+ background-color: #faf3d1;
+ border-color: #f3d390;
+}
+
+.note.note-danger {
+ background-color: #f9f0f0;
+ border-color: #dca7b0;
+ color: #a94442, 80%;
+}
+
+.note.note-danger.note-bordered {
+ background-color: #f3e2e2;
+ border-color: #dfaeb7;
+}
+
+/***
+Customized Bootstrap Pagination
+***/
+.pagination {
+ margin: 10px 0;
+}
+
+.pagination.pagination-circle > li:first-child > a {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.pagination.pagination-circle > li:last-child > a {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.pagination .active > a,
+.pagination .active > a:hover {
+ background: #eee;
+ border-color: #dddddd;
+ color: #333;
+}
+
+/***
+Customized Bootstrap Panels
+***/
+.panel {
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+.panel-group .panel {
+ overflow: visible;
+}
+
+.panel .panel-body {
+ font-size: 13px;
+}
+
+.panel .panel-title > a:hover {
+ text-decoration: none;
+}
+
+.accordion .panel .panel-heading {
+ padding: 0;
+}
+
+.accordion .panel .panel-title {
+ padding: 0;
+}
+
+.accordion .panel .panel-title .accordion-toggle {
+ display: block;
+ padding: 10px 15px;
+}
+
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled {
+ background: url("../img/accordion-plusminus.png") no-repeat;
+ background-position: right -19px;
+ margin-right: 15px;
+}
+
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed {
+ background-position: right 12px;
+}
+
+.panel-default {
+ border-color: #e0e0e0;
+}
+
+.panel-default > .panel-heading {
+ color: #333333;
+ background-color: #f9f9f9;
+ border-color: #e0e0e0;
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #e0e0e0;
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #e0e0e0;
+}
+
+.panel-primary {
+ border-color: #3595bd;
+}
+
+.panel-primary > .panel-heading {
+ color: #D8E3F2;
+ background-color: #428bca;
+ border-color: #3595bd;
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #3595bd;
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #3595bd;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+/***
+Accordions
+***/
+.accordion-heading {
+ background: #eee;
+}
+
+.accordion-heading a {
+ text-decoration: none;
+}
+
+.accordion-heading a:hover {
+ text-decoration: none;
+}
+
+/***
+Customized Bootstrap Popover
+***/
+.popover {
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ padding: 0;
+}
+
+.popover .popover-title {
+ margin: 0 !important;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #89C4F4;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #428bca;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #45B6AF;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #dfba49;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #F3565D;
+}
+
+/* popover colors*/
+.popovers.yellow + .popover {
+ background: yellow;
+}
+
+.popovers.yellow + .popover .popover-title {
+ background: yellow;
+}
+
+.popovers.yellow + .popover .popover-content {
+ background: yellow;
+}
+
+/***
+Portlets
+***/
+/* Full Screen portlet mode */
+.page-portlet-fullscreen {
+ overflow: hidden;
+}
+
+/* Basic portlet */
+.portlet {
+ margin-top: 0px;
+ /*margin-bottom: 25px;*/
+ margin-bottom: 10px;
+ padding: 0px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.portlet.portlet-fullscreen {
+ z-index: 10060;
+ margin: 0;
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+.portlet.portlet-fullscreen > .portlet-body {
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 0 10px;
+}
+
+.portlet.portlet-fullscreen > .portlet-title {
+ padding: 0 10px;
+}
+
+.portlet > .portlet-title {
+ border-bottom: 1px solid #eee;
+ padding: 0;
+ margin-bottom: 10px;
+ min-height: 41px;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -ms-border-radius: 4px 4px 0 0;
+ -o-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.portlet > .portlet-title:before, .portlet > .portlet-title:after {
+ content: " ";
+ display: table;
+}
+
+.portlet > .portlet-title:after {
+ clear: both;
+}
+
+.portlet > .portlet-title > .caption {
+ float: left;
+ display: inline-block;
+ font-size: 18px;
+ line-height: 18px;
+ font-weight: 300;
+ padding: 10px 0;
+}
+
+.portlet > .portlet-title > .caption.bold {
+ font-weight: 400;
+}
+
+.portlet > .portlet-title > .caption > i {
+ float: left;
+ margin-top: 4px;
+ display: inline-block;
+ font-size: 13px;
+ margin-right: 5px;
+ color: #666;
+}
+
+.portlet > .portlet-title > .caption > i.glyphicon {
+ margin-top: 2px;
+}
+
+.portlet > .portlet-title > .caption > .caption-helper {
+ padding: 0;
+ margin: 0;
+ line-height: 13px;
+ color: #9eacb4;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.portlet > .portlet-title > .actions {
+ float: right;
+ display: inline-block;
+ padding: 6px 0;
+}
+
+.portlet > .portlet-title > .actions > .dropdown-menu i {
+ color: #555555;
+}
+
+.portlet > .portlet-title > .actions > .btn,
+.portlet > .portlet-title > .actions > .btn.btn-sm,
+.portlet > .portlet-title > .actions > .btn-group > .btn,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm {
+ padding: 4px 10px;
+ font-size: 13px;
+ line-height: 1.5;
+}
+
+.portlet > .portlet-title > .actions > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn.btn-sm.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default {
+ padding: 3px 9px;
+}
+
+.portlet > .portlet-title > .actions > .btn > i,
+.portlet > .portlet-title > .actions > .btn.btn-sm > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i {
+ font-size: 13px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only {
+ padding: 5px 7px 3px 7px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default {
+ padding: 4px 6px 2px 6px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default > i {
+ font-size: 14px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen {
+ font-family: FontAwesome;
+ color: #a0a0a0;
+ padding-top: 3px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm {
+ padding: 3px 3px !important;
+ height: 27px;
+ width: 27px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before {
+ content: "\f065";
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before {
+ content: "\f066";
+}
+
+.portlet > .portlet-title > .tools {
+ float: right;
+ display: inline-block;
+ padding: 12px 0 8px 0;
+}
+
+.portlet > .portlet-title > .tools > a {
+ display: inline-block;
+ height: 16px;
+ margin-left: 5px;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.portlet > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon.png);
+ background-repeat: no-repeat;
+ width: 11px;
+}
+
+.portlet > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon.png);
+ background-repeat: no-repeat;
+ width: 12px;
+}
+
+.portlet > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon.png);
+ width: 13px;
+}
+
+.portlet > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon.png);
+ width: 14px;
+ visibility: visible;
+}
+
+.portlet > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon.png);
+ width: 14px;
+ visibility: visible;
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen {
+ display: inline-block;
+ top: -3px;
+ position: relative;
+ font-size: 13px;
+ font-family: FontAwesome;
+ color: #ACACAC;
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen:before {
+ content: "\f065";
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen.on:before {
+ content: "\f066";
+}
+
+.portlet > .portlet-title > .tools > a:hover {
+ text-decoration: none;
+ -webkit-transition: all 0.1s ease-in-out;
+ -moz-transition: all 0.1s ease-in-out;
+ -o-transition: all 0.1s ease-in-out;
+ -ms-transition: all 0.1s ease-in-out;
+ transition: all 0.1s ease-in-out;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.portlet > .portlet-title > .pagination {
+ float: right;
+ display: inline-block;
+ margin: 2px 0 0 0;
+ border: 0;
+ padding: 4px 0;
+}
+
+.portlet > .portlet-title > .nav-tabs {
+ background: none;
+ margin: 0;
+ float: right;
+ display: inline-block;
+ border: 0;
+}
+
+.portlet > .portlet-title > .nav-tabs > li {
+ background: none;
+ margin: 0;
+ border: 0;
+}
+
+.portlet > .portlet-title > .nav-tabs > li > a {
+ background: none;
+ margin: 5px 0 0 1px;
+ border: 0;
+ padding: 8px 10px;
+ color: #fff;
+}
+
+.portlet > .portlet-title > .nav-tabs > li.active > a, .portlet > .portlet-title > .nav-tabs > li:hover > a {
+ color: #333;
+ background: #fff;
+ border: 0;
+}
+
+.portlet > .portlet-body {
+ clear: both;
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.portlet > .portlet-empty {
+ min-height: 125px;
+}
+
+.portlet.full-height-content {
+ margin-bottom: 0;
+}
+
+/* Portlet background colors */
+/* Side bordered portlet */
+.portlet.bordered {
+ border-left: 2px solid #e6e9ec !important;
+}
+
+.portlet.bordered > .portlet-title {
+ border-bottom: 0;
+}
+
+/* Solid colored portlet */
+.portlet.solid {
+ padding: 0 10px 10px 10px;
+ border: 0px;
+}
+
+.portlet.solid > .portlet-title {
+ border-bottom: 0;
+ margin-bottom: 10px;
+}
+
+.portlet.solid > .portlet-title > .caption {
+ padding: 16px 0 2px 0;
+}
+
+.portlet.solid > .portlet-title > .actions {
+ padding: 12px 0 6px 0;
+}
+
+.portlet.solid > .portlet-title > .tools {
+ padding: 14px 0 6px 0;
+}
+
+/* Solid bordered portlet */
+.portlet.solid.bordered > .portlet-title {
+ margin-bottom: 10px;
+}
+
+/* Box portlet */
+.portlet.box {
+ padding: 0px !important;
+}
+
+.portlet.box > .portlet-title {
+ border-bottom: 0;
+ padding: 0 10px;
+ margin-bottom: 0;
+ color: #fff;
+}
+
+.portlet.box > .portlet-title > .caption {
+ padding: 11px 0 9px 0;
+}
+
+.portlet.box > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box > .portlet-title > .actions {
+ padding: 7px 0 5px 0;
+}
+
+.portlet.box > .portlet-body {
+ background-color: #fff;
+ padding: 10px;
+}
+
+.portlet.box.portlet-fullscreen > .portlet-body {
+ padding: 10px;
+}
+
+/* Light Portlet */
+.portlet.light {
+ padding: 12px 20px 10px 20px;
+ background-color: #fff;
+}
+
+.portlet.light.bordered {
+ border: 1px solid #e1e1e1 !important;
+}
+
+.portlet.light.bordered > .portlet-title {
+ border-bottom: 1px solid #eee;
+}
+
+.portlet.light.bg-inverse {
+ /*background: #F7F7F7;*/
+ background: white;
+ border: 1px solid #e1e1e1 !important;
+}
+
+.portlet.light > .portlet-title {
+ padding: 0;
+ min-height: 48px;
+}
+
+.portlet.light > .portlet-title > .caption {
+ color: #666;
+ padding: 10px 0;
+}
+
+.portlet.light > .portlet-title > .caption > .caption-subject {
+ font-size: 16px;
+}
+
+.portlet.light > .portlet-title > .caption > i {
+ color: #777;
+ font-size: 15px;
+ font-weight: 300;
+ margin-top: 3px;
+}
+
+.portlet.light > .portlet-title > .caption.caption-md > .caption-subject {
+ font-size: 15px;
+}
+
+.portlet.light > .portlet-title > .caption.caption-md > i {
+ font-size: 14px;
+}
+
+.portlet.light > .portlet-title > .actions {
+ padding: 6px 0 14px 0;
+}
+
+.portlet.light > .portlet-title > .actions .btn-default {
+ color: #666;
+}
+
+.portlet.light > .portlet-title > .actions .btn-icon-only {
+ height: 27px;
+ width: 27px;
+}
+
+.portlet.light > .portlet-title > .actions .dropdown-menu li > a {
+ color: #555;
+}
+
+.portlet.light > .portlet-title > .inputs {
+ float: right;
+ display: inline-block;
+ padding: 4px 0;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i {
+ font-size: 14px;
+ margin-top: 9px;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control {
+ height: 30px;
+ padding: 2px 26px 3px 10px;
+ font-size: 13px;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input > .form-control {
+ height: 30px;
+ padding: 3px 10px;
+ font-size: 13px;
+}
+
+.portlet.light > .portlet-title > .pagination {
+ padding: 2px 0 13px 0;
+}
+
+.portlet.light > .portlet-title > .tools {
+ padding: 10px 0 13px 0;
+ margin-top: 2px;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li {
+ margin: 0;
+ padding: 0;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li > a {
+ margin: 0;
+ padding: 12px 13px 13px 13px;
+ font-size: 13px;
+ color: #666;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li.active > a, .portlet.light > .portlet-title > .nav-tabs > li:hover > a {
+ margin: 0;
+ background: none;
+ color: #333;
+}
+
+.portlet.light.form-fit {
+ padding: 0;
+}
+
+.portlet.light.form-fit > .portlet-title {
+ padding: 17px 20px 10px 20px;
+ margin-bottom: 0;
+}
+
+.portlet.light .portlet-body {
+ padding-top: 8px;
+}
+
+.portlet.light.portlet-fullscreen > .portlet-body {
+ padding: 8px 0;
+}
+
+.tab-pane > p:last-child {
+ margin-bottom: 0px;
+}
+
+/* Reverse aligned tabs */
+.tabs-reversed > li {
+ float: right;
+ margin-right: 0;
+}
+
+.tabs-reversed > li > a {
+ margin-right: 0;
+}
+
+/* jQuery UI Draggable Portlets */
+.portlet-sortable:not(.portlet-fullscreen) > .portlet-title {
+ cursor: move;
+}
+
+.portlet-sortable-placeholder {
+ border: 2px dashed #eee;
+ margin-bottom: 25px;
+}
+
+.portlet-sortable-empty {
+ /*height: 45px;*/
+ height: 0px;
+}
+
+/***
+Customized Progress Bars
+***/
+.progress {
+ border: 0;
+ background-image: none;
+ filter: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.progress.progress-sm {
+ height: 12px;
+}
+
+.progress > .progress-bar-default {
+ background-color: #c6c6c6;
+}
+
+.progress-striped .progress > .progress-bar-default {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-success {
+ background-color: #45B6AF;
+}
+
+.progress-striped .progress > .progress-bar-success {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-info {
+ background-color: #89C4F4;
+}
+
+.progress-striped .progress > .progress-bar-info {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-danger {
+ background-color: #F3565D;
+}
+
+.progress-striped .progress > .progress-bar-danger {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-warning {
+ background-color: #dfba49;
+}
+
+.progress-striped .progress > .progress-bar-warning {
+ background-image: none;
+ background-image: none;
+}
+
+/***
+Dashboard stats
+***/
+.dashboard-stat {
+ display: block;
+ margin-bottom: 25px;
+ overflow: hidden;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.dashboard-stat:before, .dashboard-stat:after {
+ content: " ";
+ display: table;
+}
+
+.dashboard-stat:after {
+ clear: both;
+}
+
+.portlet .dashboard-stat:last-child {
+ margin-bottom: 0;
+}
+
+.dashboard-stat .visual {
+ width: 80px;
+ height: 80px;
+ display: block;
+ float: left;
+ padding-top: 10px;
+ padding-left: 15px;
+ margin-bottom: 15px;
+ font-size: 35px;
+ line-height: 35px;
+}
+
+.dashboard-stat .visual > i {
+ margin-left: -35px;
+ font-size: 110px;
+ line-height: 110px;
+}
+
+.dashboard-stat .details {
+ position: absolute;
+ right: 15px;
+ padding-right: 15px;
+}
+
+.dashboard-stat .details .number {
+ padding-top: 25px;
+ text-align: right;
+ font-size: 34px;
+ line-height: 36px;
+ letter-spacing: -1px;
+ margin-bottom: 0px;
+ font-weight: 300;
+}
+
+.dashboard-stat .details .desc {
+ text-align: right;
+ font-size: 16px;
+ letter-spacing: 0px;
+ font-weight: 300;
+}
+
+.dashboard-stat .more {
+ clear: both;
+ display: block;
+ padding: 6px 10px 6px 10px;
+ position: relative;
+ text-transform: uppercase;
+ font-weight: 300;
+ font-size: 11px;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+}
+
+.dashboard-stat .more:hover {
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.dashboard-stat .more > i {
+ display: inline-block;
+ margin-top: 1px;
+ float: right;
+}
+
+.dashboard-stat-light {
+ padding-bottom: 20px;
+ margin-bottom: 20px;
+}
+
+.dashboard-stat-light .details {
+ margin-bottom: 5px;
+}
+
+.dashboard-stat-light .details .number {
+ font-weight: 300;
+ margin-bottom: 0px;
+}
+
+/***
+Text Stats
+***/
+.text-stat h3 {
+ margin-top: 5px;
+ margin-bottom: 0px;
+ font-size: 18px;
+}
+
+.text-stat span {
+ font-size: 13px !important;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .text-stat {
+ margin-top: 20px;
+ }
+}
+
+/***
+Social Icons
+***/
+.social-icons {
+ padding: 0;
+ margin: 0;
+}
+
+.social-icons:before, .social-icons:after {
+ content: " ";
+ display: table;
+}
+
+.social-icons:after {
+ clear: both;
+}
+
+.social-icons li {
+ float: left;
+ display: inline;
+ list-style: none;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ text-indent: -9999px;
+}
+
+.social-icons li > a {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ width: 28px;
+ height: 28px;
+ display: block;
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ -ms-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -webkit-transition: all 0.3s ease-in-out;
+}
+
+.social-icons li:hover > a {
+ background-position: 0 -38px;
+}
+
+.social-icons li .amazon {
+ background: url(../img/social/amazon.png) no-repeat;
+}
+
+.social-icons li .behance {
+ background: url(../img/social/behance.png) no-repeat;
+}
+
+.social-icons li .blogger {
+ background: url(../img/social/blogger.png) no-repeat;
+}
+
+.social-icons li .deviantart {
+ background: url(../img/social/deviantart.png) no-repeat;
+}
+
+.social-icons li .dribbble {
+ background: url(../img/social/dribbble.png) no-repeat;
+}
+
+.social-icons li .dropbox {
+ background: url(../img/social/dropbox.png) no-repeat;
+}
+
+.social-icons li .evernote {
+ background: url(../img/social/evernote.png) no-repeat;
+}
+
+.social-icons li .facebook {
+ background: url(../img/social/facebook.png) no-repeat;
+}
+
+.social-icons li .forrst {
+ background: url(../img/social/forrst.png) no-repeat;
+}
+
+.social-icons li .github {
+ background: url(../img/social/github.png) no-repeat;
+}
+
+.social-icons li .googleplus {
+ background: url(../img/social/googleplus.png) no-repeat;
+}
+
+.social-icons li .jolicloud {
+ background: url(../img/social/jolicloud.png) no-repeat;
+}
+
+.social-icons li .last-fm {
+ background: url(../img/social/last-fm.png) no-repeat;
+}
+
+.social-icons li .linkedin {
+ background: url(../img/social/linkedin.png) no-repeat;
+}
+
+.social-icons li .picasa {
+ background: url(../img/social/picasa.png) no-repeat;
+}
+
+.social-icons li .pintrest {
+ background: url(../img/social/pintrest.png) no-repeat;
+}
+
+.social-icons li .rss {
+ background: url(../img/social/rss.png) no-repeat;
+}
+
+.social-icons li .skype {
+ background: url(../img/social/skype.png) no-repeat;
+}
+
+.social-icons li .spotify {
+ background: url(../img/social/spotify.png) no-repeat;
+}
+
+.social-icons li .stumbleupon {
+ background: url(../img/social/stumbleupon.png) no-repeat;
+}
+
+.social-icons li .tumblr {
+ background: url(../img/social/tumblr.png) no-repeat;
+}
+
+.social-icons li .twitter {
+ background: url(../img/social/twitter.png) no-repeat;
+}
+
+.social-icons li .vimeo {
+ background: url(../img/social/vimeo.png) no-repeat;
+}
+
+.social-icons li .wordpress {
+ background: url(../img/social/wordpress.png) no-repeat;
+}
+
+.social-icons li .xing {
+ background: url(../img/social/xing.png) no-repeat;
+}
+
+.social-icons li .yahoo {
+ background: url(../img/social/yahoo.png) no-repeat;
+}
+
+.social-icons li .youtube {
+ background: url(../img/social/youtube.png) no-repeat;
+}
+
+.social-icons li .vk {
+ background: url(../img/social/vk.png) no-repeat;
+}
+
+.social-icons li .instagram {
+ background: url(../img/social/instagram.png) no-repeat;
+}
+
+.social-icons li .reddit {
+ background: url(../img/social/reddit.png) no-repeat;
+}
+
+.social-icons li .aboutme {
+ background: url(../img/social/aboutme.png) no-repeat;
+}
+
+.social-icons li .flickr {
+ background: url(../img/social/flickr.png) no-repeat;
+}
+
+.social-icons li .foursquare {
+ background: url(../img/social/foursquare.png) no-repeat;
+}
+
+.social-icons li .gravatar {
+ background: url(../img/social/gravatar.png) no-repeat;
+}
+
+.social-icons li .klout {
+ background: url(../img/social/klout.png) no-repeat;
+}
+
+.social-icons li .myspace {
+ background: url(../img/social/myspace.png) no-repeat;
+}
+
+.social-icons li .quora {
+ background: url(../img/social/quora.png) no-repeat;
+}
+
+.social-icons.social-icons-color > li > a {
+ opacity: 0.7;
+ background-position: 0 -38px !important;
+}
+
+.social-icons.social-icons-color > li > a:hover {
+ opacity: 1;
+}
+
+.social-icons.social-icons-circle > li > a {
+ border-radius: 25px !important;
+}
+
+/***
+Inline Social Icons
+***/
+.social-icon {
+ display: inline-block !important;
+ width: 28px;
+ height: 28px;
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ -ms-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -webkit-transition: all 0.3s ease-in-out;
+}
+
+.social-icon.social-icon-circle {
+ border-radius: 25px !important;
+}
+
+.social-icon.amazon {
+ background: url(../img/social/amazon.png) no-repeat;
+}
+
+.social-icon.behance {
+ background: url(../img/social/behance.png) no-repeat;
+}
+
+.social-icon.blogger {
+ background: url(../img/social/blogger.png) no-repeat;
+}
+
+.social-icon.deviantart {
+ background: url(../img/social/deviantart.png) no-repeat;
+}
+
+.social-icon.dribbble {
+ background: url(../img/social/dribbble.png) no-repeat;
+}
+
+.social-icon.dropbox {
+ background: url(../img/social/dropbox.png) no-repeat;
+}
+
+.social-icon.evernote {
+ background: url(../img/social/evernote.png) no-repeat;
+}
+
+.social-icon.facebook {
+ background: url(../img/social/facebook.png) no-repeat;
+}
+
+.social-icon.forrst {
+ background: url(../img/social/forrst.png) no-repeat;
+}
+
+.social-icon.github {
+ background: url(../img/social/github.png) no-repeat;
+}
+
+.social-icon.googleplus {
+ background: url(../img/social/googleplus.png) no-repeat;
+}
+
+.social-icon.jolicloud {
+ background: url(../img/social/jolicloud.png) no-repeat;
+}
+
+.social-icon.last-fm {
+ background: url(../img/social/last-fm.png) no-repeat;
+}
+
+.social-icon.linkedin {
+ background: url(../img/social/linkedin.png) no-repeat;
+}
+
+.social-icon.picasa {
+ background: url(../img/social/picasa.png) no-repeat;
+}
+
+.social-icon.pintrest {
+ background: url(../img/social/pintrest.png) no-repeat;
+}
+
+.social-icon.rss {
+ background: url(../img/social/rss.png) no-repeat;
+}
+
+.social-icon.skype {
+ background: url(../img/social/skype.png) no-repeat;
+}
+
+.social-icon.spotify {
+ background: url(../img/social/spotify.png) no-repeat;
+}
+
+.social-icon.stumbleupon {
+ background: url(../img/social/stumbleupon.png) no-repeat;
+}
+
+.social-icon.tumblr {
+ background: url(../img/social/tumblr.png) no-repeat;
+}
+
+.social-icon.twitter {
+ background: url(../img/social/twitter.png) no-repeat;
+}
+
+.social-icon.vimeo {
+ background: url(../img/social/vimeo.png) no-repeat;
+}
+
+.social-icon.wordpress {
+ background: url(../img/social/wordpress.png) no-repeat;
+}
+
+.social-icon.xing {
+ background: url(../img/social/xing.png) no-repeat;
+}
+
+.social-icon.yahoo {
+ background: url(../img/social/yahoo.png) no-repeat;
+}
+
+.social-icon.youtube {
+ background: url(../img/social/youtube.png) no-repeat;
+}
+
+.social-icon.vk {
+ background: url(../img/social/vk.png) no-repeat;
+}
+
+.social-icon.instagram {
+ background: url(../img/social/instagram.png) no-repeat;
+}
+
+.social-icon.reddit {
+ background: url(../img/social/reddit.png) no-repeat;
+}
+
+.social-icon.aboutme {
+ background: url(../img/social/aboutme.png) no-repeat;
+}
+
+.social-icon.flickr {
+ background: url(../img/social/flickr.png) no-repeat;
+}
+
+.social-icon.foursquare {
+ background: url(../img/social/foursquare.png) no-repeat;
+}
+
+.social-icon.gravatar {
+ background: url(../img/social/gravatar.png) no-repeat;
+}
+
+.social-icon.klout {
+ background: url(../img/social/klout.png) no-repeat;
+}
+
+.social-icon.myspace {
+ background: url(../img/social/myspace.png) no-repeat;
+}
+
+.social-icon.quora {
+ background: url(../img/social/quora.png) no-repeat;
+}
+
+.social-icon:hover {
+ background-position: 0 -38px;
+}
+
+.social-icon-color {
+ opacity: 0.7;
+ background-position: 0 -38px !important;
+}
+
+.social-icon-color:hover {
+ opacity: 1;
+}
+
+/***
+Customized Bootstrap Tables
+***/
+/***
+Default table
+***/
+.table.table-bordered thead > tr > th {
+ border-bottom: 0;
+}
+
+.table tr.heading > th {
+ background-color: #eee !important;
+}
+
+.table td .img-responsive {
+ width: 100%;
+}
+
+/* Contextual table row variants */
+.table > thead > tr > td.active,
+.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th,
+.table > tbody > tr > td.active,
+.table > tbody > tr > th.active,
+.table > tbody > tr.active > td,
+.table > tbody > tr.active > th,
+.table > tfoot > tr > td.active,
+.table > tfoot > tr > th.active,
+.table > tfoot > tr.active > td,
+.table > tfoot > tr.active > th {
+ background: #a6c8e6;
+ color: #132339;
+}
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {
+ background: #92bce0;
+}
+
+.table > thead > tr > td.success,
+.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th,
+.table > tbody > tr > td.success,
+.table > tbody > tr > th.success,
+.table > tbody > tr.success > td,
+.table > tbody > tr.success > th,
+.table > tfoot > tr > td.success,
+.table > tfoot > tr > th.success,
+.table > tfoot > tr.success > td,
+.table > tfoot > tr.success > th {
+ background: #dff0d8;
+ color: #3c763d;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+ background: #d0e9c6;
+}
+
+.table > thead > tr > td.info,
+.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th,
+.table > tbody > tr > td.info,
+.table > tbody > tr > th.info,
+.table > tbody > tr.info > td,
+.table > tbody > tr.info > th,
+.table > tfoot > tr > td.info,
+.table > tfoot > tr > th.info,
+.table > tfoot > tr.info > td,
+.table > tfoot > tr.info > th {
+ background: #d9edf7;
+ color: #31708f;
+}
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {
+ background: #c4e3f3;
+}
+
+.table > thead > tr > td.warning,
+.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th,
+.table > tbody > tr > td.warning,
+.table > tbody > tr > th.warning,
+.table > tbody > tr.warning > td,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr > td.warning,
+.table > tfoot > tr > th.warning,
+.table > tfoot > tr.warning > td,
+.table > tfoot > tr.warning > th {
+ background: #fcf8e3;
+ color: #8a6d3b;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+ background: #faf2cc;
+}
+
+.table > thead > tr > td.danger,
+.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th,
+.table > tbody > tr > td.danger,
+.table > tbody > tr > th.danger,
+.table > tbody > tr.danger > td,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr > td.danger,
+.table > tfoot > tr > th.danger,
+.table > tfoot > tr.danger > td,
+.table > tfoot > tr.danger > th {
+ background: #f2dede;
+ color: #a94442;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+ background: #ebcccc;
+}
+
+/***
+Responsive & Scrollable Tables
+***/
+.table-scrollable {
+ width: 100%;
+ overflow-x: auto;
+ overflow-y: hidden;
+ border: 1px solid #dddddd;
+ margin: 10px 0 !important;
+}
+
+.table-scrollable.table-scrollable-borderless {
+ border: 0;
+}
+
+.table-scrollable > .table {
+ width: 100% !important;
+ margin: 0 !important;
+ margin-bottom: 0;
+ background-color: #fff;
+}
+
+.table-scrollable > .table > thead > tr > th,
+.table-scrollable > .table > tbody > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > td {
+ white-space: nowrap;
+}
+
+.table-scrollable > .table-bordered {
+ border: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:first-child,
+.table-scrollable > .table-bordered > tbody > tr > th:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:first-child,
+.table-scrollable > .table-bordered > thead > tr > td:first-child,
+.table-scrollable > .table-bordered > tbody > tr > td:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:last-child,
+.table-scrollable > .table-bordered > tbody > tr > th:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:last-child,
+.table-scrollable > .table-bordered > thead > tr > td:last-child,
+.table-scrollable > .table-bordered > tbody > tr > td:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr:last-child > th,
+.table-scrollable > .table-bordered > tbody > tr:last-child > th,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > th,
+.table-scrollable > .table-bordered > thead > tr:last-child > td,
+.table-scrollable > .table-bordered > tbody > tr:last-child > td,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+}
+
+/***
+Responsive Flip Scroll Tables
+***/
+.flip-scroll table {
+ width: 100%;
+}
+
+@media only screen and (max-width: 768px) {
+ /* 768px */
+ .flip-scroll .flip-content:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+
+ .flip-scroll * html .flip-content {
+ zoom: 1;
+ }
+
+ .flip-scroll *:first-child + html .flip-content {
+ zoom: 1;
+ }
+
+ .flip-scroll table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ }
+
+ .flip-scroll th,
+ .flip-scroll td {
+ margin: 0;
+ vertical-align: top;
+ }
+
+ .flip-scroll th {
+ text-align: left;
+ border: 0 !important;
+ border-bottom: 1px solid #ddd !important;
+ border-right: 1px solid #ddd !important;
+ font-size: 13px !important;
+ padding: 5px;
+ width: auto !important;
+ }
+
+ .flip-scroll table {
+ display: block;
+ position: relative;
+ width: 100%;
+ }
+
+ .flip-scroll thead {
+ display: block;
+ float: left;
+ }
+
+ .flip-scroll tbody {
+ display: block;
+ width: auto;
+ position: relative;
+ overflow-x: auto;
+ white-space: nowrap;
+ }
+
+ .flip-scroll thead tr {
+ display: block;
+ }
+
+ .flip-scroll th {
+ display: block;
+ text-align: right;
+ }
+
+ .flip-scroll tbody tr {
+ display: inline-block;
+ vertical-align: top;
+ margin-left: -5px;
+ }
+
+ .flip-scroll td {
+ display: block;
+ min-height: 1.25em;
+ text-align: left;
+ border-top: 0 !important;
+ border-left: 0 !important;
+ border-right: 0 !important;
+ }
+
+ /* sort out borders */
+ .flip-scroll th {
+ border-bottom: 0;
+ border-left: 0;
+ }
+
+ .flip-scroll td {
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+ }
+
+ .flip-scroll tbody tr {
+ border-left: 1px solid #ddd;
+ }
+
+ .flip-scroll th:last-child,
+ .flip-scroll td:last-child {
+ border-bottom: 1px solid #ddd;
+ }
+}
+
+/***
+Custom tables
+***/
+.table-toolbar {
+ margin-bottom: 15px;
+}
+
+.table-toolbar:before, .table-toolbar:after {
+ content: " ";
+ display: table;
+}
+
+.table-toolbar:after {
+ clear: both;
+}
+
+.table.table-full-width {
+ width: 100% !important;
+}
+
+.table .btn {
+ margin-top: 0px;
+ margin-left: 0px;
+ margin-right: 5px;
+}
+
+.table thead tr th {
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.table-advance {
+ margin-bottom: 10px !important;
+}
+
+.table-advance thead {
+ color: #999;
+}
+
+.table-advance thead tr th {
+ background-color: #DDD;
+ font-size: 14px;
+ font-weight: 400;
+ color: #666;
+}
+
+.table-advance div.success,
+.table-advance div.info,
+.table-advance div.important,
+.table-advance div.warning,
+.table-advance div.danger {
+ position: absolute;
+ margin-top: -5px;
+ float: left;
+ width: 2px;
+ height: 30px;
+ margin-right: 20px !important;
+}
+
+.table-advance tr td {
+ border-left-width: 0px;
+}
+
+.table-advance tr td:first-child {
+ border-left-width: 1px !important;
+}
+
+.table-advance tr td.highlight:first-child a {
+ margin-left: 15px;
+}
+
+.table-advance td.highlight div.primary {
+ border-left: 2px solid #428bca;
+}
+
+.table-advance td.highlight div.success {
+ border-left: 2px solid #45B6AF;
+}
+
+.table-advance td.highlight div.info {
+ border-left: 2px solid #89C4F4;
+}
+
+.table-advance td.highlight div.warning {
+ border-left: 2px solid #dfba49;
+}
+
+.table-advance td.highlight div.danger {
+ border-left: 2px solid #F3565D;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .table-advance tr > td.highlight:first-child a {
+ margin-left: 8px;
+ }
+}
+
+/***
+Light Table
+***/
+.table.table-light {
+ border: 0 !important;
+}
+
+.table.table-light > thead > tr:hover > th {
+ background: none;
+}
+
+.table.table-light > thead > tr.uppercase {
+ text-transform: uppercase;
+}
+
+.table.table-light > thead > tr > th {
+ font-weight: 600;
+ font-size: 13px;
+ color: #a7b3b9;
+ font-family: "Open Sans", sans-serif;
+ border: 0;
+ border-bottom: 1px solid #F2F5F8;
+}
+
+.table.table-light > tbody > tr:last-child > td {
+ border: 0;
+}
+
+.table.table-light > tbody > tr > td {
+ border: 0;
+ border-bottom: 1px solid #F2F5F8;
+ color: #9ca8b0;
+ vertical-align: middle;
+}
+
+.table.table-light > tbody > tr > td.fit {
+ width: 1px;
+ padding-right: 3px;
+}
+
+.table.table-light > tbody > tr > td .user-pic {
+ display: inline-block;
+ vertical-align: middle;
+ height: 30px;
+ -webkit-border-radius: 100%;
+ -moz-border-radius: 100%;
+ -ms-border-radius: 100%;
+ -o-border-radius: 100%;
+ border-radius: 100%;
+}
+
+.table.table-light.table-hover > tbody > tr > td:hover,
+.table.table-light.table-hover > tbody > tr > th:hover, .table.table-light.table-hover > tbody > tr:hover > td, .table.table-light.table-hover > tbody > tr:hover > th {
+ background: #f9fafb;
+}
+
+/***
+Customized Bootstrap Tabs
+***/
+/* Tabs and pills */
+.nav-tabs,
+.nav-pills {
+ margin-bottom: 10px;
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+ font-size: 14px;
+}
+
+.nav-tabs > li > a > .badge,
+.nav-pills > li > a > .badge {
+ margin-top: -3px;
+}
+
+.nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after,
+.nav-pills > li .dropdown-menu:before,
+.nav-pills > li .dropdown-menu:after {
+ display: none;
+}
+
+.nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a,
+.nav-pills.nav-tabs-sm > li > a,
+.nav-pills.nav-pills-sm > li > a {
+ font-size: 13px;
+}
+
+.nav-tabs .dropdown.open > .dropdown-toggle,
+.nav-pills .dropdown.open > .dropdown-toggle {
+ background: #eee;
+ color: #0d638f;
+ border-color: transparent;
+}
+
+/* Left and right tabs */
+.tabs-right.nav-tabs,
+.tabs-left.nav-tabs {
+ border-bottom: 0;
+}
+
+.tabs-right.nav-tabs > li,
+.tabs-left.nav-tabs > li {
+ float: none;
+}
+
+.tabs-right.nav-tabs > li > a,
+.tabs-left.nav-tabs > li > a {
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+/* Left tabs */
+.tabs-left.nav-tabs {
+ border-right: 1px solid #ddd;
+}
+
+.tabs-left.nav-tabs > li > a {
+ display: block;
+ margin-right: -1px;
+}
+
+.tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left.nav-tabs > li.active > a,
+.tabs-left.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+
+/* Right tabs */
+.tabs-right.nav-tabs {
+ border-left: 1px solid #ddd;
+}
+
+.tabs-right.nav-tabs > li > a {
+ display: block;
+ margin-left: -1px;
+}
+
+.tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right.nav-tabs > li.active > a,
+.tabs-right.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+
+/* Below tabs */
+.tabs-below > .nav-tabs,
+.tabs-below > .nav-pills {
+ border-bottom: 0;
+ margin-bottom: 0px;
+ margin-top: 10px;
+}
+
+.tabs-below > .nav-tabs {
+ border-top: 1px solid #ddd;
+ margin-bottom: 0;
+ margin-top: 10px;
+}
+
+.tabs-below > .nav-tabs > li > a {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+
+.tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus {
+ border-top-color: #ddd;
+ border-bottom-color: transparent;
+}
+
+.tabs-below > .nav-tabs > li > a .dropdown-menu {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.tabs-below > .nav-tabs .active a,
+.tabs-below > .nav-tabs .active a:hover
+.active a:focus {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+/***
+Custom tabs
+***/
+/* In BS3.0.0 tabbable class was removed. We had to added it back */
+.tabbable:before, .tabbable:after {
+ content: " ";
+ display: table;
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tabbable-custom {
+ margin-bottom: 15px;
+ padding: 0px;
+ overflow: hidden;
+ /* justified tabs */
+ /* boxless tabs */
+ /* below justified tabs */
+ /* full width tabs */
+ /* below tabs */
+}
+
+.tabbable-custom > .nav-tabs {
+ border: none;
+ margin: 0px;
+}
+
+.tabbable-custom > .nav-tabs > li {
+ margin-right: 2px;
+ border-top: 2px solid transparent;
+}
+
+.tabbable-custom > .nav-tabs > li > a {
+ margin-right: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+}
+
+.tabbable-custom > .nav-tabs > li > a:hover {
+ background: none;
+ border-color: transparent;
+}
+
+.tabbable-custom > .nav-tabs > li.active {
+ border-top: 3px solid #F3565D;
+ margin-top: 0;
+ position: relative;
+}
+
+.tabbable-custom > .nav-tabs > li.active > a {
+ border-top: none;
+ font-weight: 400;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+}
+
+.tabbable-custom > .nav-tabs > li.active > a:hover {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ border-top: none;
+ background: #fff;
+ border-color: #d4d4d4 #d4d4d4 transparent;
+}
+
+.tabbable-custom > .tab-content {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ padding: 10px;
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.tabbable-custom.nav-justified > .tab-content {
+ margin-top: -1px;
+}
+
+.tabbable-custom.boxless > .tab-content {
+ padding: 15px 0;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below.nav-justified .tab-content {
+ margin-top: 0px;
+ margin-bottom: -2px;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -ms-border-radius: 4px 4px 0 0;
+ -o-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.tabbable-custom.tabbable-full-width > .nav-tabs > li > a {
+ color: #424242;
+ font-size: 15px;
+ padding: 9px 15px;
+}
+
+.tabbable-custom.tabbable-full-width > .tab-content {
+ padding: 15px 0;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li > a {
+ border-top: none;
+ border-bottom: 2px solid transparent;
+ margin-top: -1px;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active {
+ border-top: none;
+ border-bottom: 3px solid #d12610;
+ margin-bottom: 0;
+ position: relative;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active > a {
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active > a:hover {
+ background: #fff;
+ border-color: #d4d4d4 #d4d4d4 transparent;
+}
+
+.tabbable-custom.tabbable-noborder > .nav-tabs > li > a {
+ border: 0;
+}
+
+.tabbable-custom.tabbable-noborder .tab-content {
+ border: 0;
+}
+
+.tabbable-line > .nav-tabs {
+ border: none;
+ margin: 0px;
+}
+
+.tabbable-line > .nav-tabs > li {
+ margin-right: 2px;
+}
+
+.tabbable-line > .nav-tabs > li > a {
+ border: 0;
+ margin-right: 0;
+ color: #737373;
+}
+
+.tabbable-line > .nav-tabs > li > a > i {
+ color: #a6a6a6;
+}
+
+.tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover {
+ border-bottom: 4px solid #fbcdcf;
+}
+
+.tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a {
+ border: 0;
+ background: none !important;
+ color: #333;
+}
+
+.tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i {
+ color: #a6a6a6;
+}
+
+.tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu {
+ margin-top: 0px;
+}
+
+.tabbable-line > .nav-tabs > li.active {
+ border-bottom: 4px solid #F3565D;
+ position: relative;
+}
+
+.tabbable-line > .nav-tabs > li.active > a {
+ border: 0;
+ color: #333;
+}
+
+.tabbable-line > .nav-tabs > li.active > a > i {
+ color: #404040;
+}
+
+.tabbable-line > .tab-content {
+ margin-top: -3px;
+ background-color: #fff;
+ border: 0;
+ border-top: 1px solid #eee;
+ padding: 15px 0;
+}
+
+.portlet .tabbable-line > .tab-content {
+ padding-bottom: 0;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li {
+ border-top: 4px solid transparent;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li > a {
+ margin-top: 0;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li:hover {
+ border-bottom: 0;
+ border-top: 4px solid #fbcdcf;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li.active {
+ margin-bottom: -2px;
+ border-bottom: 0;
+ border-top: 4px solid #F3565D;
+}
+
+.tabbable-line.tabs-below > .tab-content {
+ margin-top: -10px;
+ border-top: 0;
+ border-bottom: 1px solid #eee;
+ padding-bottom: 15px;
+}
+
+/***
+Tiles(new in v1.1.1)
+***/
+.tiles {
+ margin-right: -10px;
+}
+
+.tiles:before, .tiles:after {
+ display: table;
+ content: " ";
+}
+
+.tiles:after {
+ clear: both;
+}
+
+.tiles .tile {
+ display: block;
+ letter-spacing: 0.02em;
+ float: left;
+ height: 135px;
+ width: 135px !important;
+ cursor: pointer;
+ text-decoration: none;
+ color: #ffffff;
+ position: relative;
+ font-weight: 300;
+ font-size: 12px;
+ letter-spacing: 0.02em;
+ line-height: 20px;
+ overflow: hidden;
+ border: 4px solid transparent;
+ margin: 0 10px 10px 0;
+}
+
+.tiles .tile:after, .tiles .tile:before {
+ content: "";
+ float: left;
+}
+
+.tiles .tile.double {
+ width: 280px !important;
+}
+
+.tiles .tile.double-down {
+ height: 280px !important;
+}
+
+.tiles .tile.double-down i {
+ margin-top: 95px;
+}
+
+.tiles .tile:hover {
+ border-color: #aaa !important;
+}
+
+.tiles .tile:active, .tiles .tile.selected {
+ border-color: #ccc !important;
+}
+
+.tiles .tile.selected .corner:after {
+ content: "";
+ display: inline-block;
+ border-left: 40px solid transparent;
+ border-bottom: 40px solid transparent;
+ border-right: 40px solid #ccc;
+ position: absolute;
+ top: -3px;
+ right: -3px;
+}
+
+.tiles .tile.selected .check:after {
+ content: "";
+ font-family: FontAwesome;
+ font-size: 13px;
+ content: "\f00c";
+ display: inline-block;
+ position: absolute;
+ top: 2px;
+ right: 2px;
+}
+
+.tiles .tile.icon {
+ padding: 0;
+}
+
+.tiles .tile.image .tile-body {
+ padding: 0 !important;
+}
+
+.tiles .tile.image .tile-body > img {
+ width: 100%;
+ height: auto;
+ min-height: 100%;
+ max-width: 100%;
+}
+
+.tiles .tile.image .tile-body h3 {
+ display: inline-block;
+}
+
+.tiles .tile .tile-body {
+ height: 100%;
+ vertical-align: top;
+ padding: 10px 10px;
+ overflow: hidden;
+ position: relative;
+ font-weight: 400;
+ font-size: 12px;
+ color: #000000;
+ color: #ffffff;
+ margin-bottom: 10px;
+}
+
+.tiles .tile .tile-body p {
+ font-weight: 400;
+ font-size: 13px;
+ color: #000000;
+ color: #ffffff;
+ line-height: 20px;
+ overflow: hidden;
+}
+
+.tiles .tile .tile-body p:hover {
+ color: rgba(0, 0, 0, 0.8);
+}
+
+.tiles .tile .tile-body p:active {
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.tiles .tile .tile-body p:hover {
+ color: #ffffff;
+}
+
+.tiles .tile .tile-body img {
+ float: left;
+ margin-right: 10px;
+}
+
+.tiles .tile .tile-body img.pull-right {
+ float: right !important;
+ margin-left: 10px;
+ margin-right: 0px;
+}
+
+.tiles .tile .tile-body > .content {
+ display: inline-block;
+}
+
+.tiles .tile .tile-body > i {
+ margin-top: 17px;
+ display: block;
+ font-size: 56px;
+ line-height: 56px;
+ text-align: center;
+}
+
+.tiles .tile .tile-body h1,
+.tiles .tile .tile-body h2,
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4,
+.tiles .tile .tile-body h5,
+.tiles .tile .tile-body h6,
+.tiles .tile .tile-body p {
+ padding: 0;
+ margin: 0;
+ line-height: 14px;
+}
+
+.tiles .tile .tile-body h1:hover,
+.tiles .tile .tile-body h2:hover,
+.tiles .tile .tile-body h3:hover,
+.tiles .tile .tile-body h4:hover,
+.tiles .tile .tile-body h5:hover,
+.tiles .tile .tile-body h6:hover,
+.tiles .tile .tile-body p:hover {
+ color: #ffffff;
+}
+
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4 {
+ margin-bottom: 5px;
+}
+
+.tiles .tile .tile-object {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ min-height: 30px;
+ background-color: transparent;
+ *zoom: 1;
+}
+
+.tiles .tile .tile-object:before, .tiles .tile .tile-object:after {
+ display: table;
+ content: "";
+}
+
+.tiles .tile .tile-object:after {
+ clear: both;
+}
+
+.tiles .tile .tile-object > .name {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ margin-bottom: 5px;
+ margin-left: 10px;
+ margin-right: 15px;
+ font-weight: 400;
+ font-size: 13px;
+ color: #ffffff;
+}
+
+.tiles .tile .tile-object > .name > i {
+ vertical-align: middle;
+ display: block;
+ font-size: 24px;
+ height: 18px;
+ width: 24px;
+}
+
+.tiles .tile .tile-object > .number {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ margin-bottom: 0;
+ color: #ffffff;
+ text-align: center;
+ font-weight: 600;
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ margin-bottom: 8px;
+ margin-right: 10px;
+}
+
+/***
+Custimized Bootstrap Wells
+***/
+.well {
+ background-color: #eee;
+ border: 0;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+/***
+AngularJS Basic Animations
+***/
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -o-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fade-in-up {
+ -webkit-animation: fadeInUp .5s;
+ animation: fadeInUp .5s;
+}
+
+@-webkit-keyframes bounceDelay {
+ 0%, 80%, 100% {
+ -webkit-transform: scale(0);
+ }
+ 40% {
+ -webkit-transform: scale(1);
+ }
+}
+
+@keyframes bounceDelay {
+ 0%, 80%, 100% {
+ transform: scale(0);
+ -webkit-transform: scale(0);
+ }
+ 40% {
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ }
+}
+
+/* Button */
+.btn.default {
+ color: #333333;
+ background-color: #E5E5E5;
+ border-color: "";
+}
+
+.btn.default:hover, .btn.default:focus, .btn.default:active, .btn.default.active {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.open .btn.default.dropdown-toggle {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.btn.default:active, .btn.default.active {
+ background-image: none;
+ background-color: #c6c6c6;
+}
+
+.btn.default:active:hover, .btn.default.active:hover {
+ background-color: #cccccc;
+}
+
+.open .btn.default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn.default.disabled, .btn.default.disabled:hover, .btn.default.disabled:focus, .btn.default.disabled:active, .btn.default.disabled.active, .btn.default[disabled], .btn.default[disabled]:hover, .btn.default[disabled]:focus, .btn.default[disabled]:active, .btn.default[disabled].active, fieldset[disabled] .btn.default, fieldset[disabled] .btn.default:hover, fieldset[disabled] .btn.default:focus, fieldset[disabled] .btn.default:active, fieldset[disabled] .btn.default.active {
+ background-color: #E5E5E5;
+}
+
+.btn.default .badge {
+ color: #E5E5E5;
+ background-color: #333333;
+}
+
+/**********
+Blue Colors
+***********/
+/***
+Blue Default
+***/
+/* Button */
+.blue.btn {
+ color: #FFFFFF;
+ background-color: #4B8DF8;
+ border-color: "";
+}
+
+.blue.btn:hover, .blue.btn:focus, .blue.btn:active, .blue.btn.active {
+ color: #FFFFFF;
+ background-color: #2977f7;
+}
+
+.open .blue.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #2977f7;
+}
+
+.blue.btn:active, .blue.btn.active {
+ background-image: none;
+ background-color: #1068f6;
+}
+
+.blue.btn:active:hover, .blue.btn.active:hover {
+ background-color: #1a6ef6;
+}
+
+.open .blue.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue.btn.disabled, .blue.btn.disabled:hover, .blue.btn.disabled:focus, .blue.btn.disabled:active, .blue.btn.disabled.active, .blue.btn[disabled], .blue.btn[disabled]:hover, .blue.btn[disabled]:focus, .blue.btn[disabled]:active, .blue.btn[disabled].active, fieldset[disabled] .blue.btn, fieldset[disabled] .blue.btn:hover, fieldset[disabled] .blue.btn:focus, fieldset[disabled] .blue.btn:active, fieldset[disabled] .blue.btn.active {
+ background-color: #4B8DF8;
+}
+
+.blue.btn .badge {
+ color: #4B8DF8;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-stripe {
+ border-left: 3px solid #4B8DF8;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue,
+.portlet.blue {
+ background-color: #4B8DF8;
+}
+
+.portlet.solid.blue > .portlet-title,
+.portlet.solid.blue > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue {
+ border: 1px solid #7cacfa;
+ border-top: 0;
+}
+
+.portlet.box.blue > .portlet-title {
+ background-color: #4B8DF8;
+}
+
+.portlet.box.blue > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b7d1fc;
+ color: #d0e1fd;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default > i {
+ color: #deeafe;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #e8f0fe;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue {
+ background-color: #4B8DF8;
+}
+
+.dashboard-stat.blue.dashboard-stat-light:hover {
+ background-color: #3781f7;
+}
+
+.dashboard-stat.blue .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue .more {
+ color: #FFFFFF;
+ background-color: #3781f7;
+}
+
+/* General Element */
+.bg-blue {
+ border-color: #4B8DF8 !important;
+ background-image: none !important;
+ background-color: #4B8DF8 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue {
+ color: #4B8DF8 !important;
+}
+
+/***
+Blue Madison
+***/
+/* Button */
+.blue-madison.btn {
+ color: #FFFFFF;
+ background-color: #578ebe;
+ border-color: "";
+}
+
+.blue-madison.btn:hover, .blue-madison.btn:focus, .blue-madison.btn:active, .blue-madison.btn.active {
+ color: #FFFFFF;
+ background-color: #437cae;
+}
+
+.open .blue-madison.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #437cae;
+}
+
+.blue-madison.btn:active, .blue-madison.btn.active {
+ background-image: none;
+ background-color: #3c6f9c;
+}
+
+.blue-madison.btn:active:hover, .blue-madison.btn.active:hover {
+ background-color: #3f74a3;
+}
+
+.open .blue-madison.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-madison.btn.disabled, .blue-madison.btn.disabled:hover, .blue-madison.btn.disabled:focus, .blue-madison.btn.disabled:active, .blue-madison.btn.disabled.active, .blue-madison.btn[disabled], .blue-madison.btn[disabled]:hover, .blue-madison.btn[disabled]:focus, .blue-madison.btn[disabled]:active, .blue-madison.btn[disabled].active, fieldset[disabled] .blue-madison.btn, fieldset[disabled] .blue-madison.btn:hover, fieldset[disabled] .blue-madison.btn:focus, fieldset[disabled] .blue-madison.btn:active, fieldset[disabled] .blue-madison.btn.active {
+ background-color: #578ebe;
+}
+
+.blue-madison.btn .badge {
+ color: #578ebe;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-madison-stripe {
+ border-left: 3px solid #578ebe;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-madison,
+.portlet.blue-madison {
+ background-color: #578ebe;
+}
+
+.portlet.solid.blue-madison > .portlet-title,
+.portlet.solid.blue-madison > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-madison > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-madison {
+ border: 1px solid #7ca7cc;
+ border-top: 0;
+}
+
+.portlet.box.blue-madison > .portlet-title {
+ background-color: #578ebe;
+}
+
+.portlet.box.blue-madison > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-madison > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #a8c4dd;
+ color: #bad1e4;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default > i {
+ color: #c5d8e9;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cdddec;
+ color: #dfeaf3;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-madison {
+ background-color: #578ebe;
+}
+
+.dashboard-stat.blue-madison.dashboard-stat-light:hover {
+ background-color: #4884b8;
+}
+
+.dashboard-stat.blue-madison .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-madison .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-madison .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-madison .more {
+ color: #FFFFFF;
+ background-color: #4884b8;
+}
+
+/* General Element */
+.bg-blue-madison {
+ border-color: #578ebe !important;
+ background-image: none !important;
+ background-color: #578ebe !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-madison {
+ color: #578ebe !important;
+}
+
+/***
+Blue Chambray
+***/
+/* Button */
+.blue-chambray.btn {
+ color: #FFFFFF;
+ background-color: #2C3E50;
+ border-color: "";
+}
+
+.blue-chambray.btn:hover, .blue-chambray.btn:focus, .blue-chambray.btn:active, .blue-chambray.btn.active {
+ color: #FFFFFF;
+ background-color: #1f2c39;
+}
+
+.open .blue-chambray.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #1f2c39;
+}
+
+.blue-chambray.btn:active, .blue-chambray.btn.active {
+ background-image: none;
+ background-color: #161f29;
+}
+
+.blue-chambray.btn:active:hover, .blue-chambray.btn.active:hover {
+ background-color: #1a242f;
+}
+
+.open .blue-chambray.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-chambray.btn.disabled, .blue-chambray.btn.disabled:hover, .blue-chambray.btn.disabled:focus, .blue-chambray.btn.disabled:active, .blue-chambray.btn.disabled.active, .blue-chambray.btn[disabled], .blue-chambray.btn[disabled]:hover, .blue-chambray.btn[disabled]:focus, .blue-chambray.btn[disabled]:active, .blue-chambray.btn[disabled].active, fieldset[disabled] .blue-chambray.btn, fieldset[disabled] .blue-chambray.btn:hover, fieldset[disabled] .blue-chambray.btn:focus, fieldset[disabled] .blue-chambray.btn:active, fieldset[disabled] .blue-chambray.btn.active {
+ background-color: #2C3E50;
+}
+
+.blue-chambray.btn .badge {
+ color: #2C3E50;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-chambray-stripe {
+ border-left: 3px solid #2C3E50;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-chambray,
+.portlet.blue-chambray {
+ background-color: #2C3E50;
+}
+
+.portlet.solid.blue-chambray > .portlet-title,
+.portlet.solid.blue-chambray > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-chambray {
+ border: 1px solid #3e5771;
+ border-top: 0;
+}
+
+.portlet.box.blue-chambray > .portlet-title {
+ background-color: #2C3E50;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #547698;
+ color: #5f83a7;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i {
+ color: #698aac;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #6f90b0;
+ color: #809cb9;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-chambray {
+ background-color: #2C3E50;
+}
+
+.dashboard-stat.blue-chambray.dashboard-stat-light:hover {
+ background-color: #253443;
+}
+
+.dashboard-stat.blue-chambray .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-chambray .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-chambray .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-chambray .more {
+ color: #FFFFFF;
+ background-color: #253443;
+}
+
+/* General Element */
+.bg-blue-chambray {
+ border-color: #2C3E50 !important;
+ background-image: none !important;
+ background-color: #2C3E50 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-chambray {
+ color: #2C3E50 !important;
+}
+
+/***
+Blue Ebonyclay
+***/
+/* Button */
+.blue-ebonyclay.btn {
+ color: #FFFFFF;
+ background-color: #22313F;
+ border-color: "";
+}
+
+.blue-ebonyclay.btn:hover, .blue-ebonyclay.btn:focus, .blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+ color: #FFFFFF;
+ background-color: #151f28;
+}
+
+.open .blue-ebonyclay.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #151f28;
+}
+
+.blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+ background-image: none;
+ background-color: #0d1217;
+}
+
+.blue-ebonyclay.btn:active:hover, .blue-ebonyclay.btn.active:hover {
+ background-color: #10171e;
+}
+
+.open .blue-ebonyclay.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-ebonyclay.btn.disabled, .blue-ebonyclay.btn.disabled:hover, .blue-ebonyclay.btn.disabled:focus, .blue-ebonyclay.btn.disabled:active, .blue-ebonyclay.btn.disabled.active, .blue-ebonyclay.btn[disabled], .blue-ebonyclay.btn[disabled]:hover, .blue-ebonyclay.btn[disabled]:focus, .blue-ebonyclay.btn[disabled]:active, .blue-ebonyclay.btn[disabled].active, fieldset[disabled] .blue-ebonyclay.btn, fieldset[disabled] .blue-ebonyclay.btn:hover, fieldset[disabled] .blue-ebonyclay.btn:focus, fieldset[disabled] .blue-ebonyclay.btn:active, fieldset[disabled] .blue-ebonyclay.btn.active {
+ background-color: #22313F;
+}
+
+.blue-ebonyclay.btn .badge {
+ color: #22313F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-ebonyclay-stripe {
+ border-left: 3px solid #22313F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-ebonyclay,
+.portlet.blue-ebonyclay {
+ background-color: #22313F;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title,
+.portlet.solid.blue-ebonyclay > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-ebonyclay {
+ border: 1px solid #344b60;
+ border-top: 0;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title {
+ background-color: #22313F;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #496a88;
+ color: #527798;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i {
+ color: #587ea2;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #5d83a7;
+ color: #6d90b0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-ebonyclay {
+ background-color: #22313F;
+}
+
+.dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover {
+ background-color: #1b2732;
+}
+
+.dashboard-stat.blue-ebonyclay .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-ebonyclay .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-ebonyclay .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-ebonyclay .more {
+ color: #FFFFFF;
+ background-color: #1b2732;
+}
+
+/* General Element */
+.bg-blue-ebonyclay {
+ border-color: #22313F !important;
+ background-image: none !important;
+ background-color: #22313F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-ebonyclay {
+ color: #22313F !important;
+}
+
+/***
+Blue Hoki
+***/
+/* Button */
+.blue-hoki.btn {
+ color: #FFFFFF;
+ background-color: #67809F;
+ border-color: "";
+}
+
+.blue-hoki.btn:hover, .blue-hoki.btn:focus, .blue-hoki.btn:active, .blue-hoki.btn.active {
+ color: #FFFFFF;
+ background-color: #586e8b;
+}
+
+.open .blue-hoki.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #586e8b;
+}
+
+.blue-hoki.btn:active, .blue-hoki.btn.active {
+ background-image: none;
+ background-color: #4e627b;
+}
+
+.blue-hoki.btn:active:hover, .blue-hoki.btn.active:hover {
+ background-color: #526781;
+}
+
+.open .blue-hoki.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-hoki.btn.disabled, .blue-hoki.btn.disabled:hover, .blue-hoki.btn.disabled:focus, .blue-hoki.btn.disabled:active, .blue-hoki.btn.disabled.active, .blue-hoki.btn[disabled], .blue-hoki.btn[disabled]:hover, .blue-hoki.btn[disabled]:focus, .blue-hoki.btn[disabled]:active, .blue-hoki.btn[disabled].active, fieldset[disabled] .blue-hoki.btn, fieldset[disabled] .blue-hoki.btn:hover, fieldset[disabled] .blue-hoki.btn:focus, fieldset[disabled] .blue-hoki.btn:active, fieldset[disabled] .blue-hoki.btn.active {
+ background-color: #67809F;
+}
+
+.blue-hoki.btn .badge {
+ color: #67809F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-hoki-stripe {
+ border-left: 3px solid #67809F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-hoki,
+.portlet.blue-hoki {
+ background-color: #67809F;
+}
+
+.portlet.solid.blue-hoki > .portlet-title,
+.portlet.solid.blue-hoki > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-hoki {
+ border: 1px solid #869ab3;
+ border-top: 0;
+}
+
+.portlet.box.blue-hoki > .portlet-title {
+ background-color: #67809F;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #acb9ca;
+ color: #bbc7d4;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i {
+ color: #c5ceda;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cbd4de;
+ color: #dbe1e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-hoki {
+ background-color: #67809F;
+}
+
+.dashboard-stat.blue-hoki.dashboard-stat-light:hover {
+ background-color: #5e7694;
+}
+
+.dashboard-stat.blue-hoki .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-hoki .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-hoki .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-hoki .more {
+ color: #FFFFFF;
+ background-color: #5e7694;
+}
+
+/* General Element */
+.bg-blue-hoki {
+ border-color: #67809F !important;
+ background-image: none !important;
+ background-color: #67809F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-hoki {
+ color: #67809F !important;
+}
+
+/***
+Blue Stell
+***/
+/* Button */
+.blue-steel.btn {
+ color: #FFFFFF;
+ background-color: #4B77BE;
+ border-color: "";
+}
+
+.blue-steel.btn:hover, .blue-steel.btn:focus, .blue-steel.btn:active, .blue-steel.btn.active {
+ color: #FFFFFF;
+ background-color: #3d66a8;
+}
+
+.open .blue-steel.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3d66a8;
+}
+
+.blue-steel.btn:active, .blue-steel.btn.active {
+ background-image: none;
+ background-color: #365b96;
+}
+
+.blue-steel.btn:active:hover, .blue-steel.btn.active:hover {
+ background-color: #395f9d;
+}
+
+.open .blue-steel.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-steel.btn.disabled, .blue-steel.btn.disabled:hover, .blue-steel.btn.disabled:focus, .blue-steel.btn.disabled:active, .blue-steel.btn.disabled.active, .blue-steel.btn[disabled], .blue-steel.btn[disabled]:hover, .blue-steel.btn[disabled]:focus, .blue-steel.btn[disabled]:active, .blue-steel.btn[disabled].active, fieldset[disabled] .blue-steel.btn, fieldset[disabled] .blue-steel.btn:hover, fieldset[disabled] .blue-steel.btn:focus, fieldset[disabled] .blue-steel.btn:active, fieldset[disabled] .blue-steel.btn.active {
+ background-color: #4B77BE;
+}
+
+.blue-steel.btn .badge {
+ color: #4B77BE;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-steel-stripe {
+ border-left: 3px solid #4B77BE;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-steel,
+.portlet.blue-steel {
+ background-color: #4B77BE;
+}
+
+.portlet.solid.blue-steel > .portlet-title,
+.portlet.solid.blue-steel > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-steel > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-steel {
+ border: 1px solid #7093cc;
+ border-top: 0;
+}
+
+.portlet.box.blue-steel > .portlet-title {
+ background-color: #4B77BE;
+}
+
+.portlet.box.blue-steel > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-steel > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9db5dc;
+ color: #b0c3e3;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default > i {
+ color: #bbcce7;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #c3d2e9;
+ color: #d6e0f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-steel {
+ background-color: #4B77BE;
+}
+
+.dashboard-stat.blue-steel.dashboard-stat-light:hover {
+ background-color: #416db4;
+}
+
+.dashboard-stat.blue-steel .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-steel .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-steel .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-steel .more {
+ color: #FFFFFF;
+ background-color: #416db4;
+}
+
+/* General Element */
+.bg-blue-steel {
+ border-color: #4B77BE !important;
+ background-image: none !important;
+ background-color: #4B77BE !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-steel {
+ color: #4B77BE !important;
+}
+
+/***
+Blue Soft
+***/
+/* Button */
+.blue-soft.btn {
+ color: #FFFFFF;
+ background-color: #4c87b9;
+ border-color: "";
+}
+
+.blue-soft.btn:hover, .blue-soft.btn:focus, .blue-soft.btn:active, .blue-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #3f75a2;
+}
+
+.open .blue-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3f75a2;
+}
+
+.blue-soft.btn:active, .blue-soft.btn.active {
+ background-image: none;
+ background-color: #386890;
+}
+
+.blue-soft.btn:active:hover, .blue-soft.btn.active:hover {
+ background-color: #3b6d97;
+}
+
+.open .blue-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-soft.btn.disabled, .blue-soft.btn.disabled:hover, .blue-soft.btn.disabled:focus, .blue-soft.btn.disabled:active, .blue-soft.btn.disabled.active, .blue-soft.btn[disabled], .blue-soft.btn[disabled]:hover, .blue-soft.btn[disabled]:focus, .blue-soft.btn[disabled]:active, .blue-soft.btn[disabled].active, fieldset[disabled] .blue-soft.btn, fieldset[disabled] .blue-soft.btn:hover, fieldset[disabled] .blue-soft.btn:focus, fieldset[disabled] .blue-soft.btn:active, fieldset[disabled] .blue-soft.btn.active {
+ background-color: #4c87b9;
+}
+
+.blue-soft.btn .badge {
+ color: #4c87b9;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-soft-stripe {
+ border-left: 3px solid #4c87b9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-soft,
+.portlet.blue-soft {
+ background-color: #4c87b9;
+}
+
+.portlet.solid.blue-soft > .portlet-title,
+.portlet.solid.blue-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-soft {
+ border: 1px solid #71a0c7;
+ border-top: 0;
+}
+
+.portlet.box.blue-soft > .portlet-title {
+ background-color: #4c87b9;
+}
+
+.portlet.box.blue-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9dbdd9;
+ color: #afc9e0;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default > i {
+ color: #bad1e4;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #c1d6e7;
+ color: #d4e2ee;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-soft {
+ background-color: #4c87b9;
+}
+
+.dashboard-stat.blue-soft.dashboard-stat-light:hover {
+ background-color: #447dad;
+}
+
+.dashboard-stat.blue-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-soft .more {
+ color: #FFFFFF;
+ background-color: #447dad;
+}
+
+/* General Element */
+.bg-blue-soft {
+ border-color: #4c87b9 !important;
+ background-image: none !important;
+ background-color: #4c87b9 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-soft {
+ color: #4c87b9 !important;
+}
+
+/***
+Blue Dark
+***/
+/* Button */
+.blue-dark.btn {
+ color: #FFFFFF;
+ background-color: #5e738b;
+ border-color: "";
+}
+
+.blue-dark.btn:hover, .blue-dark.btn:focus, .blue-dark.btn:active, .blue-dark.btn.active {
+ color: #FFFFFF;
+ background-color: #506176;
+}
+
+.open .blue-dark.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #506176;
+}
+
+.blue-dark.btn:active, .blue-dark.btn.active {
+ background-image: none;
+ background-color: #455566;
+}
+
+.blue-dark.btn:active:hover, .blue-dark.btn.active:hover {
+ background-color: #495a6d;
+}
+
+.open .blue-dark.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-dark.btn.disabled, .blue-dark.btn.disabled:hover, .blue-dark.btn.disabled:focus, .blue-dark.btn.disabled:active, .blue-dark.btn.disabled.active, .blue-dark.btn[disabled], .blue-dark.btn[disabled]:hover, .blue-dark.btn[disabled]:focus, .blue-dark.btn[disabled]:active, .blue-dark.btn[disabled].active, fieldset[disabled] .blue-dark.btn, fieldset[disabled] .blue-dark.btn:hover, fieldset[disabled] .blue-dark.btn:focus, fieldset[disabled] .blue-dark.btn:active, fieldset[disabled] .blue-dark.btn.active {
+ background-color: #5e738b;
+}
+
+.blue-dark.btn .badge {
+ color: #5e738b;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-dark-stripe {
+ border-left: 3px solid #5e738b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-dark,
+.portlet.blue-dark {
+ background-color: #5e738b;
+}
+
+.portlet.solid.blue-dark > .portlet-title,
+.portlet.solid.blue-dark > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-dark > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-dark {
+ border: 1px solid #788da4;
+ border-top: 0;
+}
+
+.portlet.box.blue-dark > .portlet-title {
+ background-color: #5e738b;
+}
+
+.portlet.box.blue-dark > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-dark > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9dacbd;
+ color: #acb8c7;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default > i {
+ color: #b5c0cd;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bbc5d1;
+ color: #cad2db;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-dark {
+ background-color: #5e738b;
+}
+
+.dashboard-stat.blue-dark.dashboard-stat-light:hover {
+ background-color: #56697f;
+}
+
+.dashboard-stat.blue-dark .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-dark .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-dark .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-dark .more {
+ color: #FFFFFF;
+ background-color: #56697f;
+}
+
+/* General Element */
+.bg-blue-dark {
+ border-color: #5e738b !important;
+ background-image: none !important;
+ background-color: #5e738b !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-dark {
+ color: #5e738b !important;
+}
+
+/***
+Blue Sharp
+***/
+/* Button */
+.blue-sharp.btn {
+ color: #FFFFFF;
+ background-color: #5C9BD1;
+ border-color: "";
+}
+
+.blue-sharp.btn:hover, .blue-sharp.btn:focus, .blue-sharp.btn:active, .blue-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #408ac9;
+}
+
+.open .blue-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #408ac9;
+}
+
+.blue-sharp.btn:active, .blue-sharp.btn.active {
+ background-image: none;
+ background-color: #357dbb;
+}
+
+.blue-sharp.btn:active:hover, .blue-sharp.btn.active:hover {
+ background-color: #3782c3;
+}
+
+.open .blue-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-sharp.btn.disabled, .blue-sharp.btn.disabled:hover, .blue-sharp.btn.disabled:focus, .blue-sharp.btn.disabled:active, .blue-sharp.btn.disabled.active, .blue-sharp.btn[disabled], .blue-sharp.btn[disabled]:hover, .blue-sharp.btn[disabled]:focus, .blue-sharp.btn[disabled]:active, .blue-sharp.btn[disabled].active, fieldset[disabled] .blue-sharp.btn, fieldset[disabled] .blue-sharp.btn:hover, fieldset[disabled] .blue-sharp.btn:focus, fieldset[disabled] .blue-sharp.btn:active, fieldset[disabled] .blue-sharp.btn.active {
+ background-color: #5C9BD1;
+}
+
+.blue-sharp.btn .badge {
+ color: #5C9BD1;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-sharp-stripe {
+ border-left: 3px solid #5C9BD1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-sharp,
+.portlet.blue-sharp {
+ background-color: #5C9BD1;
+}
+
+.portlet.solid.blue-sharp > .portlet-title,
+.portlet.solid.blue-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-sharp {
+ border: 1px solid #84b3dc;
+ border-top: 0;
+}
+
+.portlet.box.blue-sharp > .portlet-title {
+ background-color: #5C9BD1;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b4d1ea;
+ color: #c7ddef;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i {
+ color: #d3e4f3;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dbe9f5;
+ color: #eff5fb;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-sharp {
+ background-color: #5C9BD1;
+}
+
+.dashboard-stat.blue-sharp.dashboard-stat-light:hover {
+ background-color: #4c91cd;
+}
+
+.dashboard-stat.blue-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-sharp .more {
+ color: #FFFFFF;
+ background-color: #4c91cd;
+}
+
+/* General Element */
+.bg-blue-sharp {
+ border-color: #5C9BD1 !important;
+ background-image: none !important;
+ background-color: #5C9BD1 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-sharp {
+ color: #5C9BD1 !important;
+}
+
+/***********
+Green Colors
+************/
+/***
+Green Default
+***/
+/* Button */
+.green.btn {
+ color: #FFFFFF;
+ background-color: #35aa47;
+ border-color: "";
+}
+
+.green.btn:hover, .green.btn:focus, .green.btn:active, .green.btn.active {
+ color: #FFFFFF;
+ background-color: #2d8f3c;
+}
+
+.open .green.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #2d8f3c;
+}
+
+.green.btn:active, .green.btn.active {
+ background-image: none;
+ background-color: #267b34;
+}
+
+.green.btn:active:hover, .green.btn.active:hover {
+ background-color: #298337;
+}
+
+.open .green.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green.btn.disabled, .green.btn.disabled:hover, .green.btn.disabled:focus, .green.btn.disabled:active, .green.btn.disabled.active, .green.btn[disabled], .green.btn[disabled]:hover, .green.btn[disabled]:focus, .green.btn[disabled]:active, .green.btn[disabled].active, fieldset[disabled] .green.btn, fieldset[disabled] .green.btn:hover, fieldset[disabled] .green.btn:focus, fieldset[disabled] .green.btn:active, fieldset[disabled] .green.btn.active {
+ background-color: #35aa47;
+}
+
+.green.btn .badge {
+ color: #35aa47;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-stripe {
+ border-left: 3px solid #35aa47;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green,
+.portlet.green {
+ background-color: #35aa47;
+}
+
+.portlet.solid.green > .portlet-title,
+.portlet.solid.green > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green {
+ border: 1px solid #4bc75e;
+ border-top: 0;
+}
+
+.portlet.box.green > .portlet-title {
+ background-color: #35aa47;
+}
+
+.portlet.box.green > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #7ad588;
+ color: #8ddc99;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default > i {
+ color: #99dfa4;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #a1e2ab;
+ color: #b4e8bc;
+}
+
+/* Statistic Block */
+.dashboard-stat.green {
+ background-color: #35aa47;
+}
+
+.dashboard-stat.green.dashboard-stat-light:hover {
+ background-color: #309a41;
+}
+
+.dashboard-stat.green .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green .more {
+ color: #FFFFFF;
+ background-color: #309a41;
+}
+
+/* General Element */
+.bg-green {
+ border-color: #35aa47 !important;
+ background-image: none !important;
+ background-color: #35aa47 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green {
+ color: #35aa47 !important;
+}
+
+/***
+Green Meadow
+***/
+/* Button */
+.green-meadow.btn {
+ color: #FFFFFF;
+ background-color: #1BBC9B;
+ border-color: "";
+}
+
+.green-meadow.btn:hover, .green-meadow.btn:focus, .green-meadow.btn:active, .green-meadow.btn.active {
+ color: #FFFFFF;
+ background-color: #179d81;
+}
+
+.open .green-meadow.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #179d81;
+}
+
+.green-meadow.btn:active, .green-meadow.btn.active {
+ background-image: none;
+ background-color: #13866f;
+}
+
+.green-meadow.btn:active:hover, .green-meadow.btn.active:hover {
+ background-color: #158f76;
+}
+
+.open .green-meadow.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-meadow.btn.disabled, .green-meadow.btn.disabled:hover, .green-meadow.btn.disabled:focus, .green-meadow.btn.disabled:active, .green-meadow.btn.disabled.active, .green-meadow.btn[disabled], .green-meadow.btn[disabled]:hover, .green-meadow.btn[disabled]:focus, .green-meadow.btn[disabled]:active, .green-meadow.btn[disabled].active, fieldset[disabled] .green-meadow.btn, fieldset[disabled] .green-meadow.btn:hover, fieldset[disabled] .green-meadow.btn:focus, fieldset[disabled] .green-meadow.btn:active, fieldset[disabled] .green-meadow.btn.active {
+ background-color: #1BBC9B;
+}
+
+.green-meadow.btn .badge {
+ color: #1BBC9B;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-meadow-stripe {
+ border-left: 3px solid #1BBC9B;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-meadow,
+.portlet.green-meadow {
+ background-color: #1BBC9B;
+}
+
+.portlet.solid.green-meadow > .portlet-title,
+.portlet.solid.green-meadow > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-meadow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-meadow {
+ border: 1px solid #2ae0bb;
+ border-top: 0;
+}
+
+.portlet.box.green-meadow > .portlet-title {
+ background-color: #1BBC9B;
+}
+
+.portlet.box.green-meadow > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-meadow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #5fe8cc;
+ color: #75ebd3;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default > i {
+ color: #83edd7;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #8ceeda;
+ color: #a2f2e1;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-meadow {
+ background-color: #1BBC9B;
+}
+
+.dashboard-stat.green-meadow.dashboard-stat-light:hover {
+ background-color: #18aa8c;
+}
+
+.dashboard-stat.green-meadow .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-meadow .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-meadow .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-meadow .more {
+ color: #FFFFFF;
+ background-color: #18aa8c;
+}
+
+/* General Element */
+.bg-green-meadow {
+ border-color: #1BBC9B !important;
+ background-image: none !important;
+ background-color: #1BBC9B !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-meadow {
+ color: #1BBC9B !important;
+}
+
+/***
+Green Seagreen
+***/
+/* Button */
+.green-seagreen.btn {
+ color: #FFFFFF;
+ background-color: #1BA39C;
+ border-color: "";
+}
+
+.green-seagreen.btn:hover, .green-seagreen.btn:focus, .green-seagreen.btn:active, .green-seagreen.btn.active {
+ color: #FFFFFF;
+ background-color: #16847f;
+}
+
+.open .green-seagreen.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #16847f;
+}
+
+.green-seagreen.btn:active, .green-seagreen.btn.active {
+ background-image: none;
+ background-color: #126e6a;
+}
+
+.green-seagreen.btn:active:hover, .green-seagreen.btn.active:hover {
+ background-color: #147772;
+}
+
+.open .green-seagreen.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-seagreen.btn.disabled, .green-seagreen.btn.disabled:hover, .green-seagreen.btn.disabled:focus, .green-seagreen.btn.disabled:active, .green-seagreen.btn.disabled.active, .green-seagreen.btn[disabled], .green-seagreen.btn[disabled]:hover, .green-seagreen.btn[disabled]:focus, .green-seagreen.btn[disabled]:active, .green-seagreen.btn[disabled].active, fieldset[disabled] .green-seagreen.btn, fieldset[disabled] .green-seagreen.btn:hover, fieldset[disabled] .green-seagreen.btn:focus, fieldset[disabled] .green-seagreen.btn:active, fieldset[disabled] .green-seagreen.btn.active {
+ background-color: #1BA39C;
+}
+
+.green-seagreen.btn .badge {
+ color: #1BA39C;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-seagreen-stripe {
+ border-left: 3px solid #1BA39C;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-seagreen,
+.portlet.green-seagreen {
+ background-color: #1BA39C;
+}
+
+.portlet.solid.green-seagreen > .portlet-title,
+.portlet.solid.green-seagreen > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-seagreen {
+ border: 1px solid #22cfc6;
+ border-top: 0;
+}
+
+.portlet.box.green-seagreen > .portlet-title {
+ background-color: #1BA39C;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #4de1da;
+ color: #63e5de;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i {
+ color: #70e7e1;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #78e9e3;
+ color: #8eece8;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-seagreen {
+ background-color: #1BA39C;
+}
+
+.dashboard-stat.green-seagreen.dashboard-stat-light:hover {
+ background-color: #18918b;
+}
+
+.dashboard-stat.green-seagreen .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-seagreen .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-seagreen .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-seagreen .more {
+ color: #FFFFFF;
+ background-color: #18918b;
+}
+
+/* General Element */
+.bg-green-seagreen {
+ border-color: #1BA39C !important;
+ background-image: none !important;
+ background-color: #1BA39C !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-seagreen {
+ color: #1BA39C !important;
+}
+
+/***
+Green Turquoise
+***/
+/* Button */
+.green-turquoise.btn {
+ color: #FFFFFF;
+ background-color: #36D7B7;
+ border-color: "";
+}
+
+.green-turquoise.btn:hover, .green-turquoise.btn:focus, .green-turquoise.btn:active, .green-turquoise.btn.active {
+ color: #FFFFFF;
+ background-color: #27c3a4;
+}
+
+.open .green-turquoise.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #27c3a4;
+}
+
+.green-turquoise.btn:active, .green-turquoise.btn.active {
+ background-image: none;
+ background-color: #22ad92;
+}
+
+.green-turquoise.btn:active:hover, .green-turquoise.btn.active:hover {
+ background-color: #24b699;
+}
+
+.open .green-turquoise.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-turquoise.btn.disabled, .green-turquoise.btn.disabled:hover, .green-turquoise.btn.disabled:focus, .green-turquoise.btn.disabled:active, .green-turquoise.btn.disabled.active, .green-turquoise.btn[disabled], .green-turquoise.btn[disabled]:hover, .green-turquoise.btn[disabled]:focus, .green-turquoise.btn[disabled]:active, .green-turquoise.btn[disabled].active, fieldset[disabled] .green-turquoise.btn, fieldset[disabled] .green-turquoise.btn:hover, fieldset[disabled] .green-turquoise.btn:focus, fieldset[disabled] .green-turquoise.btn:active, fieldset[disabled] .green-turquoise.btn.active {
+ background-color: #36D7B7;
+}
+
+.green-turquoise.btn .badge {
+ color: #36D7B7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-turquoise-stripe {
+ border-left: 3px solid #36D7B7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-turquoise,
+.portlet.green-turquoise {
+ background-color: #36D7B7;
+}
+
+.portlet.solid.green-turquoise > .portlet-title,
+.portlet.solid.green-turquoise > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-turquoise {
+ border: 1px solid #61dfc6;
+ border-top: 0;
+}
+
+.portlet.box.green-turquoise > .portlet-title {
+ background-color: #36D7B7;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #94ead9;
+ color: #a9eee0;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i {
+ color: #b6f0e5;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bef2e8;
+ color: #d3f6ef;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-turquoise {
+ background-color: #36D7B7;
+}
+
+.dashboard-stat.green-turquoise.dashboard-stat-light:hover {
+ background-color: #29cfae;
+}
+
+.dashboard-stat.green-turquoise .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-turquoise .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-turquoise .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-turquoise .more {
+ color: #FFFFFF;
+ background-color: #29cfae;
+}
+
+/* General Element */
+.bg-green-turquoise {
+ border-color: #36D7B7 !important;
+ background-image: none !important;
+ background-color: #36D7B7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-turquoise {
+ color: #36D7B7 !important;
+}
+
+/***
+Green Haze
+***/
+/* Button */
+.green-haze.btn {
+ color: #FFFFFF;
+ background-color: #44b6ae;
+ border-color: "";
+}
+
+.green-haze.btn:hover, .green-haze.btn:focus, .green-haze.btn:active, .green-haze.btn.active {
+ color: #FFFFFF;
+ background-color: #3a9c95;
+}
+
+.open .green-haze.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3a9c95;
+}
+
+.green-haze.btn:active, .green-haze.btn.active {
+ background-image: none;
+ background-color: #338983;
+}
+
+.green-haze.btn:active:hover, .green-haze.btn.active:hover {
+ background-color: #36918b;
+}
+
+.open .green-haze.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-haze.btn.disabled, .green-haze.btn.disabled:hover, .green-haze.btn.disabled:focus, .green-haze.btn.disabled:active, .green-haze.btn.disabled.active, .green-haze.btn[disabled], .green-haze.btn[disabled]:hover, .green-haze.btn[disabled]:focus, .green-haze.btn[disabled]:active, .green-haze.btn[disabled].active, fieldset[disabled] .green-haze.btn, fieldset[disabled] .green-haze.btn:hover, fieldset[disabled] .green-haze.btn:focus, fieldset[disabled] .green-haze.btn:active, fieldset[disabled] .green-haze.btn.active {
+ background-color: #44b6ae;
+}
+
+.green-haze.btn .badge {
+ color: #44b6ae;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-haze-stripe {
+ border-left: 3px solid #44b6ae;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-haze,
+.portlet.green-haze {
+ background-color: #44b6ae;
+}
+
+.portlet.solid.green-haze > .portlet-title,
+.portlet.solid.green-haze > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-haze > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-haze {
+ border: 1px solid #67c6bf;
+ border-top: 0;
+}
+
+.portlet.box.green-haze > .portlet-title {
+ background-color: #44b6ae;
+}
+
+.portlet.box.green-haze > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-haze > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #93d7d2;
+ color: #a6deda;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default > i {
+ color: #b1e2de;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #b9e5e2;
+ color: #cbece9;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-haze {
+ background-color: #44b6ae;
+}
+
+.dashboard-stat.green-haze.dashboard-stat-light:hover {
+ background-color: #3ea7a0;
+}
+
+.dashboard-stat.green-haze .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-haze .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-haze .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-haze .more {
+ color: #FFFFFF;
+ background-color: #3ea7a0;
+}
+
+/* General Element */
+.bg-green-haze {
+ border-color: #44b6ae !important;
+ background-image: none !important;
+ background-color: #44b6ae !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-haze {
+ color: #44b6ae !important;
+}
+
+/***
+Green Jungle
+***/
+/* Button */
+.green-jungle.btn {
+ color: #FFFFFF;
+ background-color: #26C281;
+ border-color: "";
+}
+
+.green-jungle.btn:hover, .green-jungle.btn:focus, .green-jungle.btn:active, .green-jungle.btn.active {
+ color: #FFFFFF;
+ background-color: #20a46d;
+}
+
+.open .green-jungle.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #20a46d;
+}
+
+.green-jungle.btn:active, .green-jungle.btn.active {
+ background-image: none;
+ background-color: #1c8f5f;
+}
+
+.green-jungle.btn:active:hover, .green-jungle.btn.active:hover {
+ background-color: #1e9765;
+}
+
+.open .green-jungle.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-jungle.btn.disabled, .green-jungle.btn.disabled:hover, .green-jungle.btn.disabled:focus, .green-jungle.btn.disabled:active, .green-jungle.btn.disabled.active, .green-jungle.btn[disabled], .green-jungle.btn[disabled]:hover, .green-jungle.btn[disabled]:focus, .green-jungle.btn[disabled]:active, .green-jungle.btn[disabled].active, fieldset[disabled] .green-jungle.btn, fieldset[disabled] .green-jungle.btn:hover, fieldset[disabled] .green-jungle.btn:focus, fieldset[disabled] .green-jungle.btn:active, fieldset[disabled] .green-jungle.btn.active {
+ background-color: #26C281;
+}
+
+.green-jungle.btn .badge {
+ color: #26C281;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-jungle-stripe {
+ border-left: 3px solid #26C281;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-jungle,
+.portlet.green-jungle {
+ background-color: #26C281;
+}
+
+.portlet.solid.green-jungle > .portlet-title,
+.portlet.solid.green-jungle > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-jungle > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-jungle {
+ border: 1px solid #41da9a;
+ border-top: 0;
+}
+
+.portlet.box.green-jungle > .portlet-title {
+ background-color: #26C281;
+}
+
+.portlet.box.green-jungle > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-jungle > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #74e4b5;
+ color: #8ae8c1;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default > i {
+ color: #96ebc8;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #9feccc;
+ color: #b4f0d7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-jungle {
+ background-color: #26C281;
+}
+
+.dashboard-stat.green-jungle.dashboard-stat-light:hover {
+ background-color: #23b176;
+}
+
+.dashboard-stat.green-jungle .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-jungle .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-jungle .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-jungle .more {
+ color: #FFFFFF;
+ background-color: #23b176;
+}
+
+/* General Element */
+.bg-green-jungle {
+ border-color: #26C281 !important;
+ background-image: none !important;
+ background-color: #26C281 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-jungle {
+ color: #26C281 !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-sharp.btn {
+ color: #FFFFFF;
+ background-color: #4DB3A2;
+ border-color: "";
+}
+
+.green-sharp.btn:hover, .green-sharp.btn:focus, .green-sharp.btn:active, .green-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #429a8c;
+}
+
+.open .green-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #429a8c;
+}
+
+.green-sharp.btn:active, .green-sharp.btn.active {
+ background-image: none;
+ background-color: #3a897b;
+}
+
+.green-sharp.btn:active:hover, .green-sharp.btn.active:hover {
+ background-color: #3d9082;
+}
+
+.open .green-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-sharp.btn.disabled, .green-sharp.btn.disabled:hover, .green-sharp.btn.disabled:focus, .green-sharp.btn.disabled:active, .green-sharp.btn.disabled.active, .green-sharp.btn[disabled], .green-sharp.btn[disabled]:hover, .green-sharp.btn[disabled]:focus, .green-sharp.btn[disabled]:active, .green-sharp.btn[disabled].active, fieldset[disabled] .green-sharp.btn, fieldset[disabled] .green-sharp.btn:hover, fieldset[disabled] .green-sharp.btn:focus, fieldset[disabled] .green-sharp.btn:active, fieldset[disabled] .green-sharp.btn.active {
+ background-color: #4DB3A2;
+}
+
+.green-sharp.btn .badge {
+ color: #4DB3A2;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-sharp-stripe {
+ border-left: 3px solid #4DB3A2;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-sharp,
+.portlet.green-sharp {
+ background-color: #4DB3A2;
+}
+
+.portlet.solid.green-sharp > .portlet-title,
+.portlet.solid.green-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-sharp {
+ border: 1px solid #71c2b5;
+ border-top: 0;
+}
+
+.portlet.box.green-sharp > .portlet-title {
+ background-color: #4DB3A2;
+}
+
+.portlet.box.green-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9cd5cb;
+ color: #addcd4;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default > i {
+ color: #b8e1da;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bfe4de;
+ color: #d1ebe7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-sharp {
+ background-color: #4DB3A2;
+}
+
+.dashboard-stat.green-sharp.dashboard-stat-light:hover {
+ background-color: #46a595;
+}
+
+.dashboard-stat.green-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-sharp .more {
+ color: #FFFFFF;
+ background-color: #46a595;
+}
+
+/* General Element */
+.bg-green-sharp {
+ border-color: #4DB3A2 !important;
+ background-image: none !important;
+ background-color: #4DB3A2 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-sharp {
+ color: #4DB3A2 !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-soft.btn {
+ color: #FFFFFF;
+ background-color: #3faba4;
+ border-color: "";
+}
+
+.green-soft.btn:hover, .green-soft.btn:focus, .green-soft.btn:active, .green-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #35918b;
+}
+
+.open .green-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #35918b;
+}
+
+.green-soft.btn:active, .green-soft.btn.active {
+ background-image: none;
+ background-color: #2f7e79;
+}
+
+.green-soft.btn:active:hover, .green-soft.btn.active:hover {
+ background-color: #318680;
+}
+
+.open .green-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-soft.btn.disabled, .green-soft.btn.disabled:hover, .green-soft.btn.disabled:focus, .green-soft.btn.disabled:active, .green-soft.btn.disabled.active, .green-soft.btn[disabled], .green-soft.btn[disabled]:hover, .green-soft.btn[disabled]:focus, .green-soft.btn[disabled]:active, .green-soft.btn[disabled].active, fieldset[disabled] .green-soft.btn, fieldset[disabled] .green-soft.btn:hover, fieldset[disabled] .green-soft.btn:focus, fieldset[disabled] .green-soft.btn:active, fieldset[disabled] .green-soft.btn.active {
+ background-color: #3faba4;
+}
+
+.green-soft.btn .badge {
+ color: #3faba4;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-soft-stripe {
+ border-left: 3px solid #3faba4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-soft,
+.portlet.green-soft {
+ background-color: #3faba4;
+}
+
+.portlet.solid.green-soft > .portlet-title,
+.portlet.solid.green-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-soft {
+ border: 1px solid #5bc2bc;
+ border-top: 0;
+}
+
+.portlet.box.green-soft > .portlet-title {
+ background-color: #3faba4;
+}
+
+.portlet.box.green-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #87d3ce;
+ color: #9adad6;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default > i {
+ color: #a5deda;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ade1dd;
+ color: #bfe7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-soft {
+ background-color: #3faba4;
+}
+
+.dashboard-stat.green-soft.dashboard-stat-light:hover {
+ background-color: #3a9c96;
+}
+
+.dashboard-stat.green-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-soft .more {
+ color: #FFFFFF;
+ background-color: #3a9c96;
+}
+
+/* General Element */
+.bg-green-soft {
+ border-color: #3faba4 !important;
+ background-image: none !important;
+ background-color: #3faba4 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-soft {
+ color: #3faba4 !important;
+}
+
+/***********
+Grey Colors
+************/
+/***
+Grey Default
+***/
+/* Button */
+.grey.btn {
+ color: #333333;
+ background-color: #E5E5E5;
+ border-color: "";
+}
+
+.grey.btn:hover, .grey.btn:focus, .grey.btn:active, .grey.btn.active {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.open .grey.btn.dropdown-toggle {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.grey.btn:active, .grey.btn.active {
+ background-image: none;
+ background-color: #c6c6c6;
+}
+
+.grey.btn:active:hover, .grey.btn.active:hover {
+ background-color: #cccccc;
+}
+
+.open .grey.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey.btn.disabled, .grey.btn.disabled:hover, .grey.btn.disabled:focus, .grey.btn.disabled:active, .grey.btn.disabled.active, .grey.btn[disabled], .grey.btn[disabled]:hover, .grey.btn[disabled]:focus, .grey.btn[disabled]:active, .grey.btn[disabled].active, fieldset[disabled] .grey.btn, fieldset[disabled] .grey.btn:hover, fieldset[disabled] .grey.btn:focus, fieldset[disabled] .grey.btn:active, fieldset[disabled] .grey.btn.active {
+ background-color: #E5E5E5;
+}
+
+.grey.btn .badge {
+ color: #E5E5E5;
+ background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-stripe {
+ border-left: 3px solid #E5E5E5;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey,
+.portlet.grey {
+ background-color: #E5E5E5;
+}
+
+.portlet.solid.grey > .portlet-title,
+.portlet.solid.grey > .portlet-body {
+ border: 0;
+ color: #333333;
+}
+
+.portlet.solid.grey > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey > .portlet-title {
+ background-color: #E5E5E5;
+}
+
+.portlet.box.grey > .portlet-title > .caption {
+ color: #333333;
+}
+
+.portlet.box.grey > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey {
+ background-color: #E5E5E5;
+}
+
+.dashboard-stat.grey.dashboard-stat-light:hover {
+ background-color: #dbdbdb;
+}
+
+.dashboard-stat.grey .visual > i {
+ color: #333333;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey .details .number {
+ color: #333333;
+}
+
+.dashboard-stat.grey .details .desc {
+ color: #333333;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey .more {
+ color: #333333;
+ background-color: #dbdbdb;
+}
+
+/* General Element */
+.bg-grey {
+ border-color: #E5E5E5 !important;
+ background-image: none !important;
+ background-color: #E5E5E5 !important;
+ color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey {
+ color: #E5E5E5 !important;
+}
+
+/***
+Grey Steel
+***/
+/* Button */
+.grey-steel.btn {
+ color: #80898e;
+ background-color: #e9edef;
+ border-color: "";
+}
+
+.grey-steel.btn:hover, .grey-steel.btn:focus, .grey-steel.btn:active, .grey-steel.btn.active {
+ color: #80898e;
+ background-color: #d4dce0;
+}
+
+.open .grey-steel.btn.dropdown-toggle {
+ color: #80898e;
+ background-color: #d4dce0;
+}
+
+.grey-steel.btn:active, .grey-steel.btn.active {
+ background-image: none;
+ background-color: #c6d0d5;
+}
+
+.grey-steel.btn:active:hover, .grey-steel.btn.active:hover {
+ background-color: #cbd5da;
+}
+
+.open .grey-steel.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-steel.btn.disabled, .grey-steel.btn.disabled:hover, .grey-steel.btn.disabled:focus, .grey-steel.btn.disabled:active, .grey-steel.btn.disabled.active, .grey-steel.btn[disabled], .grey-steel.btn[disabled]:hover, .grey-steel.btn[disabled]:focus, .grey-steel.btn[disabled]:active, .grey-steel.btn[disabled].active, fieldset[disabled] .grey-steel.btn, fieldset[disabled] .grey-steel.btn:hover, fieldset[disabled] .grey-steel.btn:focus, fieldset[disabled] .grey-steel.btn:active, fieldset[disabled] .grey-steel.btn.active {
+ background-color: #e9edef;
+}
+
+.grey-steel.btn .badge {
+ color: #e9edef;
+ background-color: #80898e;
+}
+
+/* Button Strip */
+.btn.grey-steel-stripe {
+ border-left: 3px solid #e9edef;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-steel,
+.portlet.grey-steel {
+ background-color: #e9edef;
+}
+
+.portlet.solid.grey-steel > .portlet-title,
+.portlet.solid.grey-steel > .portlet-body {
+ border: 0;
+ color: #80898e;
+}
+
+.portlet.solid.grey-steel > .portlet-title > .caption > i {
+ color: #80898e;
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-steel {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey-steel > .portlet-title {
+ background-color: #e9edef;
+}
+
+.portlet.box.grey-steel > .portlet-title > .caption {
+ color: #80898e;
+}
+
+.portlet.box.grey-steel > .portlet-title > .caption > i {
+ color: #80898e;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-steel {
+ background-color: #e9edef;
+}
+
+.dashboard-stat.grey-steel.dashboard-stat-light:hover {
+ background-color: #dde3e6;
+}
+
+.dashboard-stat.grey-steel .visual > i {
+ color: #80898e;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-steel .details .number {
+ color: #80898e;
+}
+
+.dashboard-stat.grey-steel .details .desc {
+ color: #80898e;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-steel .more {
+ color: #80898e;
+ background-color: #dde3e6;
+}
+
+/* General Element */
+.bg-grey-steel {
+ border-color: #e9edef !important;
+ background-image: none !important;
+ background-color: #e9edef !important;
+ color: #80898e !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-steel {
+ color: #e9edef !important;
+}
+
+/***
+Grey Cararra
+***/
+/* Button */
+.grey-cararra.btn {
+ color: #333333;
+ background-color: #fafafa;
+ border-color: "";
+}
+
+.grey-cararra.btn:hover, .grey-cararra.btn:focus, .grey-cararra.btn:active, .grey-cararra.btn.active {
+ color: #333333;
+ background-color: #e8e8e8;
+}
+
+.open .grey-cararra.btn.dropdown-toggle {
+ color: #333333;
+ background-color: #e8e8e8;
+}
+
+.grey-cararra.btn:active, .grey-cararra.btn.active {
+ background-image: none;
+ background-color: #dbdbdb;
+}
+
+.grey-cararra.btn:active:hover, .grey-cararra.btn.active:hover {
+ background-color: #e1e1e1;
+}
+
+.open .grey-cararra.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-cararra.btn.disabled, .grey-cararra.btn.disabled:hover, .grey-cararra.btn.disabled:focus, .grey-cararra.btn.disabled:active, .grey-cararra.btn.disabled.active, .grey-cararra.btn[disabled], .grey-cararra.btn[disabled]:hover, .grey-cararra.btn[disabled]:focus, .grey-cararra.btn[disabled]:active, .grey-cararra.btn[disabled].active, fieldset[disabled] .grey-cararra.btn, fieldset[disabled] .grey-cararra.btn:hover, fieldset[disabled] .grey-cararra.btn:focus, fieldset[disabled] .grey-cararra.btn:active, fieldset[disabled] .grey-cararra.btn.active {
+ background-color: #fafafa;
+}
+
+.grey-cararra.btn .badge {
+ color: #fafafa;
+ background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-cararra-stripe {
+ border-left: 3px solid #fafafa;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cararra,
+.portlet.grey-cararra {
+ background-color: #fafafa;
+}
+
+.portlet.solid.grey-cararra > .portlet-title,
+.portlet.solid.grey-cararra > .portlet-body {
+ border: 0;
+ color: #333333;
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-cararra {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey-cararra > .portlet-title {
+ background-color: #fafafa;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .caption {
+ color: #333333;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cararra {
+ background-color: #fafafa;
+}
+
+.dashboard-stat.grey-cararra.dashboard-stat-light:hover {
+ background-color: #f0f0f0;
+}
+
+.dashboard-stat.grey-cararra .visual > i {
+ color: #333333;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-cararra .details .number {
+ color: #333333;
+}
+
+.dashboard-stat.grey-cararra .details .desc {
+ color: #333333;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-cararra .more {
+ color: #333333;
+ background-color: #f0f0f0;
+}
+
+/* General Element */
+.bg-grey-cararra {
+ border-color: #fafafa !important;
+ background-image: none !important;
+ background-color: #fafafa !important;
+ color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cararra {
+ color: #fafafa !important;
+}
+
+/***
+Grey Gallery
+***/
+/* Button */
+.grey-gallery.btn {
+ color: #ffffff;
+ background-color: #555555;
+ border-color: "";
+}
+
+.grey-gallery.btn:hover, .grey-gallery.btn:focus, .grey-gallery.btn:active, .grey-gallery.btn.active {
+ color: #ffffff;
+ background-color: #434343;
+}
+
+.open .grey-gallery.btn.dropdown-toggle {
+ color: #ffffff;
+ background-color: #434343;
+}
+
+.grey-gallery.btn:active, .grey-gallery.btn.active {
+ background-image: none;
+ background-color: #363636;
+}
+
+.grey-gallery.btn:active:hover, .grey-gallery.btn.active:hover {
+ background-color: #3b3b3b;
+}
+
+.open .grey-gallery.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-gallery.btn.disabled, .grey-gallery.btn.disabled:hover, .grey-gallery.btn.disabled:focus, .grey-gallery.btn.disabled:active, .grey-gallery.btn.disabled.active, .grey-gallery.btn[disabled], .grey-gallery.btn[disabled]:hover, .grey-gallery.btn[disabled]:focus, .grey-gallery.btn[disabled]:active, .grey-gallery.btn[disabled].active, fieldset[disabled] .grey-gallery.btn, fieldset[disabled] .grey-gallery.btn:hover, fieldset[disabled] .grey-gallery.btn:focus, fieldset[disabled] .grey-gallery.btn:active, fieldset[disabled] .grey-gallery.btn.active {
+ background-color: #555555;
+}
+
+.grey-gallery.btn .badge {
+ color: #555555;
+ background-color: #ffffff;
+}
+
+/* Button Strip */
+.btn.grey-gallery-stripe {
+ border-left: 3px solid #555555;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-gallery,
+.portlet.grey-gallery {
+ background-color: #555555;
+}
+
+.portlet.solid.grey-gallery > .portlet-title,
+.portlet.solid.grey-gallery > .portlet-body {
+ border: 0;
+ color: #ffffff;
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .caption > i {
+ color: #ffffff;
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-gallery {
+ border: 1px solid #6e6e6e;
+ border-top: 0;
+}
+
+.portlet.box.grey-gallery > .portlet-title {
+ background-color: #555555;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .caption {
+ color: #ffffff;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .caption > i {
+ color: #ffffff;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #8d8d8d;
+ color: #9a9a9a;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i {
+ color: #a2a2a2;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #a7a7a7;
+ color: #b3b3b3;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-gallery {
+ background-color: #555555;
+}
+
+.dashboard-stat.grey-gallery.dashboard-stat-light:hover {
+ background-color: #4b4b4b;
+}
+
+.dashboard-stat.grey-gallery .visual > i {
+ color: #ffffff;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-gallery .details .number {
+ color: #ffffff;
+}
+
+.dashboard-stat.grey-gallery .details .desc {
+ color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-gallery .more {
+ color: #ffffff;
+ background-color: #4b4b4b;
+}
+
+/* General Element */
+.bg-grey-gallery {
+ border-color: #555555 !important;
+ background-image: none !important;
+ background-color: #555555 !important;
+ color: #ffffff !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-gallery {
+ color: #555555 !important;
+}
+
+/***
+Grey Cascade
+***/
+/* Button */
+.grey-cascade.btn {
+ color: #FFFFFF;
+ background-color: #95A5A6;
+ border-color: "";
+}
+
+.grey-cascade.btn:hover, .grey-cascade.btn:focus, .grey-cascade.btn:active, .grey-cascade.btn.active {
+ color: #FFFFFF;
+ background-color: #829596;
+}
+
+.open .grey-cascade.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #829596;
+}
+
+.grey-cascade.btn:active, .grey-cascade.btn.active {
+ background-image: none;
+ background-color: #74898a;
+}
+
+.grey-cascade.btn:active:hover, .grey-cascade.btn.active:hover {
+ background-color: #798d8f;
+}
+
+.open .grey-cascade.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-cascade.btn.disabled, .grey-cascade.btn.disabled:hover, .grey-cascade.btn.disabled:focus, .grey-cascade.btn.disabled:active, .grey-cascade.btn.disabled.active, .grey-cascade.btn[disabled], .grey-cascade.btn[disabled]:hover, .grey-cascade.btn[disabled]:focus, .grey-cascade.btn[disabled]:active, .grey-cascade.btn[disabled].active, fieldset[disabled] .grey-cascade.btn, fieldset[disabled] .grey-cascade.btn:hover, fieldset[disabled] .grey-cascade.btn:focus, fieldset[disabled] .grey-cascade.btn:active, fieldset[disabled] .grey-cascade.btn.active {
+ background-color: #95A5A6;
+}
+
+.grey-cascade.btn .badge {
+ color: #95A5A6;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.grey-cascade-stripe {
+ border-left: 3px solid #95A5A6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cascade,
+.portlet.grey-cascade {
+ background-color: #95A5A6;
+}
+
+.portlet.solid.grey-cascade > .portlet-title,
+.portlet.solid.grey-cascade > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-cascade {
+ border: 1px solid #b1bdbd;
+ border-top: 0;
+}
+
+.portlet.box.grey-cascade > .portlet-title {
+ background-color: #95A5A6;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #d2d9d9;
+ color: #e0e5e5;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i {
+ color: #e8ecec;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #eef0f0;
+ color: #fcfcfc;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cascade {
+ background-color: #95A5A6;
+}
+
+.dashboard-stat.grey-cascade.dashboard-stat-light:hover {
+ background-color: #8a9c9d;
+}
+
+.dashboard-stat.grey-cascade .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-cascade .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.grey-cascade .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-cascade .more {
+ color: #FFFFFF;
+ background-color: #8a9c9d;
+}
+
+/* General Element */
+.bg-grey-cascade {
+ border-color: #95A5A6 !important;
+ background-image: none !important;
+ background-color: #95A5A6 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cascade {
+ color: #95A5A6 !important;
+}
+
+/***
+Grey Silver
+***/
+/* Button */
+.grey-silver.btn {
+ color: #FAFCFB;
+ background-color: #BFBFBF;
+ border-color: "";
+}
+
+.grey-silver.btn:hover, .grey-silver.btn:focus, .grey-silver.btn:active, .grey-silver.btn.active {
+ color: #FAFCFB;
+ background-color: #adadad;
+}
+
+.open .grey-silver.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #adadad;
+}
+
+.grey-silver.btn:active, .grey-silver.btn.active {
+ background-image: none;
+ background-color: #a0a0a0;
+}
+
+.grey-silver.btn:active:hover, .grey-silver.btn.active:hover {
+ background-color: #a6a6a6;
+}
+
+.open .grey-silver.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-silver.btn.disabled, .grey-silver.btn.disabled:hover, .grey-silver.btn.disabled:focus, .grey-silver.btn.disabled:active, .grey-silver.btn.disabled.active, .grey-silver.btn[disabled], .grey-silver.btn[disabled]:hover, .grey-silver.btn[disabled]:focus, .grey-silver.btn[disabled]:active, .grey-silver.btn[disabled].active, fieldset[disabled] .grey-silver.btn, fieldset[disabled] .grey-silver.btn:hover, fieldset[disabled] .grey-silver.btn:focus, fieldset[disabled] .grey-silver.btn:active, fieldset[disabled] .grey-silver.btn.active {
+ background-color: #BFBFBF;
+}
+
+.grey-silver.btn .badge {
+ color: #BFBFBF;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-silver-stripe {
+ border-left: 3px solid #BFBFBF;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-silver,
+.portlet.grey-silver {
+ background-color: #BFBFBF;
+}
+
+.portlet.solid.grey-silver > .portlet-title,
+.portlet.solid.grey-silver > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-silver > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-silver {
+ border: 1px solid #d9d9d9;
+ border-top: 0;
+}
+
+.portlet.box.grey-silver > .portlet-title {
+ background-color: #BFBFBF;
+}
+
+.portlet.box.grey-silver > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-silver > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f7f7f7;
+ color: white;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-silver {
+ background-color: #BFBFBF;
+}
+
+.dashboard-stat.grey-silver.dashboard-stat-light:hover {
+ background-color: #b5b5b5;
+}
+
+.dashboard-stat.grey-silver .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-silver .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-silver .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-silver .more {
+ color: #FAFCFB;
+ background-color: #b5b5b5;
+}
+
+/* General Element */
+.bg-grey-silver {
+ border-color: #BFBFBF !important;
+ background-image: none !important;
+ background-color: #BFBFBF !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-silver {
+ color: #BFBFBF !important;
+}
+
+/***
+Grey Salsa
+***/
+/* Button */
+.grey-salsa.btn {
+ color: #FAFCFB;
+ background-color: #ACB5C3;
+ border-color: "";
+}
+
+.grey-salsa.btn:hover, .grey-salsa.btn:focus, .grey-salsa.btn:active, .grey-salsa.btn.active {
+ color: #FAFCFB;
+ background-color: #97a3b4;
+}
+
+.open .grey-salsa.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #97a3b4;
+}
+
+.grey-salsa.btn:active, .grey-salsa.btn.active {
+ background-image: none;
+ background-color: #8895a9;
+}
+
+.grey-salsa.btn:active:hover, .grey-salsa.btn.active:hover {
+ background-color: #8e9bae;
+}
+
+.open .grey-salsa.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-salsa.btn.disabled, .grey-salsa.btn.disabled:hover, .grey-salsa.btn.disabled:focus, .grey-salsa.btn.disabled:active, .grey-salsa.btn.disabled.active, .grey-salsa.btn[disabled], .grey-salsa.btn[disabled]:hover, .grey-salsa.btn[disabled]:focus, .grey-salsa.btn[disabled]:active, .grey-salsa.btn[disabled].active, fieldset[disabled] .grey-salsa.btn, fieldset[disabled] .grey-salsa.btn:hover, fieldset[disabled] .grey-salsa.btn:focus, fieldset[disabled] .grey-salsa.btn:active, fieldset[disabled] .grey-salsa.btn.active {
+ background-color: #ACB5C3;
+}
+
+.grey-salsa.btn .badge {
+ color: #ACB5C3;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salsa-stripe {
+ border-left: 3px solid #ACB5C3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salsa,
+.portlet.grey-salsa {
+ background-color: #ACB5C3;
+}
+
+.portlet.solid.grey-salsa > .portlet-title,
+.portlet.solid.grey-salsa > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-salsa {
+ border: 1px solid #cacfd8;
+ border-top: 0;
+}
+
+.portlet.box.grey-salsa > .portlet-title {
+ background-color: #ACB5C3;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #edeff2;
+ color: #fcfcfd;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salsa {
+ background-color: #ACB5C3;
+}
+
+.dashboard-stat.grey-salsa.dashboard-stat-light:hover {
+ background-color: #a0aaba;
+}
+
+.dashboard-stat.grey-salsa .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-salsa .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-salsa .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-salsa .more {
+ color: #FAFCFB;
+ background-color: #a0aaba;
+}
+
+/* General Element */
+.bg-grey-salsa {
+ border-color: #ACB5C3 !important;
+ background-image: none !important;
+ background-color: #ACB5C3 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salsa {
+ color: #ACB5C3 !important;
+}
+
+/***
+Grey Salt
+***/
+/* Button */
+.grey-salt.btn {
+ color: #FAFCFB;
+ background-color: #bfcad1;
+ border-color: "";
+}
+
+.grey-salt.btn:hover, .grey-salt.btn:focus, .grey-salt.btn:active, .grey-salt.btn.active {
+ color: #FAFCFB;
+ background-color: #aab9c2;
+}
+
+.open .grey-salt.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #aab9c2;
+}
+
+.grey-salt.btn:active, .grey-salt.btn.active {
+ background-image: none;
+ background-color: #9badb7;
+}
+
+.grey-salt.btn:active:hover, .grey-salt.btn.active:hover {
+ background-color: #a1b1bc;
+}
+
+.open .grey-salt.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-salt.btn.disabled, .grey-salt.btn.disabled:hover, .grey-salt.btn.disabled:focus, .grey-salt.btn.disabled:active, .grey-salt.btn.disabled.active, .grey-salt.btn[disabled], .grey-salt.btn[disabled]:hover, .grey-salt.btn[disabled]:focus, .grey-salt.btn[disabled]:active, .grey-salt.btn[disabled].active, fieldset[disabled] .grey-salt.btn, fieldset[disabled] .grey-salt.btn:hover, fieldset[disabled] .grey-salt.btn:focus, fieldset[disabled] .grey-salt.btn:active, fieldset[disabled] .grey-salt.btn.active {
+ background-color: #bfcad1;
+}
+
+.grey-salt.btn .badge {
+ color: #bfcad1;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salt-stripe {
+ border-left: 3px solid #bfcad1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salt,
+.portlet.grey-salt {
+ background-color: #bfcad1;
+}
+
+.portlet.solid.grey-salt > .portlet-title,
+.portlet.solid.grey-salt > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salt > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-salt {
+ border: 1px solid #dde3e6;
+ border-top: 0;
+}
+
+.portlet.box.grey-salt > .portlet-title {
+ background-color: #bfcad1;
+}
+
+.portlet.box.grey-salt > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salt > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salt {
+ background-color: #bfcad1;
+}
+
+.dashboard-stat.grey-salt.dashboard-stat-light:hover {
+ background-color: #b3c0c8;
+}
+
+.dashboard-stat.grey-salt .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-salt .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-salt .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-salt .more {
+ color: #FAFCFB;
+ background-color: #b3c0c8;
+}
+
+/* General Element */
+.bg-grey-salt {
+ border-color: #bfcad1 !important;
+ background-image: none !important;
+ background-color: #bfcad1 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salt {
+ color: #bfcad1 !important;
+}
+
+/***
+Grey Mint
+***/
+/* Button */
+.grey-mint.btn {
+ color: #FAFCFB;
+ background-color: #9eacb4;
+ border-color: "";
+}
+
+.grey-mint.btn:hover, .grey-mint.btn:focus, .grey-mint.btn:active, .grey-mint.btn.active {
+ color: #FAFCFB;
+ background-color: #8a9ba4;
+}
+
+.open .grey-mint.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #8a9ba4;
+}
+
+.grey-mint.btn:active, .grey-mint.btn.active {
+ background-image: none;
+ background-color: #7b8e99;
+}
+
+.grey-mint.btn:active:hover, .grey-mint.btn.active:hover {
+ background-color: #81939e;
+}
+
+.open .grey-mint.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-mint.btn.disabled, .grey-mint.btn.disabled:hover, .grey-mint.btn.disabled:focus, .grey-mint.btn.disabled:active, .grey-mint.btn.disabled.active, .grey-mint.btn[disabled], .grey-mint.btn[disabled]:hover, .grey-mint.btn[disabled]:focus, .grey-mint.btn[disabled]:active, .grey-mint.btn[disabled].active, fieldset[disabled] .grey-mint.btn, fieldset[disabled] .grey-mint.btn:hover, fieldset[disabled] .grey-mint.btn:focus, fieldset[disabled] .grey-mint.btn:active, fieldset[disabled] .grey-mint.btn.active {
+ background-color: #9eacb4;
+}
+
+.grey-mint.btn .badge {
+ color: #9eacb4;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-mint-stripe {
+ border-left: 3px solid #9eacb4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-mint,
+.portlet.grey-mint {
+ background-color: #9eacb4;
+}
+
+.portlet.solid.grey-mint > .portlet-title,
+.portlet.solid.grey-mint > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-mint > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-mint {
+ border: 1px solid #bbc5ca;
+ border-top: 0;
+}
+
+.portlet.box.grey-mint > .portlet-title {
+ background-color: #9eacb4;
+}
+
+.portlet.box.grey-mint > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-mint > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #dde2e5;
+ color: #eceef0;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default > i {
+ color: #f4f6f7;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fafbfb;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-mint {
+ background-color: #9eacb4;
+}
+
+.dashboard-stat.grey-mint.dashboard-stat-light:hover {
+ background-color: #92a2ab;
+}
+
+.dashboard-stat.grey-mint .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-mint .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-mint .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-mint .more {
+ color: #FAFCFB;
+ background-color: #92a2ab;
+}
+
+/* General Element */
+.bg-grey-mint {
+ border-color: #9eacb4 !important;
+ background-image: none !important;
+ background-color: #9eacb4 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-mint {
+ color: #9eacb4 !important;
+}
+
+/***********
+Red Colors
+************/
+/***
+Red Default
+***/
+/* Button */
+.red.btn {
+ color: #FFFFFF;
+ background-color: #d84a38;
+ border-color: "";
+}
+
+.red.btn:hover, .red.btn:focus, .red.btn:active, .red.btn.active {
+ color: #FFFFFF;
+ background-color: #c63927;
+}
+
+.open .red.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c63927;
+}
+
+.red.btn:active, .red.btn.active {
+ background-image: none;
+ background-color: #b03223;
+}
+
+.red.btn:active:hover, .red.btn.active:hover {
+ background-color: #b93524;
+}
+
+.open .red.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red.btn.disabled, .red.btn.disabled:hover, .red.btn.disabled:focus, .red.btn.disabled:active, .red.btn.disabled.active, .red.btn[disabled], .red.btn[disabled]:hover, .red.btn[disabled]:focus, .red.btn[disabled]:active, .red.btn[disabled].active, fieldset[disabled] .red.btn, fieldset[disabled] .red.btn:hover, fieldset[disabled] .red.btn:focus, fieldset[disabled] .red.btn:active, fieldset[disabled] .red.btn.active {
+ background-color: #d84a38;
+}
+
+.red.btn .badge {
+ color: #d84a38;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-stripe {
+ border-left: 3px solid #d84a38;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red,
+.portlet.red {
+ background-color: #d84a38;
+}
+
+.portlet.solid.red > .portlet-title,
+.portlet.solid.red > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red {
+ border: 1px solid #e07163;
+ border-top: 0;
+}
+
+.portlet.box.red > .portlet-title {
+ background-color: #d84a38;
+}
+
+.portlet.box.red > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ea9f96;
+ color: #efb3ab;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default > i {
+ color: #f1beb8;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f3c6c0;
+ color: #f7dad6;
+}
+
+/* Statistic Block */
+.dashboard-stat.red {
+ background-color: #d84a38;
+}
+
+.dashboard-stat.red.dashboard-stat-light:hover {
+ background-color: #d23c29;
+}
+
+.dashboard-stat.red .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red .more {
+ color: #FFFFFF;
+ background-color: #d23c29;
+}
+
+/* General Element */
+.bg-red {
+ border-color: #d84a38 !important;
+ background-image: none !important;
+ background-color: #d84a38 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red {
+ color: #d84a38 !important;
+}
+
+/***
+Red Pink
+***/
+/* Button */
+.red-pink.btn {
+ color: #FFFFFF;
+ background-color: #E08283;
+ border-color: "";
+}
+
+.red-pink.btn:hover, .red-pink.btn:focus, .red-pink.btn:active, .red-pink.btn.active {
+ color: #FFFFFF;
+ background-color: #d96567;
+}
+
+.open .red-pink.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #d96567;
+}
+
+.red-pink.btn:active, .red-pink.btn.active {
+ background-image: none;
+ background-color: #d45152;
+}
+
+.red-pink.btn:active:hover, .red-pink.btn.active:hover {
+ background-color: #d6595a;
+}
+
+.open .red-pink.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-pink.btn.disabled, .red-pink.btn.disabled:hover, .red-pink.btn.disabled:focus, .red-pink.btn.disabled:active, .red-pink.btn.disabled.active, .red-pink.btn[disabled], .red-pink.btn[disabled]:hover, .red-pink.btn[disabled]:focus, .red-pink.btn[disabled]:active, .red-pink.btn[disabled].active, fieldset[disabled] .red-pink.btn, fieldset[disabled] .red-pink.btn:hover, fieldset[disabled] .red-pink.btn:focus, fieldset[disabled] .red-pink.btn:active, fieldset[disabled] .red-pink.btn.active {
+ background-color: #E08283;
+}
+
+.red-pink.btn .badge {
+ color: #E08283;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-pink-stripe {
+ border-left: 3px solid #E08283;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-pink,
+.portlet.red-pink {
+ background-color: #E08283;
+}
+
+.portlet.solid.red-pink > .portlet-title,
+.portlet.solid.red-pink > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-pink > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-pink {
+ border: 1px solid #eaabac;
+ border-top: 0;
+}
+
+.portlet.box.red-pink > .portlet-title {
+ background-color: #E08283;
+}
+
+.portlet.box.red-pink > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-pink > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f6dcdc;
+ color: #fbf0f0;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default > i {
+ color: #fefdfd;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-pink {
+ background-color: #E08283;
+}
+
+.dashboard-stat.red-pink.dashboard-stat-light:hover {
+ background-color: #dc7273;
+}
+
+.dashboard-stat.red-pink .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-pink .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-pink .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-pink .more {
+ color: #FFFFFF;
+ background-color: #dc7273;
+}
+
+/* General Element */
+.bg-red-pink {
+ border-color: #E08283 !important;
+ background-image: none !important;
+ background-color: #E08283 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-pink {
+ color: #E08283 !important;
+}
+
+/***
+Red Sunglo
+***/
+/* Button */
+.red-sunglo.btn {
+ color: #FFFFFF;
+ background-color: #E26A6A;
+ border-color: "";
+}
+
+.red-sunglo.btn:hover, .red-sunglo.btn:focus, .red-sunglo.btn:active, .red-sunglo.btn.active {
+ color: #FFFFFF;
+ background-color: #dc4c4c;
+}
+
+.open .red-sunglo.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #dc4c4c;
+}
+
+.red-sunglo.btn:active, .red-sunglo.btn.active {
+ background-image: none;
+ background-color: #d83737;
+}
+
+.red-sunglo.btn:active:hover, .red-sunglo.btn.active:hover {
+ background-color: #da3f3f;
+}
+
+.open .red-sunglo.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-sunglo.btn.disabled, .red-sunglo.btn.disabled:hover, .red-sunglo.btn.disabled:focus, .red-sunglo.btn.disabled:active, .red-sunglo.btn.disabled.active, .red-sunglo.btn[disabled], .red-sunglo.btn[disabled]:hover, .red-sunglo.btn[disabled]:focus, .red-sunglo.btn[disabled]:active, .red-sunglo.btn[disabled].active, fieldset[disabled] .red-sunglo.btn, fieldset[disabled] .red-sunglo.btn:hover, fieldset[disabled] .red-sunglo.btn:focus, fieldset[disabled] .red-sunglo.btn:active, fieldset[disabled] .red-sunglo.btn.active {
+ background-color: #E26A6A;
+}
+
+.red-sunglo.btn .badge {
+ color: #E26A6A;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-sunglo-stripe {
+ border-left: 3px solid #E26A6A;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-sunglo,
+.portlet.red-sunglo {
+ background-color: #E26A6A;
+}
+
+.portlet.solid.red-sunglo > .portlet-title,
+.portlet.solid.red-sunglo > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-sunglo {
+ border: 1px solid #ea9595;
+ border-top: 0;
+}
+
+.portlet.box.red-sunglo > .portlet-title {
+ background-color: #E26A6A;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f4c8c8;
+ color: #f8dddd;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i {
+ color: #fbeaea;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdf3f3;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-sunglo {
+ background-color: #E26A6A;
+}
+
+.dashboard-stat.red-sunglo.dashboard-stat-light:hover {
+ background-color: #df5959;
+}
+
+.dashboard-stat.red-sunglo .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-sunglo .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-sunglo .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-sunglo .more {
+ color: #FFFFFF;
+ background-color: #df5959;
+}
+
+/* General Element */
+.bg-red-sunglo {
+ border-color: #E26A6A !important;
+ background-image: none !important;
+ background-color: #E26A6A !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-sunglo {
+ color: #E26A6A !important;
+}
+
+/***
+Red Intense
+***/
+/* Button */
+.red-intense.btn {
+ color: #FFFFFF;
+ background-color: #e35b5a;
+ border-color: "";
+}
+
+.red-intense.btn:hover, .red-intense.btn:focus, .red-intense.btn:active, .red-intense.btn.active {
+ color: #FFFFFF;
+ background-color: #de3d3b;
+}
+
+.open .red-intense.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #de3d3b;
+}
+
+.red-intense.btn:active, .red-intense.btn.active {
+ background-image: none;
+ background-color: #da2726;
+}
+
+.red-intense.btn:active:hover, .red-intense.btn.active:hover {
+ background-color: #dc302e;
+}
+
+.open .red-intense.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-intense.btn.disabled, .red-intense.btn.disabled:hover, .red-intense.btn.disabled:focus, .red-intense.btn.disabled:active, .red-intense.btn.disabled.active, .red-intense.btn[disabled], .red-intense.btn[disabled]:hover, .red-intense.btn[disabled]:focus, .red-intense.btn[disabled]:active, .red-intense.btn[disabled].active, fieldset[disabled] .red-intense.btn, fieldset[disabled] .red-intense.btn:hover, fieldset[disabled] .red-intense.btn:focus, fieldset[disabled] .red-intense.btn:active, fieldset[disabled] .red-intense.btn.active {
+ background-color: #e35b5a;
+}
+
+.red-intense.btn .badge {
+ color: #e35b5a;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-intense-stripe {
+ border-left: 3px solid #e35b5a;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-intense,
+.portlet.red-intense {
+ background-color: #e35b5a;
+}
+
+.portlet.solid.red-intense > .portlet-title,
+.portlet.solid.red-intense > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-intense {
+ border: 1px solid #ea8686;
+ border-top: 0;
+}
+
+.portlet.box.red-intense > .portlet-title {
+ background-color: #e35b5a;
+}
+
+.portlet.box.red-intense > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f3baba;
+ color: #f7d0d0;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default > i {
+ color: #f9dddd;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fbe6e6;
+ color: #fefbfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-intense {
+ background-color: #e35b5a;
+}
+
+.dashboard-stat.red-intense.dashboard-stat-light:hover {
+ background-color: #e04a49;
+}
+
+.dashboard-stat.red-intense .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-intense .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-intense .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-intense .more {
+ color: #FFFFFF;
+ background-color: #e04a49;
+}
+
+/* General Element */
+.bg-red-intense {
+ border-color: #e35b5a !important;
+ background-image: none !important;
+ background-color: #e35b5a !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-intense {
+ color: #e35b5a !important;
+}
+
+/***
+Red Thunderbird
+***/
+/* Button */
+.red-thunderbird.btn {
+ color: #FFFFFF;
+ background-color: #D91E18;
+ border-color: "";
+}
+
+.red-thunderbird.btn:hover, .red-thunderbird.btn:focus, .red-thunderbird.btn:active, .red-thunderbird.btn.active {
+ color: #FFFFFF;
+ background-color: #b91a14;
+}
+
+.open .red-thunderbird.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #b91a14;
+}
+
+.red-thunderbird.btn:active, .red-thunderbird.btn.active {
+ background-image: none;
+ background-color: #a21612;
+}
+
+.red-thunderbird.btn:active:hover, .red-thunderbird.btn.active:hover {
+ background-color: #ab1813;
+}
+
+.open .red-thunderbird.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-thunderbird.btn.disabled, .red-thunderbird.btn.disabled:hover, .red-thunderbird.btn.disabled:focus, .red-thunderbird.btn.disabled:active, .red-thunderbird.btn.disabled.active, .red-thunderbird.btn[disabled], .red-thunderbird.btn[disabled]:hover, .red-thunderbird.btn[disabled]:focus, .red-thunderbird.btn[disabled]:active, .red-thunderbird.btn[disabled].active, fieldset[disabled] .red-thunderbird.btn, fieldset[disabled] .red-thunderbird.btn:hover, fieldset[disabled] .red-thunderbird.btn:focus, fieldset[disabled] .red-thunderbird.btn:active, fieldset[disabled] .red-thunderbird.btn.active {
+ background-color: #D91E18;
+}
+
+.red-thunderbird.btn .badge {
+ color: #D91E18;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-thunderbird-stripe {
+ border-left: 3px solid #D91E18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-thunderbird,
+.portlet.red-thunderbird {
+ background-color: #D91E18;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title,
+.portlet.solid.red-thunderbird > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-thunderbird {
+ border: 1px solid #e9403b;
+ border-top: 0;
+}
+
+.portlet.box.red-thunderbird > .portlet-title {
+ background-color: #D91E18;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ef7672;
+ color: #f28c89;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i {
+ color: #f39997;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f4a2a0;
+ color: #f7b9b7;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-thunderbird {
+ background-color: #D91E18;
+}
+
+.dashboard-stat.red-thunderbird.dashboard-stat-light:hover {
+ background-color: #c71b16;
+}
+
+.dashboard-stat.red-thunderbird .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-thunderbird .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-thunderbird .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-thunderbird .more {
+ color: #FFFFFF;
+ background-color: #c71b16;
+}
+
+/* General Element */
+.bg-red-thunderbird {
+ border-color: #D91E18 !important;
+ background-image: none !important;
+ background-color: #D91E18 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-thunderbird {
+ color: #D91E18 !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-flamingo.btn {
+ color: #FFFFFF;
+ background-color: #EF4836;
+ border-color: "";
+}
+
+.red-flamingo.btn:hover, .red-flamingo.btn:focus, .red-flamingo.btn:active, .red-flamingo.btn.active {
+ color: #FFFFFF;
+ background-color: #ec2a15;
+}
+
+.open .red-flamingo.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #ec2a15;
+}
+
+.red-flamingo.btn:active, .red-flamingo.btn.active {
+ background-image: none;
+ background-color: #d72411;
+}
+
+.red-flamingo.btn:active:hover, .red-flamingo.btn.active:hover {
+ background-color: #e02612;
+}
+
+.open .red-flamingo.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-flamingo.btn.disabled, .red-flamingo.btn.disabled:hover, .red-flamingo.btn.disabled:focus, .red-flamingo.btn.disabled:active, .red-flamingo.btn.disabled.active, .red-flamingo.btn[disabled], .red-flamingo.btn[disabled]:hover, .red-flamingo.btn[disabled]:focus, .red-flamingo.btn[disabled]:active, .red-flamingo.btn[disabled].active, fieldset[disabled] .red-flamingo.btn, fieldset[disabled] .red-flamingo.btn:hover, fieldset[disabled] .red-flamingo.btn:focus, fieldset[disabled] .red-flamingo.btn:active, fieldset[disabled] .red-flamingo.btn.active {
+ background-color: #EF4836;
+}
+
+.red-flamingo.btn .badge {
+ color: #EF4836;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-flamingo-stripe {
+ border-left: 3px solid #EF4836;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-flamingo,
+.portlet.red-flamingo {
+ background-color: #EF4836;
+}
+
+.portlet.solid.red-flamingo > .portlet-title,
+.portlet.solid.red-flamingo > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-flamingo {
+ border: 1px solid #f37365;
+ border-top: 0;
+}
+
+.portlet.box.red-flamingo > .portlet-title {
+ background-color: #EF4836;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f7a79e;
+ color: #f9bcb6;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i {
+ color: #fac9c4;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fbd2cd;
+ color: #fde7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-flamingo {
+ background-color: #EF4836;
+}
+
+.dashboard-stat.red-flamingo.dashboard-stat-light:hover {
+ background-color: #ed3723;
+}
+
+.dashboard-stat.red-flamingo .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-flamingo .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-flamingo .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-flamingo .more {
+ color: #FFFFFF;
+ background-color: #ed3723;
+}
+
+/* General Element */
+.bg-red-flamingo {
+ border-color: #EF4836 !important;
+ background-image: none !important;
+ background-color: #EF4836 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-flamingo {
+ color: #EF4836 !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-soft.btn {
+ color: #FFFFFF;
+ background-color: #d05454;
+ border-color: "";
+}
+
+.red-soft.btn:hover, .red-soft.btn:focus, .red-soft.btn:active, .red-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #c83838;
+}
+
+.open .red-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c83838;
+}
+
+.red-soft.btn:active, .red-soft.btn.active {
+ background-image: none;
+ background-color: #b53232;
+}
+
+.red-soft.btn:active:hover, .red-soft.btn.active:hover {
+ background-color: #bd3434;
+}
+
+.open .red-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-soft.btn.disabled, .red-soft.btn.disabled:hover, .red-soft.btn.disabled:focus, .red-soft.btn.disabled:active, .red-soft.btn.disabled.active, .red-soft.btn[disabled], .red-soft.btn[disabled]:hover, .red-soft.btn[disabled]:focus, .red-soft.btn[disabled]:active, .red-soft.btn[disabled].active, fieldset[disabled] .red-soft.btn, fieldset[disabled] .red-soft.btn:hover, fieldset[disabled] .red-soft.btn:focus, fieldset[disabled] .red-soft.btn:active, fieldset[disabled] .red-soft.btn.active {
+ background-color: #d05454;
+}
+
+.red-soft.btn .badge {
+ color: #d05454;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-soft-stripe {
+ border-left: 3px solid #d05454;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-soft,
+.portlet.red-soft {
+ background-color: #d05454;
+}
+
+.portlet.solid.red-soft > .portlet-title,
+.portlet.solid.red-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-soft {
+ border: 1px solid #db7c7c;
+ border-top: 0;
+}
+
+.portlet.box.red-soft > .portlet-title {
+ background-color: #d05454;
+}
+
+.portlet.box.red-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #e8acac;
+ color: #eec0c0;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default > i {
+ color: #f1cccc;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f3d4d4;
+ color: #f9e8e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-soft {
+ background-color: #d05454;
+}
+
+.dashboard-stat.red-soft.dashboard-stat-light:hover {
+ background-color: #cc4444;
+}
+
+.dashboard-stat.red-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-soft .more {
+ color: #FFFFFF;
+ background-color: #cc4444;
+}
+
+/* General Element */
+.bg-red-soft {
+ border-color: #d05454 !important;
+ background-image: none !important;
+ background-color: #d05454 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-soft {
+ color: #d05454 !important;
+}
+
+/***********
+Yellow Colors
+************/
+/***
+Yellow Default
+***/
+/* Button */
+.yellow.btn {
+ color: #FFFFFF;
+ background-color: #FFB848;
+ border-color: "";
+}
+
+.yellow.btn:hover, .yellow.btn:focus, .yellow.btn:active, .yellow.btn.active {
+ color: #FFFFFF;
+ background-color: #ffaa24;
+}
+
+.open .yellow.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #ffaa24;
+}
+
+.yellow.btn:active, .yellow.btn.active {
+ background-image: none;
+ background-color: #ffa00b;
+}
+
+.yellow.btn:active:hover, .yellow.btn.active:hover {
+ background-color: #ffa415;
+}
+
+.open .yellow.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow.btn.disabled, .yellow.btn.disabled:hover, .yellow.btn.disabled:focus, .yellow.btn.disabled:active, .yellow.btn.disabled.active, .yellow.btn[disabled], .yellow.btn[disabled]:hover, .yellow.btn[disabled]:focus, .yellow.btn[disabled]:active, .yellow.btn[disabled].active, fieldset[disabled] .yellow.btn, fieldset[disabled] .yellow.btn:hover, fieldset[disabled] .yellow.btn:focus, fieldset[disabled] .yellow.btn:active, fieldset[disabled] .yellow.btn.active {
+ background-color: #FFB848;
+}
+
+.yellow.btn .badge {
+ color: #FFB848;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-stripe {
+ border-left: 3px solid #FFB848;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow,
+.portlet.yellow {
+ background-color: #FFB848;
+}
+
+.portlet.solid.yellow > .portlet-title,
+.portlet.solid.yellow > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow {
+ border: 1px solid #ffcc7b;
+ border-top: 0;
+}
+
+.portlet.box.yellow > .portlet-title {
+ background-color: #FFB848;
+}
+
+.portlet.box.yellow > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ffe4b8;
+ color: #ffedd2;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default > i {
+ color: #fff3e1;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fff7eb;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow {
+ background-color: #FFB848;
+}
+
+.dashboard-stat.yellow.dashboard-stat-light:hover {
+ background-color: #ffb034;
+}
+
+.dashboard-stat.yellow .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow .more {
+ color: #FFFFFF;
+ background-color: #ffb034;
+}
+
+/* General Element */
+.bg-yellow {
+ border-color: #FFB848 !important;
+ background-image: none !important;
+ background-color: #FFB848 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow {
+ color: #FFB848 !important;
+}
+
+/***
+Yellow Gold
+***/
+/* Button */
+.yellow-gold.btn {
+ color: #FFFFFF;
+ background-color: #E87E04;
+ border-color: "";
+}
+
+.yellow-gold.btn:hover, .yellow-gold.btn:focus, .yellow-gold.btn:active, .yellow-gold.btn.active {
+ color: #FFFFFF;
+ background-color: #c56b03;
+}
+
+.open .yellow-gold.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c56b03;
+}
+
+.yellow-gold.btn:active, .yellow-gold.btn.active {
+ background-image: none;
+ background-color: #ac5d03;
+}
+
+.yellow-gold.btn:active:hover, .yellow-gold.btn.active:hover {
+ background-color: #b66303;
+}
+
+.open .yellow-gold.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-gold.btn.disabled, .yellow-gold.btn.disabled:hover, .yellow-gold.btn.disabled:focus, .yellow-gold.btn.disabled:active, .yellow-gold.btn.disabled.active, .yellow-gold.btn[disabled], .yellow-gold.btn[disabled]:hover, .yellow-gold.btn[disabled]:focus, .yellow-gold.btn[disabled]:active, .yellow-gold.btn[disabled].active, fieldset[disabled] .yellow-gold.btn, fieldset[disabled] .yellow-gold.btn:hover, fieldset[disabled] .yellow-gold.btn:focus, fieldset[disabled] .yellow-gold.btn:active, fieldset[disabled] .yellow-gold.btn.active {
+ background-color: #E87E04;
+}
+
+.yellow-gold.btn .badge {
+ color: #E87E04;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-gold-stripe {
+ border-left: 3px solid #E87E04;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-gold,
+.portlet.yellow-gold {
+ background-color: #E87E04;
+}
+
+.portlet.solid.yellow-gold > .portlet-title,
+.portlet.solid.yellow-gold > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-gold {
+ border: 1px solid #fb9724;
+ border-top: 0;
+}
+
+.portlet.box.yellow-gold > .portlet-title {
+ background-color: #E87E04;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fcb460;
+ color: #fdbf79;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i {
+ color: #fdc788;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdcb92;
+ color: #fed7ab;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-gold {
+ background-color: #E87E04;
+}
+
+.dashboard-stat.yellow-gold.dashboard-stat-light:hover {
+ background-color: #d47304;
+}
+
+.dashboard-stat.yellow-gold .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-gold .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-gold .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-gold .more {
+ color: #FFFFFF;
+ background-color: #d47304;
+}
+
+/* General Element */
+.bg-yellow-gold {
+ border-color: #E87E04 !important;
+ background-image: none !important;
+ background-color: #E87E04 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-gold {
+ color: #E87E04 !important;
+}
+
+/***
+Yellow Casablanca
+***/
+/* Button */
+.yellow-casablanca.btn {
+ color: #FFFFFF;
+ background-color: #f2784b;
+ border-color: "";
+}
+
+.yellow-casablanca.btn:hover, .yellow-casablanca.btn:focus, .yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+ color: #FFFFFF;
+ background-color: #f05f2a;
+}
+
+.open .yellow-casablanca.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #f05f2a;
+}
+
+.yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+ background-image: none;
+ background-color: #ee4d12;
+}
+
+.yellow-casablanca.btn:active:hover, .yellow-casablanca.btn.active:hover {
+ background-color: #ef541b;
+}
+
+.open .yellow-casablanca.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-casablanca.btn.disabled, .yellow-casablanca.btn.disabled:hover, .yellow-casablanca.btn.disabled:focus, .yellow-casablanca.btn.disabled:active, .yellow-casablanca.btn.disabled.active, .yellow-casablanca.btn[disabled], .yellow-casablanca.btn[disabled]:hover, .yellow-casablanca.btn[disabled]:focus, .yellow-casablanca.btn[disabled]:active, .yellow-casablanca.btn[disabled].active, fieldset[disabled] .yellow-casablanca.btn, fieldset[disabled] .yellow-casablanca.btn:hover, fieldset[disabled] .yellow-casablanca.btn:focus, fieldset[disabled] .yellow-casablanca.btn:active, fieldset[disabled] .yellow-casablanca.btn.active {
+ background-color: #f2784b;
+}
+
+.yellow-casablanca.btn .badge {
+ color: #f2784b;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-casablanca-stripe {
+ border-left: 3px solid #f2784b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-casablanca,
+.portlet.yellow-casablanca {
+ background-color: #f2784b;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title,
+.portlet.solid.yellow-casablanca > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-casablanca {
+ border: 1px solid #f59c7b;
+ border-top: 0;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title {
+ background-color: #f2784b;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fac6b4;
+ color: #fbd8cb;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i {
+ color: #fce3da;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdeae3;
+ color: #fffcfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-casablanca {
+ background-color: #f2784b;
+}
+
+.dashboard-stat.yellow-casablanca.dashboard-stat-light:hover {
+ background-color: #f16a38;
+}
+
+.dashboard-stat.yellow-casablanca .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-casablanca .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-casablanca .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-casablanca .more {
+ color: #FFFFFF;
+ background-color: #f16a38;
+}
+
+/* General Element */
+.bg-yellow-casablanca {
+ border-color: #f2784b !important;
+ background-image: none !important;
+ background-color: #f2784b !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-casablanca {
+ color: #f2784b !important;
+}
+
+/***
+Yellow Crusta
+***/
+/* Button */
+.yellow-crusta.btn {
+ color: #FFFFFF;
+ background-color: #f3c200;
+ border-color: "";
+}
+
+.yellow-crusta.btn:hover, .yellow-crusta.btn:focus, .yellow-crusta.btn:active, .yellow-crusta.btn.active {
+ color: #FFFFFF;
+ background-color: #cfa500;
+}
+
+.open .yellow-crusta.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #cfa500;
+}
+
+.yellow-crusta.btn:active, .yellow-crusta.btn.active {
+ background-image: none;
+ background-color: #b69100;
+}
+
+.yellow-crusta.btn:active:hover, .yellow-crusta.btn.active:hover {
+ background-color: #c09900;
+}
+
+.open .yellow-crusta.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-crusta.btn.disabled, .yellow-crusta.btn.disabled:hover, .yellow-crusta.btn.disabled:focus, .yellow-crusta.btn.disabled:active, .yellow-crusta.btn.disabled.active, .yellow-crusta.btn[disabled], .yellow-crusta.btn[disabled]:hover, .yellow-crusta.btn[disabled]:focus, .yellow-crusta.btn[disabled]:active, .yellow-crusta.btn[disabled].active, fieldset[disabled] .yellow-crusta.btn, fieldset[disabled] .yellow-crusta.btn:hover, fieldset[disabled] .yellow-crusta.btn:focus, fieldset[disabled] .yellow-crusta.btn:active, fieldset[disabled] .yellow-crusta.btn.active {
+ background-color: #f3c200;
+}
+
+.yellow-crusta.btn .badge {
+ color: #f3c200;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-crusta-stripe {
+ border-left: 3px solid #f3c200;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-crusta,
+.portlet.yellow-crusta {
+ background-color: #f3c200;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title,
+.portlet.solid.yellow-crusta > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-crusta {
+ border: 1px solid #ffd327;
+ border-top: 0;
+}
+
+.portlet.box.yellow-crusta > .portlet-title {
+ background-color: #f3c200;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ffe064;
+ color: #ffe57e;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i {
+ color: #ffe88d;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ffea97;
+ color: #ffefb1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-crusta {
+ background-color: #f3c200;
+}
+
+.dashboard-stat.yellow-crusta.dashboard-stat-light:hover {
+ background-color: #dfb200;
+}
+
+.dashboard-stat.yellow-crusta .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-crusta .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-crusta .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-crusta .more {
+ color: #FFFFFF;
+ background-color: #dfb200;
+}
+
+/* General Element */
+.bg-yellow-crusta {
+ border-color: #f3c200 !important;
+ background-image: none !important;
+ background-color: #f3c200 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-crusta {
+ color: #f3c200 !important;
+}
+
+/***
+Yellow Lemon
+***/
+/* Button */
+.yellow-lemon.btn {
+ color: #FFFFFF;
+ background-color: #F7CA18;
+ border-color: "";
+}
+
+.yellow-lemon.btn:hover, .yellow-lemon.btn:focus, .yellow-lemon.btn:active, .yellow-lemon.btn.active {
+ color: #FFFFFF;
+ background-color: #e3b708;
+}
+
+.open .yellow-lemon.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #e3b708;
+}
+
+.yellow-lemon.btn:active, .yellow-lemon.btn.active {
+ background-image: none;
+ background-color: #cba307;
+}
+
+.yellow-lemon.btn:active:hover, .yellow-lemon.btn.active:hover {
+ background-color: #d5ab07;
+}
+
+.open .yellow-lemon.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-lemon.btn.disabled, .yellow-lemon.btn.disabled:hover, .yellow-lemon.btn.disabled:focus, .yellow-lemon.btn.disabled:active, .yellow-lemon.btn.disabled.active, .yellow-lemon.btn[disabled], .yellow-lemon.btn[disabled]:hover, .yellow-lemon.btn[disabled]:focus, .yellow-lemon.btn[disabled]:active, .yellow-lemon.btn[disabled].active, fieldset[disabled] .yellow-lemon.btn, fieldset[disabled] .yellow-lemon.btn:hover, fieldset[disabled] .yellow-lemon.btn:focus, fieldset[disabled] .yellow-lemon.btn:active, fieldset[disabled] .yellow-lemon.btn.active {
+ background-color: #F7CA18;
+}
+
+.yellow-lemon.btn .badge {
+ color: #F7CA18;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-lemon-stripe {
+ border-left: 3px solid #F7CA18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-lemon,
+.portlet.yellow-lemon {
+ background-color: #F7CA18;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title,
+.portlet.solid.yellow-lemon > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-lemon {
+ border: 1px solid #f9d549;
+ border-top: 0;
+}
+
+.portlet.box.yellow-lemon > .portlet-title {
+ background-color: #F7CA18;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fbe384;
+ color: #fce99d;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i {
+ color: #fcecac;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fceeb6;
+ color: #fdf4ce;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-lemon {
+ background-color: #F7CA18;
+}
+
+.dashboard-stat.yellow-lemon.dashboard-stat-light:hover {
+ background-color: #f2c308;
+}
+
+.dashboard-stat.yellow-lemon .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-lemon .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-lemon .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-lemon .more {
+ color: #FFFFFF;
+ background-color: #f2c308;
+}
+
+/* General Element */
+.bg-yellow-lemon {
+ border-color: #F7CA18 !important;
+ background-image: none !important;
+ background-color: #F7CA18 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-lemon {
+ color: #F7CA18 !important;
+}
+
+/***
+Yellow Saffron
+***/
+/* Button */
+.yellow-saffron.btn {
+ color: #FFFFFF;
+ background-color: #F4D03F;
+ border-color: "";
+}
+
+.yellow-saffron.btn:hover, .yellow-saffron.btn:focus, .yellow-saffron.btn:active, .yellow-saffron.btn.active {
+ color: #FFFFFF;
+ background-color: #f2c81d;
+}
+
+.open .yellow-saffron.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #f2c81d;
+}
+
+.yellow-saffron.btn:active, .yellow-saffron.btn.active {
+ background-image: none;
+ background-color: #e8bd0d;
+}
+
+.yellow-saffron.btn:active:hover, .yellow-saffron.btn.active:hover {
+ background-color: #f1c40f;
+}
+
+.open .yellow-saffron.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-saffron.btn.disabled, .yellow-saffron.btn.disabled:hover, .yellow-saffron.btn.disabled:focus, .yellow-saffron.btn.disabled:active, .yellow-saffron.btn.disabled.active, .yellow-saffron.btn[disabled], .yellow-saffron.btn[disabled]:hover, .yellow-saffron.btn[disabled]:focus, .yellow-saffron.btn[disabled]:active, .yellow-saffron.btn[disabled].active, fieldset[disabled] .yellow-saffron.btn, fieldset[disabled] .yellow-saffron.btn:hover, fieldset[disabled] .yellow-saffron.btn:focus, fieldset[disabled] .yellow-saffron.btn:active, fieldset[disabled] .yellow-saffron.btn.active {
+ background-color: #F4D03F;
+}
+
+.yellow-saffron.btn .badge {
+ color: #F4D03F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-saffron-stripe {
+ border-left: 3px solid #F4D03F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-saffron,
+.portlet.yellow-saffron {
+ background-color: #F4D03F;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title,
+.portlet.solid.yellow-saffron > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-saffron {
+ border: 1px solid #f7dc6f;
+ border-top: 0;
+}
+
+.portlet.box.yellow-saffron > .portlet-title {
+ background-color: #F4D03F;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #faeaa9;
+ color: #fbf0c1;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i {
+ color: #fcf3d0;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdf6d9;
+ color: #fefcf1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-saffron {
+ background-color: #F4D03F;
+}
+
+.dashboard-stat.yellow-saffron.dashboard-stat-light:hover {
+ background-color: #f3cb2c;
+}
+
+.dashboard-stat.yellow-saffron .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-saffron .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-saffron .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-saffron .more {
+ color: #FFFFFF;
+ background-color: #f3cb2c;
+}
+
+/* General Element */
+.bg-yellow-saffron {
+ border-color: #F4D03F !important;
+ background-image: none !important;
+ background-color: #F4D03F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-saffron {
+ color: #F4D03F !important;
+}
+
+/***********
+Purple Colors
+************/
+/***
+Purple Default
+***/
+/* Button */
+.purple.btn {
+ color: #FFFFFF;
+ background-color: #8E44AD;
+ border-color: "";
+}
+
+.purple.btn:hover, .purple.btn:focus, .purple.btn:active, .purple.btn.active {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.open .purple.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.purple.btn:active, .purple.btn.active {
+ background-image: none;
+ background-color: #6a3381;
+}
+
+.purple.btn:active:hover, .purple.btn.active:hover {
+ background-color: #703688;
+}
+
+.open .purple.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple.btn.disabled, .purple.btn.disabled:hover, .purple.btn.disabled:focus, .purple.btn.disabled:active, .purple.btn.disabled.active, .purple.btn[disabled], .purple.btn[disabled]:hover, .purple.btn[disabled]:focus, .purple.btn[disabled]:active, .purple.btn[disabled].active, fieldset[disabled] .purple.btn, fieldset[disabled] .purple.btn:hover, fieldset[disabled] .purple.btn:focus, fieldset[disabled] .purple.btn:active, fieldset[disabled] .purple.btn.active {
+ background-color: #8E44AD;
+}
+
+.purple.btn .badge {
+ color: #8E44AD;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-stripe {
+ border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple,
+.portlet.purple {
+ background-color: #8E44AD;
+}
+
+.portlet.solid.purple > .portlet-title,
+.portlet.solid.purple > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple {
+ border: 1px solid #a563c1;
+ border-top: 0;
+}
+
+.portlet.box.purple > .portlet-title {
+ background-color: #8E44AD;
+}
+
+.portlet.box.purple > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #bf8ed3;
+ color: #c9a1da;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default > i {
+ color: #cfacde;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #d4b3e1;
+ color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple {
+ background-color: #8E44AD;
+}
+
+.dashboard-stat.purple.dashboard-stat-light:hover {
+ background-color: #823e9e;
+}
+
+.dashboard-stat.purple .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple .more {
+ color: #FFFFFF;
+ background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple {
+ border-color: #8E44AD !important;
+ background-image: none !important;
+ background-color: #8E44AD !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple {
+ color: #8E44AD !important;
+}
+
+/***
+Purple Plum
+***/
+/* Button */
+.purple-plum.btn {
+ color: #FFFFFF;
+ background-color: #8775a7;
+ border-color: "";
+}
+
+.purple-plum.btn:hover, .purple-plum.btn:focus, .purple-plum.btn:active, .purple-plum.btn.active {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.open .purple-plum.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.purple-plum.btn:active, .purple-plum.btn.active {
+ background-image: none;
+ background-color: #685788;
+}
+
+.purple-plum.btn:active:hover, .purple-plum.btn.active:hover {
+ background-color: #6d5b8e;
+}
+
+.open .purple-plum.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-plum.btn.disabled, .purple-plum.btn.disabled:hover, .purple-plum.btn.disabled:focus, .purple-plum.btn.disabled:active, .purple-plum.btn.disabled.active, .purple-plum.btn[disabled], .purple-plum.btn[disabled]:hover, .purple-plum.btn[disabled]:focus, .purple-plum.btn[disabled]:active, .purple-plum.btn[disabled].active, fieldset[disabled] .purple-plum.btn, fieldset[disabled] .purple-plum.btn:hover, fieldset[disabled] .purple-plum.btn:focus, fieldset[disabled] .purple-plum.btn:active, fieldset[disabled] .purple-plum.btn.active {
+ background-color: #8775a7;
+}
+
+.purple-plum.btn .badge {
+ color: #8775a7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-plum-stripe {
+ border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-plum,
+.portlet.purple-plum {
+ background-color: #8775a7;
+}
+
+.portlet.solid.purple-plum > .portlet-title,
+.portlet.solid.purple-plum > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-plum > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-plum {
+ border: 1px solid #a294bb;
+ border-top: 0;
+}
+
+.portlet.box.purple-plum > .portlet-title {
+ background-color: #8775a7;
+}
+
+.portlet.box.purple-plum > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-plum > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c3bad3;
+ color: #d0c9dd;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default > i {
+ color: #d8d2e3;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ded9e7;
+ color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-plum {
+ background-color: #8775a7;
+}
+
+.dashboard-stat.purple-plum.dashboard-stat-light:hover {
+ background-color: #7c699f;
+}
+
+.dashboard-stat.purple-plum .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-plum .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-plum .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-plum .more {
+ color: #FFFFFF;
+ background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-plum {
+ border-color: #8775a7 !important;
+ background-image: none !important;
+ background-color: #8775a7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-plum {
+ color: #8775a7 !important;
+}
+
+/***
+Purple Medium
+***/
+/* Button */
+.purple-medium.btn {
+ color: #FFFFFF;
+ background-color: #BF55EC;
+ border-color: "";
+}
+
+.purple-medium.btn:hover, .purple-medium.btn:focus, .purple-medium.btn:active, .purple-medium.btn.active {
+ color: #FFFFFF;
+ background-color: #b335e8;
+}
+
+.open .purple-medium.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #b335e8;
+}
+
+.purple-medium.btn:active, .purple-medium.btn.active {
+ background-image: none;
+ background-color: #aa1ee6;
+}
+
+.purple-medium.btn:active:hover, .purple-medium.btn.active:hover {
+ background-color: #ae27e7;
+}
+
+.open .purple-medium.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-medium.btn.disabled, .purple-medium.btn.disabled:hover, .purple-medium.btn.disabled:focus, .purple-medium.btn.disabled:active, .purple-medium.btn.disabled.active, .purple-medium.btn[disabled], .purple-medium.btn[disabled]:hover, .purple-medium.btn[disabled]:focus, .purple-medium.btn[disabled]:active, .purple-medium.btn[disabled].active, fieldset[disabled] .purple-medium.btn, fieldset[disabled] .purple-medium.btn:hover, fieldset[disabled] .purple-medium.btn:focus, fieldset[disabled] .purple-medium.btn:active, fieldset[disabled] .purple-medium.btn.active {
+ background-color: #BF55EC;
+}
+
+.purple-medium.btn .badge {
+ color: #BF55EC;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-medium-stripe {
+ border-left: 3px solid #BF55EC;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-medium,
+.portlet.purple-medium {
+ background-color: #BF55EC;
+}
+
+.portlet.solid.purple-medium > .portlet-title,
+.portlet.solid.purple-medium > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-medium > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-medium {
+ border: 1px solid #d083f1;
+ border-top: 0;
+}
+
+.portlet.box.purple-medium > .portlet-title {
+ background-color: #BF55EC;
+}
+
+.portlet.box.purple-medium > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-medium > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #e5baf7;
+ color: #eed1fa;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default > i {
+ color: #f3dffb;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f6e8fc;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-medium {
+ background-color: #BF55EC;
+}
+
+.dashboard-stat.purple-medium.dashboard-stat-light:hover {
+ background-color: #b843ea;
+}
+
+.dashboard-stat.purple-medium .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-medium .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-medium .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-medium .more {
+ color: #FFFFFF;
+ background-color: #b843ea;
+}
+
+/* General Element */
+.bg-purple-medium {
+ border-color: #BF55EC !important;
+ background-image: none !important;
+ background-color: #BF55EC !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-medium {
+ color: #BF55EC !important;
+}
+
+/***
+Purple Studio
+***/
+/* Button */
+.purple-studio.btn {
+ color: #FFFFFF;
+ background-color: #8E44AD;
+ border-color: "";
+}
+
+.purple-studio.btn:hover, .purple-studio.btn:focus, .purple-studio.btn:active, .purple-studio.btn.active {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.open .purple-studio.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.purple-studio.btn:active, .purple-studio.btn.active {
+ background-image: none;
+ background-color: #6a3381;
+}
+
+.purple-studio.btn:active:hover, .purple-studio.btn.active:hover {
+ background-color: #703688;
+}
+
+.open .purple-studio.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-studio.btn.disabled, .purple-studio.btn.disabled:hover, .purple-studio.btn.disabled:focus, .purple-studio.btn.disabled:active, .purple-studio.btn.disabled.active, .purple-studio.btn[disabled], .purple-studio.btn[disabled]:hover, .purple-studio.btn[disabled]:focus, .purple-studio.btn[disabled]:active, .purple-studio.btn[disabled].active, fieldset[disabled] .purple-studio.btn, fieldset[disabled] .purple-studio.btn:hover, fieldset[disabled] .purple-studio.btn:focus, fieldset[disabled] .purple-studio.btn:active, fieldset[disabled] .purple-studio.btn.active {
+ background-color: #8E44AD;
+}
+
+.purple-studio.btn .badge {
+ color: #8E44AD;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-studio-stripe {
+ border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-studio,
+.portlet.purple-studio {
+ background-color: #8E44AD;
+}
+
+.portlet.solid.purple-studio > .portlet-title,
+.portlet.solid.purple-studio > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-studio > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-studio {
+ border: 1px solid #a563c1;
+ border-top: 0;
+}
+
+.portlet.box.purple-studio > .portlet-title {
+ background-color: #8E44AD;
+}
+
+.portlet.box.purple-studio > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-studio > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #bf8ed3;
+ color: #c9a1da;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default > i {
+ color: #cfacde;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #d4b3e1;
+ color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-studio {
+ background-color: #8E44AD;
+}
+
+.dashboard-stat.purple-studio.dashboard-stat-light:hover {
+ background-color: #823e9e;
+}
+
+.dashboard-stat.purple-studio .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-studio .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-studio .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-studio .more {
+ color: #FFFFFF;
+ background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple-studio {
+ border-color: #8E44AD !important;
+ background-image: none !important;
+ background-color: #8E44AD !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-studio {
+ color: #8E44AD !important;
+}
+
+/***
+Purple Wisteria
+***/
+/* Button */
+.purple-wisteria.btn {
+ color: #FFFFFF;
+ background-color: #9B59B6;
+ border-color: "";
+}
+
+.purple-wisteria.btn:hover, .purple-wisteria.btn:focus, .purple-wisteria.btn:active, .purple-wisteria.btn.active {
+ color: #FFFFFF;
+ background-color: #8948a3;
+}
+
+.open .purple-wisteria.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #8948a3;
+}
+
+.purple-wisteria.btn:active, .purple-wisteria.btn.active {
+ background-image: none;
+ background-color: #7a4092;
+}
+
+.purple-wisteria.btn:active:hover, .purple-wisteria.btn.active:hover {
+ background-color: #804399;
+}
+
+.open .purple-wisteria.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-wisteria.btn.disabled, .purple-wisteria.btn.disabled:hover, .purple-wisteria.btn.disabled:focus, .purple-wisteria.btn.disabled:active, .purple-wisteria.btn.disabled.active, .purple-wisteria.btn[disabled], .purple-wisteria.btn[disabled]:hover, .purple-wisteria.btn[disabled]:focus, .purple-wisteria.btn[disabled]:active, .purple-wisteria.btn[disabled].active, fieldset[disabled] .purple-wisteria.btn, fieldset[disabled] .purple-wisteria.btn:hover, fieldset[disabled] .purple-wisteria.btn:focus, fieldset[disabled] .purple-wisteria.btn:active, fieldset[disabled] .purple-wisteria.btn.active {
+ background-color: #9B59B6;
+}
+
+.purple-wisteria.btn .badge {
+ color: #9B59B6;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-wisteria-stripe {
+ border-left: 3px solid #9B59B6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-wisteria,
+.portlet.purple-wisteria {
+ background-color: #9B59B6;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title,
+.portlet.solid.purple-wisteria > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-wisteria {
+ border: 1px solid #b07cc6;
+ border-top: 0;
+}
+
+.portlet.box.purple-wisteria > .portlet-title {
+ background-color: #9B59B6;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #caa7d8;
+ color: #d5b9e0;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i {
+ color: #dbc3e5;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dfcae8;
+ color: #eadcf0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-wisteria {
+ background-color: #9B59B6;
+}
+
+.dashboard-stat.purple-wisteria.dashboard-stat-light:hover {
+ background-color: #924dae;
+}
+
+.dashboard-stat.purple-wisteria .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-wisteria .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-wisteria .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-wisteria .more {
+ color: #FFFFFF;
+ background-color: #924dae;
+}
+
+/* General Element */
+.bg-purple-wisteria {
+ border-color: #9B59B6 !important;
+ background-image: none !important;
+ background-color: #9B59B6 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-wisteria {
+ color: #9B59B6 !important;
+}
+
+/***
+Purple Seance
+***/
+/* Button */
+.purple-seance.btn {
+ color: #FFFFFF;
+ background-color: #9A12B3;
+ border-color: "";
+}
+
+.purple-seance.btn:hover, .purple-seance.btn:focus, .purple-seance.btn:active, .purple-seance.btn.active {
+ color: #FFFFFF;
+ background-color: #7e0f93;
+}
+
+.open .purple-seance.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #7e0f93;
+}
+
+.purple-seance.btn:active, .purple-seance.btn.active {
+ background-image: none;
+ background-color: #6a0c7b;
+}
+
+.purple-seance.btn:active:hover, .purple-seance.btn.active:hover {
+ background-color: #720d85;
+}
+
+.open .purple-seance.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-seance.btn.disabled, .purple-seance.btn.disabled:hover, .purple-seance.btn.disabled:focus, .purple-seance.btn.disabled:active, .purple-seance.btn.disabled.active, .purple-seance.btn[disabled], .purple-seance.btn[disabled]:hover, .purple-seance.btn[disabled]:focus, .purple-seance.btn[disabled]:active, .purple-seance.btn[disabled].active, fieldset[disabled] .purple-seance.btn, fieldset[disabled] .purple-seance.btn:hover, fieldset[disabled] .purple-seance.btn:focus, fieldset[disabled] .purple-seance.btn:active, fieldset[disabled] .purple-seance.btn.active {
+ background-color: #9A12B3;
+}
+
+.purple-seance.btn .badge {
+ color: #9A12B3;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-seance-stripe {
+ border-left: 3px solid #9A12B3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-seance,
+.portlet.purple-seance {
+ background-color: #9A12B3;
+}
+
+.portlet.solid.purple-seance > .portlet-title,
+.portlet.solid.purple-seance > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-seance > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-seance {
+ border: 1px solid #c217e1;
+ border-top: 0;
+}
+
+.portlet.box.purple-seance > .portlet-title {
+ background-color: #9A12B3;
+}
+
+.portlet.box.purple-seance > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-seance > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #d349ed;
+ color: #d960ef;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default > i {
+ color: #dc6ef0;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #de77f1;
+ color: #e48ef4;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-seance {
+ background-color: #9A12B3;
+}
+
+.dashboard-stat.purple-seance.dashboard-stat-light:hover {
+ background-color: #8a10a0;
+}
+
+.dashboard-stat.purple-seance .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-seance .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-seance .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-seance .more {
+ color: #FFFFFF;
+ background-color: #8a10a0;
+}
+
+/* General Element */
+.bg-purple-seance {
+ border-color: #9A12B3 !important;
+ background-image: none !important;
+ background-color: #9A12B3 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-seance {
+ color: #9A12B3 !important;
+}
+
+/***
+Purple Intense
+***/
+/* Button */
+.purple-intense.btn {
+ color: #FFFFFF;
+ background-color: #8775a7;
+ border-color: "";
+}
+
+.purple-intense.btn:hover, .purple-intense.btn:focus, .purple-intense.btn:active, .purple-intense.btn.active {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.open .purple-intense.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.purple-intense.btn:active, .purple-intense.btn.active {
+ background-image: none;
+ background-color: #685788;
+}
+
+.purple-intense.btn:active:hover, .purple-intense.btn.active:hover {
+ background-color: #6d5b8e;
+}
+
+.open .purple-intense.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-intense.btn.disabled, .purple-intense.btn.disabled:hover, .purple-intense.btn.disabled:focus, .purple-intense.btn.disabled:active, .purple-intense.btn.disabled.active, .purple-intense.btn[disabled], .purple-intense.btn[disabled]:hover, .purple-intense.btn[disabled]:focus, .purple-intense.btn[disabled]:active, .purple-intense.btn[disabled].active, fieldset[disabled] .purple-intense.btn, fieldset[disabled] .purple-intense.btn:hover, fieldset[disabled] .purple-intense.btn:focus, fieldset[disabled] .purple-intense.btn:active, fieldset[disabled] .purple-intense.btn.active {
+ background-color: #8775a7;
+}
+
+.purple-intense.btn .badge {
+ color: #8775a7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-intense-stripe {
+ border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-intense,
+.portlet.purple-intense {
+ background-color: #8775a7;
+}
+
+.portlet.solid.purple-intense > .portlet-title,
+.portlet.solid.purple-intense > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-intense {
+ border: 1px solid #a294bb;
+ border-top: 0;
+}
+
+.portlet.box.purple-intense > .portlet-title {
+ background-color: #8775a7;
+}
+
+.portlet.box.purple-intense > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c3bad3;
+ color: #d0c9dd;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default > i {
+ color: #d8d2e3;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ded9e7;
+ color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-intense {
+ background-color: #8775a7;
+}
+
+.dashboard-stat.purple-intense.dashboard-stat-light:hover {
+ background-color: #7c699f;
+}
+
+.dashboard-stat.purple-intense .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-intense .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-intense .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-intense .more {
+ color: #FFFFFF;
+ background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-intense {
+ border-color: #8775a7 !important;
+ background-image: none !important;
+ background-color: #8775a7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-intense {
+ color: #8775a7 !important;
+}
+
+/***
+Purple Sharp
+***/
+/* Button */
+.purple-sharp.btn {
+ color: #FFFFFF;
+ background-color: #796799;
+ border-color: "";
+}
+
+.purple-sharp.btn:hover, .purple-sharp.btn:focus, .purple-sharp.btn:active, .purple-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #685884;
+}
+
+.open .purple-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #685884;
+}
+
+.purple-sharp.btn:active, .purple-sharp.btn.active {
+ background-image: none;
+ background-color: #5c4e75;
+}
+
+.purple-sharp.btn:active:hover, .purple-sharp.btn.active:hover {
+ background-color: #61527b;
+}
+
+.open .purple-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-sharp.btn.disabled, .purple-sharp.btn.disabled:hover, .purple-sharp.btn.disabled:focus, .purple-sharp.btn.disabled:active, .purple-sharp.btn.disabled.active, .purple-sharp.btn[disabled], .purple-sharp.btn[disabled]:hover, .purple-sharp.btn[disabled]:focus, .purple-sharp.btn[disabled]:active, .purple-sharp.btn[disabled].active, fieldset[disabled] .purple-sharp.btn, fieldset[disabled] .purple-sharp.btn:hover, fieldset[disabled] .purple-sharp.btn:focus, fieldset[disabled] .purple-sharp.btn:active, fieldset[disabled] .purple-sharp.btn.active {
+ background-color: #796799;
+}
+
+.purple-sharp.btn .badge {
+ color: #796799;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-sharp-stripe {
+ border-left: 3px solid #796799;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-sharp,
+.portlet.purple-sharp {
+ background-color: #796799;
+}
+
+.portlet.solid.purple-sharp > .portlet-title,
+.portlet.solid.purple-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-sharp {
+ border: 1px solid #9486ad;
+ border-top: 0;
+}
+
+.portlet.box.purple-sharp > .portlet-title {
+ background-color: #796799;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b4aac6;
+ color: #c2b9d0;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i {
+ color: #cac3d6;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cfc9db;
+ color: #ddd8e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-sharp {
+ background-color: #796799;
+}
+
+.dashboard-stat.purple-sharp.dashboard-stat-light:hover {
+ background-color: #6f5f8d;
+}
+
+.dashboard-stat.purple-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-sharp .more {
+ color: #FFFFFF;
+ background-color: #6f5f8d;
+}
+
+/* General Element */
+.bg-purple-sharp {
+ border-color: #796799 !important;
+ background-image: none !important;
+ background-color: #796799 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-sharp {
+ color: #796799 !important;
+}
+
+/***
+Purple Soft
+***/
+/* Button */
+.purple-soft.btn {
+ color: #FFFFFF;
+ background-color: #8877a9;
+ border-color: "";
+}
+
+.purple-soft.btn:hover, .purple-soft.btn:focus, .purple-soft.btn:active, .purple-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #75629b;
+}
+
+.open .purple-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #75629b;
+}
+
+.purple-soft.btn:active, .purple-soft.btn.active {
+ background-image: none;
+ background-color: #69588b;
+}
+
+.purple-soft.btn:active:hover, .purple-soft.btn.active:hover {
+ background-color: #6e5c91;
+}
+
+.open .purple-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-soft.btn.disabled, .purple-soft.btn.disabled:hover, .purple-soft.btn.disabled:focus, .purple-soft.btn.disabled:active, .purple-soft.btn.disabled.active, .purple-soft.btn[disabled], .purple-soft.btn[disabled]:hover, .purple-soft.btn[disabled]:focus, .purple-soft.btn[disabled]:active, .purple-soft.btn[disabled].active, fieldset[disabled] .purple-soft.btn, fieldset[disabled] .purple-soft.btn:hover, fieldset[disabled] .purple-soft.btn:focus, fieldset[disabled] .purple-soft.btn:active, fieldset[disabled] .purple-soft.btn.active {
+ background-color: #8877a9;
+}
+
+.purple-soft.btn .badge {
+ color: #8877a9;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-soft-stripe {
+ border-left: 3px solid #8877a9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-soft,
+.portlet.purple-soft {
+ background-color: #8877a9;
+}
+
+.portlet.solid.purple-soft > .portlet-title,
+.portlet.solid.purple-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-soft {
+ border: 1px solid #a396bd;
+ border-top: 0;
+}
+
+.portlet.box.purple-soft > .portlet-title {
+ background-color: #8877a9;
+}
+
+.portlet.box.purple-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c4bcd4;
+ color: #d2cbde;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default > i {
+ color: #dad5e4;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dfdbe8;
+ color: #edebf2;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-soft {
+ background-color: #8877a9;
+}
+
+.dashboard-stat.purple-soft.dashboard-stat-light:hover {
+ background-color: #7d6ba1;
+}
+
+.dashboard-stat.purple-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-soft .more {
+ color: #FFFFFF;
+ background-color: #7d6ba1;
+}
+
+/* General Element */
+.bg-purple-soft {
+ border-color: #8877a9 !important;
+ background-image: none !important;
+ background-color: #8877a9 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-soft {
+ color: #8877a9 !important;
+}
+
+/***
+Transparent Button
+***/
+.btn-transparent.btn {
+ background: transparent;
+ color: #888;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/facebox.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/facebox.css
new file mode 100644
index 00000000..a86199c8
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/facebox.css
@@ -0,0 +1,83 @@
+#facebox {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 100;
+ text-align: left;
+}
+
+#facebox .popup {
+ position: relative;
+ border: 3px solid rgba(0, 0, 0, 0);
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+}
+
+#facebox .content {
+ /*display:table;*/
+ width: 580px;
+ height: 500px;
+ padding: 10px;
+ background: #fff;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+#facebox .content > p:first-child {
+ margin-top: 0;
+}
+
+#facebox .content > p:last-child {
+ margin-bottom: 0;
+}
+
+#facebox .close {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ padding: 2px;
+ background: #fff;
+}
+
+#facebox .close img {
+ opacity: 0.3;
+}
+
+#facebox .close:hover img {
+ opacity: 1.0;
+}
+
+#facebox .loading {
+ text-align: center;
+}
+
+#facebox .image {
+ text-align: center;
+}
+
+#facebox img {
+ border: 0;
+ margin: 0;
+}
+
+#facebox_overlay {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ height: 100%;
+ width: 100%;
+}
+
+.facebox_hide {
+ z-index: -100;
+}
+
+.facebox_overlayBG {
+ background-color: #000;
+ z-index: 99;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/ict-chart-dashboard.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/ict-chart-dashboard.css
new file mode 100644
index 00000000..56f014d4
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/ict-chart-dashboard.css
@@ -0,0 +1,143 @@
+.flot-placeholder {
+ margin-left: 2%;
+ margin-top: 2%;
+ margin-bottom: 2%;
+ width: 100%;
+ height: 93%;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-high {
+ margin-left: 2%;
+ margin-top: 2%;
+ margin-bottom: 2%;
+ width: 100%;
+ height: 93%;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-expand {
+ /*margin-left:2%;
+ margin-top:2%;*/
+ margin: 1%;
+ width: 98%;
+ height: 480px;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-wrapper-portlet {
+ padding-top: 1%;
+ margin-left: 0%;
+ margin-top: 10%;
+ width: 98%;
+ height: 220px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-portlet-wide {
+ padding-top: 0.5%;
+ margin-left: 0%;
+ margin-top: 2%;
+ width: 98%;
+ height: 220px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 0px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-1 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 200px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-2 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 400px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-3 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 300px;
+ top: 0px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.contentWrapper {
+ width: 100%;
+ height: 100%;
+ float: left;
+ /*overflow-y: hidden;*/
+ overflow: hidden;
+ padding-right: 10px;
+}
+
+.plotsWrapper {
+ /*position:fixed;*/
+ /*overflow:auto;*/
+ margin: 10px;
+ margin-left: 182px;
+ /*background:white;*/
+ padding-left: 10px;
+}
+
+.stackControlButtons {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 300px;
+ top: 200px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.stackControlButtons-portlet {
+ margin-left: 2%;
+ margin-top: 2%;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.contentWide {
+ width: 980px !important;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/transition.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/transition.css
new file mode 100644
index 00000000..6877bc08
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/css/transition.css
@@ -0,0 +1,63 @@
+#cf5 {
+ position: relative;
+ height: 32px;
+ width: 32px;
+ margin: 5px;
+ margin-bottom: 0px;
+ cursor: pointer;
+ display: inline-block;
+}
+
+#cf5 img {
+ position: absolute;
+ left: 0;
+ -webkit-transition: all 1s ease-in-out;
+ -moz-transition: all 1s ease-in-out;
+ -o-transition: all 1s ease-in-out;
+ transition: all 1s ease-in-out;
+}
+
+#cf5 img.top {
+ -webkit-transform: scale(1, 0);
+ -moz-transform: scale(1, 0);
+ -o-transform: scale(1, 0);
+ transform: scale(1, 0);
+ filter: alpha(opacity=0);
+ opacity: 0;
+
+}
+
+/*
+#cf5:hover img.top, #cf5.hover_effect img.top {
+opacity:1;
+-webkit-transform:scale(1,1);
+-moz-transform:scale(1,1);
+-o-transform:scale(1,1);
+transform:scale(1,1);
+}
+*/
+#cf5 img.scale {
+ opacity: 1;
+ -webkit-transform: scale(1, 1);
+ -moz-transform: scale(1, 1);
+ -o-transform: scale(1, 1);
+ transform: scale(1, 1);
+}
+
+/*
+#cf5:hover img.bottom, #cf5.hover_effect img.bottom {
+filter: alpha(opacity=0);
+-webkit-transform:rotate(360deg) scale(0,0);
+-moz-transform:rotate(360deg) scale(0,0);
+-o-transform:rotate(360deg) scale(0,0);
+transform:rotate(360deg) scale(0,0);
+}
+*/
+#cf5 img.rotate {
+ filter: alpha(opacity=0);
+ -webkit-transform: rotate(360deg) scale(0, 0);
+ -moz-transform: rotate(360deg) scale(0, 0);
+ -o-transform: rotate(360deg) scale(0, 0);
+ transform: rotate(360deg) scale(0, 0);
+}
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.js
new file mode 100644
index 00000000..6f2fd359
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.js
@@ -0,0 +1,544 @@
+/*! c3-angular - v0.1.0 - 2015-01-01
+ * https://github.com/jettro/c3-angular-sample
+ * Copyright (c) 2015 ; Licensed */
+angular.module('gridshore.c3js.chart', [])
+ .controller('ChartController', ['$scope', function ($scope) {
+ $scope.chart = null;
+ $scope.columns = [];
+ $scope.types = {};
+ $scope.axis = {};
+ $scope.axes = {};
+ $scope.xValues = null;
+ $scope.xTick = null;
+ $scope.names = null;
+ $scope.colors = null;
+ $scope.grid = null;
+ $scope.legend = null;
+ $scope.tooltip = null;
+ $scope.chartSize = null;
+ $scope.colors = null;
+ $scope.jsonKeys = null;
+
+ this.showGraph = function () {
+ var config = {};
+ config.bindto = "#" + $scope.bindto;
+ config.data = {};
+
+ if ($scope.xValues) {
+ config.data.x = $scope.xValues;
+ }
+ if ($scope.columns) {
+ config.data.columns = $scope.columns;
+ }
+ config.data.types = $scope.types;
+ config.data.axes = $scope.axes;
+ if ($scope.names) {
+ config.data.names = $scope.names;
+ }
+ if ($scope.colors) {
+ config.data.colors = $scope.colors;
+ }
+ if ($scope.showLabels && $scope.showLabels === "true") {
+ config.data.labels = true;
+ }
+ if ($scope.showSubchart && $scope.showSubchart === "true") {
+ config.subchart = {"show": true};
+ }
+ if ($scope.enableZoom && $scope.enableZoom === "true") {
+ config.zoom = {"enabled": true};
+ }
+ config.axis = $scope.axis;
+ if ($scope.xTick) {
+ config.axis.x.tick = $scope.xTick;
+ }
+ if ($scope.grid != null) {
+ config.grid = $scope.grid;
+ }
+ if ($scope.legend != null) {
+ config.legend = $scope.legend;
+ }
+ if ($scope.tooltip != null) {
+ config.tooltip = $scope.tooltip;
+ }
+ if ($scope.chartSize != null) {
+ config.size = $scope.chartSize;
+ }
+ if ($scope.colors != null) {
+ config.color = {"pattern": $scope.colors};
+ }
+
+ $scope.config = config;
+
+ if ($scope.chartData && $scope.chartColumns) {
+ $scope.$watchCollection('chartData', function () {
+ loadChartData();
+ });
+ } else {
+ $scope.chart = c3.generate($scope.config);
+ }
+ };
+
+ this.addColumn = function (column, columnType, columnName, columnColor) {
+ $scope.columns.push(column);
+ addColumnProperties(column[0], columnType, columnName, columnColor);
+ };
+
+ this.addYAxis = function (yAxis) {
+ $scope.axes = yAxis;
+ if (!$scope.axis.y2) {
+ $scope.axis.y2 = {"show": true};
+ }
+ };
+
+ this.addXAxisValues = function (xValues) {
+ $scope.xValues = xValues;
+ };
+
+ this.addAxisProperties = function (id, axis) {
+ $scope.axis[id] = axis;
+ };
+
+ this.addXTick = function (tick) {
+ $scope.xTick = tick;
+ };
+
+ this.rotateAxis = function () {
+ $scope.axis.rotated = true;
+ };
+
+ this.addGrid = function (axis) {
+ if ($scope.grid == null) {
+ $scope.grid = {};
+ }
+ if ($scope.grid[axis] == null) {
+ $scope.grid[axis] = {};
+ }
+ $scope.grid[axis].show = true;
+ };
+
+ this.addGridLine = function (axis, value, text) {
+ if ($scope.grid == null) {
+ $scope.grid = {};
+ }
+ if (axis === "x") {
+ if ($scope.grid.x === undefined) {
+ $scope.grid.x = {};
+ }
+ if ($scope.grid.x.lines === undefined) {
+ $scope.grid.x.lines = [];
+ }
+ } else {
+ if ($scope.grid.y === undefined) {
+ $scope.grid.y = {};
+ }
+ if ($scope.grid.y.lines === undefined) {
+ $scope.grid.y.lines = [];
+ }
+
+ }
+ if (axis === "y2") {
+ $scope.grid.y.lines.push({"value": value, "text": text, "axis": "y2"});
+ } else {
+ $scope.grid[axis].lines.push({"value": value, "text": text});
+ }
+ };
+
+ this.addLegend = function (legend) {
+ $scope.legend = legend;
+ };
+
+ this.addTooltip = function (tooltip) {
+ $scope.tooltip = tooltip;
+ };
+
+ this.addSize = function (chartSize) {
+ $scope.chartSize = chartSize;
+ };
+
+ this.addColors = function (colors) {
+ $scope.colors = colors;
+ };
+
+ function addColumnProperties(id, columnType, columnName, columnColor) {
+ if (columnType !== undefined) {
+ $scope.types[id] = columnType;
+ }
+ if (columnName !== undefined) {
+ if ($scope.names === null) {
+ $scope.names = {};
+ }
+ $scope.names[id] = columnName;
+ }
+ if (columnColor !== undefined) {
+ if ($scope.colors === null) {
+ $scope.colors = {};
+ }
+ $scope.colors[id] = columnColor;
+ }
+ }
+
+ function loadChartData() {
+ $scope.jsonKeys = {};
+ $scope.jsonKeys.value = [];
+ angular.forEach($scope.chartColumns, function (column) {
+ $scope.jsonKeys.value.push(column.id);
+ addColumnProperties(column.id, column.type, column.name, column.color);
+ });
+ if ($scope.chartX) {
+ $scope.jsonKeys.x = $scope.chartX.id;
+ }
+ if ($scope.names) {
+ $scope.config.data.names = $scope.names;
+ }
+ if ($scope.colors) {
+ $scope.config.data.colors = $scope.colors;
+ }
+
+ $scope.config.data.keys = $scope.jsonKeys;
+ $scope.config.data.json = $scope.chartData;
+
+ $scope.chart = c3.generate($scope.config);
+
+ // $scope.chart.load(data);
+ }
+ }])
+ .directive('c3chart', ['$timeout', function ($timeout) {
+ var chartLinker = function (scope, element, attrs, chartCtrl) {
+ // Trick to wait for all rendering of the DOM to be finished.
+ $timeout(function () {
+ chartCtrl.showGraph();
+ });
+ };
+
+ return {
+ "restrict": "E",
+ "controller": "ChartController",
+ "scope": {
+ "bindto": "@bindtoId",
+ "showLabels": "@showLabels",
+ "showSubchart": "@showSubchart",
+ "enableZoom": "@enableZoom",
+ "chartData": "=chartData",
+ "chartColumns": "=chartColumns",
+ "chartX": "=chartX"
+ },
+ "template": "<div><div id='{{bindto}}'></div><div ng-transclude></div></div>",
+ "replace": true,
+ "transclude": true,
+ "link": chartLinker
+ };
+ }])
+ .directive('chartColumn', function () {
+ var columnLinker = function (scope, element, attrs, chartCtrl) {
+ var column = attrs.columnValues.split(",");
+ column.unshift(attrs.columnId);
+ chartCtrl.addColumn(column, attrs.columnType, attrs.columnName, attrs.columnColor);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": columnLinker
+ };
+ })
+ .directive('chartAxes', function () {
+ var axesLinker = function (scope, element, attrs, chartCtrl) {
+ var x = attrs.valuesX;
+ if (x) {
+ chartCtrl.addXAxisValues(x);
+ }
+
+ var y = attrs.y;
+ var y2 = attrs.y2;
+ var yAxis = {};
+ if (y2) {
+ var items = y2.split(",");
+ for (var item in items) {
+ yAxis[items[item]] = "y2";
+ }
+ if (y) {
+ var yItems = y.split(",");
+ for (var yItem in yItems) {
+ yAxis[yItems[yItem]] = "y";
+ }
+ }
+ chartCtrl.addYAxis(yAxis);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": axesLinker
+ };
+ })
+ .directive('chartAxis', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var rotate = attrs.axisRotate;
+ if (rotate) {
+ chartCtrl.rotateAxis();
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "transclude": true,
+ "template": "<div ng-transclude></div>",
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartAxisX', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var position = attrs.axisPosition;
+ var label = attrs.axisLabel;
+
+ var axis = {"label": {"text": label, "position": position}};
+
+ var type = attrs.axisType;
+ if (type) {
+ axis.type = type;
+ }
+ // TODO has a strange effect on the graph, need to evaluate
+ var height = attrs.axisHeight;
+ if (height) {
+ axis.height = height;
+ }
+ chartCtrl.addAxisProperties('x', axis);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "transclude": true,
+ "template": "<div ng-transclude></div>",
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartAxisY', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var id = attrs.axisId;
+ var position = attrs.axisPosition;
+ var label = attrs.axisLabel;
+
+ var axis = {"label": {"text": label, "position": position}};
+ if (id === 'y2') {
+ axis.show = true;
+ }
+ var paddingTop = attrs.paddingTop;
+ var paddingBottom = attrs.paddingBottom;
+ if (paddingTop || paddingBottom) {
+ paddingTop = (paddingTop) ? paddingTop : 0;
+ paddingBottom = (paddingBottom) ? paddingBottom : 0;
+ axis.padding = {"top": parseInt(paddingTop), "bottom": parseInt(paddingBottom)};
+ }
+ var rangeMax = attrs.rangeMax;
+ var rangeMin = attrs.rangeMin;
+ if (rangeMax) {
+ axis.max = parseInt(rangeMax);
+ }
+ if (rangeMin) {
+ axis.min = parseInt(rangeMin);
+ }
+
+ chartCtrl.addAxisProperties(id, axis);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartGrid', function () {
+ var gridLinker = function (scope, element, attrs, chartCtrl) {
+ var showX = attrs.showX;
+ if (showX && showX === "true") {
+ chartCtrl.addGrid("x");
+ }
+ var showY = attrs.showY;
+ if (showY && showY === "true") {
+ chartCtrl.addGrid("y");
+ }
+ var showY2 = attrs.showY2;
+ if (showY2 && showY2 === "true") {
+ chartCtrl.addGrid("y2");
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": gridLinker,
+ "transclude": true,
+ "template": "<div ng-transclude></div>"
+ };
+ })
+ .directive('chartGridOptional', function () {
+ var gridLinker = function (scope, element, attrs, chartCtrl) {
+ var axisId = attrs.axisId;
+ var value = attrs.gridValue;
+ var text = attrs.gridText;
+
+ chartCtrl.addGridLine(axisId, value, text);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": gridLinker
+ };
+ })
+ .directive('chartAxisXTick', function () {
+ var tickLinker = function (scope, element, attrs, chartCtrl) {
+ var tick = {};
+
+ var count = attrs.tickCount;
+ if (count) {
+ tick.count = count;
+ }
+
+ // TODO, dit lijkt nog niet echt iets te doen
+ var format = attrs.tickFormat;
+ if (format) {
+ tick.format = format;
+ }
+
+ var culling = attrs.tickCulling;
+ if (culling) {
+ tick.culling = culling;
+ }
+
+ var rotate = attrs.tickRotate;
+ if (rotate) {
+ tick.rotate = rotate;
+ }
+
+ var fit = attrs.tickFit;
+ if (fit) {
+ tick.fit = fit;
+ }
+
+ chartCtrl.addXTick(tick);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": tickLinker
+ };
+
+ })
+ .directive('chartLegend', function () {
+ var legendLinker = function (scope, element, attrs, chartCtrl) {
+ var legend = null;
+ var show = attrs.showLegend;
+ if (show && show === "false") {
+ legend = {"show": false};
+ } else {
+ var position = attrs.legendPosition;
+ if (position) {
+ legend = {"position": position};
+ }
+ }
+
+ if (legend != null) {
+ chartCtrl.addLegend(legend);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": legendLinker
+ };
+
+ })
+ .directive('chartTooltip', function () {
+ var tooltipLinker = function (scope, element, attrs, chartCtrl) {
+ var tooltip = null;
+ var show = attrs.showTooltip;
+ if (show && show === "false") {
+ tooltip = {"show": false};
+ } else {
+ var grouped = attrs.groupTooltip;
+ if (grouped && grouped === "false") {
+ tooltip = {"grouped": false};
+ }
+ }
+
+ if (tooltip != null) {
+ chartCtrl.addTooltip(tooltip);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": tooltipLinker
+ };
+
+ })
+ .directive('chartSize', function () {
+ var sizeLinker = function (scope, element, attrs, chartCtrl) {
+ var chartSize = null;
+ var width = attrs.chartWidth;
+ var height = attrs.chartHeight;
+ if (width || height) {
+ chartSize = {};
+ if (width) {
+ chartSize.width = parseInt(width);
+ }
+ if (height) {
+ chartSize.height = parseInt(height);
+ }
+ chartCtrl.addSize(chartSize);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": sizeLinker
+ };
+
+ })
+ .directive('chartColors', function () {
+ var colorsLinker = function (scope, element, attrs, chartCtrl) {
+ var pattern = attrs.colorPattern;
+ if (pattern) {
+ chartCtrl.addColors(pattern.split(","));
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": colorsLinker
+ };
+
+ }); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js
new file mode 100644
index 00000000..19e7d3ef
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js
@@ -0,0 +1,206 @@
+/*! c3-angular - v0.1.0 - 2015-01-01
+ * https://github.com/jettro/c3-angular-sample
+ * Copyright (c) 2015 ; Licensed */
+
+angular.module("gridshore.c3js.chart", []).controller("ChartController", ["$scope", function (a) {
+ function b(b, c, d, e) {
+ void 0 !== c && (a.types[b] = c), void 0 !== d && (null === a.names && (a.names = {}), a.names[b] = d), void 0 !== e && (null === a.colors && (a.colors = {}), a.colors[b] = e)
+ }
+
+ function c() {
+ a.jsonKeys = {}, a.jsonKeys.value = [], angular.forEach(a.chartColumns, function (c) {
+ a.jsonKeys.value.push(c.id), b(c.id, c.type, c.name, c.color)
+ }), a.chartX && (a.jsonKeys.x = a.chartX.id), a.names && (a.config.data.names = a.names), a.colors && (a.config.data.colors = a.colors), a.config.data.keys = a.jsonKeys, a.config.data.json = a.chartData, a.chart = c3.generate(a.config)
+ }
+
+ a.chart = null, a.columns = [], a.types = {}, a.axis = {}, a.axes = {}, a.xValues = null, a.xTick = null, a.names = null, a.colors = null, a.grid = null, a.legend = null, a.tooltip = null, a.chartSize = null, a.colors = null, a.jsonKeys = null, this.showGraph = function () {
+ var b = {};
+ b.bindto = "#" + a.bindto, b.data = {}, a.xValues && (b.data.x = a.xValues), a.columns && (b.data.columns = a.columns), b.data.types = a.types, b.data.axes = a.axes, a.names && (b.data.names = a.names), a.colors && (b.data.colors = a.colors), a.showLabels && "true" === a.showLabels && (b.data.labels = !0), a.showSubchart && "true" === a.showSubchart && (b.subchart = {show: !0}), a.enableZoom && "true" === a.enableZoom && (b.zoom = {enabled: !0}), b.axis = a.axis, a.xTick && (b.axis.x.tick = a.xTick), null != a.grid && (b.grid = a.grid), null != a.legend && (b.legend = a.legend), null != a.tooltip && (b.tooltip = a.tooltip), null != a.chartSize && (b.size = a.chartSize), null != a.colors && (b.color = {pattern: a.colors}), a.config = b, a.chartData && a.chartColumns ? a.$watchCollection("chartData", function () {
+ c()
+ }) : a.chart = c3.generate(a.config)
+ }, this.addColumn = function (c, d, e, f) {
+ a.columns.push(c), b(c[0], d, e, f)
+ }, this.addYAxis = function (b) {
+ a.axes = b, a.axis.y2 || (a.axis.y2 = {show: !0})
+ }, this.addXAxisValues = function (b) {
+ a.xValues = b
+ }, this.addAxisProperties = function (b, c) {
+ a.axis[b] = c
+ }, this.addXTick = function (b) {
+ a.xTick = b
+ }, this.rotateAxis = function () {
+ a.axis.rotated = !0
+ }, this.addGrid = function (b) {
+ null == a.grid && (a.grid = {}), null == a.grid[b] && (a.grid[b] = {}), a.grid[b].show = !0
+ }, this.addGridLine = function (b, c, d) {
+ null == a.grid && (a.grid = {}), "x" === b ? (void 0 === a.grid.x && (a.grid.x = {}), void 0 === a.grid.x.lines && (a.grid.x.lines = [])) : (void 0 === a.grid.y && (a.grid.y = {}), void 0 === a.grid.y.lines && (a.grid.y.lines = [])), "y2" === b ? a.grid.y.lines.push({
+ value: c,
+ text: d,
+ axis: "y2"
+ }) : a.grid[b].lines.push({value: c, text: d})
+ }, this.addLegend = function (b) {
+ a.legend = b
+ }, this.addTooltip = function (b) {
+ a.tooltip = b
+ }, this.addSize = function (b) {
+ a.chartSize = b
+ }, this.addColors = function (b) {
+ a.colors = b
+ }
+}]).directive("c3chart", ["$timeout", function (a) {
+ var b = function (b, c, d, e) {
+ a(function () {
+ e.showGraph()
+ })
+ };
+ return {
+ restrict: "E",
+ controller: "ChartController",
+ scope: {
+ bindto: "@bindtoId",
+ showLabels: "@showLabels",
+ showSubchart: "@showSubchart",
+ enableZoom: "@enableZoom",
+ chartData: "=chartData",
+ chartColumns: "=chartColumns",
+ chartX: "=chartX"
+ },
+ template: "<div><div id='{{bindto}}'></div><div ng-transclude></div></div>",
+ replace: !0,
+ transclude: !0,
+ link: b
+ }
+}]).directive("chartColumn", function () {
+ var a = function (a, b, c, d) {
+ var e = c.columnValues.split(",");
+ e.unshift(c.columnId), d.addColumn(e, c.columnType, c.columnName, c.columnColor)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxes", function () {
+ var a = function (a, b, c, d) {
+ var e = c.valuesX;
+ e && d.addXAxisValues(e);
+ var f = c.y, g = c.y2, h = {};
+ if (g) {
+ var i = g.split(",");
+ for (var j in i)h[i[j]] = "y2";
+ if (f) {
+ var k = f.split(",");
+ for (var l in k)h[k[l]] = "y"
+ }
+ d.addYAxis(h)
+ }
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxis", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisRotate;
+ e && d.rotateAxis()
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ transclude: !0,
+ template: "<div ng-transclude></div>",
+ replace: !0,
+ link: a
+ }
+}).directive("chartAxisX", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisPosition, f = c.axisLabel, g = {label: {text: f, position: e}}, h = c.axisType;
+ h && (g.type = h);
+ var i = c.axisHeight;
+ i && (g.height = i), d.addAxisProperties("x", g)
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ transclude: !0,
+ template: "<div ng-transclude></div>",
+ replace: !0,
+ link: a
+ }
+}).directive("chartAxisY", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisId, f = c.axisPosition, g = c.axisLabel, h = {label: {text: g, position: f}};
+ "y2" === e && (h.show = !0);
+ var i = c.paddingTop, j = c.paddingBottom;
+ (i || j) && (i = i ? i : 0, j = j ? j : 0, h.padding = {top: parseInt(i), bottom: parseInt(j)});
+ var k = c.rangeMax, l = c.rangeMin;
+ k && (h.max = parseInt(k)), l && (h.min = parseInt(l)), d.addAxisProperties(e, h)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartGrid", function () {
+ var a = function (a, b, c, d) {
+ var e = c.showX;
+ e && "true" === e && d.addGrid("x");
+ var f = c.showY;
+ f && "true" === f && d.addGrid("y");
+ var g = c.showY2;
+ g && "true" === g && d.addGrid("y2")
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ replace: !0,
+ link: a,
+ transclude: !0,
+ template: "<div ng-transclude></div>"
+ }
+}).directive("chartGridOptional", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisId, f = c.gridValue, g = c.gridText;
+ d.addGridLine(e, f, g)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxisXTick", function () {
+ var a = function (a, b, c, d) {
+ var e = {}, f = c.tickCount;
+ f && (e.count = f);
+ var g = c.tickFormat;
+ g && (e.format = g);
+ var h = c.tickCulling;
+ h && (e.culling = h);
+ var i = c.tickRotate;
+ i && (e.rotate = i);
+ var j = c.tickFit;
+ j && (e.fit = j), d.addXTick(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartLegend", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.showLegend;
+ if (f && "false" === f)e = {show: !1}; else {
+ var g = c.legendPosition;
+ g && (e = {position: g})
+ }
+ null != e && d.addLegend(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartTooltip", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.showTooltip;
+ if (f && "false" === f)e = {show: !1}; else {
+ var g = c.groupTooltip;
+ g && "false" === g && (e = {grouped: !1})
+ }
+ null != e && d.addTooltip(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartSize", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.chartWidth, g = c.chartHeight;
+ (f || g) && (e = {}, f && (e.width = parseInt(f)), g && (e.height = parseInt(g)), d.addSize(e))
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartColors", function () {
+ var a = function (a, b, c, d) {
+ var e = c.colorPattern;
+ e && d.addColors(e.split(","))
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+});
+//# sourceMappingURL=c3-angular.min.js.map \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js.map b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js.map
new file mode 100644
index 00000000..83e8e2cc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3-angular.min.js.map
@@ -0,0 +1,157 @@
+{
+ "version": 3,
+ "file": "c3-angular.min.js",
+ "sources": ["c3-angular.js"],
+ "names": [
+ "angular",
+ "module",
+ "controller",
+ "$scope",
+ "addColumnProperties",
+ "id",
+ "columnType",
+ "columnName",
+ "columnColor",
+ "undefined",
+ "types",
+ "names",
+ "colors",
+ "loadChartData",
+ "jsonKeys",
+ "value",
+ "forEach",
+ "chartColumns",
+ "column",
+ "push",
+ "type",
+ "name",
+ "color",
+ "chartX",
+ "x",
+ "config",
+ "data",
+ "keys",
+ "json",
+ "chartData",
+ "chart",
+ "c3",
+ "generate",
+ "columns",
+ "axis",
+ "axes",
+ "xValues",
+ "xTick",
+ "grid",
+ "legend",
+ "tooltip",
+ "chartSize",
+ "this",
+ "showGraph",
+ "bindto",
+ "showLabels",
+ "labels",
+ "showSubchart",
+ "subchart",
+ "show",
+ "enableZoom",
+ "zoom",
+ "enabled",
+ "tick",
+ "size",
+ "pattern",
+ "$watchCollection",
+ "addColumn",
+ "addYAxis",
+ "yAxis",
+ "y2",
+ "addXAxisValues",
+ "addAxisProperties",
+ "addXTick",
+ "rotateAxis",
+ "rotated",
+ "addGrid",
+ "addGridLine",
+ "text",
+ "lines",
+ "y",
+ "addLegend",
+ "addTooltip",
+ "addSize",
+ "addColors",
+ "directive",
+ "$timeout",
+ "chartLinker",
+ "scope",
+ "element",
+ "attrs",
+ "chartCtrl",
+ "restrict",
+ "template",
+ "replace",
+ "transclude",
+ "link",
+ "columnLinker",
+ "columnValues",
+ "split",
+ "unshift",
+ "columnId",
+ "require",
+ "axesLinker",
+ "valuesX",
+ "items",
+ "item",
+ "yItems",
+ "yItem",
+ "axisLinker",
+ "rotate",
+ "axisRotate",
+ "position",
+ "axisPosition",
+ "label",
+ "axisLabel",
+ "axisType",
+ "height",
+ "axisHeight",
+ "axisId",
+ "paddingTop",
+ "paddingBottom",
+ "padding",
+ "top",
+ "parseInt",
+ "bottom",
+ "rangeMax",
+ "rangeMin",
+ "max",
+ "min",
+ "gridLinker",
+ "showX",
+ "showY",
+ "showY2",
+ "gridValue",
+ "gridText",
+ "tickLinker",
+ "count",
+ "tickCount",
+ "format",
+ "tickFormat",
+ "culling",
+ "tickCulling",
+ "tickRotate",
+ "fit",
+ "tickFit",
+ "legendLinker",
+ "showLegend",
+ "legendPosition",
+ "tooltipLinker",
+ "showTooltip",
+ "grouped",
+ "groupTooltip",
+ "sizeLinker",
+ "width",
+ "chartWidth",
+ "chartHeight",
+ "colorsLinker",
+ "colorPattern"
+ ],
+ "mappings": "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"
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.js
new file mode 100644
index 00000000..5f574be7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.js
@@ -0,0 +1,7473 @@
+(function (window) {
+ 'use strict';
+
+ /*global define, module, exports, require */
+
+ var c3 = {version: "0.4.8"};
+
+ var c3_chart_fn, c3_chart_internal_fn;
+
+ function Chart(config) {
+ var $$ = this.internal = new ChartInternal(this);
+ $$.loadConfig(config);
+ $$.init();
+
+ // bind "this" to nested API
+ (function bindThis(fn, target, argThis) {
+ Object.keys(fn).forEach(function (key) {
+ target[key] = fn[key].bind(argThis);
+ if (Object.keys(fn[key]).length > 0) {
+ bindThis(fn[key], target[key], argThis);
+ }
+ });
+ })(c3_chart_fn, this, this);
+ }
+
+ function ChartInternal(api) {
+ var $$ = this;
+ $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require("d3") : undefined;
+ $$.api = api;
+ $$.config = $$.getDefaultConfig();
+ $$.data = {};
+ $$.cache = {};
+ $$.axes = {};
+ }
+
+ c3.generate = function (config) {
+ return new Chart(config);
+ };
+
+ c3.chart = {
+ fn: Chart.prototype,
+ internal: {
+ fn: ChartInternal.prototype
+ }
+ };
+ c3_chart_fn = c3.chart.fn;
+ c3_chart_internal_fn = c3.chart.internal.fn;
+
+
+ c3_chart_internal_fn.init = function () {
+ var $$ = this, config = $$.config;
+
+ $$.initParams();
+
+ if (config.data_url) {
+ $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_keys, $$.initWithData);
+ }
+ else if (config.data_json) {
+ $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));
+ }
+ else if (config.data_rows) {
+ $$.initWithData($$.convertRowsToData(config.data_rows));
+ }
+ else if (config.data_columns) {
+ $$.initWithData($$.convertColumnsToData(config.data_columns));
+ }
+ else {
+ throw Error('url or json or rows or columns is required.');
+ }
+ };
+
+ c3_chart_internal_fn.initParams = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+
+ // MEMO: clipId needs to be unique because it conflicts when multiple charts exist
+ $$.clipId = "c3-" + (+new Date()) + '-clip',
+ $$.clipIdForXAxis = $$.clipId + '-xaxis',
+ $$.clipIdForYAxis = $$.clipId + '-yaxis',
+ $$.clipIdForGrid = $$.clipId + '-grid',
+ $$.clipIdForSubchart = $$.clipId + '-subchart',
+ $$.clipPath = $$.getClipPath($$.clipId),
+ $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis),
+ $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);
+ $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid),
+ $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart),
+
+ $$.dragStart = null;
+ $$.dragging = false;
+ $$.flowing = false;
+ $$.cancelClick = false;
+ $$.mouseover = false;
+ $$.transiting = false;
+
+ $$.color = $$.generateColor();
+ $$.levelColor = $$.generateLevelColor();
+
+ $$.dataTimeFormat = config.data_xLocaltime ? d3.time.format : d3.time.format.utc;
+ $$.axisTimeFormat = config.axis_x_localtime ? d3.time.format : d3.time.format.utc;
+ $$.defaultAxisTimeFormat = $$.axisTimeFormat.multi([
+ [".%L", function (d) {
+ return d.getMilliseconds();
+ }],
+ [":%S", function (d) {
+ return d.getSeconds();
+ }],
+ ["%I:%M", function (d) {
+ return d.getMinutes();
+ }],
+ ["%I %p", function (d) {
+ return d.getHours();
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getDay() && d.getDate() !== 1;
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getDate() !== 1;
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getMonth();
+ }],
+ ["%Y/%-m/%-d", function () {
+ return true;
+ }]
+ ]);
+
+ $$.hiddenTargetIds = [];
+ $$.hiddenLegendIds = [];
+ $$.focusedTargetIds = [];
+ $$.defocusedTargetIds = [];
+
+ $$.xOrient = config.axis_rotated ? "left" : "bottom";
+ $$.yOrient = config.axis_rotated ? (config.axis_y_inner ? "top" : "bottom") : (config.axis_y_inner ? "right" : "left");
+ $$.y2Orient = config.axis_rotated ? (config.axis_y2_inner ? "bottom" : "top") : (config.axis_y2_inner ? "left" : "right");
+ $$.subXOrient = config.axis_rotated ? "left" : "bottom";
+
+ $$.isLegendRight = config.legend_position === 'right';
+ $$.isLegendInset = config.legend_position === 'inset';
+ $$.isLegendTop = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'top-right';
+ $$.isLegendLeft = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'bottom-left';
+ $$.legendStep = 0;
+ $$.legendItemWidth = 0;
+ $$.legendItemHeight = 0;
+
+ $$.currentMaxTickWidths = {
+ x: 0,
+ y: 0,
+ y2: 0
+ };
+
+ $$.rotated_padding_left = 30;
+ $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;
+ $$.rotated_padding_top = 5;
+
+ $$.withoutFadeIn = {};
+
+ $$.intervalForObserveInserted = undefined;
+
+ $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js
+ };
+
+ c3_chart_internal_fn.initChartElements = function () {
+ if (this.initBar) {
+ this.initBar();
+ }
+ if (this.initLine) {
+ this.initLine();
+ }
+ if (this.initArc) {
+ this.initArc();
+ }
+ if (this.initGauge) {
+ this.initGauge();
+ }
+ if (this.initText) {
+ this.initText();
+ }
+ };
+
+ c3_chart_internal_fn.initWithData = function (data) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ var defs, main, binding = true;
+
+ if ($$.initPie) {
+ $$.initPie();
+ }
+ if ($$.initBrush) {
+ $$.initBrush();
+ }
+ if ($$.initZoom) {
+ $$.initZoom();
+ }
+
+ $$.selectChart = typeof config.bindto.node === 'function' ? config.bindto : d3.select(config.bindto);
+ if ($$.selectChart.empty()) {
+ $$.selectChart = d3.select(document.createElement('div')).style('opacity', 0);
+ $$.observeInserted($$.selectChart);
+ binding = false;
+ }
+ $$.selectChart.html("").classed("c3", true);
+
+ // Init data as targets
+ $$.data.xs = {};
+ $$.data.targets = $$.convertDataToTargets(data);
+
+ if (config.data_filter) {
+ $$.data.targets = $$.data.targets.filter(config.data_filter);
+ }
+
+ // Set targets to hide if needed
+ if (config.data_hide) {
+ $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);
+ }
+ if (config.legend_hide) {
+ $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);
+ }
+
+ // when gauge, hide legend // TODO: fix
+ if ($$.hasType('gauge')) {
+ config.legend_show = false;
+ }
+
+ // Init sizes and scales
+ $$.updateSizes();
+ $$.updateScales();
+
+ // Set domains for each scale
+ $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));
+ $$.y.domain($$.getYDomain($$.data.targets, 'y'));
+ $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));
+ $$.subX.domain($$.x.domain());
+ $$.subY.domain($$.y.domain());
+ $$.subY2.domain($$.y2.domain());
+
+ // Save original x domain for zoom update
+ $$.orgXDomain = $$.x.domain();
+
+ // Set initialized scales to brush and zoom
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x);
+ }
+
+ /*-- Basic Elements --*/
+
+ // Define svgs
+ $$.svg = $$.selectChart.append("svg")
+ .style("overflow", "hidden")
+ .on('mouseenter', function () {
+ return config.onmouseover.call($$);
+ })
+ .on('mouseleave', function () {
+ return config.onmouseout.call($$);
+ });
+
+ // Define defs
+ defs = $$.svg.append("defs");
+ $$.clipChart = $$.appendClip(defs, $$.clipId);
+ $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);
+ $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);
+ $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);
+ $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);
+ $$.updateSvgSize();
+
+ // Define regions
+ main = $$.main = $$.svg.append("g").attr("transform", $$.getTranslate('main'));
+
+ if ($$.initSubchart) {
+ $$.initSubchart();
+ }
+ if ($$.initTooltip) {
+ $$.initTooltip();
+ }
+ if ($$.initLegend) {
+ $$.initLegend();
+ }
+
+ /*-- Main Region --*/
+
+ // text when empty
+ main.append("text")
+ .attr("class", CLASS.text + ' ' + CLASS.empty)
+ .attr("text-anchor", "middle") // horizontal centering of text at x position in all browsers.
+ .attr("dominant-baseline", "middle"); // vertical centering of text at y position in all browsers, except IE.
+
+ // Regions
+ $$.initRegion();
+
+ // Grids
+ $$.initGrid();
+
+ // Define g for chart area
+ main.append('g')
+ .attr("clip-path", $$.clipPath)
+ .attr('class', CLASS.chart);
+
+ // Grid lines
+ if (config.grid_lines_front) {
+ $$.initGridLines();
+ }
+
+ // Cover whole with rects for events
+ $$.initEventRect();
+
+ // Define g for chart
+ $$.initChartElements();
+
+ // if zoom privileged, insert rect to forefront
+ // TODO: is this needed?
+ main.insert('rect', config.zoom_privileged ? null : 'g.' + CLASS.regions)
+ .attr('class', CLASS.zoomRect)
+ .attr('width', $$.width)
+ .attr('height', $$.height)
+ .style('opacity', 0)
+ .on("dblclick.zoom", null);
+
+ // Set default extent if defined
+ if (config.axis_x_extent) {
+ $$.brush.extent($$.getDefaultExtent());
+ }
+
+ // Add Axis
+ $$.initAxis();
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Draw with targets
+ if (binding) {
+ $$.updateDimension();
+ $$.config.oninit.call($$);
+ $$.redraw({
+ withTransform: true,
+ withUpdateXDomain: true,
+ withUpdateOrgXDomain: true,
+ withTransitionForAxis: false
+ });
+ }
+
+ // Bind resize event
+ if (window.onresize == null) {
+ window.onresize = $$.generateResize();
+ }
+ if (window.onresize.add) {
+ window.onresize.add(function () {
+ config.onresize.call($$);
+ });
+ window.onresize.add(function () {
+ $$.api.flush();
+ });
+ window.onresize.add(function () {
+ config.onresized.call($$);
+ });
+ }
+
+ // export element of the chart
+ $$.api.element = $$.selectChart.node();
+ };
+
+ c3_chart_internal_fn.smoothLines = function (el, type) {
+ var $$ = this;
+ if (type === 'grid') {
+ el.each(function () {
+ var g = $$.d3.select(this),
+ x1 = g.attr('x1'),
+ x2 = g.attr('x2'),
+ y1 = g.attr('y1'),
+ y2 = g.attr('y2');
+ g.attr({
+ 'x1': Math.ceil(x1),
+ 'x2': Math.ceil(x2),
+ 'y1': Math.ceil(y1),
+ 'y2': Math.ceil(y2)
+ });
+ });
+ }
+ };
+
+
+ c3_chart_internal_fn.updateSizes = function () {
+ var $$ = this, config = $$.config;
+ var legendHeight = $$.legend ? $$.getLegendHeight() : 0,
+ legendWidth = $$.legend ? $$.getLegendWidth() : 0,
+ legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight,
+ hasArc = $$.hasArcType(),
+ xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'),
+ subchartHeight = config.subchart_show && !hasArc ? (config.subchart_size_height + xAxisHeight) : 0;
+
+ $$.currentWidth = $$.getCurrentWidth();
+ $$.currentHeight = $$.getCurrentHeight();
+
+ // for main
+ $$.margin = config.axis_rotated ? {
+ top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),
+ right: hasArc ? 0 : $$.getCurrentPaddingRight(),
+ bottom: $$.getHorizontalAxisHeight('y') + legendHeightForBottom + $$.getCurrentPaddingBottom(),
+ left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())
+ } : {
+ top: 4 + $$.getCurrentPaddingTop(), // for top tick text
+ right: hasArc ? 0 : $$.getCurrentPaddingRight(),
+ bottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),
+ left: hasArc ? 0 : $$.getCurrentPaddingLeft()
+ };
+
+ // for subchart
+ $$.margin2 = config.axis_rotated ? {
+ top: $$.margin.top,
+ right: NaN,
+ bottom: 20 + legendHeightForBottom,
+ left: $$.rotated_padding_left
+ } : {
+ top: $$.currentHeight - subchartHeight - legendHeightForBottom,
+ right: NaN,
+ bottom: xAxisHeight + legendHeightForBottom,
+ left: $$.margin.left
+ };
+
+ // for legend
+ $$.margin3 = {
+ top: 0,
+ right: NaN,
+ bottom: 0,
+ left: 0
+ };
+ if ($$.updateSizeForLegend) {
+ $$.updateSizeForLegend(legendHeight, legendWidth);
+ }
+
+ $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;
+ $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;
+ if ($$.width < 0) {
+ $$.width = 0;
+ }
+ if ($$.height < 0) {
+ $$.height = 0;
+ }
+
+ $$.width2 = config.axis_rotated ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;
+ $$.height2 = config.axis_rotated ? $$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;
+ if ($$.width2 < 0) {
+ $$.width2 = 0;
+ }
+ if ($$.height2 < 0) {
+ $$.height2 = 0;
+ }
+
+ // for arc
+ $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);
+ $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);
+ if ($$.hasType('gauge')) {
+ $$.arcHeight += $$.height - $$.getGaugeLabelHeight();
+ }
+ if ($$.updateRadius) {
+ $$.updateRadius();
+ }
+
+ if ($$.isLegendRight && hasArc) {
+ $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;
+ }
+ };
+
+ c3_chart_internal_fn.updateTargets = function (targets) {
+ var $$ = this, config = $$.config;
+
+ /*-- Main --*/
+
+ //-- Text --//
+ $$.updateTargetsForText(targets);
+
+ //-- Bar --//
+ $$.updateTargetsForBar(targets);
+
+ //-- Line --//
+ $$.updateTargetsForLine(targets);
+
+ //-- Arc --//
+ if ($$.updateTargetsForArc) {
+ $$.updateTargetsForArc(targets);
+ }
+ if ($$.updateTargetsForSubchart) {
+ $$.updateTargetsForSubchart(targets);
+ }
+
+ /*-- Show --*/
+
+ // Fade-in each chart
+ $$.svg.selectAll('.' + CLASS.target).filter(function (d) {
+ return $$.isTargetToShow(d.id);
+ })
+ .transition().duration(config.transition_duration)
+ .style("opacity", 1);
+ };
+
+ c3_chart_internal_fn.redraw = function (options, transitions) {
+ var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config;
+ var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType);
+ var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis,
+ withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend,
+ withEventRect, withDimension, withUpdateXAxis;
+ var hideAxis = $$.hasArcType();
+ var drawArea, drawBar, drawLine, xForText, yForText;
+ var duration, durationForExit, durationForAxis;
+ var waitForDraw, flow;
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets), tickValues, i, intervalForCulling, xDomainForZoom;
+ var xv = $$.xv.bind($$), cx, cy;
+
+ options = options || {};
+ withY = getOption(options, "withY", true);
+ withSubchart = getOption(options, "withSubchart", true);
+ withTransition = getOption(options, "withTransition", true);
+ withTransform = getOption(options, "withTransform", false);
+ withUpdateXDomain = getOption(options, "withUpdateXDomain", false);
+ withUpdateOrgXDomain = getOption(options, "withUpdateOrgXDomain", false);
+ withTrimXDomain = getOption(options, "withTrimXDomain", true);
+ withUpdateXAxis = getOption(options, "withUpdateXAxis", withUpdateXDomain);
+ withLegend = getOption(options, "withLegend", false);
+ withEventRect = getOption(options, "withEventRect", true);
+ withDimension = getOption(options, "withDimension", true);
+ withTransitionForExit = getOption(options, "withTransitionForExit", withTransition);
+ withTransitionForAxis = getOption(options, "withTransitionForAxis", withTransition);
+
+ duration = withTransition ? config.transition_duration : 0;
+ durationForExit = withTransitionForExit ? duration : 0;
+ durationForAxis = withTransitionForAxis ? duration : 0;
+
+ transitions = transitions || $$.generateAxisTransitions(durationForAxis);
+
+ // update legend and transform each g
+ if (withLegend && config.legend_show) {
+ $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);
+ } else if (withDimension) {
+ // need to update dimension (e.g. axis.y.tick.values) because y tick values should change
+ // no need to update axis in it because they will be updated in redraw()
+ $$.updateDimension(true);
+ }
+
+ // MEMO: needed for grids calculation
+ if ($$.isCategorized() && targetsToShow.length === 0) {
+ $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);
+ }
+
+ if (targetsToShow.length) {
+ $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);
+ if (!config.axis_x_tick_values) {
+ if (config.axis_x_tick_fit || config.axis_x_tick_count) {
+ tickValues = $$.generateTickValues($$.mapTargetsToUniqueXs(targetsToShow), config.axis_x_tick_count, $$.isTimeSeries());
+ } else {
+ tickValues = undefined;
+ }
+ $$.xAxis.tickValues(tickValues);
+ $$.subXAxis.tickValues(tickValues);
+ }
+ } else {
+ $$.xAxis.tickValues([]);
+ $$.subXAxis.tickValues([]);
+ }
+
+ if (config.zoom_rescale && !options.flow) {
+ xDomainForZoom = $$.x.orgDomain();
+ }
+
+ $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));
+ $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));
+
+ if (!config.axis_y_tick_values && config.axis_y_tick_count) {
+ $$.yAxis.tickValues($$.generateTickValues($$.y.domain(), config.axis_y_tick_count));
+ }
+ if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {
+ $$.y2Axis.tickValues($$.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));
+ }
+
+ // axes
+ $$.redrawAxis(transitions, hideAxis);
+
+ // Update axis label
+ $$.updateAxisLabels(withTransition);
+
+ // show/hide if manual culling needed
+ if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {
+ if (config.axis_x_tick_culling && tickValues) {
+ for (i = 1; i < tickValues.length; i++) {
+ if (tickValues.length / i < config.axis_x_tick_culling_max) {
+ intervalForCulling = i;
+ break;
+ }
+ }
+ $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {
+ var index = tickValues.indexOf(e);
+ if (index >= 0) {
+ d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');
+ }
+ });
+ } else {
+ $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').style('display', 'block');
+ }
+ }
+
+ // setup drawer - MEMO: these must be called after axis updated
+ drawArea = $$.generateDrawArea ? $$.generateDrawArea(areaIndices, false) : undefined;
+ drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;
+ drawLine = $$.generateDrawLine ? $$.generateDrawLine(lineIndices, false) : undefined;
+ xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);
+ yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false);
+
+ // Update sub domain
+ if (withY) {
+ $$.subY.domain($$.getYDomain(targetsToShow, 'y'));
+ $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));
+ }
+
+ // tooltip
+ $$.tooltip.style("display", "none");
+
+ // xgrid focus
+ $$.updateXgridFocus();
+
+ // Data empty label positioning and text.
+ main.select("text." + CLASS.text + '.' + CLASS.empty)
+ .attr("x", $$.width / 2)
+ .attr("y", $$.height / 2)
+ .text(config.data_empty_label_text)
+ .transition()
+ .style('opacity', targetsToShow.length ? 0 : 1);
+
+ // grid
+ $$.redrawGrid(duration);
+
+ // rect for regions
+ $$.redrawRegion(duration);
+
+ // bars
+ $$.redrawBar(durationForExit);
+
+ // lines, areas and cricles
+ $$.redrawLine(durationForExit);
+ $$.redrawArea(durationForExit);
+ $$.redrawCircle();
+
+ // text
+ if ($$.hasDataLabel()) {
+ $$.redrawText(durationForExit);
+ }
+
+ // arc
+ if ($$.redrawArc) {
+ $$.redrawArc(duration, durationForExit, withTransform);
+ }
+
+ // subchart
+ if ($$.redrawSubchart) {
+ $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);
+ }
+
+ // circles for select
+ main.selectAll('.' + CLASS.selectedCircles)
+ .filter($$.isBarType.bind($$))
+ .selectAll('circle')
+ .remove();
+
+ // event rects will redrawn when flow called
+ if (config.interaction_enabled && !options.flow && withEventRect) {
+ $$.redrawEventRect();
+ if ($$.updateZoom) {
+ $$.updateZoom();
+ }
+ }
+
+ // update circleY based on updated parameters
+ $$.updateCircleY();
+
+ // generate circle x/y functions depending on updated params
+ cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);
+ cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$);
+
+ // transition should be derived from one transition
+ d3.transition().duration(duration).each(function () {
+ var transitions = [];
+
+ $$.addTransitionForBar(transitions, drawBar);
+ $$.addTransitionForLine(transitions, drawLine);
+ $$.addTransitionForArea(transitions, drawArea);
+ $$.addTransitionForCircle(transitions, cx, cy);
+ $$.addTransitionForText(transitions, xForText, yForText, options.flow);
+ $$.addTransitionForRegion(transitions);
+ $$.addTransitionForGrid(transitions);
+
+ // Wait for end of transitions if called from flow API
+ if (options.flow) {
+ waitForDraw = $$.generateWait();
+ transitions.forEach(function (t) {
+ waitForDraw.add(t);
+ });
+ flow = $$.generateFlow({
+ targets: targetsToShow,
+ flow: options.flow,
+ duration: duration,
+ drawBar: drawBar,
+ drawLine: drawLine,
+ drawArea: drawArea,
+ cx: cx,
+ cy: cy,
+ xv: xv,
+ xForText: xForText,
+ yForText: yForText
+ });
+ }
+ })
+ .call(waitForDraw || function () {
+ }, flow || function () {
+ });
+
+ // update fadein condition
+ $$.mapToIds($$.data.targets).forEach(function (id) {
+ $$.withoutFadeIn[id] = true;
+ });
+ };
+
+ c3_chart_internal_fn.updateAndRedraw = function (options) {
+ var $$ = this, config = $$.config, transitions;
+ options = options || {};
+ // same with redraw
+ options.withTransition = getOption(options, "withTransition", true);
+ options.withTransform = getOption(options, "withTransform", false);
+ options.withLegend = getOption(options, "withLegend", false);
+ // NOT same with redraw
+ options.withUpdateXDomain = true;
+ options.withUpdateOrgXDomain = true;
+ options.withTransitionForExit = false;
+ options.withTransitionForTransform = getOption(options, "withTransitionForTransform", options.withTransition);
+ // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)
+ $$.updateSizes();
+ // MEMO: called in updateLegend in redraw if withLegend
+ if (!(options.withLegend && config.legend_show)) {
+ transitions = $$.generateAxisTransitions(options.withTransitionForAxis ? config.transition_duration : 0);
+ // Update scales
+ $$.updateScales();
+ $$.updateSvgSize();
+ // Update g positions
+ $$.transformAll(options.withTransitionForTransform, transitions);
+ }
+ // Draw with new sizes & scales
+ $$.redraw(options, transitions);
+ };
+ c3_chart_internal_fn.redrawWithoutRescale = function () {
+ this.redraw({
+ withY: false,
+ withSubchart: false,
+ withEventRect: false,
+ withTransitionForAxis: false
+ });
+ };
+
+ c3_chart_internal_fn.isTimeSeries = function () {
+ return this.config.axis_x_type === 'timeseries';
+ };
+ c3_chart_internal_fn.isCategorized = function () {
+ return this.config.axis_x_type.indexOf('categor') >= 0;
+ };
+ c3_chart_internal_fn.isCustomX = function () {
+ var $$ = this, config = $$.config;
+ return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));
+ };
+
+ c3_chart_internal_fn.isTimeSeriesY = function () {
+ return this.config.axis_y_type === 'timeseries';
+ };
+
+ c3_chart_internal_fn.getTranslate = function (target) {
+ var $$ = this, config = $$.config, x, y;
+ if (target === 'main') {
+ x = asHalfPixel($$.margin.left);
+ y = asHalfPixel($$.margin.top);
+ } else if (target === 'context') {
+ x = asHalfPixel($$.margin2.left);
+ y = asHalfPixel($$.margin2.top);
+ } else if (target === 'legend') {
+ x = $$.margin3.left;
+ y = $$.margin3.top;
+ } else if (target === 'x') {
+ x = 0;
+ y = config.axis_rotated ? 0 : $$.height;
+ } else if (target === 'y') {
+ x = 0;
+ y = config.axis_rotated ? $$.height : 0;
+ } else if (target === 'y2') {
+ x = config.axis_rotated ? 0 : $$.width;
+ y = config.axis_rotated ? 1 : 0;
+ } else if (target === 'subx') {
+ x = 0;
+ y = config.axis_rotated ? 0 : $$.height2;
+ } else if (target === 'arc') {
+ x = $$.arcWidth / 2;
+ y = $$.arcHeight / 2;
+ }
+ return "translate(" + x + "," + y + ")";
+ };
+ c3_chart_internal_fn.initialOpacity = function (d) {
+ return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;
+ };
+ c3_chart_internal_fn.initialOpacityForCircle = function (d) {
+ return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;
+ };
+ c3_chart_internal_fn.opacityForCircle = function (d) {
+ var opacity = this.config.point_show ? 1 : 0;
+ return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0;
+ };
+ c3_chart_internal_fn.opacityForText = function () {
+ return this.hasDataLabel() ? 1 : 0;
+ };
+ c3_chart_internal_fn.xx = function (d) {
+ return d ? this.x(d.x) : null;
+ };
+ c3_chart_internal_fn.xv = function (d) {
+ var $$ = this, value = d.value;
+ if ($$.isTimeSeries()) {
+ value = $$.parseDate(d.value);
+ }
+ else if ($$.isCategorized() && typeof d.value === 'string') {
+ value = $$.config.axis_x_categories.indexOf(d.value);
+ }
+ return Math.ceil($$.x(value));
+ };
+ c3_chart_internal_fn.yv = function (d) {
+ var $$ = this,
+ yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;
+ return Math.ceil(yScale(d.value));
+ };
+ c3_chart_internal_fn.subxx = function (d) {
+ return d ? this.subX(d.x) : null;
+ };
+
+ c3_chart_internal_fn.transformMain = function (withTransition, transitions) {
+ var $$ = this,
+ xAxis, yAxis, y2Axis;
+ if (transitions && transitions.axisX) {
+ xAxis = transitions.axisX;
+ } else {
+ xAxis = $$.main.select('.' + CLASS.axisX);
+ if (withTransition) {
+ xAxis = xAxis.transition();
+ }
+ }
+ if (transitions && transitions.axisY) {
+ yAxis = transitions.axisY;
+ } else {
+ yAxis = $$.main.select('.' + CLASS.axisY);
+ if (withTransition) {
+ yAxis = yAxis.transition();
+ }
+ }
+ if (transitions && transitions.axisY2) {
+ y2Axis = transitions.axisY2;
+ } else {
+ y2Axis = $$.main.select('.' + CLASS.axisY2);
+ if (withTransition) {
+ y2Axis = y2Axis.transition();
+ }
+ }
+ (withTransition ? $$.main.transition() : $$.main).attr("transform", $$.getTranslate('main'));
+ xAxis.attr("transform", $$.getTranslate('x'));
+ yAxis.attr("transform", $$.getTranslate('y'));
+ y2Axis.attr("transform", $$.getTranslate('y2'));
+ $$.main.select('.' + CLASS.chartArcs).attr("transform", $$.getTranslate('arc'));
+ };
+ c3_chart_internal_fn.transformAll = function (withTransition, transitions) {
+ var $$ = this;
+ $$.transformMain(withTransition, transitions);
+ if ($$.config.subchart_show) {
+ $$.transformContext(withTransition, transitions);
+ }
+ if ($$.legend) {
+ $$.transformLegend(withTransition);
+ }
+ };
+
+ c3_chart_internal_fn.updateSvgSize = function () {
+ var $$ = this,
+ brush = $$.svg.select(".c3-brush .background");
+ $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);
+ $$.svg.selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]).select('rect')
+ .attr('width', $$.width)
+ .attr('height', $$.height);
+ $$.svg.select('#' + $$.clipIdForXAxis).select('rect')
+ .attr('x', $$.getXAxisClipX.bind($$))
+ .attr('y', $$.getXAxisClipY.bind($$))
+ .attr('width', $$.getXAxisClipWidth.bind($$))
+ .attr('height', $$.getXAxisClipHeight.bind($$));
+ $$.svg.select('#' + $$.clipIdForYAxis).select('rect')
+ .attr('x', $$.getYAxisClipX.bind($$))
+ .attr('y', $$.getYAxisClipY.bind($$))
+ .attr('width', $$.getYAxisClipWidth.bind($$))
+ .attr('height', $$.getYAxisClipHeight.bind($$));
+ $$.svg.select('#' + $$.clipIdForSubchart).select('rect')
+ .attr('width', $$.width)
+ .attr('height', brush.size() ? brush.attr('height') : 0);
+ $$.svg.select('.' + CLASS.zoomRect)
+ .attr('width', $$.width)
+ .attr('height', $$.height);
+ // MEMO: parent div's height will be bigger than svg when <!DOCTYPE html>
+ $$.selectChart.style('max-height', $$.currentHeight + "px");
+ };
+
+
+ c3_chart_internal_fn.updateDimension = function (withoutAxis) {
+ var $$ = this;
+ if (!withoutAxis) {
+ if ($$.config.axis_rotated) {
+ $$.axes.x.call($$.xAxis);
+ $$.axes.subx.call($$.subXAxis);
+ } else {
+ $$.axes.y.call($$.yAxis);
+ $$.axes.y2.call($$.y2Axis);
+ }
+ }
+ $$.updateSizes();
+ $$.updateScales();
+ $$.updateSvgSize();
+ $$.transformAll(false);
+ };
+
+ c3_chart_internal_fn.observeInserted = function (selection) {
+ var $$ = this, observer = new MutationObserver(function (mutations) {
+ mutations.forEach(function (mutation) {
+ if (mutation.type === 'childList' && mutation.previousSibling) {
+ observer.disconnect();
+ // need to wait for completion of load because size calculation requires the actual sizes determined after that completion
+ $$.intervalForObserveInserted = window.setInterval(function () {
+ // parentNode will NOT be null when completed
+ if (selection.node().parentNode) {
+ window.clearInterval($$.intervalForObserveInserted);
+ $$.updateDimension();
+ $$.config.oninit.call($$);
+ $$.redraw({
+ withTransform: true,
+ withUpdateXDomain: true,
+ withUpdateOrgXDomain: true,
+ withTransition: false,
+ withTransitionForTransform: false,
+ withLegend: true
+ });
+ selection.transition().style('opacity', 1);
+ }
+ }, 10);
+ }
+ });
+ });
+ observer.observe(selection.node(), {attributes: true, childList: true, characterData: true});
+ };
+
+
+ c3_chart_internal_fn.generateResize = function () {
+ var resizeFunctions = [];
+
+ function callResizeFunctions() {
+ resizeFunctions.forEach(function (f) {
+ f();
+ });
+ }
+
+ callResizeFunctions.add = function (f) {
+ resizeFunctions.push(f);
+ };
+ return callResizeFunctions;
+ };
+
+ c3_chart_internal_fn.endall = function (transition, callback) {
+ var n = 0;
+ transition
+ .each(function () {
+ ++n;
+ })
+ .each("end", function () {
+ if (!--n) {
+ callback.apply(this, arguments);
+ }
+ });
+ };
+ c3_chart_internal_fn.generateWait = function () {
+ var transitionsToWait = [],
+ f = function (transition, callback) {
+ var timer = setInterval(function () {
+ var done = 0;
+ transitionsToWait.forEach(function (t) {
+ if (t.empty()) {
+ done += 1;
+ return;
+ }
+ try {
+ t.transition();
+ } catch (e) {
+ done += 1;
+ }
+ });
+ if (done === transitionsToWait.length) {
+ clearInterval(timer);
+ if (callback) {
+ callback();
+ }
+ }
+ }, 10);
+ };
+ f.add = function (transition) {
+ transitionsToWait.push(transition);
+ };
+ return f;
+ };
+
+ c3_chart_internal_fn.parseDate = function (date) {
+ var $$ = this, parsedDate;
+ if (date instanceof Date) {
+ parsedDate = date;
+ } else if (typeof date === 'number' || !isNaN(date)) {
+ parsedDate = new Date(+date);
+ } else {
+ parsedDate = $$.dataTimeFormat($$.config.data_xFormat).parse(date);
+ }
+ if (!parsedDate || isNaN(+parsedDate)) {
+ window.console.error("Failed to parse x '" + date + "' to Date object");
+ }
+ return parsedDate;
+ };
+
+ c3_chart_internal_fn.getDefaultConfig = function () {
+ var config = {
+ bindto: '#chart',
+ size_width: undefined,
+ size_height: undefined,
+ padding_left: undefined,
+ padding_right: undefined,
+ padding_top: undefined,
+ padding_bottom: undefined,
+ zoom_enabled: false,
+ zoom_extent: undefined,
+ zoom_privileged: false,
+ zoom_rescale: false,
+ zoom_onzoom: function () {
+ },
+ zoom_onzoomstart: function () {
+ },
+ zoom_onzoomend: function () {
+ },
+ interaction_enabled: true,
+ onmouseover: function () {
+ },
+ onmouseout: function () {
+ },
+ onresize: function () {
+ },
+ onresized: function () {
+ },
+ oninit: function () {
+ },
+ transition_duration: 350,
+ data_x: undefined,
+ data_xs: {},
+ data_xFormat: '%Y-%m-%d',
+ data_xLocaltime: true,
+ data_xSort: true,
+ data_idConverter: function (id) {
+ return id;
+ },
+ data_names: {},
+ data_classes: {},
+ data_groups: [],
+ data_axes: {},
+ data_type: undefined,
+ data_types: {},
+ data_labels: {},
+ data_order: 'desc',
+ data_regions: {},
+ data_color: undefined,
+ data_colors: {},
+ data_hide: false,
+ data_filter: undefined,
+ data_selection_enabled: false,
+ data_selection_grouped: false,
+ data_selection_isselectable: function () {
+ return true;
+ },
+ data_selection_multiple: true,
+ data_onclick: function () {
+ },
+ data_onmouseover: function () {
+ },
+ data_onmouseout: function () {
+ },
+ data_onselected: function () {
+ },
+ data_onunselected: function () {
+ },
+ data_ondragstart: function () {
+ },
+ data_ondragend: function () {
+ },
+ data_url: undefined,
+ data_json: undefined,
+ data_rows: undefined,
+ data_columns: undefined,
+ data_mimeType: undefined,
+ data_keys: undefined,
+ // configuration for no plot-able data supplied.
+ data_empty_label_text: "",
+ // subchart
+ subchart_show: false,
+ subchart_size_height: 60,
+ subchart_onbrush: function () {
+ },
+ // color
+ color_pattern: [],
+ color_threshold: {},
+ // legend
+ legend_show: true,
+ legend_hide: false,
+ legend_position: 'bottom',
+ legend_inset_anchor: 'top-left',
+ legend_inset_x: 10,
+ legend_inset_y: 0,
+ legend_inset_step: undefined,
+ legend_item_onclick: undefined,
+ legend_item_onmouseover: undefined,
+ legend_item_onmouseout: undefined,
+ legend_equally: false,
+ // axis
+ axis_rotated: false,
+ axis_x_show: true,
+ axis_x_type: 'indexed',
+ axis_x_localtime: true,
+ axis_x_categories: [],
+ axis_x_tick_centered: false,
+ axis_x_tick_format: undefined,
+ axis_x_tick_culling: {},
+ axis_x_tick_culling_max: 10,
+ axis_x_tick_count: undefined,
+ axis_x_tick_fit: true,
+ axis_x_tick_values: null,
+ axis_x_tick_rotate: 0,
+ axis_x_tick_outer: true,
+ axis_x_tick_multiline: true,
+ axis_x_tick_width: null,
+ axis_x_max: undefined,
+ axis_x_min: undefined,
+ axis_x_padding: {},
+ axis_x_height: undefined,
+ axis_x_extent: undefined,
+ axis_x_label: {},
+ axis_y_show: true,
+ axis_y_type: undefined,
+ axis_y_max: undefined,
+ axis_y_min: undefined,
+ axis_y_center: undefined,
+ axis_y_inner: undefined,
+ axis_y_label: {},
+ axis_y_tick_format: undefined,
+ axis_y_tick_outer: true,
+ axis_y_tick_values: null,
+ axis_y_tick_count: undefined,
+ axis_y_tick_time_value: undefined,
+ axis_y_tick_time_interval: undefined,
+ axis_y_padding: {},
+ axis_y_default: undefined,
+ axis_y2_show: false,
+ axis_y2_max: undefined,
+ axis_y2_min: undefined,
+ axis_y2_center: undefined,
+ axis_y2_inner: undefined,
+ axis_y2_label: {},
+ axis_y2_tick_format: undefined,
+ axis_y2_tick_outer: true,
+ axis_y2_tick_values: null,
+ axis_y2_tick_count: undefined,
+ axis_y2_padding: {},
+ axis_y2_default: undefined,
+ // grid
+ grid_x_show: false,
+ grid_x_type: 'tick',
+ grid_x_lines: [],
+ grid_y_show: false,
+ // not used
+ // grid_y_type: 'tick',
+ grid_y_lines: [],
+ grid_y_ticks: 10,
+ grid_focus_show: true,
+ grid_lines_front: true,
+ // point - point of each data
+ point_show: true,
+ point_r: 2.5,
+ point_focus_expand_enabled: true,
+ point_focus_expand_r: undefined,
+ point_select_r: undefined,
+ // line
+ line_connectNull: false,
+ line_step_type: 'step',
+ // bar
+ bar_width: undefined,
+ bar_width_ratio: 0.6,
+ bar_width_max: undefined,
+ bar_zerobased: true,
+ // area
+ area_zerobased: true,
+ // pie
+ pie_label_show: true,
+ pie_label_format: undefined,
+ pie_label_threshold: 0.05,
+ pie_expand: true,
+ // gauge
+ gauge_label_show: true,
+ gauge_label_format: undefined,
+ gauge_expand: true,
+ gauge_min: 0,
+ gauge_max: 100,
+ gauge_units: undefined,
+ gauge_width: undefined,
+ // donut
+ donut_label_show: true,
+ donut_label_format: undefined,
+ donut_label_threshold: 0.05,
+ donut_width: undefined,
+ donut_expand: true,
+ donut_title: "",
+ // region - region to change style
+ regions: [],
+ // tooltip - show when mouseover on each data
+ tooltip_show: true,
+ tooltip_grouped: true,
+ tooltip_format_title: undefined,
+ tooltip_format_name: undefined,
+ tooltip_format_value: undefined,
+ tooltip_position: undefined,
+ tooltip_contents: function (d, defaultTitleFormat, defaultValueFormat, color) {
+ return this.getTooltipContent ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) : '';
+ },
+ tooltip_init_show: false,
+ tooltip_init_x: 0,
+ tooltip_init_position: {top: '0px', left: '50px'}
+ };
+
+ Object.keys(this.additionalConfig).forEach(function (key) {
+ config[key] = this.additionalConfig[key];
+ }, this);
+
+ return config;
+ };
+ c3_chart_internal_fn.additionalConfig = {};
+
+ c3_chart_internal_fn.loadConfig = function (config) {
+ var this_config = this.config, target, keys, read;
+
+ function find() {
+ var key = keys.shift();
+ // console.log("key =>", key, ", target =>", target);
+ if (key && target && typeof target === 'object' && key in target) {
+ target = target[key];
+ return find();
+ }
+ else if (!key) {
+ return target;
+ }
+ else {
+ return undefined;
+ }
+ }
+
+ Object.keys(this_config).forEach(function (key) {
+ target = config;
+ keys = key.split('_');
+ read = find();
+ // console.log("CONFIG : ", key, read);
+ if (isDefined(read)) {
+ this_config[key] = read;
+ }
+ });
+ };
+
+ c3_chart_internal_fn.getScale = function (min, max, forTimeseries) {
+ return (forTimeseries ? this.d3.time.scale() : this.d3.scale.linear()).range([min, max]);
+ };
+ c3_chart_internal_fn.getX = function (min, max, domain, offset) {
+ var $$ = this,
+ scale = $$.getScale(min, max, $$.isTimeSeries()),
+ _scale = domain ? scale.domain(domain) : scale, key;
+ // Define customized scale if categorized axis
+ if ($$.isCategorized()) {
+ offset = offset || function () {
+ return 0;
+ };
+ scale = function (d, raw) {
+ var v = _scale(d) + offset(d);
+ return raw ? v : Math.ceil(v);
+ };
+ } else {
+ scale = function (d, raw) {
+ var v = _scale(d);
+ return raw ? v : Math.ceil(v);
+ };
+ }
+ // define functions
+ for (key in _scale) {
+ scale[key] = _scale[key];
+ }
+ scale.orgDomain = function () {
+ return _scale.domain();
+ };
+ // define custom domain() for categorized axis
+ if ($$.isCategorized()) {
+ scale.domain = function (domain) {
+ if (!arguments.length) {
+ domain = this.orgDomain();
+ return [domain[0], domain[1] + 1];
+ }
+ _scale.domain(domain);
+ return scale;
+ };
+ }
+ return scale;
+ };
+ c3_chart_internal_fn.getY = function (min, max, domain) {
+ var scale = this.getScale(min, max, this.isTimeSeriesY());
+ if (domain) {
+ scale.domain(domain);
+ }
+ return scale;
+ };
+ c3_chart_internal_fn.getYScale = function (id) {
+ return this.getAxisId(id) === 'y2' ? this.y2 : this.y;
+ };
+ c3_chart_internal_fn.getSubYScale = function (id) {
+ return this.getAxisId(id) === 'y2' ? this.subY2 : this.subY;
+ };
+ c3_chart_internal_fn.updateScales = function () {
+ var $$ = this, config = $$.config,
+ forInit = !$$.x;
+ // update edges
+ $$.xMin = config.axis_rotated ? 1 : 0;
+ $$.xMax = config.axis_rotated ? $$.height : $$.width;
+ $$.yMin = config.axis_rotated ? 0 : $$.height;
+ $$.yMax = config.axis_rotated ? $$.width : 1;
+ $$.subXMin = $$.xMin;
+ $$.subXMax = $$.xMax;
+ $$.subYMin = config.axis_rotated ? 0 : $$.height2;
+ $$.subYMax = config.axis_rotated ? $$.width2 : 1;
+ // update scales
+ $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () {
+ return $$.xAxis.tickOffset();
+ });
+ $$.y = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y_default : $$.y.domain());
+ $$.y2 = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y2_default : $$.y2.domain());
+ $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) {
+ return d % 1 ? 0 : $$.subXAxis.tickOffset();
+ });
+ $$.subY = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y_default : $$.subY.domain());
+ $$.subY2 = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y2_default : $$.subY2.domain());
+ // update axes
+ $$.xAxisTickFormat = $$.getXAxisTickFormat();
+ $$.xAxisTickValues = $$.getXAxisTickValues();
+ $$.yAxisTickValues = $$.getYAxisTickValues();
+ $$.y2AxisTickValues = $$.getY2AxisTickValues();
+
+ $$.xAxis = $$.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);
+ $$.subXAxis = $$.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);
+ $$.yAxis = $$.getYAxis($$.y, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, config.axis_y_tick_outer);
+ $$.y2Axis = $$.getYAxis($$.y2, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, config.axis_y2_tick_outer);
+
+ // Set initialized scales to brush and zoom
+ if (!forInit) {
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x);
+ }
+ }
+ // update for arc
+ if ($$.updateArc) {
+ $$.updateArc();
+ }
+ };
+
+ c3_chart_internal_fn.getYDomainMin = function (targets) {
+ var $$ = this, config = $$.config,
+ ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),
+ j, k, baseId, idsInGroup, id, hasNegativeValue;
+ if (config.data_groups.length > 0) {
+ hasNegativeValue = $$.hasNegativeValueInTargets(targets);
+ for (j = 0; j < config.data_groups.length; j++) {
+ // Determine baseId
+ idsInGroup = config.data_groups[j].filter(function (id) {
+ return ids.indexOf(id) >= 0;
+ });
+ if (idsInGroup.length === 0) {
+ continue;
+ }
+ baseId = idsInGroup[0];
+ // Consider negative values
+ if (hasNegativeValue && ys[baseId]) {
+ ys[baseId].forEach(function (v, i) {
+ ys[baseId][i] = v < 0 ? v : 0;
+ });
+ }
+ // Compute min
+ for (k = 1; k < idsInGroup.length; k++) {
+ id = idsInGroup[k];
+ if (!ys[id]) {
+ continue;
+ }
+ ys[id].forEach(function (v, i) {
+ if ($$.getAxisId(id) === $$.getAxisId(baseId) && ys[baseId] && !(hasNegativeValue && +v > 0)) {
+ ys[baseId][i] += +v;
+ }
+ });
+ }
+ }
+ }
+ return $$.d3.min(Object.keys(ys).map(function (key) {
+ return $$.d3.min(ys[key]);
+ }));
+ };
+ c3_chart_internal_fn.getYDomainMax = function (targets) {
+ var $$ = this, config = $$.config,
+ ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),
+ j, k, baseId, idsInGroup, id, hasPositiveValue;
+ if (config.data_groups.length > 0) {
+ hasPositiveValue = $$.hasPositiveValueInTargets(targets);
+ for (j = 0; j < config.data_groups.length; j++) {
+ // Determine baseId
+ idsInGroup = config.data_groups[j].filter(function (id) {
+ return ids.indexOf(id) >= 0;
+ });
+ if (idsInGroup.length === 0) {
+ continue;
+ }
+ baseId = idsInGroup[0];
+ // Consider positive values
+ if (hasPositiveValue && ys[baseId]) {
+ ys[baseId].forEach(function (v, i) {
+ ys[baseId][i] = v > 0 ? v : 0;
+ });
+ }
+ // Compute max
+ for (k = 1; k < idsInGroup.length; k++) {
+ id = idsInGroup[k];
+ if (!ys[id]) {
+ continue;
+ }
+ ys[id].forEach(function (v, i) {
+ if ($$.getAxisId(id) === $$.getAxisId(baseId) && ys[baseId] && !(hasPositiveValue && +v < 0)) {
+ ys[baseId][i] += +v;
+ }
+ });
+ }
+ }
+ }
+ return $$.d3.max(Object.keys(ys).map(function (key) {
+ return $$.d3.max(ys[key]);
+ }));
+ };
+ c3_chart_internal_fn.getYDomain = function (targets, axisId, xDomain) {
+ var $$ = this, config = $$.config,
+ targetsByAxisId = targets.filter(function (t) {
+ return $$.getAxisId(t.id) === axisId;
+ }),
+ yTargets = xDomain ? $$.filterByXDomain(targetsByAxisId, xDomain) : targetsByAxisId,
+ yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min,
+ yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max,
+ yDomainMin = isValue(yMin) ? yMin : $$.getYDomainMin(yTargets),
+ yDomainMax = isValue(yMax) ? yMax : $$.getYDomainMax(yTargets),
+ domainLength, padding, padding_top, padding_bottom,
+ center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center,
+ yDomainAbs, lengths, diff, ratio, isAllPositive, isAllNegative,
+ isZeroBased = ($$.hasType('bar', yTargets) && config.bar_zerobased) || ($$.hasType('area', yTargets) && config.area_zerobased),
+ showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated,
+ showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated;
+
+ if (yDomainMax < yDomainMin) {
+ if (isValue(yMin)) {
+ yDomainMax = yDomainMin + 10; // TODO: introduce axis.y.maxMin
+ } else {
+ yDomainMin = yDomainMax - 10; // TODO: introduce axis.y.minMax
+ }
+ }
+
+ if (yTargets.length === 0) { // use current domain if target of axisId is none
+ return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();
+ }
+ if (isNaN(yDomainMin)) { // set minimum to zero when not number
+ yDomainMin = 0;
+ }
+ if (isNaN(yDomainMax)) { // set maximum to have same value as yDomainMin
+ yDomainMax = yDomainMin;
+ }
+ if (yDomainMin === yDomainMax) {
+ yDomainMin < 0 ? yDomainMax = 0 : yDomainMin = 0;
+ }
+ isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;
+ isAllNegative = yDomainMin <= 0 && yDomainMax <= 0;
+
+ // Cancel zerobased if axis_*_min / axis_*_max specified
+ if ((isValue(yMin) && isAllPositive) || (isValue(yMax) && isAllNegative)) {
+ isZeroBased = false;
+ }
+
+ // Bar/Area chart should be 0-based if all positive|negative
+ if (isZeroBased) {
+ if (isAllPositive) {
+ yDomainMin = 0;
+ }
+ if (isAllNegative) {
+ yDomainMax = 0;
+ }
+ }
+
+ domainLength = Math.abs(yDomainMax - yDomainMin);
+ padding = padding_top = padding_bottom = domainLength * 0.1;
+
+ if (typeof center !== 'undefined') {
+ yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));
+ yDomainMax = center + yDomainAbs;
+ yDomainMin = center - yDomainAbs;
+ }
+ // add padding for data label
+ if (showHorizontalDataLabel) {
+ lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, axisId, 'width');
+ diff = diffDomain($$.y.range());
+ ratio = [lengths[0] / diff, lengths[1] / diff];
+ padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));
+ padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));
+ } else if (showVerticalDataLabel) {
+ lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, axisId, 'height');
+ padding_top += this.convertPixelsToAxisPadding(lengths[1], domainLength);
+ padding_bottom += this.convertPixelsToAxisPadding(lengths[0], domainLength);
+ }
+ if (axisId === 'y' && notEmpty(config.axis_y_padding)) {
+ padding_top = $$.getAxisPadding(config.axis_y_padding, 'top', padding_top, domainLength);
+ padding_bottom = $$.getAxisPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);
+ }
+ if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {
+ padding_top = $$.getAxisPadding(config.axis_y2_padding, 'top', padding_top, domainLength);
+ padding_bottom = $$.getAxisPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);
+ }
+ // Bar/Area chart should be 0-based if all positive|negative
+ if (isZeroBased) {
+ if (isAllPositive) {
+ padding_bottom = yDomainMin;
+ }
+ if (isAllNegative) {
+ padding_top = -yDomainMax;
+ }
+ }
+ return [yDomainMin - padding_bottom, yDomainMax + padding_top];
+ };
+ c3_chart_internal_fn.getXDomainMin = function (targets) {
+ var $$ = this, config = $$.config;
+ return isDefined(config.axis_x_min) ?
+ ($$.isTimeSeries() ? this.parseDate(config.axis_x_min) : config.axis_x_min) :
+ $$.d3.min(targets, function (t) {
+ return $$.d3.min(t.values, function (v) {
+ return v.x;
+ });
+ });
+ };
+ c3_chart_internal_fn.getXDomainMax = function (targets) {
+ var $$ = this, config = $$.config;
+ return isDefined(config.axis_x_max) ?
+ ($$.isTimeSeries() ? this.parseDate(config.axis_x_max) : config.axis_x_max) :
+ $$.d3.max(targets, function (t) {
+ return $$.d3.max(t.values, function (v) {
+ return v.x;
+ });
+ });
+ };
+ c3_chart_internal_fn.getXDomainPadding = function (domain) {
+ var $$ = this, config = $$.config,
+ diff = domain[1] - domain[0],
+ maxDataCount, padding, paddingLeft, paddingRight;
+ if ($$.isCategorized()) {
+ padding = 0;
+ } else if ($$.hasType('bar')) {
+ maxDataCount = $$.getMaxDataCount();
+ padding = maxDataCount > 1 ? (diff / (maxDataCount - 1)) / 2 : 0.5;
+ } else {
+ padding = diff * 0.01;
+ }
+ if (typeof config.axis_x_padding === 'object' && notEmpty(config.axis_x_padding)) {
+ paddingLeft = isValue(config.axis_x_padding.left) ? config.axis_x_padding.left : padding;
+ paddingRight = isValue(config.axis_x_padding.right) ? config.axis_x_padding.right : padding;
+ } else if (typeof config.axis_x_padding === 'number') {
+ paddingLeft = paddingRight = config.axis_x_padding;
+ } else {
+ paddingLeft = paddingRight = padding;
+ }
+ return {left: paddingLeft, right: paddingRight};
+ };
+ c3_chart_internal_fn.getXDomain = function (targets) {
+ var $$ = this,
+ xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)],
+ firstX = xDomain[0], lastX = xDomain[1],
+ padding = $$.getXDomainPadding(xDomain),
+ min = 0, max = 0;
+ // show center of x domain if min and max are the same
+ if ((firstX - lastX) === 0 && !$$.isCategorized()) {
+ if ($$.isTimeSeries()) {
+ firstX = new Date(firstX.getTime() * 0.5);
+ lastX = new Date(lastX.getTime() * 1.5);
+ } else {
+ firstX = firstX === 0 ? 1 : (firstX * 0.5);
+ lastX = lastX === 0 ? -1 : (lastX * 1.5);
+ }
+ }
+ if (firstX || firstX === 0) {
+ min = $$.isTimeSeries() ? new Date(firstX.getTime() - padding.left) : firstX - padding.left;
+ }
+ if (lastX || lastX === 0) {
+ max = $$.isTimeSeries() ? new Date(lastX.getTime() + padding.right) : lastX + padding.right;
+ }
+ return [min, max];
+ };
+ c3_chart_internal_fn.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {
+ var $$ = this, config = $$.config;
+
+ if (withUpdateOrgXDomain) {
+ $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));
+ $$.orgXDomain = $$.x.domain();
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x).updateScaleExtent();
+ }
+ $$.subX.domain($$.x.domain());
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ }
+ if (withUpdateXDomain) {
+ $$.x.domain(domain ? domain : (!$$.brush || $$.brush.empty()) ? $$.orgXDomain : $$.brush.extent());
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x).updateScaleExtent();
+ }
+ }
+
+ // Trim domain when too big by zoom mousemove event
+ if (withTrim) {
+ $$.x.domain($$.trimXDomain($$.x.orgDomain()));
+ }
+
+ return $$.x.domain();
+ };
+ c3_chart_internal_fn.trimXDomain = function (domain) {
+ var $$ = this;
+ if (domain[0] <= $$.orgXDomain[0]) {
+ domain[1] = +domain[1] + ($$.orgXDomain[0] - domain[0]);
+ domain[0] = $$.orgXDomain[0];
+ }
+ if ($$.orgXDomain[1] <= domain[1]) {
+ domain[0] = +domain[0] - (domain[1] - $$.orgXDomain[1]);
+ domain[1] = $$.orgXDomain[1];
+ }
+ return domain;
+ };
+
+ c3_chart_internal_fn.isX = function (key) {
+ var $$ = this, config = $$.config;
+ return (config.data_x && key === config.data_x) || (notEmpty(config.data_xs) && hasValue(config.data_xs, key));
+ };
+ c3_chart_internal_fn.isNotX = function (key) {
+ return !this.isX(key);
+ };
+ c3_chart_internal_fn.getXKey = function (id) {
+ var $$ = this, config = $$.config;
+ return config.data_x ? config.data_x : notEmpty(config.data_xs) ? config.data_xs[id] : null;
+ };
+ c3_chart_internal_fn.getXValuesOfXKey = function (key, targets) {
+ var $$ = this,
+ xValues, ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];
+ ids.forEach(function (id) {
+ if ($$.getXKey(id) === key) {
+ xValues = $$.data.xs[id];
+ }
+ });
+ return xValues;
+ };
+ c3_chart_internal_fn.getIndexByX = function (x) {
+ var $$ = this,
+ data = $$.filterByX($$.data.targets, x);
+ return data.length ? data[0].index : null;
+ };
+ c3_chart_internal_fn.getXValue = function (id, i) {
+ var $$ = this;
+ return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) ? $$.data.xs[id][i] : i;
+ };
+ c3_chart_internal_fn.getOtherTargetXs = function () {
+ var $$ = this,
+ idsForX = Object.keys($$.data.xs);
+ return idsForX.length ? $$.data.xs[idsForX[0]] : null;
+ };
+ c3_chart_internal_fn.getOtherTargetX = function (index) {
+ var xs = this.getOtherTargetXs();
+ return xs && index < xs.length ? xs[index] : null;
+ };
+ c3_chart_internal_fn.addXs = function (xs) {
+ var $$ = this;
+ Object.keys(xs).forEach(function (id) {
+ $$.config.data_xs[id] = xs[id];
+ });
+ };
+ c3_chart_internal_fn.hasMultipleX = function (xs) {
+ return this.d3.set(Object.keys(xs).map(function (id) {
+ return xs[id];
+ })).size() > 1;
+ };
+ c3_chart_internal_fn.isMultipleX = function () {
+ return notEmpty(this.config.data_xs) || !this.config.data_xSort || this.hasType('scatter');
+ };
+ c3_chart_internal_fn.addName = function (data) {
+ var $$ = this, name;
+ if (data) {
+ name = $$.config.data_names[data.id];
+ data.name = name ? name : data.id;
+ }
+ return data;
+ };
+ c3_chart_internal_fn.getValueOnIndex = function (values, index) {
+ var valueOnIndex = values.filter(function (v) {
+ return v.index === index;
+ });
+ return valueOnIndex.length ? valueOnIndex[0] : null;
+ };
+ c3_chart_internal_fn.updateTargetX = function (targets, x) {
+ var $$ = this;
+ targets.forEach(function (t) {
+ t.values.forEach(function (v, i) {
+ v.x = $$.generateTargetX(x[i], t.id, i);
+ });
+ $$.data.xs[t.id] = x;
+ });
+ };
+ c3_chart_internal_fn.updateTargetXs = function (targets, xs) {
+ var $$ = this;
+ targets.forEach(function (t) {
+ if (xs[t.id]) {
+ $$.updateTargetX([t], xs[t.id]);
+ }
+ });
+ };
+ c3_chart_internal_fn.generateTargetX = function (rawX, id, index) {
+ var $$ = this, x;
+ if ($$.isTimeSeries()) {
+ x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));
+ }
+ else if ($$.isCustomX() && !$$.isCategorized()) {
+ x = isValue(rawX) ? +rawX : $$.getXValue(id, index);
+ }
+ else {
+ x = index;
+ }
+ return x;
+ };
+ c3_chart_internal_fn.cloneTarget = function (target) {
+ return {
+ id: target.id,
+ id_org: target.id_org,
+ values: target.values.map(function (d) {
+ return {x: d.x, value: d.value, id: d.id};
+ })
+ };
+ };
+ c3_chart_internal_fn.updateXs = function () {
+ var $$ = this;
+ if ($$.data.targets.length) {
+ $$.xs = [];
+ $$.data.targets[0].values.forEach(function (v) {
+ $$.xs[v.index] = v.x;
+ });
+ }
+ };
+ c3_chart_internal_fn.getPrevX = function (i) {
+ var x = this.xs[i - 1];
+ return typeof x !== 'undefined' ? x : null;
+ };
+ c3_chart_internal_fn.getNextX = function (i) {
+ var x = this.xs[i + 1];
+ return typeof x !== 'undefined' ? x : null;
+ };
+ c3_chart_internal_fn.getMaxDataCount = function () {
+ var $$ = this;
+ return $$.d3.max($$.data.targets, function (t) {
+ return t.values.length;
+ });
+ };
+ c3_chart_internal_fn.getMaxDataCountTarget = function (targets) {
+ var length = targets.length, max = 0, maxTarget;
+ if (length > 1) {
+ targets.forEach(function (t) {
+ if (t.values.length > max) {
+ maxTarget = t;
+ max = t.values.length;
+ }
+ });
+ } else {
+ maxTarget = length ? targets[0] : null;
+ }
+ return maxTarget;
+ };
+ c3_chart_internal_fn.getEdgeX = function (targets) {
+ var $$ = this;
+ return !targets.length ? [0, 0] : [
+ $$.d3.min(targets, function (t) {
+ return t.values[0].x;
+ }),
+ $$.d3.max(targets, function (t) {
+ return t.values[t.values.length - 1].x;
+ })
+ ];
+ };
+ c3_chart_internal_fn.mapToIds = function (targets) {
+ return targets.map(function (d) {
+ return d.id;
+ });
+ };
+ c3_chart_internal_fn.mapToTargetIds = function (ids) {
+ var $$ = this;
+ return ids ? (isString(ids) ? [ids] : ids) : $$.mapToIds($$.data.targets);
+ };
+ c3_chart_internal_fn.hasTarget = function (targets, id) {
+ var ids = this.mapToIds(targets), i;
+ for (i = 0; i < ids.length; i++) {
+ if (ids[i] === id) {
+ return true;
+ }
+ }
+ return false;
+ };
+ c3_chart_internal_fn.isTargetToShow = function (targetId) {
+ return this.hiddenTargetIds.indexOf(targetId) < 0;
+ };
+ c3_chart_internal_fn.isLegendToShow = function (targetId) {
+ return this.hiddenLegendIds.indexOf(targetId) < 0;
+ };
+ c3_chart_internal_fn.filterTargetsToShow = function (targets) {
+ var $$ = this;
+ return targets.filter(function (t) {
+ return $$.isTargetToShow(t.id);
+ });
+ };
+ c3_chart_internal_fn.mapTargetsToUniqueXs = function (targets) {
+ var $$ = this;
+ var xs = $$.d3.set($$.d3.merge(targets.map(function (t) {
+ return t.values.map(function (v) {
+ return +v.x;
+ });
+ }))).values();
+ return $$.isTimeSeries() ? xs.map(function (x) {
+ return new Date(+x);
+ }) : xs.map(function (x) {
+ return +x;
+ });
+ };
+ c3_chart_internal_fn.addHiddenTargetIds = function (targetIds) {
+ this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds);
+ };
+ c3_chart_internal_fn.removeHiddenTargetIds = function (targetIds) {
+ this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+ c3_chart_internal_fn.addHiddenLegendIds = function (targetIds) {
+ this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds);
+ };
+ c3_chart_internal_fn.removeHiddenLegendIds = function (targetIds) {
+ this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+ c3_chart_internal_fn.getValuesAsIdKeyed = function (targets) {
+ var ys = {};
+ targets.forEach(function (t) {
+ ys[t.id] = [];
+ t.values.forEach(function (v) {
+ ys[t.id].push(v.value);
+ });
+ });
+ return ys;
+ };
+ c3_chart_internal_fn.checkValueInTargets = function (targets, checker) {
+ var ids = Object.keys(targets), i, j, values;
+ for (i = 0; i < ids.length; i++) {
+ values = targets[ids[i]].values;
+ for (j = 0; j < values.length; j++) {
+ if (checker(values[j].value)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ c3_chart_internal_fn.hasNegativeValueInTargets = function (targets) {
+ return this.checkValueInTargets(targets, function (v) {
+ return v < 0;
+ });
+ };
+ c3_chart_internal_fn.hasPositiveValueInTargets = function (targets) {
+ return this.checkValueInTargets(targets, function (v) {
+ return v > 0;
+ });
+ };
+ c3_chart_internal_fn.isOrderDesc = function () {
+ var config = this.config;
+ return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'desc';
+ };
+ c3_chart_internal_fn.isOrderAsc = function () {
+ var config = this.config;
+ return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'asc';
+ };
+ c3_chart_internal_fn.orderTargets = function (targets) {
+ var $$ = this, config = $$.config, orderAsc = $$.isOrderAsc(), orderDesc = $$.isOrderDesc();
+ if (orderAsc || orderDesc) {
+ targets.sort(function (t1, t2) {
+ var reducer = function (p, c) {
+ return p + Math.abs(c.value);
+ };
+ var t1Sum = t1.values.reduce(reducer, 0),
+ t2Sum = t2.values.reduce(reducer, 0);
+ return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;
+ });
+ } else if (isFunction(config.data_order)) {
+ targets.sort(config.data_order);
+ } // TODO: accept name array for order
+ return targets;
+ };
+ c3_chart_internal_fn.filterByX = function (targets, x) {
+ return this.d3.merge(targets.map(function (t) {
+ return t.values;
+ })).filter(function (v) {
+ return v.x - x === 0;
+ });
+ };
+ c3_chart_internal_fn.filterRemoveNull = function (data) {
+ return data.filter(function (d) {
+ return isValue(d.value);
+ });
+ };
+ c3_chart_internal_fn.filterByXDomain = function (targets, xDomain) {
+ return targets.map(function (t) {
+ return {
+ id: t.id,
+ id_org: t.id_org,
+ values: t.values.filter(function (v) {
+ return xDomain[0] <= v.x && v.x <= xDomain[1];
+ })
+ };
+ });
+ };
+ c3_chart_internal_fn.hasDataLabel = function () {
+ var config = this.config;
+ if (typeof config.data_labels === 'boolean' && config.data_labels) {
+ return true;
+ } else if (typeof config.data_labels === 'object' && notEmpty(config.data_labels)) {
+ return true;
+ }
+ return false;
+ };
+ c3_chart_internal_fn.getDataLabelLength = function (min, max, axisId, key) {
+ var $$ = this,
+ lengths = [0, 0], paddingCoef = 1.3;
+ $$.selectChart.select('svg').selectAll('.dummy')
+ .data([min, max])
+ .enter().append('text')
+ .text(function (d) {
+ return $$.formatByAxisId(axisId)(d);
+ })
+ .each(function (d, i) {
+ lengths[i] = this.getBoundingClientRect()[key] * paddingCoef;
+ })
+ .remove();
+ return lengths;
+ };
+ c3_chart_internal_fn.isNoneArc = function (d) {
+ return this.hasTarget(this.data.targets, d.id);
+ },
+ c3_chart_internal_fn.isArc = function (d) {
+ return 'data' in d && this.hasTarget(this.data.targets, d.data.id);
+ };
+ c3_chart_internal_fn.findSameXOfValues = function (values, index) {
+ var i, targetX = values[index].x, sames = [];
+ for (i = index - 1; i >= 0; i--) {
+ if (targetX !== values[i].x) {
+ break;
+ }
+ sames.push(values[i]);
+ }
+ for (i = index; i < values.length; i++) {
+ if (targetX !== values[i].x) {
+ break;
+ }
+ sames.push(values[i]);
+ }
+ return sames;
+ };
+
+ c3_chart_internal_fn.findClosestFromTargets = function (targets, pos) {
+ var $$ = this, candidates;
+
+ // map to array of closest points of each target
+ candidates = targets.map(function (target) {
+ return $$.findClosest(target.values, pos);
+ });
+
+ // decide closest point and return
+ return $$.findClosest(candidates, pos);
+ };
+ c3_chart_internal_fn.findClosest = function (values, pos) {
+ var $$ = this, minDist = 100, closest;
+
+ // find mouseovering bar
+ values.filter(function (v) {
+ return v && $$.isBarType(v.id);
+ }).forEach(function (v) {
+ var shape = $$.main.select('.' + CLASS.bars + $$.getTargetSelectorSuffix(v.id) + ' .' + CLASS.bar + '-' + v.index).node();
+ if (!closest && $$.isWithinBar(shape)) {
+ closest = v;
+ }
+ });
+
+ // find closest point from non-bar
+ values.filter(function (v) {
+ return v && !$$.isBarType(v.id);
+ }).forEach(function (v) {
+ var d = $$.dist(v, pos);
+ if (d < minDist) {
+ minDist = d;
+ closest = v;
+ }
+ });
+
+ return closest;
+ };
+ c3_chart_internal_fn.dist = function (data, pos) {
+ var $$ = this, config = $$.config,
+ xIndex = config.axis_rotated ? 1 : 0,
+ yIndex = config.axis_rotated ? 0 : 1,
+ y = $$.circleY(data, data.index),
+ x = $$.x(data.x);
+ return Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2);
+ };
+ c3_chart_internal_fn.convertValuesToStep = function (values) {
+ var converted = [].concat(values), i;
+
+ if (!this.isCategorized()) {
+ return values;
+ }
+
+ for (i = values.length + 1; 0 < i; i--) {
+ converted[i] = converted[i - 1];
+ }
+
+ converted[0] = {
+ x: converted[0].x - 1,
+ value: converted[0].value,
+ id: converted[0].id
+ };
+ converted[values.length + 1] = {
+ x: converted[values.length].x + 1,
+ value: converted[values.length].value,
+ id: converted[values.length].id
+ };
+
+ return converted;
+ };
+ c3_chart_internal_fn.updateDataAttributes = function (name, attrs) {
+ var $$ = this, config = $$.config, current = config['data_' + name];
+ if (typeof attrs === 'undefined') {
+ return current;
+ }
+ Object.keys(attrs).forEach(function (id) {
+ current[id] = attrs[id];
+ });
+ $$.redraw({withLegend: true});
+ return current;
+ };
+
+ c3_chart_internal_fn.convertUrlToData = function (url, mimeType, keys, done) {
+ var $$ = this, type = mimeType ? mimeType : 'csv';
+ $$.d3.xhr(url, function (error, data) {
+ var d;
+ if (type === 'json') {
+ d = $$.convertJsonToData(JSON.parse(data.response), keys);
+ } else if (type === 'tsv') {
+ d = $$.convertTsvToData(data.response);
+ } else {
+ d = $$.convertCsvToData(data.response);
+ }
+ done.call($$, d);
+ });
+ };
+ c3_chart_internal_fn.convertXsvToData = function (xsv, parser) {
+ var rows = parser.parseRows(xsv), d;
+ if (rows.length === 1) {
+ d = [{}];
+ rows[0].forEach(function (id) {
+ d[0][id] = null;
+ });
+ } else {
+ d = parser.parse(xsv);
+ }
+ return d;
+ };
+ c3_chart_internal_fn.convertCsvToData = function (csv) {
+ return this.convertXsvToData(csv, this.d3.csv);
+ };
+ c3_chart_internal_fn.convertTsvToData = function (tsv) {
+ return this.convertXsvToData(tsv, this.d3.tsv);
+ };
+ c3_chart_internal_fn.convertJsonToData = function (json, keys) {
+ var $$ = this,
+ new_rows = [], targetKeys, data;
+ if (keys) { // when keys specified, json would be an array that includes objects
+ targetKeys = keys.value;
+ if (keys.x) {
+ targetKeys.push(keys.x);
+ $$.config.data_x = keys.x;
+ }
+ new_rows.push(targetKeys);
+ json.forEach(function (o) {
+ var new_row = [];
+ targetKeys.forEach(function (key) {
+ // convert undefined to null because undefined data will be removed in convertDataToTargets()
+ var v = isUndefined(o[key]) ? null : o[key];
+ new_row.push(v);
+ });
+ new_rows.push(new_row);
+ });
+ data = $$.convertRowsToData(new_rows);
+ } else {
+ Object.keys(json).forEach(function (key) {
+ new_rows.push([key].concat(json[key]));
+ });
+ data = $$.convertColumnsToData(new_rows);
+ }
+ return data;
+ };
+ c3_chart_internal_fn.convertRowsToData = function (rows) {
+ var keys = rows[0], new_row = {}, new_rows = [], i, j;
+ for (i = 1; i < rows.length; i++) {
+ new_row = {};
+ for (j = 0; j < rows[i].length; j++) {
+ if (isUndefined(rows[i][j])) {
+ throw new Error("Source data is missing a component at (" + i + "," + j + ")!");
+ }
+ new_row[keys[j]] = rows[i][j];
+ }
+ new_rows.push(new_row);
+ }
+ return new_rows;
+ };
+ c3_chart_internal_fn.convertColumnsToData = function (columns) {
+ var new_rows = [], i, j, key;
+ for (i = 0; i < columns.length; i++) {
+ key = columns[i][0];
+ for (j = 1; j < columns[i].length; j++) {
+ if (isUndefined(new_rows[j - 1])) {
+ new_rows[j - 1] = {};
+ }
+ if (isUndefined(columns[i][j])) {
+ throw new Error("Source data is missing a component at (" + i + "," + j + ")!");
+ }
+ new_rows[j - 1][key] = columns[i][j];
+ }
+ }
+ return new_rows;
+ };
+ c3_chart_internal_fn.convertDataToTargets = function (data, appendXs) {
+ var $$ = this, config = $$.config,
+ ids = $$.d3.keys(data[0]).filter($$.isNotX, $$),
+ xs = $$.d3.keys(data[0]).filter($$.isX, $$),
+ targets;
+
+ // save x for update data by load when custom x and c3.x API
+ ids.forEach(function (id) {
+ var xKey = $$.getXKey(id);
+
+ if ($$.isCustomX() || $$.isTimeSeries()) {
+ // if included in input data
+ if (xs.indexOf(xKey) >= 0) {
+ $$.data.xs[id] = (appendXs && $$.data.xs[id] ? $$.data.xs[id] : []).concat(
+ data.map(function (d) {
+ return d[xKey];
+ })
+ .filter(isValue)
+ .map(function (rawX, i) {
+ return $$.generateTargetX(rawX, id, i);
+ })
+ );
+ }
+ // if not included in input data, find from preloaded data of other id's x
+ else if (config.data_x) {
+ $$.data.xs[id] = $$.getOtherTargetXs();
+ }
+ // if not included in input data, find from preloaded data
+ else if (notEmpty(config.data_xs)) {
+ $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);
+ }
+ // MEMO: if no x included, use same x of current will be used
+ } else {
+ $$.data.xs[id] = data.map(function (d, i) {
+ return i;
+ });
+ }
+ });
+
+
+ // check x is defined
+ ids.forEach(function (id) {
+ if (!$$.data.xs[id]) {
+ throw new Error('x is not defined for id = "' + id + '".');
+ }
+ });
+
+ // convert to target
+ targets = ids.map(function (id, index) {
+ var convertedId = config.data_idConverter(id);
+ return {
+ id: convertedId,
+ id_org: id,
+ values: data.map(function (d, i) {
+ var xKey = $$.getXKey(id), rawX = d[xKey], x = $$.generateTargetX(rawX, id, i);
+ // use x as categories if custom x and categorized
+ if ($$.isCustomX() && $$.isCategorized() && index === 0 && rawX) {
+ if (i === 0) {
+ config.axis_x_categories = [];
+ }
+ config.axis_x_categories.push(rawX);
+ }
+ // mark as x = undefined if value is undefined and filter to remove after mapped
+ if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {
+ x = undefined;
+ }
+ return {x: x, value: d[id] !== null && !isNaN(d[id]) ? +d[id] : null, id: convertedId};
+ }).filter(function (v) {
+ return isDefined(v.x);
+ })
+ };
+ });
+
+ // finish targets
+ targets.forEach(function (t) {
+ var i;
+ // sort values by its x
+ if (config.data_xSort) {
+ t.values = t.values.sort(function (v1, v2) {
+ var x1 = v1.x || v1.x === 0 ? v1.x : Infinity,
+ x2 = v2.x || v2.x === 0 ? v2.x : Infinity;
+ return x1 - x2;
+ });
+ }
+ // indexing each value
+ i = 0;
+ t.values.forEach(function (v) {
+ v.index = i++;
+ });
+ // this needs to be sorted because its index and value.index is identical
+ $$.data.xs[t.id].sort(function (v1, v2) {
+ return v1 - v2;
+ });
+ });
+
+ // set target types
+ if (config.data_type) {
+ $$.setTargetType($$.mapToIds(targets).filter(function (id) {
+ return !(id in config.data_types);
+ }), config.data_type);
+ }
+
+ // cache as original id keyed
+ targets.forEach(function (d) {
+ $$.addCache(d.id_org, d);
+ });
+
+ return targets;
+ };
+
+ c3_chart_internal_fn.load = function (targets, args) {
+ var $$ = this;
+ if (targets) {
+ // filter loading targets if needed
+ if (args.filter) {
+ targets = targets.filter(args.filter);
+ }
+ // set type if args.types || args.type specified
+ if (args.type || args.types) {
+ targets.forEach(function (t) {
+ $$.setTargetType(t.id, args.types ? args.types[t.id] : args.type);
+ });
+ }
+ // Update/Add data
+ $$.data.targets.forEach(function (d) {
+ for (var i = 0; i < targets.length; i++) {
+ if (d.id === targets[i].id) {
+ d.values = targets[i].values;
+ targets.splice(i, 1);
+ break;
+ }
+ }
+ });
+ $$.data.targets = $$.data.targets.concat(targets); // add remained
+ }
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Redraw with new targets
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+
+ if (args.done) {
+ args.done();
+ }
+ };
+ c3_chart_internal_fn.loadFromArgs = function (args) {
+ var $$ = this;
+ if (args.data) {
+ $$.load($$.convertDataToTargets(args.data), args);
+ }
+ else if (args.url) {
+ $$.convertUrlToData(args.url, args.mimeType, args.keys, function (data) {
+ $$.load($$.convertDataToTargets(data), args);
+ });
+ }
+ else if (args.json) {
+ $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);
+ }
+ else if (args.rows) {
+ $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);
+ }
+ else if (args.columns) {
+ $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);
+ }
+ else {
+ $$.load(null, args);
+ }
+ };
+ c3_chart_internal_fn.unload = function (targetIds, done) {
+ var $$ = this;
+ if (!done) {
+ done = function () {
+ };
+ }
+ // filter existing target
+ targetIds = targetIds.filter(function (id) {
+ return $$.hasTarget($$.data.targets, id);
+ });
+ // If no target, call done and return
+ if (!targetIds || targetIds.length === 0) {
+ done();
+ return;
+ }
+ $$.svg.selectAll(targetIds.map(function (id) {
+ return $$.selectorTarget(id);
+ }))
+ .transition()
+ .style('opacity', 0)
+ .remove()
+ .call($$.endall, done);
+ targetIds.forEach(function (id) {
+ // Reset fadein for future load
+ $$.withoutFadeIn[id] = false;
+ // Remove target's elements
+ if ($$.legend) {
+ $$.legend.selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)).remove();
+ }
+ // Remove target
+ $$.data.targets = $$.data.targets.filter(function (t) {
+ return t.id !== id;
+ });
+ });
+ };
+
+ c3_chart_internal_fn.categoryName = function (i) {
+ var config = this.config;
+ return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;
+ };
+
+ c3_chart_internal_fn.initEventRect = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.eventRects)
+ .style('fill-opacity', 0);
+ };
+ c3_chart_internal_fn.redrawEventRect = function () {
+ var $$ = this, config = $$.config,
+ eventRectUpdate, maxDataCountTarget,
+ isMultipleX = $$.isMultipleX();
+
+ // rects for mouseover
+ var eventRects = $$.main.select('.' + CLASS.eventRects)
+ .style('cursor', config.zoom_enabled ? config.axis_rotated ? 'ns-resize' : 'ew-resize' : null)
+ .classed(CLASS.eventRectsMultiple, isMultipleX)
+ .classed(CLASS.eventRectsSingle, !isMultipleX);
+
+ // clear old rects
+ eventRects.selectAll('.' + CLASS.eventRect).remove();
+
+ // open as public variable
+ $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);
+
+ if (isMultipleX) {
+ eventRectUpdate = $$.eventRect.data([0]);
+ // enter : only one rect will be added
+ $$.generateEventRectsForMultipleXs(eventRectUpdate.enter());
+ // update
+ $$.updateEventRect(eventRectUpdate);
+ // exit : not needed because always only one rect exists
+ }
+ else {
+ // Set data and update $$.eventRect
+ maxDataCountTarget = $$.getMaxDataCountTarget($$.data.targets);
+ eventRects.datum(maxDataCountTarget ? maxDataCountTarget.values : []);
+ $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);
+ eventRectUpdate = $$.eventRect.data(function (d) {
+ return d;
+ });
+ // enter
+ $$.generateEventRectsForSingleX(eventRectUpdate.enter());
+ // update
+ $$.updateEventRect(eventRectUpdate);
+ // exit
+ eventRectUpdate.exit().remove();
+ }
+ };
+ c3_chart_internal_fn.updateEventRect = function (eventRectUpdate) {
+ var $$ = this, config = $$.config,
+ x, y, w, h, rectW, rectX;
+
+ // set update selection if null
+ eventRectUpdate = eventRectUpdate || $$.eventRect.data(function (d) {
+ return d;
+ });
+
+ if ($$.isMultipleX()) {
+ // TODO: rotated not supported yet
+ x = 0;
+ y = 0;
+ w = $$.width;
+ h = $$.height;
+ }
+ else {
+ if (($$.isCustomX() || $$.isTimeSeries()) && !$$.isCategorized()) {
+
+ // update index for x that is used by prevX and nextX
+ $$.updateXs();
+
+ rectW = function (d) {
+ var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index);
+
+ // if there this is a single data point make the eventRect full width (or height)
+ if (prevX === null && nextX === null) {
+ return config.axis_rotated ? $$.height : $$.width;
+ }
+
+ if (prevX === null) {
+ prevX = $$.x.domain()[0];
+ }
+ if (nextX === null) {
+ nextX = $$.x.domain()[1];
+ }
+
+ return Math.max(0, ($$.x(nextX) - $$.x(prevX)) / 2);
+ };
+ rectX = function (d) {
+ var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index),
+ thisX = $$.data.xs[d.id][d.index];
+
+ // if there this is a single data point position the eventRect at 0
+ if (prevX === null && nextX === null) {
+ return 0;
+ }
+
+ if (prevX === null) {
+ prevX = $$.x.domain()[0];
+ }
+
+ return ($$.x(thisX) + $$.x(prevX)) / 2;
+ };
+ } else {
+ rectW = $$.getEventRectWidth();
+ rectX = function (d) {
+ return $$.x(d.x) - (rectW / 2);
+ };
+ }
+ x = config.axis_rotated ? 0 : rectX;
+ y = config.axis_rotated ? rectX : 0;
+ w = config.axis_rotated ? $$.width : rectW;
+ h = config.axis_rotated ? rectW : $$.height;
+ }
+
+ eventRectUpdate
+ .attr('class', $$.classEvent.bind($$))
+ .attr("x", x)
+ .attr("y", y)
+ .attr("width", w)
+ .attr("height", h);
+ };
+ c3_chart_internal_fn.generateEventRectsForSingleX = function (eventRectEnter) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ eventRectEnter.append("rect")
+ .attr("class", $$.classEvent.bind($$))
+ .style("cursor", config.data_selection_enabled && config.data_selection_grouped ? "pointer" : null)
+ .on('mouseover', function (d) {
+ var index = d.index, selectedData, newData;
+
+ if ($$.dragging || $$.flowing) {
+ return;
+ } // do nothing while dragging/flowing
+ if ($$.hasArcType()) {
+ return;
+ }
+
+ selectedData = $$.data.targets.map(function (t) {
+ return $$.addName($$.getValueOnIndex(t.values, index));
+ });
+
+ // Sort selectedData as names order
+ newData = [];
+ Object.keys(config.data_names).forEach(function (id) {
+ for (var j = 0; j < selectedData.length; j++) {
+ if (selectedData[j] && selectedData[j].id === id) {
+ newData.push(selectedData[j]);
+ selectedData.shift(j);
+ break;
+ }
+ }
+ });
+ selectedData = newData.concat(selectedData); // Add remained
+
+ // Expand shapes for selection
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(index, null, true);
+ }
+ $$.expandBars(index, null, true);
+
+ // Call event handler
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ config.data_onmouseover.call($$.api, d);
+ });
+ })
+ .on('mouseout', function (d) {
+ var index = d.index;
+ if ($$.hasArcType()) {
+ return;
+ }
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ // Undo expanded shapes
+ $$.unexpandCircles();
+ $$.unexpandBars();
+ // Call event handler
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ config.data_onmouseout.call($$.api, d);
+ });
+ })
+ .on('mousemove', function (d) {
+ var selectedData, index = d.index,
+ eventRect = $$.svg.select('.' + CLASS.eventRect + '-' + index);
+
+ if ($$.dragging || $$.flowing) {
+ return;
+ } // do nothing while dragging/flowing
+ if ($$.hasArcType()) {
+ return;
+ }
+
+ if ($$.isStepType(d) && $$.config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {
+ index -= 1;
+ }
+
+ // Show tooltip
+ selectedData = $$.filterTargetsToShow($$.data.targets).map(function (t) {
+ return $$.addName($$.getValueOnIndex(t.values, index));
+ });
+
+ if (config.tooltip_grouped) {
+ $$.showTooltip(selectedData, this);
+ $$.showXGridFocus(selectedData);
+ }
+
+ if (config.tooltip_grouped && (!config.data_selection_enabled || config.data_selection_grouped)) {
+ return;
+ }
+
+ $$.main.selectAll('.' + CLASS.shape + '-' + index)
+ .each(function () {
+ d3.select(this).classed(CLASS.EXPANDED, true);
+ if (config.data_selection_enabled) {
+ eventRect.style('cursor', config.data_selection_grouped ? 'pointer' : null);
+ }
+ if (!config.tooltip_grouped) {
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ if (!config.data_selection_grouped) {
+ $$.unexpandCircles(index);
+ $$.unexpandBars(index);
+ }
+ }
+ })
+ .filter(function (d) {
+ return $$.isWithinShape(this, d);
+ })
+ .each(function (d) {
+ if (config.data_selection_enabled && (config.data_selection_grouped || config.data_selection_isselectable(d))) {
+ eventRect.style('cursor', 'pointer');
+ }
+ if (!config.tooltip_grouped) {
+ $$.showTooltip([d], this);
+ $$.showXGridFocus([d]);
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(index, d.id, true);
+ }
+ $$.expandBars(index, d.id, true);
+ }
+ });
+ })
+ .on('click', function (d) {
+ var index = d.index;
+ if ($$.hasArcType() || !$$.toggleShape) {
+ return;
+ }
+ if ($$.cancelClick) {
+ $$.cancelClick = false;
+ return;
+ }
+ if ($$.isStepType(d) && config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {
+ index -= 1;
+ }
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ if (config.data_selection_grouped || $$.isWithinShape(this, d)) {
+ $$.toggleShape(this, d, index);
+ $$.config.data_onclick.call($$.api, d, this);
+ }
+ });
+ })
+ .call(
+ d3.behavior.drag().origin(Object)
+ .on('drag', function () {
+ $$.drag(d3.mouse(this));
+ })
+ .on('dragstart', function () {
+ $$.dragstart(d3.mouse(this));
+ })
+ .on('dragend', function () {
+ $$.dragend();
+ })
+ );
+ };
+
+ c3_chart_internal_fn.generateEventRectsForMultipleXs = function (eventRectEnter) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+
+ function mouseout() {
+ $$.svg.select('.' + CLASS.eventRect).style('cursor', null);
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ $$.unexpandCircles();
+ $$.unexpandBars();
+ }
+
+ eventRectEnter.append('rect')
+ .attr('x', 0)
+ .attr('y', 0)
+ .attr('width', $$.width)
+ .attr('height', $$.height)
+ .attr('class', CLASS.eventRect)
+ .on('mouseout', function () {
+ if ($$.hasArcType()) {
+ return;
+ }
+ mouseout();
+ })
+ .on('mousemove', function () {
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ var mouse, closest, sameXData, selectedData;
+
+ if ($$.dragging) {
+ return;
+ } // do nothing when dragging
+ if ($$.hasArcType(targetsToShow)) {
+ return;
+ }
+
+ mouse = d3.mouse(this);
+ closest = $$.findClosestFromTargets(targetsToShow, mouse);
+
+ if ($$.mouseover && (!closest || closest.id !== $$.mouseover.id)) {
+ config.data_onmouseout.call($$.api, $$.mouseover);
+ $$.mouseover = undefined;
+ }
+
+ if (!closest) {
+ mouseout();
+ return;
+ }
+
+ if ($$.isScatterType(closest) || !config.tooltip_grouped) {
+ sameXData = [closest];
+ } else {
+ sameXData = $$.filterByX(targetsToShow, closest.x);
+ }
+
+ // show tooltip when cursor is close to some point
+ selectedData = sameXData.map(function (d) {
+ return $$.addName(d);
+ });
+ $$.showTooltip(selectedData, this);
+
+ // expand points
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(closest.index, closest.id, true);
+ }
+ $$.expandBars(closest.index, closest.id, true);
+
+ // Show xgrid focus line
+ $$.showXGridFocus(selectedData);
+
+ // Show cursor as pointer if point is close to mouse position
+ if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {
+ $$.svg.select('.' + CLASS.eventRect).style('cursor', 'pointer');
+ if (!$$.mouseover) {
+ config.data_onmouseover.call($$.api, closest);
+ $$.mouseover = closest;
+ }
+ }
+ })
+ .on('click', function () {
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ var mouse, closest;
+
+ if ($$.hasArcType(targetsToShow)) {
+ return;
+ }
+
+ mouse = d3.mouse(this);
+ closest = $$.findClosestFromTargets(targetsToShow, mouse);
+
+ if (!closest) {
+ return;
+ }
+
+ // select if selection enabled
+ if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {
+ $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(closest.id)).select('.' + CLASS.shape + '-' + closest.index).each(function () {
+ if (config.data_selection_grouped || $$.isWithinShape(this, closest)) {
+ $$.toggleShape(this, closest, closest.index);
+ $$.config.data_onclick.call($$.api, closest, this);
+ }
+ });
+ }
+ })
+ .call(
+ d3.behavior.drag().origin(Object)
+ .on('drag', function () {
+ $$.drag(d3.mouse(this));
+ })
+ .on('dragstart', function () {
+ $$.dragstart(d3.mouse(this));
+ })
+ .on('dragend', function () {
+ $$.dragend();
+ })
+ );
+ };
+ c3_chart_internal_fn.dispatchEvent = function (type, index, mouse) {
+ var $$ = this,
+ selector = '.' + CLASS.eventRect + (!$$.isMultipleX() ? '-' + index : ''),
+ eventRect = $$.main.select(selector).node(),
+ box = eventRect.getBoundingClientRect(),
+ x = box.left + (mouse ? mouse[0] : 0),
+ y = box.top + (mouse ? mouse[1] : 0),
+ event = document.createEvent("MouseEvents");
+
+ event.initMouseEvent(type, true, true, window, 0, x, y, x, y,
+ false, false, false, false, 0, null);
+ eventRect.dispatchEvent(event);
+ };
+
+ c3_chart_internal_fn.getCurrentWidth = function () {
+ var $$ = this, config = $$.config;
+ return config.size_width ? config.size_width : $$.getParentWidth();
+ };
+ c3_chart_internal_fn.getCurrentHeight = function () {
+ var $$ = this, config = $$.config,
+ h = config.size_height ? config.size_height : $$.getParentHeight();
+ return h > 0 ? h : 320 / ($$.hasType('gauge') ? 2 : 1);
+ };
+ c3_chart_internal_fn.getCurrentPaddingTop = function () {
+ var config = this.config;
+ return isValue(config.padding_top) ? config.padding_top : 0;
+ };
+ c3_chart_internal_fn.getCurrentPaddingBottom = function () {
+ var config = this.config;
+ return isValue(config.padding_bottom) ? config.padding_bottom : 0;
+ };
+ c3_chart_internal_fn.getCurrentPaddingLeft = function (withoutRecompute) {
+ var $$ = this, config = $$.config;
+ if (isValue(config.padding_left)) {
+ return config.padding_left;
+ } else if (config.axis_rotated) {
+ return !config.axis_x_show ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);
+ } else if (!config.axis_y_show || config.axis_y_inner) { // && !config.axis_rotated
+ return $$.getYAxisLabelPosition().isOuter ? 30 : 1;
+ } else {
+ return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));
+ }
+ };
+ c3_chart_internal_fn.getCurrentPaddingRight = function () {
+ var $$ = this, config = $$.config,
+ defaultPadding = 10, legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;
+ if (isValue(config.padding_right)) {
+ return config.padding_right + 1; // 1 is needed not to hide tick line
+ } else if (config.axis_rotated) {
+ return defaultPadding + legendWidthOnRight;
+ } else if (!config.axis_y2_show || config.axis_y2_inner) { // && !config.axis_rotated
+ return 2 + legendWidthOnRight + ($$.getY2AxisLabelPosition().isOuter ? 20 : 0);
+ } else {
+ return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;
+ }
+ };
+
+ c3_chart_internal_fn.getParentRectValue = function (key) {
+ var parent = this.selectChart.node(), v;
+ while (parent && parent.tagName !== 'BODY') {
+ v = parent.getBoundingClientRect()[key];
+ if (v) {
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ return v;
+ };
+ c3_chart_internal_fn.getParentWidth = function () {
+ return this.getParentRectValue('width');
+ };
+ c3_chart_internal_fn.getParentHeight = function () {
+ var h = this.selectChart.style('height');
+ return h.indexOf('px') > 0 ? +h.replace('px', '') : 0;
+ };
+
+
+ c3_chart_internal_fn.getSvgLeft = function (withoutRecompute) {
+ var $$ = this, config = $$.config,
+ hasLeftAxisRect = config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner),
+ leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,
+ leftAxis = $$.main.select('.' + leftAxisClass).node(),
+ svgRect = leftAxis && hasLeftAxisRect ? leftAxis.getBoundingClientRect() : {right: 0},
+ chartRect = $$.selectChart.node().getBoundingClientRect(),
+ hasArc = $$.hasArcType(),
+ svgLeft = svgRect.right - chartRect.left - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));
+ return svgLeft > 0 ? svgLeft : 0;
+ };
+
+
+ c3_chart_internal_fn.getAxisWidthByAxisId = function (id, withoutRecompute) {
+ var $$ = this, position = $$.getAxisLabelPositionById(id);
+ return $$.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40);
+ };
+ c3_chart_internal_fn.getHorizontalAxisHeight = function (axisId) {
+ var $$ = this, config = $$.config, h = 30;
+ if (axisId === 'x' && !config.axis_x_show) {
+ return 8;
+ }
+ if (axisId === 'x' && config.axis_x_height) {
+ return config.axis_x_height;
+ }
+ if (axisId === 'y' && !config.axis_y_show) {
+ return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1;
+ }
+ if (axisId === 'y2' && !config.axis_y2_show) {
+ return $$.rotated_padding_top;
+ }
+ // Calculate x axis height when tick rotated
+ if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {
+ h = $$.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - config.axis_x_tick_rotate) / 180);
+ }
+ return h + ($$.getAxisLabelPositionById(axisId).isInner ? 0 : 10) + (axisId === 'y2' ? -10 : 0);
+ };
+
+ c3_chart_internal_fn.getEventRectWidth = function () {
+ var $$ = this;
+ var target = $$.getMaxDataCountTarget($$.data.targets),
+ firstData, lastData, base, maxDataCount, ratio, w;
+ if (!target) {
+ return 0;
+ }
+ firstData = target.values[0], lastData = target.values[target.values.length - 1];
+ base = $$.x(lastData.x) - $$.x(firstData.x);
+ if (base === 0) {
+ return $$.config.axis_rotated ? $$.height : $$.width;
+ }
+ maxDataCount = $$.getMaxDataCount();
+ ratio = ($$.hasType('bar') ? (maxDataCount - ($$.isCategorized() ? 0.25 : 1)) / maxDataCount : 1);
+ w = maxDataCount > 1 ? (base * ratio) / (maxDataCount - 1) : base;
+ return w < 1 ? 1 : w;
+ };
+
+ c3_chart_internal_fn.getShapeIndices = function (typeFilter) {
+ var $$ = this, config = $$.config,
+ indices = {}, i = 0, j, k;
+ $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {
+ for (j = 0; j < config.data_groups.length; j++) {
+ if (config.data_groups[j].indexOf(d.id) < 0) {
+ continue;
+ }
+ for (k = 0; k < config.data_groups[j].length; k++) {
+ if (config.data_groups[j][k] in indices) {
+ indices[d.id] = indices[config.data_groups[j][k]];
+ break;
+ }
+ }
+ }
+ if (isUndefined(indices[d.id])) {
+ indices[d.id] = i++;
+ }
+ });
+ indices.__max__ = i - 1;
+ return indices;
+ };
+ c3_chart_internal_fn.getShapeX = function (offset, targetsNum, indices, isSub) {
+ var $$ = this, scale = isSub ? $$.subX : $$.x;
+ return function (d) {
+ var index = d.id in indices ? indices[d.id] : 0;
+ return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;
+ };
+ };
+ c3_chart_internal_fn.getShapeY = function (isSub) {
+ var $$ = this;
+ return function (d) {
+ var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);
+ return scale(d.value);
+ };
+ };
+ c3_chart_internal_fn.getShapeOffset = function (typeFilter, indices, isSub) {
+ var $$ = this,
+ targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))),
+ targetIds = targets.map(function (t) {
+ return t.id;
+ });
+ return function (d, i) {
+ var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id),
+ y0 = scale(0), offset = y0;
+ targets.forEach(function (t) {
+ var values = $$.isStepType(d) ? $$.convertValuesToStep(t.values) : t.values;
+ if (t.id === d.id || indices[t.id] !== indices[d.id]) {
+ return;
+ }
+ if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {
+ if (values[i].value * d.value >= 0) {
+ offset += scale(values[i].value) - y0;
+ }
+ }
+ });
+ return offset;
+ };
+ };
+ c3_chart_internal_fn.isWithinShape = function (that, d) {
+ var $$ = this,
+ shape = $$.d3.select(that), isWithin;
+ if (!$$.isTargetToShow(d.id)) {
+ isWithin = false;
+ }
+ else if (that.nodeName === 'circle') {
+ isWithin = $$.isStepType(d) ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);
+ }
+ else if (that.nodeName === 'path') {
+ isWithin = shape.classed(CLASS.bar) ? $$.isWithinBar(that) : true;
+ }
+ return isWithin;
+ };
+
+
+ c3_chart_internal_fn.getInterpolate = function (d) {
+ var $$ = this;
+ return $$.isSplineType(d) ? "cardinal" : $$.isStepType(d) ? $$.config.line_step_type : "linear";
+ };
+
+ c3_chart_internal_fn.initLine = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartLines);
+ };
+ c3_chart_internal_fn.updateTargetsForLine = function (targets) {
+ var $$ = this, config = $$.config,
+ mainLineUpdate, mainLineEnter,
+ classChartLine = $$.classChartLine.bind($$),
+ classLines = $$.classLines.bind($$),
+ classAreas = $$.classAreas.bind($$),
+ classCircles = $$.classCircles.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainLineUpdate = $$.main.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartLine(d) + classFocus(d);
+ });
+ mainLineEnter = mainLineUpdate.enter().append('g')
+ .attr('class', classChartLine)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ // Lines for each data
+ mainLineEnter.append('g')
+ .attr("class", classLines);
+ // Areas
+ mainLineEnter.append('g')
+ .attr('class', classAreas);
+ // Circles for each data point on lines
+ mainLineEnter.append('g')
+ .attr("class", function (d) {
+ return $$.generateClass(CLASS.selectedCircles, d.id);
+ });
+ mainLineEnter.append('g')
+ .attr("class", classCircles)
+ .style("cursor", function (d) {
+ return config.data_selection_isselectable(d) ? "pointer" : null;
+ });
+ // Update date for selected circles
+ targets.forEach(function (t) {
+ $$.main.selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)).selectAll('.' + CLASS.selectedCircle).each(function (d) {
+ d.value = t.values[d.index].value;
+ });
+ });
+ // MEMO: can not keep same color...
+ //mainLineUpdate.exit().remove();
+ };
+ c3_chart_internal_fn.redrawLine = function (durationForExit) {
+ var $$ = this;
+ $$.mainLine = $$.main.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)
+ .data($$.lineData.bind($$));
+ $$.mainLine.enter().append('path')
+ .attr('class', $$.classLine.bind($$))
+ .style("stroke", $$.color);
+ $$.mainLine
+ .style("opacity", $$.initialOpacity.bind($$))
+ .style('shape-rendering', function (d) {
+ return $$.isStepType(d) ? 'crispEdges' : '';
+ })
+ .attr('transform', null);
+ $$.mainLine.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForLine = function (transitions, drawLine) {
+ var $$ = this;
+ transitions.push($$.mainLine.transition()
+ .attr("d", drawLine)
+ .style("stroke", $$.color)
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.generateDrawLine = function (lineIndices, isSub) {
+ var $$ = this, config = $$.config,
+ line = $$.d3.svg.line(),
+ getPoints = $$.generateGetLinePoints(lineIndices, isSub),
+ yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,
+ xValue = function (d) {
+ return (isSub ? $$.subxx : $$.xx).call($$, d);
+ },
+ yValue = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);
+ };
+
+ line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);
+ if (!config.line_connectNull) {
+ line = line.defined(function (d) {
+ return d.value != null;
+ });
+ }
+ return function (d) {
+ var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,
+ x = isSub ? $$.x : $$.subX, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;
+ if ($$.isLineType(d)) {
+ if (config.data_regions[d.id]) {
+ path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);
+ } else {
+ if ($$.isStepType(d)) {
+ values = $$.convertValuesToStep(values);
+ }
+ path = line.interpolate($$.getInterpolate(d))(values);
+ }
+ } else {
+ if (values[0]) {
+ x0 = x(values[0].x);
+ y0 = y(values[0].value);
+ }
+ path = config.axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0;
+ }
+ return path ? path : "M 0 0";
+ };
+ };
+ c3_chart_internal_fn.generateGetLinePoints = function (lineIndices, isSub) { // partial duplication of generateGetBarPoints
+ var $$ = this, config = $$.config,
+ lineTargetsNum = lineIndices.__max__ + 1,
+ x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub),
+ y = $$.getShapeY(!!isSub),
+ lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = lineOffset(d, i) || y0, // offset is for stacked area chart
+ posX = x(d), posY = y(d);
+ // fix posY not to overflow opposite quadrant
+ if (config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 1 point that marks the line position
+ return [
+ [posX, posY - (y0 - offset)],
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, posY - (y0 - offset)] // needed for compatibility
+ ];
+ };
+ };
+
+
+ c3_chart_internal_fn.lineWithRegions = function (d, x, y, _regions) {
+ var $$ = this, config = $$.config,
+ prev = -1, i, j,
+ s = "M", sWithRegion,
+ xp, yp, dx, dy, dd, diff, diffx2,
+ xValue, yValue,
+ regions = [];
+
+ function isWithinRegions(x, regions) {
+ var i;
+ for (i = 0; i < regions.length; i++) {
+ if (regions[i].start < x && x <= regions[i].end) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Check start/end of regions
+ if (isDefined(_regions)) {
+ for (i = 0; i < _regions.length; i++) {
+ regions[i] = {};
+ if (isUndefined(_regions[i].start)) {
+ regions[i].start = d[0].x;
+ } else {
+ regions[i].start = $$.isTimeSeries() ? $$.parseDate(_regions[i].start) : _regions[i].start;
+ }
+ if (isUndefined(_regions[i].end)) {
+ regions[i].end = d[d.length - 1].x;
+ } else {
+ regions[i].end = $$.isTimeSeries() ? $$.parseDate(_regions[i].end) : _regions[i].end;
+ }
+ }
+ }
+
+ // Set scales
+ xValue = config.axis_rotated ? function (d) {
+ return y(d.value);
+ } : function (d) {
+ return x(d.x);
+ };
+ yValue = config.axis_rotated ? function (d) {
+ return x(d.x);
+ } : function (d) {
+ return y(d.value);
+ };
+
+ // Define svg generator function for region
+ if ($$.isTimeSeries()) {
+ sWithRegion = function (d0, d1, j, diff) {
+ var x0 = d0.x.getTime(), x_diff = d1.x - d0.x,
+ xv0 = new Date(x0 + x_diff * j),
+ xv1 = new Date(x0 + x_diff * (j + diff));
+ return "M" + x(xv0) + " " + y(yp(j)) + " " + x(xv1) + " " + y(yp(j + diff));
+ };
+ } else {
+ sWithRegion = function (d0, d1, j, diff) {
+ return "M" + x(xp(j), true) + " " + y(yp(j)) + " " + x(xp(j + diff), true) + " " + y(yp(j + diff));
+ };
+ }
+
+ // Generate
+ for (i = 0; i < d.length; i++) {
+
+ // Draw as normal
+ if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) {
+ s += " " + xValue(d[i]) + " " + yValue(d[i]);
+ }
+ // Draw with region // TODO: Fix for horizotal charts
+ else {
+ xp = $$.getScale(d[i - 1].x, d[i].x, $$.isTimeSeries());
+ yp = $$.getScale(d[i - 1].value, d[i].value);
+
+ dx = x(d[i].x) - x(d[i - 1].x);
+ dy = y(d[i].value) - y(d[i - 1].value);
+ dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
+ diff = 2 / dd;
+ diffx2 = diff * 2;
+
+ for (j = diff; j <= 1; j += diffx2) {
+ s += sWithRegion(d[i - 1], d[i], j, diff);
+ }
+ }
+ prev = d[i].x;
+ }
+
+ return s;
+ };
+
+
+ c3_chart_internal_fn.redrawArea = function (durationForExit) {
+ var $$ = this, d3 = $$.d3;
+ $$.mainArea = $$.main.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)
+ .data($$.lineData.bind($$));
+ $$.mainArea.enter().append('path')
+ .attr("class", $$.classArea.bind($$))
+ .style("fill", $$.color)
+ .style("opacity", function () {
+ $$.orgAreaOpacity = +d3.select(this).style('opacity');
+ return 0;
+ });
+ $$.mainArea
+ .style("opacity", $$.orgAreaOpacity);
+ $$.mainArea.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForArea = function (transitions, drawArea) {
+ var $$ = this;
+ transitions.push($$.mainArea.transition()
+ .attr("d", drawArea)
+ .style("fill", $$.color)
+ .style("opacity", $$.orgAreaOpacity));
+ };
+ c3_chart_internal_fn.generateDrawArea = function (areaIndices, isSub) {
+ var $$ = this, config = $$.config, area = $$.d3.svg.area(),
+ getPoints = $$.generateGetAreaPoints(areaIndices, isSub),
+ yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,
+ xValue = function (d) {
+ return (isSub ? $$.subxx : $$.xx).call($$, d);
+ },
+ value0 = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));
+ },
+ value1 = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);
+ };
+
+ area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(value0).y1(value1);
+ if (!config.line_connectNull) {
+ area = area.defined(function (d) {
+ return d.value !== null;
+ });
+ }
+
+ return function (d) {
+ var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,
+ x0 = 0, y0 = 0, path;
+ if ($$.isAreaType(d)) {
+ if ($$.isStepType(d)) {
+ values = $$.convertValuesToStep(values);
+ }
+ path = area.interpolate($$.getInterpolate(d))(values);
+ } else {
+ if (values[0]) {
+ x0 = $$.x(values[0].x);
+ y0 = $$.getYScale(d.id)(values[0].value);
+ }
+ path = config.axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0;
+ }
+ return path ? path : "M 0 0";
+ };
+ };
+ c3_chart_internal_fn.getAreaBaseValue = function () {
+ return 0;
+ };
+ c3_chart_internal_fn.generateGetAreaPoints = function (areaIndices, isSub) { // partial duplication of generateGetBarPoints
+ var $$ = this, config = $$.config,
+ areaTargetsNum = areaIndices.__max__ + 1,
+ x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub),
+ y = $$.getShapeY(!!isSub),
+ areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = areaOffset(d, i) || y0, // offset is for stacked area chart
+ posX = x(d), posY = y(d);
+ // fix posY not to overflow opposite quadrant
+ if (config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 1 point that marks the area position
+ return [
+ [posX, offset],
+ [posX, posY - (y0 - offset)],
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, offset] // needed for compatibility
+ ];
+ };
+ };
+
+
+ c3_chart_internal_fn.redrawCircle = function () {
+ var $$ = this;
+ $$.mainCircle = $$.main.selectAll('.' + CLASS.circles).selectAll('.' + CLASS.circle)
+ .data($$.lineOrScatterData.bind($$));
+ $$.mainCircle.enter().append("circle")
+ .attr("class", $$.classCircle.bind($$))
+ .attr("r", $$.pointR.bind($$))
+ .style("fill", $$.color);
+ $$.mainCircle
+ .style("opacity", $$.initialOpacityForCircle.bind($$));
+ $$.mainCircle.exit().remove();
+ };
+ c3_chart_internal_fn.addTransitionForCircle = function (transitions, cx, cy) {
+ var $$ = this;
+ transitions.push($$.mainCircle.transition()
+ .style('opacity', $$.opacityForCircle.bind($$))
+ .style("fill", $$.color)
+ .attr("cx", cx)
+ .attr("cy", cy));
+ transitions.push($$.main.selectAll('.' + CLASS.selectedCircle).transition()
+ .attr("cx", cx)
+ .attr("cy", cy));
+ };
+ c3_chart_internal_fn.circleX = function (d) {
+ return d.x || d.x === 0 ? this.x(d.x) : null;
+ };
+ c3_chart_internal_fn.updateCircleY = function () {
+ var $$ = this, lineIndices, getPoints;
+ if ($$.config.data_groups.length > 0) {
+ lineIndices = $$.getShapeIndices($$.isLineType),
+ getPoints = $$.generateGetLinePoints(lineIndices);
+ $$.circleY = function (d, i) {
+ return getPoints(d, i)[0][1];
+ };
+ } else {
+ $$.circleY = function (d) {
+ return $$.getYScale(d.id)(d.value);
+ };
+ }
+ };
+ c3_chart_internal_fn.getCircles = function (i, id) {
+ var $$ = this;
+ return (id ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));
+ };
+ c3_chart_internal_fn.expandCircles = function (i, id, reset) {
+ var $$ = this,
+ r = $$.pointExpandedR.bind($$);
+ if (reset) {
+ $$.unexpandCircles();
+ }
+ $$.getCircles(i, id)
+ .classed(CLASS.EXPANDED, true)
+ .attr('r', r);
+ };
+ c3_chart_internal_fn.unexpandCircles = function (i) {
+ var $$ = this,
+ r = $$.pointR.bind($$);
+ $$.getCircles(i)
+ .filter(function () {
+ return $$.d3.select(this).classed(CLASS.EXPANDED);
+ })
+ .classed(CLASS.EXPANDED, false)
+ .attr('r', r);
+ };
+ c3_chart_internal_fn.pointR = function (d) {
+ var $$ = this, config = $$.config;
+ return $$.isStepType(d) ? 0 : (isFunction(config.point_r) ? config.point_r(d) : config.point_r);
+ };
+ c3_chart_internal_fn.pointExpandedR = function (d) {
+ var $$ = this, config = $$.config;
+ return config.point_focus_expand_enabled ? (config.point_focus_expand_r ? config.point_focus_expand_r : $$.pointR(d) * 1.75) : $$.pointR(d);
+ };
+ c3_chart_internal_fn.pointSelectR = function (d) {
+ var $$ = this, config = $$.config;
+ return config.point_select_r ? config.point_select_r : $$.pointR(d) * 4;
+ };
+ c3_chart_internal_fn.isWithinCircle = function (that, r) {
+ var d3 = this.d3,
+ mouse = d3.mouse(that), d3_this = d3.select(that),
+ cx = +d3_this.attr("cx"), cy = +d3_this.attr("cy");
+ return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;
+ };
+ c3_chart_internal_fn.isWithinStep = function (that, y) {
+ return Math.abs(y - this.d3.mouse(that)[1]) < 30;
+ };
+
+ c3_chart_internal_fn.initBar = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartBars);
+ };
+ c3_chart_internal_fn.updateTargetsForBar = function (targets) {
+ var $$ = this, config = $$.config,
+ mainBarUpdate, mainBarEnter,
+ classChartBar = $$.classChartBar.bind($$),
+ classBars = $$.classBars.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainBarUpdate = $$.main.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartBar(d) + classFocus(d);
+ });
+ mainBarEnter = mainBarUpdate.enter().append('g')
+ .attr('class', classChartBar)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ // Bars for each data
+ mainBarEnter.append('g')
+ .attr("class", classBars)
+ .style("cursor", function (d) {
+ return config.data_selection_isselectable(d) ? "pointer" : null;
+ });
+
+ };
+ c3_chart_internal_fn.redrawBar = function (durationForExit) {
+ var $$ = this,
+ barData = $$.barData.bind($$),
+ classBar = $$.classBar.bind($$),
+ initialOpacity = $$.initialOpacity.bind($$),
+ color = function (d) {
+ return $$.color(d.id);
+ };
+ $$.mainBar = $$.main.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)
+ .data(barData);
+ $$.mainBar.enter().append('path')
+ .attr("class", classBar)
+ .style("stroke", color)
+ .style("fill", color);
+ $$.mainBar
+ .style("opacity", initialOpacity);
+ $$.mainBar.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForBar = function (transitions, drawBar) {
+ var $$ = this;
+ transitions.push($$.mainBar.transition()
+ .attr('d', drawBar)
+ .style("fill", $$.color)
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) {
+ var $$ = this, config = $$.config,
+ w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickOffset() * 2 * config.bar_width_ratio) / barTargetsNum : 0;
+ return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;
+ };
+ c3_chart_internal_fn.getBars = function (i, id) {
+ var $$ = this;
+ return (id ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));
+ };
+ c3_chart_internal_fn.expandBars = function (i, id, reset) {
+ var $$ = this;
+ if (reset) {
+ $$.unexpandBars();
+ }
+ $$.getBars(i, id).classed(CLASS.EXPANDED, true);
+ };
+ c3_chart_internal_fn.unexpandBars = function (i) {
+ var $$ = this;
+ $$.getBars(i).classed(CLASS.EXPANDED, false);
+ };
+ c3_chart_internal_fn.generateDrawBar = function (barIndices, isSub) {
+ var $$ = this, config = $$.config,
+ getPoints = $$.generateGetBarPoints(barIndices, isSub);
+ return function (d, i) {
+ // 4 points that make a bar
+ var points = getPoints(d, i);
+
+ // switch points if axis is rotated, not applicable for sub chart
+ var indexX = config.axis_rotated ? 1 : 0;
+ var indexY = config.axis_rotated ? 0 : 1;
+
+ var path = 'M ' + points[0][indexX] + ',' + points[0][indexY] + ' ' +
+ 'L' + points[1][indexX] + ',' + points[1][indexY] + ' ' +
+ 'L' + points[2][indexX] + ',' + points[2][indexY] + ' ' +
+ 'L' + points[3][indexX] + ',' + points[3][indexY] + ' ' +
+ 'z';
+
+ return path;
+ };
+ };
+ c3_chart_internal_fn.generateGetBarPoints = function (barIndices, isSub) {
+ var $$ = this,
+ axis = isSub ? $$.subXAxis : $$.xAxis,
+ barTargetsNum = barIndices.__max__ + 1,
+ barW = $$.getBarW(axis, barTargetsNum),
+ barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub),
+ barY = $$.getShapeY(!!isSub),
+ barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = barOffset(d, i) || y0, // offset is for stacked bar chart
+ posX = barX(d), posY = barY(d);
+ // fix posY not to overflow opposite quadrant
+ if ($$.config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 4 points that make a bar
+ return [
+ [posX, offset],
+ [posX, posY - (y0 - offset)],
+ [posX + barW, posY - (y0 - offset)],
+ [posX + barW, offset]
+ ];
+ };
+ };
+ c3_chart_internal_fn.isWithinBar = function (that) {
+ var mouse = this.d3.mouse(that), box = that.getBoundingClientRect(),
+ seg0 = that.pathSegList.getItem(0), seg1 = that.pathSegList.getItem(1),
+ x = Math.min(seg0.x, seg1.x), y = Math.min(seg0.y, seg1.y),
+ w = box.width, h = box.height, offset = 2,
+ sx = x - offset, ex = x + w + offset, sy = y + h + offset, ey = y - offset;
+ return sx < mouse[0] && mouse[0] < ex && ey < mouse[1] && mouse[1] < sy;
+ };
+
+ c3_chart_internal_fn.initText = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartTexts);
+ $$.mainText = $$.d3.selectAll([]);
+ };
+ c3_chart_internal_fn.updateTargetsForText = function (targets) {
+ var $$ = this, mainTextUpdate, mainTextEnter,
+ classChartText = $$.classChartText.bind($$),
+ classTexts = $$.classTexts.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainTextUpdate = $$.main.select('.' + CLASS.chartTexts).selectAll('.' + CLASS.chartText)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartText(d) + classFocus(d);
+ });
+ mainTextEnter = mainTextUpdate.enter().append('g')
+ .attr('class', classChartText)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ mainTextEnter.append('g')
+ .attr('class', classTexts);
+ };
+ c3_chart_internal_fn.redrawText = function (durationForExit) {
+ var $$ = this, config = $$.config,
+ barOrLineData = $$.barOrLineData.bind($$),
+ classText = $$.classText.bind($$);
+ $$.mainText = $$.main.selectAll('.' + CLASS.texts).selectAll('.' + CLASS.text)
+ .data(barOrLineData);
+ $$.mainText.enter().append('text')
+ .attr("class", classText)
+ .attr('text-anchor', function (d) {
+ return config.axis_rotated ? (d.value < 0 ? 'end' : 'start') : 'middle';
+ })
+ .style("stroke", 'none')
+ .style("fill", function (d) {
+ return $$.color(d);
+ })
+ .style("fill-opacity", 0);
+ $$.mainText
+ .text(function (d, i, j) {
+ return $$.formatByAxisId($$.getAxisId(d.id))(d.value, d.id, i, j);
+ });
+ $$.mainText.exit()
+ .transition().duration(durationForExit)
+ .style('fill-opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForText = function (transitions, xForText, yForText, forFlow) {
+ var $$ = this,
+ opacityForText = forFlow ? 0 : $$.opacityForText.bind($$);
+ transitions.push($$.mainText.transition()
+ .attr('x', xForText)
+ .attr('y', yForText)
+ .style("fill", $$.color)
+ .style("fill-opacity", opacityForText));
+ };
+ c3_chart_internal_fn.getTextRect = function (text, cls) {
+ var body = this.d3.select('body').classed('c3', true),
+ svg = body.append("svg").style('visibility', 'hidden'), rect;
+ svg.selectAll('.dummy')
+ .data([text])
+ .enter().append('text')
+ .classed(cls ? cls : "", true)
+ .text(text)
+ .each(function () {
+ rect = this.getBoundingClientRect();
+ });
+ svg.remove();
+ body.classed('c3', false);
+ return rect;
+ };
+ c3_chart_internal_fn.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {
+ var $$ = this,
+ getAreaPoints = $$.generateGetAreaPoints(barIndices, false),
+ getBarPoints = $$.generateGetBarPoints(barIndices, false),
+ getLinePoints = $$.generateGetLinePoints(lineIndices, false),
+ getter = forX ? $$.getXForText : $$.getYForText;
+ return function (d, i) {
+ var getPoints = $$.isAreaType(d) ? getAreaPoints : $$.isBarType(d) ? getBarPoints : getLinePoints;
+ return getter.call($$, getPoints(d, i), d, this);
+ };
+ };
+ c3_chart_internal_fn.getXForText = function (points, d, textElement) {
+ var $$ = this,
+ box = textElement.getBoundingClientRect(), xPos, padding;
+ if ($$.config.axis_rotated) {
+ padding = $$.isBarType(d) ? 4 : 6;
+ xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);
+ } else {
+ xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];
+ }
+ // show labels regardless of the domain if value is null
+ if (d.value === null) {
+ if (xPos > $$.width) {
+ xPos = $$.width - box.width;
+ } else if (xPos < 0) {
+ xPos = 4;
+ }
+ }
+ return xPos;
+ };
+ c3_chart_internal_fn.getYForText = function (points, d, textElement) {
+ var $$ = this,
+ box = textElement.getBoundingClientRect(), yPos;
+ if ($$.config.axis_rotated) {
+ yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;
+ } else {
+ yPos = points[2][1] + (d.value < 0 ? box.height : $$.isBarType(d) ? -3 : -6);
+ }
+ // show labels regardless of the domain if value is null
+ if (d.value === null && !$$.config.axis_rotated) {
+ if (yPos < box.height) {
+ yPos = box.height;
+ } else if (yPos > this.height) {
+ yPos = this.height - 4;
+ }
+ }
+ return yPos;
+ };
+
+ c3_chart_internal_fn.setTargetType = function (targetIds, type) {
+ var $$ = this, config = $$.config;
+ $$.mapToTargetIds(targetIds).forEach(function (id) {
+ $$.withoutFadeIn[id] = (type === config.data_types[id]);
+ config.data_types[id] = type;
+ });
+ if (!targetIds) {
+ config.data_type = type;
+ }
+ };
+ c3_chart_internal_fn.hasType = function (type, targets) {
+ var $$ = this, types = $$.config.data_types, has = false;
+ targets = targets || $$.data.targets;
+ if (targets && targets.length) {
+ targets.forEach(function (target) {
+ var t = types[target.id];
+ if ((t && t.indexOf(type) >= 0) || (!t && type === 'line')) {
+ has = true;
+ }
+ });
+ } else if (Object.keys(types).length) {
+ Object.keys(types).forEach(function (id) {
+ if (types[id] === type) {
+ has = true;
+ }
+ });
+ } else {
+ has = $$.config.data_type === type;
+ }
+ return has;
+ };
+ c3_chart_internal_fn.hasArcType = function (targets) {
+ return this.hasType('pie', targets) || this.hasType('donut', targets) || this.hasType('gauge', targets);
+ };
+ c3_chart_internal_fn.isLineType = function (d) {
+ var config = this.config, id = isString(d) ? d : d.id;
+ return !config.data_types[id] || ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isStepType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isSplineType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isAreaType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isBarType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'bar';
+ };
+ c3_chart_internal_fn.isScatterType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'scatter';
+ };
+ c3_chart_internal_fn.isPieType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'pie';
+ };
+ c3_chart_internal_fn.isGaugeType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'gauge';
+ };
+ c3_chart_internal_fn.isDonutType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'donut';
+ };
+ c3_chart_internal_fn.isArcType = function (d) {
+ return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);
+ };
+ c3_chart_internal_fn.lineData = function (d) {
+ return this.isLineType(d) ? [d] : [];
+ };
+ c3_chart_internal_fn.arcData = function (d) {
+ return this.isArcType(d.data) ? [d] : [];
+ };
+ /* not used
+ function scatterData(d) {
+ return isScatterType(d) ? d.values : [];
+ }
+ */
+ c3_chart_internal_fn.barData = function (d) {
+ return this.isBarType(d) ? d.values : [];
+ };
+ c3_chart_internal_fn.lineOrScatterData = function (d) {
+ return this.isLineType(d) || this.isScatterType(d) ? d.values : [];
+ };
+ c3_chart_internal_fn.barOrLineData = function (d) {
+ return this.isBarType(d) || this.isLineType(d) ? d.values : [];
+ };
+
+ c3_chart_internal_fn.initGrid = function () {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+ $$.grid = $$.main.append('g')
+ .attr("clip-path", $$.clipPathForGrid)
+ .attr('class', CLASS.grid);
+ if (config.grid_x_show) {
+ $$.grid.append("g").attr("class", CLASS.xgrids);
+ }
+ if (config.grid_y_show) {
+ $$.grid.append('g').attr('class', CLASS.ygrids);
+ }
+ if (config.grid_focus_show) {
+ $$.grid.append('g')
+ .attr("class", CLASS.xgridFocus)
+ .append('line')
+ .attr('class', CLASS.xgridFocus);
+ }
+ $$.xgrid = d3.selectAll([]);
+ if (!config.grid_lines_front) {
+ $$.initGridLines();
+ }
+ };
+ c3_chart_internal_fn.initGridLines = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.gridLines = $$.main.append('g')
+ .attr("clip-path", $$.clipPathForGrid)
+ .attr('class', CLASS.grid + ' ' + CLASS.gridLines);
+ $$.gridLines.append('g').attr("class", CLASS.xgridLines);
+ $$.gridLines.append('g').attr('class', CLASS.ygridLines);
+ $$.xgridLines = d3.selectAll([]);
+ };
+ c3_chart_internal_fn.updateXGrid = function (withoutUpdate) {
+ var $$ = this, config = $$.config, d3 = $$.d3,
+ xgridData = $$.generateGridData(config.grid_x_type, $$.x),
+ tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;
+
+ $$.xgridAttr = config.axis_rotated ? {
+ 'x1': 0,
+ 'x2': $$.width,
+ 'y1': function (d) {
+ return $$.x(d) - tickOffset;
+ },
+ 'y2': function (d) {
+ return $$.x(d) - tickOffset;
+ }
+ } : {
+ 'x1': function (d) {
+ return $$.x(d) + tickOffset;
+ },
+ 'x2': function (d) {
+ return $$.x(d) + tickOffset;
+ },
+ 'y1': 0,
+ 'y2': $$.height
+ };
+
+ $$.xgrid = $$.main.select('.' + CLASS.xgrids).selectAll('.' + CLASS.xgrid)
+ .data(xgridData);
+ $$.xgrid.enter().append('line').attr("class", CLASS.xgrid);
+ if (!withoutUpdate) {
+ $$.xgrid.attr($$.xgridAttr)
+ .style("opacity", function () {
+ return +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1') === (config.axis_rotated ? $$.height : 0) ? 0 : 1;
+ });
+ }
+ $$.xgrid.exit().remove();
+ };
+
+ c3_chart_internal_fn.updateYGrid = function () {
+ var $$ = this, config = $$.config,
+ gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);
+ $$.ygrid = $$.main.select('.' + CLASS.ygrids).selectAll('.' + CLASS.ygrid)
+ .data(gridValues);
+ $$.ygrid.enter().append('line')
+ .attr('class', CLASS.ygrid);
+ $$.ygrid.attr("x1", config.axis_rotated ? $$.y : 0)
+ .attr("x2", config.axis_rotated ? $$.y : $$.width)
+ .attr("y1", config.axis_rotated ? 0 : $$.y)
+ .attr("y2", config.axis_rotated ? $$.height : $$.y);
+ $$.ygrid.exit().remove();
+ $$.smoothLines($$.ygrid, 'grid');
+ };
+
+
+ c3_chart_internal_fn.redrawGrid = function (duration) {
+ var $$ = this, main = $$.main, config = $$.config,
+ xgridLine, ygridLine, yv;
+
+ // hide if arc type
+ $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');
+
+ main.select('line.' + CLASS.xgridFocus).style("visibility", "hidden");
+ if (config.grid_x_show) {
+ $$.updateXGrid();
+ }
+ $$.xgridLines = main.select('.' + CLASS.xgridLines).selectAll('.' + CLASS.xgridLine)
+ .data(config.grid_x_lines);
+ // enter
+ xgridLine = $$.xgridLines.enter().append('g')
+ .attr("class", function (d) {
+ return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : '');
+ });
+ xgridLine.append('line')
+ .style("opacity", 0);
+ xgridLine.append('text')
+ .attr("text-anchor", "end")
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .attr('dx', config.axis_rotated ? 0 : -$$.margin.top)
+ .attr('dy', -5)
+ .style("opacity", 0);
+ // udpate
+ // done in d3.transition() of the end of this function
+ // exit
+ $$.xgridLines.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+
+ // Y-Grid
+ if (config.grid_y_show) {
+ $$.updateYGrid();
+ }
+ $$.ygridLines = main.select('.' + CLASS.ygridLines).selectAll('.' + CLASS.ygridLine)
+ .data(config.grid_y_lines);
+ // enter
+ ygridLine = $$.ygridLines.enter().append('g')
+ .attr("class", function (d) {
+ return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : '');
+ });
+ ygridLine.append('line')
+ .style("opacity", 0);
+ ygridLine.append('text')
+ .attr("text-anchor", "end")
+ .attr("transform", config.axis_rotated ? "rotate(-90)" : "")
+ .attr('dx', config.axis_rotated ? 0 : -$$.margin.top)
+ .attr('dy', -5)
+ .style("opacity", 0);
+ // update
+ yv = $$.yv.bind($$);
+ $$.ygridLines.select('line')
+ .transition().duration(duration)
+ .attr("x1", config.axis_rotated ? yv : 0)
+ .attr("x2", config.axis_rotated ? yv : $$.width)
+ .attr("y1", config.axis_rotated ? 0 : yv)
+ .attr("y2", config.axis_rotated ? $$.height : yv)
+ .style("opacity", 1);
+ $$.ygridLines.select('text')
+ .transition().duration(duration)
+ .attr("x", config.axis_rotated ? 0 : $$.width)
+ .attr("y", yv)
+ .text(function (d) {
+ return d.text;
+ })
+ .style("opacity", 1);
+ // exit
+ $$.ygridLines.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForGrid = function (transitions) {
+ var $$ = this, config = $$.config, xv = $$.xv.bind($$);
+ transitions.push($$.xgridLines.select('line').transition()
+ .attr("x1", config.axis_rotated ? 0 : xv)
+ .attr("x2", config.axis_rotated ? $$.width : xv)
+ .attr("y1", config.axis_rotated ? xv : $$.margin.top)
+ .attr("y2", config.axis_rotated ? xv : $$.height)
+ .style("opacity", 1));
+ transitions.push($$.xgridLines.select('text').transition()
+ .attr("x", config.axis_rotated ? $$.width : 0)
+ .attr("y", xv)
+ .text(function (d) {
+ return d.text;
+ })
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.showXGridFocus = function (selectedData) {
+ var $$ = this, config = $$.config,
+ dataToShow = selectedData.filter(function (d) {
+ return d && isValue(d.value);
+ }),
+ focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus),
+ xx = $$.xx.bind($$);
+ if (!config.tooltip_show) {
+ return;
+ }
+ // Hide when scatter plot exists
+ if ($$.hasType('scatter') || $$.hasArcType()) {
+ return;
+ }
+ focusEl
+ .style("visibility", "visible")
+ .data([dataToShow[0]])
+ .attr(config.axis_rotated ? 'y1' : 'x1', xx)
+ .attr(config.axis_rotated ? 'y2' : 'x2', xx);
+ $$.smoothLines(focusEl, 'grid');
+ };
+ c3_chart_internal_fn.hideXGridFocus = function () {
+ this.main.select('line.' + CLASS.xgridFocus).style("visibility", "hidden");
+ };
+ c3_chart_internal_fn.updateXgridFocus = function () {
+ var $$ = this, config = $$.config;
+ $$.main.select('line.' + CLASS.xgridFocus)
+ .attr("x1", config.axis_rotated ? 0 : -10)
+ .attr("x2", config.axis_rotated ? $$.width : -10)
+ .attr("y1", config.axis_rotated ? -10 : 0)
+ .attr("y2", config.axis_rotated ? -10 : $$.height);
+ };
+ c3_chart_internal_fn.generateGridData = function (type, scale) {
+ var $$ = this,
+ gridData = [], xDomain, firstYear, lastYear, i,
+ tickNum = $$.main.select("." + CLASS.axisX).selectAll('.tick').size();
+ if (type === 'year') {
+ xDomain = $$.getXDomain();
+ firstYear = xDomain[0].getFullYear();
+ lastYear = xDomain[1].getFullYear();
+ for (i = firstYear; i <= lastYear; i++) {
+ gridData.push(new Date(i + '-01-01 00:00:00'));
+ }
+ } else {
+ gridData = scale.ticks(10);
+ if (gridData.length > tickNum) { // use only int
+ gridData = gridData.filter(function (d) {
+ return ("" + d).indexOf('.') < 0;
+ });
+ }
+ }
+ return gridData;
+ };
+ c3_chart_internal_fn.getGridFilterToRemove = function (params) {
+ return params ? function (line) {
+ var found = false;
+ [].concat(params).forEach(function (param) {
+ if ((('value' in param && line.value === param.value) || ('class' in param && line['class'] === param['class']))) {
+ found = true;
+ }
+ });
+ return found;
+ } : function () {
+ return true;
+ };
+ };
+ c3_chart_internal_fn.removeGridLines = function (params, forX) {
+ var $$ = this, config = $$.config,
+ toRemove = $$.getGridFilterToRemove(params),
+ toShow = function (line) {
+ return !toRemove(line);
+ },
+ classLines = forX ? CLASS.xgridLines : CLASS.ygridLines,
+ classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;
+ $$.main.select('.' + classLines).selectAll('.' + classLine).filter(toRemove)
+ .transition().duration(config.transition_duration)
+ .style('opacity', 0).remove();
+ if (forX) {
+ config.grid_x_lines = config.grid_x_lines.filter(toShow);
+ } else {
+ config.grid_y_lines = config.grid_y_lines.filter(toShow);
+ }
+ };
+
+ c3_chart_internal_fn.initTooltip = function () {
+ var $$ = this, config = $$.config, i;
+ $$.tooltip = $$.selectChart
+ .style("position", "relative")
+ .append("div")
+ .attr('class', CLASS.tooltipContainer)
+ .style("position", "absolute")
+ .style("pointer-events", "none")
+ .style("display", "none");
+ // Show tooltip if needed
+ if (config.tooltip_init_show) {
+ if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {
+ config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);
+ for (i = 0; i < $$.data.targets[0].values.length; i++) {
+ if (($$.data.targets[0].values[i].x - config.tooltip_init_x) === 0) {
+ break;
+ }
+ }
+ config.tooltip_init_x = i;
+ }
+ $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {
+ return $$.addName(d.values[config.tooltip_init_x]);
+ }), $$.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));
+ $$.tooltip.style("top", config.tooltip_init_position.top)
+ .style("left", config.tooltip_init_position.left)
+ .style("display", "block");
+ }
+ };
+ c3_chart_internal_fn.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {
+ var $$ = this, config = $$.config,
+ titleFormat = config.tooltip_format_title || defaultTitleFormat,
+ nameFormat = config.tooltip_format_name || function (name) {
+ return name;
+ },
+ valueFormat = config.tooltip_format_value || defaultValueFormat,
+ text, i, title, value, name, bgcolor;
+ for (i = 0; i < d.length; i++) {
+ if (!(d[i] && (d[i].value || d[i].value === 0))) {
+ continue;
+ }
+
+ if (!text) {
+ title = titleFormat ? titleFormat(d[i].x) : d[i].x;
+ text = "<table class='" + CLASS.tooltip + "'>" + (title || title === 0 ? "<tr><th colspan='2'>" + title + "</th></tr>" : "");
+ }
+
+ name = nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index);
+ value = valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index);
+ bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);
+
+ text += "<tr class='" + CLASS.tooltipName + "-" + d[i].id + "'>";
+ text += "<td class='name'><span style='background-color:" + bgcolor + "'></span>" + name + "</td>";
+ text += "<td class='value'>" + value + "</td>";
+ text += "</tr>";
+ }
+ return text + "</table>";
+ };
+ c3_chart_internal_fn.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+ var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;
+ var forArc = $$.hasArcType(),
+ mouse = d3.mouse(element);
+ // Determin tooltip position
+ if (forArc) {
+ tooltipLeft = (($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2) + mouse[0];
+ tooltipTop = ($$.height / 2) + mouse[1] + 20;
+ } else {
+ svgLeft = $$.getSvgLeft(true);
+ if (config.axis_rotated) {
+ tooltipLeft = svgLeft + mouse[0] + 100;
+ tooltipRight = tooltipLeft + tWidth;
+ chartRight = $$.currentWidth - $$.getCurrentPaddingRight();
+ tooltipTop = $$.x(dataToShow[0].x) + 20;
+ } else {
+ tooltipLeft = svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;
+ tooltipRight = tooltipLeft + tWidth;
+ chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();
+ tooltipTop = mouse[1] + 15;
+ }
+
+ if (tooltipRight > chartRight) {
+ tooltipLeft -= tooltipRight - chartRight;
+ }
+ if (tooltipTop + tHeight > $$.currentHeight) {
+ tooltipTop -= tHeight + 30;
+ }
+ }
+ if (tooltipTop < 0) {
+ tooltipTop = 0;
+ }
+ return {top: tooltipTop, left: tooltipLeft};
+ };
+ c3_chart_internal_fn.showTooltip = function (selectedData, element) {
+ var $$ = this, config = $$.config;
+ var tWidth, tHeight, position;
+ var forArc = $$.hasArcType(),
+ dataToShow = selectedData.filter(function (d) {
+ return d && isValue(d.value);
+ }),
+ positionFunction = config.tooltip_position || c3_chart_internal_fn.tooltipPosition;
+ if (dataToShow.length === 0 || !config.tooltip_show) {
+ return;
+ }
+ $$.tooltip.html(config.tooltip_contents.call($$, selectedData, $$.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)).style("display", "block");
+
+ // Get tooltip dimensions
+ tWidth = $$.tooltip.property('offsetWidth');
+ tHeight = $$.tooltip.property('offsetHeight');
+
+ position = positionFunction.call(this, dataToShow, tWidth, tHeight, element);
+ // Set tooltip
+ $$.tooltip
+ .style("top", position.top + "px")
+ .style("left", position.left + 'px');
+ };
+ c3_chart_internal_fn.hideTooltip = function () {
+ this.tooltip.style("display", "none");
+ };
+
+ c3_chart_internal_fn.initLegend = function () {
+ var $$ = this;
+ $$.legendHasRendered = false;
+ $$.legend = $$.svg.append("g").attr("transform", $$.getTranslate('legend'));
+ if (!$$.config.legend_show) {
+ $$.legend.style('visibility', 'hidden');
+ $$.hiddenLegendIds = $$.mapToIds($$.data.targets);
+ return;
+ }
+ // MEMO: call here to update legend box and tranlate for all
+ // MEMO: translate will be upated by this, so transform not needed in updateLegend()
+ $$.updateLegendWithDefaults();
+ };
+ c3_chart_internal_fn.updateLegendWithDefaults = function () {
+ var $$ = this;
+ $$.updateLegend($$.mapToIds($$.data.targets), {
+ withTransform: false,
+ withTransitionForTransform: false,
+ withTransition: false
+ });
+ };
+ c3_chart_internal_fn.updateSizeForLegend = function (legendHeight, legendWidth) {
+ var $$ = this, config = $$.config, insetLegendPosition = {
+ top: $$.isLegendTop ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 : $$.currentHeight - legendHeight - $$.getCurrentPaddingBottom() - config.legend_inset_y,
+ left: $$.isLegendLeft ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 : $$.currentWidth - legendWidth - $$.getCurrentPaddingRight() - config.legend_inset_x + 0.5
+ };
+
+ $$.margin3 = {
+ top: $$.isLegendRight ? 0 : $$.isLegendInset ? insetLegendPosition.top : $$.currentHeight - legendHeight,
+ right: NaN,
+ bottom: 0,
+ left: $$.isLegendRight ? $$.currentWidth - legendWidth : $$.isLegendInset ? insetLegendPosition.left : 0
+ };
+ };
+ c3_chart_internal_fn.transformLegend = function (withTransition) {
+ var $$ = this;
+ (withTransition ? $$.legend.transition() : $$.legend).attr("transform", $$.getTranslate('legend'));
+ };
+ c3_chart_internal_fn.updateLegendStep = function (step) {
+ this.legendStep = step;
+ };
+ c3_chart_internal_fn.updateLegendItemWidth = function (w) {
+ this.legendItemWidth = w;
+ };
+ c3_chart_internal_fn.updateLegendItemHeight = function (h) {
+ this.legendItemHeight = h;
+ };
+ c3_chart_internal_fn.getLegendWidth = function () {
+ var $$ = this;
+ return $$.config.legend_show ? $$.isLegendRight || $$.isLegendInset ? $$.legendItemWidth * ($$.legendStep + 1) : $$.currentWidth : 0;
+ };
+ c3_chart_internal_fn.getLegendHeight = function () {
+ var $$ = this, h = 0;
+ if ($$.config.legend_show) {
+ if ($$.isLegendRight) {
+ h = $$.currentHeight;
+ } else {
+ h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);
+ }
+ }
+ return h;
+ };
+ c3_chart_internal_fn.opacityForLegend = function (legendItem) {
+ return legendItem.classed(CLASS.legendItemHidden) ? null : 1;
+ };
+ c3_chart_internal_fn.opacityForUnfocusedLegend = function (legendItem) {
+ return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;
+ };
+ c3_chart_internal_fn.toggleFocusLegend = function (targetIds, focus) {
+ var $$ = this;
+ targetIds = $$.mapToTargetIds(targetIds);
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .filter(function (id) {
+ return targetIds.indexOf(id) >= 0;
+ })
+ .classed(CLASS.legendItemFocused, focus)
+ .transition().duration(100)
+ .style('opacity', function () {
+ var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;
+ return opacity.call($$, $$.d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.revertLegend = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .classed(CLASS.legendItemFocused, false)
+ .transition().duration(100)
+ .style('opacity', function () {
+ return $$.opacityForLegend(d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.showLegend = function (targetIds) {
+ var $$ = this, config = $$.config;
+ if (!config.legend_show) {
+ config.legend_show = true;
+ $$.legend.style('visibility', 'visible');
+ if (!$$.legendHasRendered) {
+ $$.updateLegendWithDefaults();
+ }
+ }
+ $$.removeHiddenLegendIds(targetIds);
+ $$.legend.selectAll($$.selectorLegends(targetIds))
+ .style('visibility', 'visible')
+ .transition()
+ .style('opacity', function () {
+ return $$.opacityForLegend($$.d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.hideLegend = function (targetIds) {
+ var $$ = this, config = $$.config;
+ if (config.legend_show && isEmpty(targetIds)) {
+ config.legend_show = false;
+ $$.legend.style('visibility', 'hidden');
+ }
+ $$.addHiddenLegendIds(targetIds);
+ $$.legend.selectAll($$.selectorLegends(targetIds))
+ .style('opacity', 0)
+ .style('visibility', 'hidden');
+ };
+ var legendItemTextBox = {};
+ c3_chart_internal_fn.clearLegendItemTextBoxCache = function () {
+ legendItemTextBox = {};
+ };
+ c3_chart_internal_fn.updateLegend = function (targetIds, options, transitions) {
+ var $$ = this, config = $$.config;
+ var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect;
+ var paddingTop = 4, paddingRight = 10, maxWidth = 0, maxHeight = 0, posMin = 10, tileWidth = 15;
+ var l, totalLength = 0, offsets = {}, widths = {}, heights = {}, margins = [0], steps = {}, step = 0;
+ var withTransition, withTransitionForTransform;
+ var hasFocused = $$.legend.selectAll('.' + CLASS.legendItemFocused).size();
+ var texts, rects, tiles, background;
+
+ options = options || {};
+ withTransition = getOption(options, "withTransition", true);
+ withTransitionForTransform = getOption(options, "withTransitionForTransform", true);
+
+ function getTextBox(textElement, id) {
+ if (!legendItemTextBox[id]) {
+ legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem);
+ }
+ return legendItemTextBox[id];
+ }
+
+ function updatePositions(textElement, id, index) {
+ var reset = index === 0, isLast = index === targetIds.length - 1,
+ box = getTextBox(textElement, id),
+ itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight),
+ itemHeight = box.height + paddingTop,
+ itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,
+ areaLength = $$.isLegendRight || $$.isLegendInset ? $$.getLegendHeight() : $$.getLegendWidth(),
+ margin, maxLength;
+
+ // MEMO: care about condifion of step, totalLength
+ function updateValues(id, withoutStep) {
+ if (!withoutStep) {
+ margin = (areaLength - totalLength - itemLength) / 2;
+ if (margin < posMin) {
+ margin = (areaLength - itemLength) / 2;
+ totalLength = 0;
+ step++;
+ }
+ }
+ steps[id] = step;
+ margins[step] = $$.isLegendInset ? 10 : margin;
+ offsets[id] = totalLength;
+ totalLength += itemLength;
+ }
+
+ if (reset) {
+ totalLength = 0;
+ step = 0;
+ maxWidth = 0;
+ maxHeight = 0;
+ }
+
+ if (config.legend_show && !$$.isLegendToShow(id)) {
+ widths[id] = heights[id] = steps[id] = offsets[id] = 0;
+ return;
+ }
+
+ widths[id] = itemWidth;
+ heights[id] = itemHeight;
+
+ if (!maxWidth || itemWidth >= maxWidth) {
+ maxWidth = itemWidth;
+ }
+ if (!maxHeight || itemHeight >= maxHeight) {
+ maxHeight = itemHeight;
+ }
+ maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;
+
+ if (config.legend_equally) {
+ Object.keys(widths).forEach(function (id) {
+ widths[id] = maxWidth;
+ });
+ Object.keys(heights).forEach(function (id) {
+ heights[id] = maxHeight;
+ });
+ margin = (areaLength - maxLength * targetIds.length) / 2;
+ if (margin < posMin) {
+ totalLength = 0;
+ step = 0;
+ targetIds.forEach(function (id) {
+ updateValues(id);
+ });
+ }
+ else {
+ updateValues(id, true);
+ }
+ } else {
+ updateValues(id);
+ }
+ }
+
+ if ($$.isLegendInset) {
+ step = config.legend_inset_step ? config.legend_inset_step : targetIds.length;
+ $$.updateLegendStep(step);
+ }
+
+ if ($$.isLegendRight) {
+ xForLegend = function (id) {
+ return maxWidth * steps[id];
+ };
+ yForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ } else if ($$.isLegendInset) {
+ xForLegend = function (id) {
+ return maxWidth * steps[id] + 10;
+ };
+ yForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ } else {
+ xForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ yForLegend = function (id) {
+ return maxHeight * steps[id];
+ };
+ }
+ xForLegendText = function (id, i) {
+ return xForLegend(id, i) + 14;
+ };
+ yForLegendText = function (id, i) {
+ return yForLegend(id, i) + 9;
+ };
+ xForLegendRect = function (id, i) {
+ return xForLegend(id, i);
+ };
+ yForLegendRect = function (id, i) {
+ return yForLegend(id, i) - 5;
+ };
+
+ // Define g for legend area
+ l = $$.legend.selectAll('.' + CLASS.legendItem)
+ .data(targetIds)
+ .enter().append('g')
+ .attr('class', function (id) {
+ return $$.generateClass(CLASS.legendItem, id);
+ })
+ .style('visibility', function (id) {
+ return $$.isLegendToShow(id) ? 'visible' : 'hidden';
+ })
+ .style('cursor', 'pointer')
+ .on('click', function (id) {
+ if (config.legend_item_onclick) {
+ config.legend_item_onclick.call($$, id);
+ } else {
+ if ($$.d3.event.altKey) {
+ $$.api.hide();
+ $$.api.show(id);
+ } else {
+ $$.api.toggle(id);
+ $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();
+ }
+ }
+ })
+ .on('mouseover', function (id) {
+ $$.d3.select(this).classed(CLASS.legendItemFocused, true);
+ if (!$$.transiting && $$.isTargetToShow(id)) {
+ $$.api.focus(id);
+ }
+ if (config.legend_item_onmouseover) {
+ config.legend_item_onmouseover.call($$, id);
+ }
+ })
+ .on('mouseout', function (id) {
+ $$.d3.select(this).classed(CLASS.legendItemFocused, false);
+ $$.api.revert();
+ if (config.legend_item_onmouseout) {
+ config.legend_item_onmouseout.call($$, id);
+ }
+ });
+ l.append('text')
+ .text(function (id) {
+ return isDefined(config.data_names[id]) ? config.data_names[id] : id;
+ })
+ .each(function (id, i) {
+ updatePositions(this, id, i);
+ })
+ .style("pointer-events", "none")
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);
+ l.append('rect')
+ .attr("class", CLASS.legendItemEvent)
+ .style('fill-opacity', 0)
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);
+ l.append('rect')
+ .attr("class", CLASS.legendItemTile)
+ .style("pointer-events", "none")
+ .style('fill', $$.color)
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegend)
+ .attr('width', 10)
+ .attr('height', 10);
+
+ // Set background for inset legend
+ background = $$.legend.select('.' + CLASS.legendBackground + ' rect');
+ if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {
+ background = $$.legend.insert('g', '.' + CLASS.legendItem)
+ .attr("class", CLASS.legendBackground)
+ .append('rect');
+ }
+
+ texts = $$.legend.selectAll('text')
+ .data(targetIds)
+ .text(function (id) {
+ return isDefined(config.data_names[id]) ? config.data_names[id] : id;
+ }) // MEMO: needed for update
+ .each(function (id, i) {
+ updatePositions(this, id, i);
+ });
+ (withTransition ? texts.transition() : texts)
+ .attr('x', xForLegendText)
+ .attr('y', yForLegendText);
+
+ rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent)
+ .data(targetIds);
+ (withTransition ? rects.transition() : rects)
+ .attr('width', function (id) {
+ return widths[id];
+ })
+ .attr('height', function (id) {
+ return heights[id];
+ })
+ .attr('x', xForLegendRect)
+ .attr('y', yForLegendRect);
+
+ tiles = $$.legend.selectAll('rect.' + CLASS.legendItemTile)
+ .data(targetIds);
+ (withTransition ? tiles.transition() : tiles)
+ .style('fill', $$.color)
+ .attr('x', xForLegend)
+ .attr('y', yForLegend);
+
+ if (background) {
+ (withTransition ? background.transition() : background)
+ .attr('height', $$.getLegendHeight() - 12)
+ .attr('width', maxWidth * (step + 1) + 10);
+ }
+
+ // toggle legend state
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .classed(CLASS.legendItemHidden, function (id) {
+ return !$$.isTargetToShow(id);
+ })
+ .transition()
+ .style('opacity', function (id) {
+ var This = $$.d3.select(this);
+ if ($$.isTargetToShow(id)) {
+ return !hasFocused || This.classed(CLASS.legendItemFocused) ? $$.opacityForLegend(This) : $$.opacityForUnfocusedLegend(This);
+ } else {
+ return null; // c3-legend-item-hidden will be applied
+ }
+ });
+
+ // Update all to reflect change of legend
+ $$.updateLegendItemWidth(maxWidth);
+ $$.updateLegendItemHeight(maxHeight);
+ $$.updateLegendStep(step);
+ // Update size and scale
+ $$.updateSizes();
+ $$.updateScales();
+ $$.updateSvgSize();
+ // Update g positions
+ $$.transformAll(withTransitionForTransform, transitions);
+ $$.legendHasRendered = true;
+ };
+
+ c3_chart_internal_fn.initAxis = function () {
+ var $$ = this, config = $$.config, main = $$.main;
+ $$.axes.x = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisX)
+ .attr("clip-path", $$.clipPathForXAxis)
+ .attr("transform", $$.getTranslate('x'))
+ .style("visibility", config.axis_x_show ? 'visible' : 'hidden');
+ $$.axes.x.append("text")
+ .attr("class", CLASS.axisXLabel)
+ .attr("transform", config.axis_rotated ? "rotate(-90)" : "")
+ .style("text-anchor", $$.textAnchorForXAxisLabel.bind($$));
+
+ $$.axes.y = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisY)
+ .attr("clip-path", config.axis_y_inner ? "" : $$.clipPathForYAxis)
+ .attr("transform", $$.getTranslate('y'))
+ .style("visibility", config.axis_y_show ? 'visible' : 'hidden');
+ $$.axes.y.append("text")
+ .attr("class", CLASS.axisYLabel)
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .style("text-anchor", $$.textAnchorForYAxisLabel.bind($$));
+
+ $$.axes.y2 = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisY2)
+ // clip-path?
+ .attr("transform", $$.getTranslate('y2'))
+ .style("visibility", config.axis_y2_show ? 'visible' : 'hidden');
+ $$.axes.y2.append("text")
+ .attr("class", CLASS.axisY2Label)
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .style("text-anchor", $$.textAnchorForY2AxisLabel.bind($$));
+ };
+ c3_chart_internal_fn.getXAxis = function (scale, orient, tickFormat, tickValues, withOuterTick) {
+ var $$ = this, config = $$.config,
+ axisParams = {
+ isCategory: $$.isCategorized(),
+ withOuterTick: withOuterTick,
+ tickMultiline: config.axis_x_tick_multiline,
+ tickWidth: config.axis_x_tick_width
+ },
+ axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient);
+
+ if ($$.isTimeSeries() && tickValues) {
+ tickValues = tickValues.map(function (v) {
+ return $$.parseDate(v);
+ });
+ }
+
+ // Set tick
+ axis.tickFormat(tickFormat).tickValues(tickValues);
+ if ($$.isCategorized()) {
+ axis.tickCentered(config.axis_x_tick_centered);
+ if (isEmpty(config.axis_x_tick_culling)) {
+ config.axis_x_tick_culling = false;
+ }
+ } else {
+ // TODO: move this to c3_axis
+ axis.tickOffset = function () {
+ var scale = this.scale(),
+ edgeX = $$.getEdgeX($$.data.targets), diff = scale(edgeX[1]) - scale(edgeX[0]),
+ base = diff ? diff : (config.axis_rotated ? $$.height : $$.width);
+ return (base / $$.getMaxDataCount()) / 2;
+ };
+ }
+
+ return axis;
+ };
+ c3_chart_internal_fn.getYAxis = function (scale, orient, tickFormat, tickValues, withOuterTick) {
+ var axisParams = {withOuterTick: withOuterTick},
+ axis = c3_axis(this.d3, axisParams).scale(scale).orient(orient).tickFormat(tickFormat);
+ if (this.isTimeSeriesY()) {
+ axis.ticks(this.d3.time[this.config.axis_y_tick_time_value], this.config.axis_y_tick_time_interval);
+ } else {
+ axis.tickValues(tickValues);
+ }
+ return axis;
+ };
+ c3_chart_internal_fn.getAxisId = function (id) {
+ var config = this.config;
+ return id in config.data_axes ? config.data_axes[id] : 'y';
+ };
+ c3_chart_internal_fn.getXAxisTickFormat = function () {
+ var $$ = this, config = $$.config,
+ format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) {
+ return v < 0 ? v.toFixed(0) : v;
+ };
+ if (config.axis_x_tick_format) {
+ if (isFunction(config.axis_x_tick_format)) {
+ format = config.axis_x_tick_format;
+ } else if ($$.isTimeSeries()) {
+ format = function (date) {
+ return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : "";
+ };
+ }
+ }
+ return isFunction(format) ? function (v) {
+ return format.call($$, v);
+ } : format;
+ };
+ c3_chart_internal_fn.getAxisTickValues = function (tickValues, axis) {
+ return tickValues ? tickValues : axis ? axis.tickValues() : undefined;
+ };
+ c3_chart_internal_fn.getXAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_x_tick_values, this.xAxis);
+ };
+ c3_chart_internal_fn.getYAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y_tick_values, this.yAxis);
+ };
+ c3_chart_internal_fn.getY2AxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y2_tick_values, this.y2Axis);
+ };
+ c3_chart_internal_fn.getAxisLabelOptionByAxisId = function (axisId) {
+ var $$ = this, config = $$.config, option;
+ if (axisId === 'y') {
+ option = config.axis_y_label;
+ } else if (axisId === 'y2') {
+ option = config.axis_y2_label;
+ } else if (axisId === 'x') {
+ option = config.axis_x_label;
+ }
+ return option;
+ };
+ c3_chart_internal_fn.getAxisLabelText = function (axisId) {
+ var option = this.getAxisLabelOptionByAxisId(axisId);
+ return isString(option) ? option : option ? option.text : null;
+ };
+ c3_chart_internal_fn.setAxisLabelText = function (axisId, text) {
+ var $$ = this, config = $$.config,
+ option = $$.getAxisLabelOptionByAxisId(axisId);
+ if (isString(option)) {
+ if (axisId === 'y') {
+ config.axis_y_label = text;
+ } else if (axisId === 'y2') {
+ config.axis_y2_label = text;
+ } else if (axisId === 'x') {
+ config.axis_x_label = text;
+ }
+ } else if (option) {
+ option.text = text;
+ }
+ };
+ c3_chart_internal_fn.getAxisLabelPosition = function (axisId, defaultPosition) {
+ var option = this.getAxisLabelOptionByAxisId(axisId),
+ position = (option && typeof option === 'object' && option.position) ? option.position : defaultPosition;
+ return {
+ isInner: position.indexOf('inner') >= 0,
+ isOuter: position.indexOf('outer') >= 0,
+ isLeft: position.indexOf('left') >= 0,
+ isCenter: position.indexOf('center') >= 0,
+ isRight: position.indexOf('right') >= 0,
+ isTop: position.indexOf('top') >= 0,
+ isMiddle: position.indexOf('middle') >= 0,
+ isBottom: position.indexOf('bottom') >= 0
+ };
+ };
+ c3_chart_internal_fn.getXAxisLabelPosition = function () {
+ return this.getAxisLabelPosition('x', this.config.axis_rotated ? 'inner-top' : 'inner-right');
+ };
+ c3_chart_internal_fn.getYAxisLabelPosition = function () {
+ return this.getAxisLabelPosition('y', this.config.axis_rotated ? 'inner-right' : 'inner-top');
+ };
+ c3_chart_internal_fn.getY2AxisLabelPosition = function () {
+ return this.getAxisLabelPosition('y2', this.config.axis_rotated ? 'inner-right' : 'inner-top');
+ };
+ c3_chart_internal_fn.getAxisLabelPositionById = function (id) {
+ return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();
+ };
+ c3_chart_internal_fn.textForXAxisLabel = function () {
+ return this.getAxisLabelText('x');
+ };
+ c3_chart_internal_fn.textForYAxisLabel = function () {
+ return this.getAxisLabelText('y');
+ };
+ c3_chart_internal_fn.textForY2AxisLabel = function () {
+ return this.getAxisLabelText('y2');
+ };
+ c3_chart_internal_fn.xForAxisLabel = function (forHorizontal, position) {
+ var $$ = this;
+ if (forHorizontal) {
+ return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;
+ } else {
+ return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0;
+ }
+ };
+ c3_chart_internal_fn.dxForAxisLabel = function (forHorizontal, position) {
+ if (forHorizontal) {
+ return position.isLeft ? "0.5em" : position.isRight ? "-0.5em" : "0";
+ } else {
+ return position.isTop ? "-0.5em" : position.isBottom ? "0.5em" : "0";
+ }
+ };
+ c3_chart_internal_fn.textAnchorForAxisLabel = function (forHorizontal, position) {
+ if (forHorizontal) {
+ return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';
+ } else {
+ return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';
+ }
+ };
+ c3_chart_internal_fn.xForXAxisLabel = function () {
+ return this.xForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.xForYAxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.xForY2AxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForXAxisLabel = function () {
+ return this.dxForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForYAxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForY2AxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition());
+ };
+ c3_chart_internal_fn.dyForXAxisLabel = function () {
+ var $$ = this, config = $$.config,
+ position = $$.getXAxisLabelPosition();
+ if (config.axis_rotated) {
+ return position.isInner ? "1.2em" : -25 - $$.getMaxTickWidth('x');
+ } else {
+ return position.isInner ? "-0.5em" : config.axis_x_height ? config.axis_x_height - 10 : "3em";
+ }
+ };
+ c3_chart_internal_fn.dyForYAxisLabel = function () {
+ var $$ = this,
+ position = $$.getYAxisLabelPosition();
+ if ($$.config.axis_rotated) {
+ return position.isInner ? "-0.5em" : "3em";
+ } else {
+ return position.isInner ? "1.2em" : -10 - ($$.config.axis_y_inner ? 0 : ($$.getMaxTickWidth('y') + 10));
+ }
+ };
+ c3_chart_internal_fn.dyForY2AxisLabel = function () {
+ var $$ = this,
+ position = $$.getY2AxisLabelPosition();
+ if ($$.config.axis_rotated) {
+ return position.isInner ? "1.2em" : "-2.2em";
+ } else {
+ return position.isInner ? "-0.5em" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth('y2') + 15));
+ }
+ };
+ c3_chart_internal_fn.textAnchorForXAxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel(!$$.config.axis_rotated, $$.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.textAnchorForYAxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel($$.config.axis_rotated, $$.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.textAnchorForY2AxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel($$.config.axis_rotated, $$.getY2AxisLabelPosition());
+ };
+
+ c3_chart_internal_fn.xForRotatedTickText = function (r) {
+ return 8 * Math.sin(Math.PI * (r / 180));
+ };
+ c3_chart_internal_fn.yForRotatedTickText = function (r) {
+ return 11.5 - 2.5 * (r / 15) * (r > 0 ? 1 : -1);
+ };
+ c3_chart_internal_fn.rotateTickText = function (axis, transition, rotate) {
+ axis.selectAll('.tick text')
+ .style("text-anchor", rotate > 0 ? "start" : "end");
+ transition.selectAll('.tick text')
+ .attr("y", this.yForRotatedTickText(rotate))
+ .attr("transform", "rotate(" + rotate + ")")
+ .selectAll('tspan')
+ .attr('dx', this.xForRotatedTickText(rotate));
+ };
+
+ c3_chart_internal_fn.getMaxTickWidth = function (id, withoutRecompute) {
+ var $$ = this, config = $$.config,
+ maxWidth = 0, targetsToShow, scale, axis;
+ if (withoutRecompute && $$.currentMaxTickWidths[id]) {
+ return $$.currentMaxTickWidths[id];
+ }
+ if ($$.svg) {
+ targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ if (id === 'y') {
+ scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));
+ axis = $$.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues);
+ } else if (id === 'y2') {
+ scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));
+ axis = $$.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues);
+ } else {
+ scale = $$.x.copy().domain($$.getXDomain(targetsToShow));
+ axis = $$.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues);
+ }
+ $$.d3.select('body').append("g").style('visibility', 'hidden').call(axis).each(function () {
+ $$.d3.select(this).selectAll('text tspan').each(function () {
+ var box = this.getBoundingClientRect();
+ if (box.left > 0 && maxWidth < box.width) {
+ maxWidth = box.width;
+ }
+ });
+ }).remove();
+ }
+ $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;
+ return $$.currentMaxTickWidths[id];
+ };
+
+ c3_chart_internal_fn.updateAxisLabels = function (withTransition) {
+ var $$ = this;
+ var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel),
+ axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel),
+ axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);
+ (withTransition ? axisXLabel.transition() : axisXLabel)
+ .attr("x", $$.xForXAxisLabel.bind($$))
+ .attr("dx", $$.dxForXAxisLabel.bind($$))
+ .attr("dy", $$.dyForXAxisLabel.bind($$))
+ .text($$.textForXAxisLabel.bind($$));
+ (withTransition ? axisYLabel.transition() : axisYLabel)
+ .attr("x", $$.xForYAxisLabel.bind($$))
+ .attr("dx", $$.dxForYAxisLabel.bind($$))
+ .attr("dy", $$.dyForYAxisLabel.bind($$))
+ .text($$.textForYAxisLabel.bind($$));
+ (withTransition ? axisY2Label.transition() : axisY2Label)
+ .attr("x", $$.xForY2AxisLabel.bind($$))
+ .attr("dx", $$.dxForY2AxisLabel.bind($$))
+ .attr("dy", $$.dyForY2AxisLabel.bind($$))
+ .text($$.textForY2AxisLabel.bind($$));
+ };
+
+ c3_chart_internal_fn.getAxisPadding = function (padding, key, defaultValue, domainLength) {
+ if (!isValue(padding[key])) {
+ return defaultValue;
+ }
+ if (padding.unit === 'ratio') {
+ return padding[key] * domainLength;
+ }
+ // assume padding is pixels if unit is not specified
+ return this.convertPixelsToAxisPadding(padding[key], domainLength);
+ };
+ c3_chart_internal_fn.convertPixelsToAxisPadding = function (pixels, domainLength) {
+ var length = this.config.axis_rotated ? this.width : this.height;
+ return domainLength * (pixels / length);
+ };
+
+ c3_chart_internal_fn.generateTickValues = function (values, tickCount, forTimeSeries) {
+ var tickValues = values, targetCount, start, end, count, interval, i, tickValue;
+ if (tickCount) {
+ targetCount = isFunction(tickCount) ? tickCount() : tickCount;
+ // compute ticks according to tickCount
+ if (targetCount === 1) {
+ tickValues = [values[0]];
+ } else if (targetCount === 2) {
+ tickValues = [values[0], values[values.length - 1]];
+ } else if (targetCount > 2) {
+ count = targetCount - 2;
+ start = values[0];
+ end = values[values.length - 1];
+ interval = (end - start) / (count + 1);
+ // re-construct unique values
+ tickValues = [start];
+ for (i = 0; i < count; i++) {
+ tickValue = +start + interval * (i + 1);
+ tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);
+ }
+ tickValues.push(end);
+ }
+ }
+ if (!forTimeSeries) {
+ tickValues = tickValues.sort(function (a, b) {
+ return a - b;
+ });
+ }
+ return tickValues;
+ };
+ c3_chart_internal_fn.generateAxisTransitions = function (duration) {
+ var $$ = this, axes = $$.axes;
+ return {
+ axisX: duration ? axes.x.transition().duration(duration) : axes.x,
+ axisY: duration ? axes.y.transition().duration(duration) : axes.y,
+ axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,
+ axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx
+ };
+ };
+ c3_chart_internal_fn.redrawAxis = function (transitions, isHidden) {
+ var $$ = this, config = $$.config;
+ $$.axes.x.style("opacity", isHidden ? 0 : 1);
+ $$.axes.y.style("opacity", isHidden ? 0 : 1);
+ $$.axes.y2.style("opacity", isHidden ? 0 : 1);
+ $$.axes.subx.style("opacity", isHidden ? 0 : 1);
+ transitions.axisX.call($$.xAxis);
+ transitions.axisY.call($$.yAxis);
+ transitions.axisY2.call($$.y2Axis);
+ transitions.axisSubX.call($$.subXAxis);
+ // rotate tick text if needed
+ if (!config.axis_rotated && config.axis_x_tick_rotate) {
+ $$.rotateTickText($$.axes.x, transitions.axisX, config.axis_x_tick_rotate);
+ $$.rotateTickText($$.axes.subx, transitions.axisSubX, config.axis_x_tick_rotate);
+ }
+ };
+
+ c3_chart_internal_fn.getClipPath = function (id) {
+ var isIE9 = window.navigator.appVersion.toLowerCase().indexOf("msie 9.") >= 0;
+ return "url(" + (isIE9 ? "" : document.URL.split('#')[0]) + "#" + id + ")";
+ };
+ c3_chart_internal_fn.appendClip = function (parent, id) {
+ return parent.append("clipPath").attr("id", id).append("rect");
+ };
+ c3_chart_internal_fn.getAxisClipX = function (forHorizontal) {
+ // axis line width + padding for left
+ var left = Math.max(30, this.margin.left);
+ return forHorizontal ? -(1 + left) : -(left - 1);
+ };
+ c3_chart_internal_fn.getAxisClipY = function (forHorizontal) {
+ return forHorizontal ? -20 : -this.margin.top;
+ };
+ c3_chart_internal_fn.getXAxisClipX = function () {
+ var $$ = this;
+ return $$.getAxisClipX(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getXAxisClipY = function () {
+ var $$ = this;
+ return $$.getAxisClipY(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipX = function () {
+ var $$ = this;
+ return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipY = function () {
+ var $$ = this;
+ return $$.getAxisClipY($$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getAxisClipWidth = function (forHorizontal) {
+ var $$ = this,
+ left = Math.max(30, $$.margin.left),
+ right = Math.max(30, $$.margin.right);
+ // width + axis line width + padding for left/right
+ return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;
+ };
+ c3_chart_internal_fn.getAxisClipHeight = function (forHorizontal) {
+ // less than 20 is not enough to show the axis label 'outer' without legend
+ return (forHorizontal ? this.margin.bottom : (this.margin.top + this.height)) + 20;
+ };
+ c3_chart_internal_fn.getXAxisClipWidth = function () {
+ var $$ = this;
+ return $$.getAxisClipWidth(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getXAxisClipHeight = function () {
+ var $$ = this;
+ return $$.getAxisClipHeight(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipWidth = function () {
+ var $$ = this;
+ return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);
+ };
+ c3_chart_internal_fn.getYAxisClipHeight = function () {
+ var $$ = this;
+ return $$.getAxisClipHeight($$.config.axis_rotated);
+ };
+
+ c3_chart_internal_fn.initPie = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ $$.pie = d3.layout.pie().value(function (d) {
+ return d.values.reduce(function (a, b) {
+ return a + b.value;
+ }, 0);
+ });
+ if (!config.data_order) {
+ $$.pie.sort(null);
+ }
+ };
+
+ c3_chart_internal_fn.updateRadius = function () {
+ var $$ = this, config = $$.config,
+ w = config.gauge_width || config.donut_width;
+ $$.radiusExpanded = Math.min($$.arcWidth, $$.arcHeight) / 2;
+ $$.radius = $$.radiusExpanded * 0.95;
+ $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;
+ $$.innerRadius = $$.hasType('donut') || $$.hasType('gauge') ? $$.radius * $$.innerRadiusRatio : 0;
+ };
+
+ c3_chart_internal_fn.updateArc = function () {
+ var $$ = this;
+ $$.svgArc = $$.getSvgArc();
+ $$.svgArcExpanded = $$.getSvgArcExpanded();
+ $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);
+ };
+
+ c3_chart_internal_fn.updateAngle = function (d) {
+ var $$ = this, config = $$.config,
+ found = false, index = 0,
+ gMin = config.gauge_min, gMax = config.gauge_max, gTic, gValue;
+ $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {
+ if (!found && t.data.id === d.data.id) {
+ found = true;
+ d = t;
+ d.index = index;
+ }
+ index++;
+ });
+ if (isNaN(d.endAngle)) {
+ d.endAngle = d.startAngle;
+ }
+ if ($$.isGaugeType(d.data)) {
+ gTic = (Math.PI) / (gMax - gMin);
+ gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : (gMax - gMin);
+ d.startAngle = -1 * (Math.PI / 2);
+ d.endAngle = d.startAngle + gTic * gValue;
+ }
+ return found ? d : null;
+ };
+
+ c3_chart_internal_fn.getSvgArc = function () {
+ var $$ = this,
+ arc = $$.d3.svg.arc().outerRadius($$.radius).innerRadius($$.innerRadius),
+ newArc = function (d, withoutUpdate) {
+ var updated;
+ if (withoutUpdate) {
+ return arc(d);
+ } // for interpolate
+ updated = $$.updateAngle(d);
+ return updated ? arc(updated) : "M 0 0";
+ };
+ // TODO: extends all function
+ newArc.centroid = arc.centroid;
+ return newArc;
+ };
+
+ c3_chart_internal_fn.getSvgArcExpanded = function (rate) {
+ var $$ = this,
+ arc = $$.d3.svg.arc().outerRadius($$.radiusExpanded * (rate ? rate : 1)).innerRadius($$.innerRadius);
+ return function (d) {
+ var updated = $$.updateAngle(d);
+ return updated ? arc(updated) : "M 0 0";
+ };
+ };
+
+ c3_chart_internal_fn.getArc = function (d, withoutUpdate, force) {
+ return force || this.isArcType(d.data) ? this.svgArc(d, withoutUpdate) : "M 0 0";
+ };
+
+
+ c3_chart_internal_fn.transformForArcLabel = function (d) {
+ var $$ = this,
+ updated = $$.updateAngle(d), c, x, y, h, ratio, translate = "";
+ if (updated && !$$.hasType('gauge')) {
+ c = this.svgArc.centroid(updated);
+ x = isNaN(c[0]) ? 0 : c[0];
+ y = isNaN(c[1]) ? 0 : c[1];
+ h = Math.sqrt(x * x + y * y);
+ // TODO: ratio should be an option?
+ ratio = $$.radius && h ? (36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * $$.radius / h : 0;
+ translate = "translate(" + (x * ratio) + ',' + (y * ratio) + ")";
+ }
+ return translate;
+ };
+
+ c3_chart_internal_fn.getArcRatio = function (d) {
+ var $$ = this,
+ whole = $$.hasType('gauge') ? Math.PI : (Math.PI * 2);
+ return d ? (d.endAngle - d.startAngle) / whole : null;
+ };
+
+ c3_chart_internal_fn.convertToArcData = function (d) {
+ return this.addName({
+ id: d.data.id,
+ value: d.value,
+ ratio: this.getArcRatio(d),
+ index: d.index
+ });
+ };
+
+ c3_chart_internal_fn.textForArcLabel = function (d) {
+ var $$ = this,
+ updated, value, ratio, id, format;
+ if (!$$.shouldShowArcLabel()) {
+ return "";
+ }
+ updated = $$.updateAngle(d);
+ value = updated ? updated.value : null;
+ ratio = $$.getArcRatio(updated);
+ id = d.data.id;
+ if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) {
+ return "";
+ }
+ format = $$.getArcLabelFormat();
+ return format ? format(value, ratio, id) : $$.defaultArcValueFormat(value, ratio);
+ };
+
+ c3_chart_internal_fn.expandArc = function (targetIds) {
+ var $$ = this, interval;
+
+ // MEMO: avoid to cancel transition
+ if ($$.transiting) {
+ interval = window.setInterval(function () {
+ if (!$$.transiting) {
+ window.clearInterval(interval);
+ if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {
+ $$.expandArc(targetIds);
+ }
+ }
+ }, 10);
+ return;
+ }
+
+ targetIds = $$.mapToTargetIds(targetIds);
+
+ $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {
+ if (!$$.shouldExpand(d.data.id)) {
+ return;
+ }
+ $$.d3.select(this).selectAll('path')
+ .transition().duration(50)
+ .attr("d", $$.svgArcExpanded)
+ .transition().duration(100)
+ .attr("d", $$.svgArcExpandedSub)
+ .each(function (d) {
+ if ($$.isDonutType(d.data)) {
+ // callback here
+ }
+ });
+ });
+ };
+
+ c3_chart_internal_fn.unexpandArc = function (targetIds) {
+ var $$ = this;
+
+ if ($$.transiting) {
+ return;
+ }
+
+ targetIds = $$.mapToTargetIds(targetIds);
+
+ $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path')
+ .transition().duration(50)
+ .attr("d", $$.svgArc);
+ $$.svg.selectAll('.' + CLASS.arc)
+ .style("opacity", 1);
+ };
+
+ c3_chart_internal_fn.shouldExpand = function (id) {
+ var $$ = this, config = $$.config;
+ return ($$.isDonutType(id) && config.donut_expand) || ($$.isGaugeType(id) && config.gauge_expand) || ($$.isPieType(id) && config.pie_expand);
+ };
+
+ c3_chart_internal_fn.shouldShowArcLabel = function () {
+ var $$ = this, config = $$.config, shouldShow = true;
+ if ($$.hasType('donut')) {
+ shouldShow = config.donut_label_show;
+ } else if ($$.hasType('pie')) {
+ shouldShow = config.pie_label_show;
+ }
+ // when gauge, always true
+ return shouldShow;
+ };
+
+ c3_chart_internal_fn.meetsArcLabelThreshold = function (ratio) {
+ var $$ = this, config = $$.config,
+ threshold = $$.hasType('donut') ? config.donut_label_threshold : config.pie_label_threshold;
+ return ratio >= threshold;
+ };
+
+ c3_chart_internal_fn.getArcLabelFormat = function () {
+ var $$ = this, config = $$.config,
+ format = config.pie_label_format;
+ if ($$.hasType('gauge')) {
+ format = config.gauge_label_format;
+ } else if ($$.hasType('donut')) {
+ format = config.donut_label_format;
+ }
+ return format;
+ };
+
+ c3_chart_internal_fn.getArcTitle = function () {
+ var $$ = this;
+ return $$.hasType('donut') ? $$.config.donut_title : "";
+ };
+
+ c3_chart_internal_fn.updateTargetsForArc = function (targets) {
+ var $$ = this, main = $$.main,
+ mainPieUpdate, mainPieEnter,
+ classChartArc = $$.classChartArc.bind($$),
+ classArcs = $$.classArcs.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainPieUpdate = main.select('.' + CLASS.chartArcs).selectAll('.' + CLASS.chartArc)
+ .data($$.pie(targets))
+ .attr("class", function (d) {
+ return classChartArc(d) + classFocus(d.data);
+ });
+ mainPieEnter = mainPieUpdate.enter().append("g")
+ .attr("class", classChartArc);
+ mainPieEnter.append('g')
+ .attr('class', classArcs);
+ mainPieEnter.append("text")
+ .attr("dy", $$.hasType('gauge') ? "-.1em" : ".35em")
+ .style("opacity", 0)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ // MEMO: can not keep same color..., but not bad to update color in redraw
+ //mainPieUpdate.exit().remove();
+ };
+
+ c3_chart_internal_fn.initArc = function () {
+ var $$ = this;
+ $$.arcs = $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartArcs)
+ .attr("transform", $$.getTranslate('arc'));
+ $$.arcs.append('text')
+ .attr('class', CLASS.chartArcsTitle)
+ .style("text-anchor", "middle")
+ .text($$.getArcTitle());
+ };
+
+ c3_chart_internal_fn.redrawArc = function (duration, durationForExit, withTransform) {
+ var $$ = this, d3 = $$.d3, config = $$.config, main = $$.main,
+ mainArc;
+ mainArc = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc)
+ .data($$.arcData.bind($$));
+ mainArc.enter().append('path')
+ .attr("class", $$.classArc.bind($$))
+ .style("fill", function (d) {
+ return $$.color(d.data);
+ })
+ .style("cursor", function (d) {
+ return config.interaction_enabled && config.data_selection_isselectable(d) ? "pointer" : null;
+ })
+ .style("opacity", 0)
+ .each(function (d) {
+ if ($$.isGaugeType(d.data)) {
+ d.startAngle = d.endAngle = -1 * (Math.PI / 2);
+ }
+ this._current = d;
+ });
+ mainArc
+ .attr("transform", function (d) {
+ return !$$.isGaugeType(d.data) && withTransform ? "scale(0)" : "";
+ })
+ .style("opacity", function (d) {
+ return d === this._current ? 0 : 1;
+ })
+ .on('mouseover', config.interaction_enabled ? function (d) {
+ var updated, arcData;
+ if ($$.transiting) { // skip while transiting
+ return;
+ }
+ updated = $$.updateAngle(d);
+ arcData = $$.convertToArcData(updated);
+ // transitions
+ $$.expandArc(updated.data.id);
+ $$.api.focus(updated.data.id);
+ $$.toggleFocusLegend(updated.data.id, true);
+ $$.config.data_onmouseover(arcData, this);
+ } : null)
+ .on('mousemove', config.interaction_enabled ? function (d) {
+ var updated = $$.updateAngle(d),
+ arcData = $$.convertToArcData(updated),
+ selectedData = [arcData];
+ $$.showTooltip(selectedData, this);
+ } : null)
+ .on('mouseout', config.interaction_enabled ? function (d) {
+ var updated, arcData;
+ if ($$.transiting) { // skip while transiting
+ return;
+ }
+ updated = $$.updateAngle(d);
+ arcData = $$.convertToArcData(updated);
+ // transitions
+ $$.unexpandArc(updated.data.id);
+ $$.api.revert();
+ $$.revertLegend();
+ $$.hideTooltip();
+ $$.config.data_onmouseout(arcData, this);
+ } : null)
+ .on('click', config.interaction_enabled ? function (d, i) {
+ var updated = $$.updateAngle(d),
+ arcData = $$.convertToArcData(updated);
+ if ($$.toggleShape) {
+ $$.toggleShape(this, arcData, i);
+ }
+ $$.config.data_onclick.call($$.api, arcData, this);
+ } : null)
+ .each(function () {
+ $$.transiting = true;
+ })
+ .transition().duration(duration)
+ .attrTween("d", function (d) {
+ var updated = $$.updateAngle(d), interpolate;
+ if (!updated) {
+ return function () {
+ return "M 0 0";
+ };
+ }
+ // if (this._current === d) {
+ // this._current = {
+ // startAngle: Math.PI*2,
+ // endAngle: Math.PI*2,
+ // };
+ // }
+ if (isNaN(this._current.endAngle)) {
+ this._current.endAngle = this._current.startAngle;
+ }
+ interpolate = d3.interpolate(this._current, updated);
+ this._current = interpolate(0);
+ return function (t) {
+ var interpolated = interpolate(t);
+ interpolated.data = d.data; // data.id will be updated by interporator
+ return $$.getArc(interpolated, true);
+ };
+ })
+ .attr("transform", withTransform ? "scale(1)" : "")
+ .style("fill", function (d) {
+ return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data.id);
+ }) // Where gauge reading color would receive customization.
+ .style("opacity", 1)
+ .call($$.endall, function () {
+ $$.transiting = false;
+ });
+ mainArc.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ main.selectAll('.' + CLASS.chartArc).select('text')
+ .style("opacity", 0)
+ .attr('class', function (d) {
+ return $$.isGaugeType(d.data) ? CLASS.gaugeValue : '';
+ })
+ .text($$.textForArcLabel.bind($$))
+ .attr("transform", $$.transformForArcLabel.bind($$))
+ .style('font-size', function (d) {
+ return $$.isGaugeType(d.data) ? Math.round($$.radius / 5) + 'px' : '';
+ })
+ .transition().duration(duration)
+ .style("opacity", function (d) {
+ return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0;
+ });
+ main.select('.' + CLASS.chartArcsTitle)
+ .style("opacity", $$.hasType('donut') || $$.hasType('gauge') ? 1 : 0);
+
+ if ($$.hasType('gauge')) {
+ $$.arcs.select('.' + CLASS.chartArcsBackground)
+ .attr("d", function () {
+ var d = {
+ data: [{value: config.gauge_max}],
+ startAngle: -1 * (Math.PI / 2),
+ endAngle: Math.PI / 2
+ };
+ return $$.getArc(d, true, true);
+ });
+ $$.arcs.select('.' + CLASS.chartArcsGaugeUnit)
+ .attr("dy", ".75em")
+ .text(config.gauge_label_show ? config.gauge_units : '');
+ $$.arcs.select('.' + CLASS.chartArcsGaugeMin)
+ .attr("dx", -1 * ($$.innerRadius + (($$.radius - $$.innerRadius) / 2)) + "px")
+ .attr("dy", "1.2em")
+ .text(config.gauge_label_show ? config.gauge_min : '');
+ $$.arcs.select('.' + CLASS.chartArcsGaugeMax)
+ .attr("dx", $$.innerRadius + (($$.radius - $$.innerRadius) / 2) + "px")
+ .attr("dy", "1.2em")
+ .text(config.gauge_label_show ? config.gauge_max : '');
+ }
+ };
+ c3_chart_internal_fn.initGauge = function () {
+ var arcs = this.arcs;
+ if (this.hasType('gauge')) {
+ arcs.append('path')
+ .attr("class", CLASS.chartArcsBackground);
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeUnit)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeMin)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeMax)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ }
+ };
+ c3_chart_internal_fn.getGaugeLabelHeight = function () {
+ return this.config.gauge_label_show ? 20 : 0;
+ };
+
+ c3_chart_internal_fn.initRegion = function () {
+ var $$ = this;
+ $$.region = $$.main.append('g')
+ .attr("clip-path", $$.clipPath)
+ .attr("class", CLASS.regions);
+ };
+ c3_chart_internal_fn.redrawRegion = function (duration) {
+ var $$ = this, config = $$.config;
+
+ // hide if arc type
+ $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');
+
+ $$.mainRegion = $$.main.select('.' + CLASS.regions).selectAll('.' + CLASS.region)
+ .data(config.regions);
+ $$.mainRegion.enter().append('g')
+ .attr('class', $$.classRegion.bind($$))
+ .append('rect')
+ .style("fill-opacity", 0);
+ $$.mainRegion.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForRegion = function (transitions) {
+ var $$ = this,
+ x = $$.regionX.bind($$),
+ y = $$.regionY.bind($$),
+ w = $$.regionWidth.bind($$),
+ h = $$.regionHeight.bind($$);
+ transitions.push($$.mainRegion.selectAll('rect').transition()
+ .attr("x", x)
+ .attr("y", y)
+ .attr("width", w)
+ .attr("height", h)
+ .style("fill-opacity", function (d) {
+ return isValue(d.opacity) ? d.opacity : 0.1;
+ }));
+ };
+ c3_chart_internal_fn.regionX = function (d) {
+ var $$ = this, config = $$.config,
+ xPos, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0;
+ } else {
+ xPos = config.axis_rotated ? 0 : ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0);
+ }
+ return xPos;
+ };
+ c3_chart_internal_fn.regionY = function (d) {
+ var $$ = this, config = $$.config,
+ yPos, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ yPos = config.axis_rotated ? 0 : ('end' in d ? yScale(d.end) : 0);
+ } else {
+ yPos = config.axis_rotated ? ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0) : 0;
+ }
+ return yPos;
+ };
+ c3_chart_internal_fn.regionWidth = function (d) {
+ var $$ = this, config = $$.config,
+ start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ end = config.axis_rotated ? ('end' in d ? yScale(d.end) : $$.width) : $$.width;
+ } else {
+ end = config.axis_rotated ? $$.width : ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width);
+ }
+ return end < start ? 0 : end - start;
+ };
+ c3_chart_internal_fn.regionHeight = function (d) {
+ var $$ = this, config = $$.config,
+ start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ end = config.axis_rotated ? $$.height : ('start' in d ? yScale(d.start) : $$.height);
+ } else {
+ end = config.axis_rotated ? ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height) : $$.height;
+ }
+ return end < start ? 0 : end - start;
+ };
+ c3_chart_internal_fn.isRegionOnX = function (d) {
+ return !d.axis || d.axis === 'x';
+ };
+
+ c3_chart_internal_fn.drag = function (mouse) {
+ var $$ = this, config = $$.config, main = $$.main, d3 = $$.d3;
+ var sx, sy, mx, my, minX, maxX, minY, maxY;
+
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ if (config.zoom_enabled && !$$.zoom.altDomain) {
+ return;
+ } // skip if zoomable because of conflict drag dehavior
+ if (!config.data_selection_multiple) {
+ return;
+ } // skip when single selection because drag is used for multiple selection
+
+ sx = $$.dragStart[0];
+ sy = $$.dragStart[1];
+ mx = mouse[0];
+ my = mouse[1];
+ minX = Math.min(sx, mx);
+ maxX = Math.max(sx, mx);
+ minY = (config.data_selection_grouped) ? $$.margin.top : Math.min(sy, my);
+ maxY = (config.data_selection_grouped) ? $$.height : Math.max(sy, my);
+
+ main.select('.' + CLASS.dragarea)
+ .attr('x', minX)
+ .attr('y', minY)
+ .attr('width', maxX - minX)
+ .attr('height', maxY - minY);
+ // TODO: binary search when multiple xs
+ main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape)
+ .filter(function (d) {
+ return config.data_selection_isselectable(d);
+ })
+ .each(function (d, i) {
+ var shape = d3.select(this),
+ isSelected = shape.classed(CLASS.SELECTED),
+ isIncluded = shape.classed(CLASS.INCLUDED),
+ _x, _y, _w, _h, toggle, isWithin = false, box;
+ if (shape.classed(CLASS.circle)) {
+ _x = shape.attr("cx") * 1;
+ _y = shape.attr("cy") * 1;
+ toggle = $$.togglePoint;
+ isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;
+ }
+ else if (shape.classed(CLASS.bar)) {
+ box = getPathBox(this);
+ _x = box.x;
+ _y = box.y;
+ _w = box.width;
+ _h = box.height;
+ toggle = $$.togglePath;
+ isWithin = !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);
+ } else {
+ // line/area selection not supported yet
+ return;
+ }
+ if (isWithin ^ isIncluded) {
+ shape.classed(CLASS.INCLUDED, !isIncluded);
+ // TODO: included/unincluded callback here
+ shape.classed(CLASS.SELECTED, !isSelected);
+ toggle.call($$, !isSelected, shape, d, i);
+ }
+ });
+ };
+
+ c3_chart_internal_fn.dragstart = function (mouse) {
+ var $$ = this, config = $$.config;
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ $$.dragStart = mouse;
+ $$.main.select('.' + CLASS.chart).append('rect')
+ .attr('class', CLASS.dragarea)
+ .style('opacity', 0.1);
+ $$.dragging = true;
+ $$.config.data_ondragstart.call($$.api);
+ };
+
+ c3_chart_internal_fn.dragend = function () {
+ var $$ = this, config = $$.config;
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ $$.main.select('.' + CLASS.dragarea)
+ .transition().duration(100)
+ .style('opacity', 0)
+ .remove();
+ $$.main.selectAll('.' + CLASS.shape)
+ .classed(CLASS.INCLUDED, false);
+ $$.dragging = false;
+ $$.config.data_ondragend.call($$.api);
+ };
+
+
+ c3_chart_internal_fn.selectPoint = function (target, d, i) {
+ var $$ = this, config = $$.config,
+ cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$),
+ cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$),
+ r = $$.pointSelectR.bind($$);
+ config.data_onselected.call($$.api, d, target.node());
+ // add selected-circle on low layer g
+ $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)
+ .data([d])
+ .enter().append('circle')
+ .attr("class", function () {
+ return $$.generateClass(CLASS.selectedCircle, i);
+ })
+ .attr("cx", cx)
+ .attr("cy", cy)
+ .attr("stroke", function () {
+ return $$.color(d);
+ })
+ .attr("r", function (d) {
+ return $$.pointSelectR(d) * 1.4;
+ })
+ .transition().duration(100)
+ .attr("r", r);
+ };
+ c3_chart_internal_fn.unselectPoint = function (target, d, i) {
+ var $$ = this;
+ $$.config.data_onunselected(d, target.node());
+ // remove selected-circle from low layer g
+ $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)
+ .transition().duration(100).attr('r', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.togglePoint = function (selected, target, d, i) {
+ selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);
+ };
+ c3_chart_internal_fn.selectPath = function (target, d) {
+ var $$ = this;
+ $$.config.data_onselected.call($$, d, target.node());
+ target.transition().duration(100)
+ .style("fill", function () {
+ return $$.d3.rgb($$.color(d)).brighter(0.75);
+ });
+ };
+ c3_chart_internal_fn.unselectPath = function (target, d) {
+ var $$ = this;
+ $$.config.data_onunselected.call($$, d, target.node());
+ target.transition().duration(100)
+ .style("fill", function () {
+ return $$.color(d);
+ });
+ };
+ c3_chart_internal_fn.togglePath = function (selected, target, d, i) {
+ selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);
+ };
+ c3_chart_internal_fn.getToggle = function (that, d) {
+ var $$ = this, toggle;
+ if (that.nodeName === 'circle') {
+ if ($$.isStepType(d)) {
+ // circle is hidden in step chart, so treat as within the click area
+ toggle = function () {
+ }; // TODO: how to select step chart?
+ } else {
+ toggle = $$.togglePoint;
+ }
+ }
+ else if (that.nodeName === 'path') {
+ toggle = $$.togglePath;
+ }
+ return toggle;
+ };
+ c3_chart_internal_fn.toggleShape = function (that, d, i) {
+ var $$ = this, d3 = $$.d3, config = $$.config,
+ shape = d3.select(that), isSelected = shape.classed(CLASS.SELECTED),
+ toggle = $$.getToggle(that, d).bind($$);
+
+ if (config.data_selection_enabled && config.data_selection_isselectable(d)) {
+ if (!config.data_selection_multiple) {
+ $$.main.selectAll('.' + CLASS.shapes + (config.data_selection_grouped ? $$.getTargetSelectorSuffix(d.id) : "")).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this);
+ if (shape.classed(CLASS.SELECTED)) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ });
+ }
+ shape.classed(CLASS.SELECTED, !isSelected);
+ toggle(!isSelected, shape, d, i);
+ }
+ };
+
+ c3_chart_internal_fn.initBrush = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.brush = d3.svg.brush().on("brush", function () {
+ $$.redrawForBrush();
+ });
+ $$.brush.update = function () {
+ if ($$.context) {
+ $$.context.select('.' + CLASS.brush).call(this);
+ }
+ return this;
+ };
+ $$.brush.scale = function (scale) {
+ return $$.config.axis_rotated ? this.y(scale) : this.x(scale);
+ };
+ };
+ c3_chart_internal_fn.initSubchart = function () {
+ var $$ = this, config = $$.config,
+ context = $$.context = $$.svg.append("g").attr("transform", $$.getTranslate('context'));
+
+ if (!config.subchart_show) {
+ context.style('visibility', 'hidden');
+ }
+
+ // Define g for chart area
+ context.append('g')
+ .attr("clip-path", $$.clipPathForSubchart)
+ .attr('class', CLASS.chart);
+
+ // Define g for bar chart area
+ context.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartBars);
+
+ // Define g for line chart area
+ context.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartLines);
+
+ // Add extent rect for Brush
+ context.append("g")
+ .attr("clip-path", $$.clipPath)
+ .attr("class", CLASS.brush)
+ .call($$.brush)
+ .selectAll("rect")
+ .attr(config.axis_rotated ? "width" : "height", config.axis_rotated ? $$.width2 : $$.height2);
+
+ // ATTENTION: This must be called AFTER chart added
+ // Add Axis
+ $$.axes.subx = context.append("g")
+ .attr("class", CLASS.axisX)
+ .attr("transform", $$.getTranslate('subx'))
+ .attr("clip-path", config.axis_rotated ? "" : $$.clipPathForXAxis);
+ };
+ c3_chart_internal_fn.updateTargetsForSubchart = function (targets) {
+ var $$ = this, context = $$.context, config = $$.config,
+ contextLineEnter, contextLineUpdate, contextBarEnter, contextBarUpdate,
+ classChartBar = $$.classChartBar.bind($$),
+ classBars = $$.classBars.bind($$),
+ classChartLine = $$.classChartLine.bind($$),
+ classLines = $$.classLines.bind($$),
+ classAreas = $$.classAreas.bind($$);
+
+ if (config.subchart_show) {
+ contextBarUpdate = context.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)
+ .data(targets)
+ .attr('class', classChartBar);
+ contextBarEnter = contextBarUpdate.enter().append('g')
+ .style('opacity', 0)
+ .attr('class', classChartBar);
+ // Bars for each data
+ contextBarEnter.append('g')
+ .attr("class", classBars);
+
+ //-- Line --//
+ contextLineUpdate = context.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)
+ .data(targets)
+ .attr('class', classChartLine);
+ contextLineEnter = contextLineUpdate.enter().append('g')
+ .style('opacity', 0)
+ .attr('class', classChartLine);
+ // Lines for each data
+ contextLineEnter.append("g")
+ .attr("class", classLines);
+ // Area
+ contextLineEnter.append("g")
+ .attr("class", classAreas);
+ }
+ };
+ c3_chart_internal_fn.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {
+ var $$ = this, d3 = $$.d3, context = $$.context, config = $$.config,
+ contextLine, contextArea, contextBar, drawAreaOnSub, drawBarOnSub, drawLineOnSub,
+ barData = $$.barData.bind($$),
+ lineData = $$.lineData.bind($$),
+ classBar = $$.classBar.bind($$),
+ classLine = $$.classLine.bind($$),
+ classArea = $$.classArea.bind($$),
+ initialOpacity = $$.initialOpacity.bind($$);
+
+ // subchart
+ if (config.subchart_show) {
+ // reflect main chart to extent on subchart if zoomed
+ if (d3.event && d3.event.type === 'zoom') {
+ $$.brush.extent($$.x.orgDomain()).update();
+ }
+ // update subchart elements if needed
+ if (withSubchart) {
+
+ // extent rect
+ if (!$$.brush.empty()) {
+ $$.brush.extent($$.x.orgDomain()).update();
+ }
+ // setup drawer - MEMO: this must be called after axis updated
+ drawAreaOnSub = $$.generateDrawArea(areaIndices, true);
+ drawBarOnSub = $$.generateDrawBar(barIndices, true);
+ drawLineOnSub = $$.generateDrawLine(lineIndices, true);
+ // bars
+ contextBar = context.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)
+ .data(barData);
+ contextBar.enter().append('path')
+ .attr("class", classBar)
+ .style("stroke", 'none')
+ .style("fill", $$.color);
+ contextBar
+ .style("opacity", initialOpacity)
+ .transition().duration(duration)
+ .attr('d', drawBarOnSub)
+ .style('opacity', 1);
+ contextBar.exit().transition().duration(duration)
+ .style('opacity', 0)
+ .remove();
+ // lines
+ contextLine = context.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)
+ .data(lineData);
+ contextLine.enter().append('path')
+ .attr('class', classLine)
+ .style('stroke', $$.color);
+ contextLine
+ .style("opacity", initialOpacity)
+ .transition().duration(duration)
+ .attr("d", drawLineOnSub)
+ .style('opacity', 1);
+ contextLine.exit().transition().duration(duration)
+ .style('opacity', 0)
+ .remove();
+ // area
+ contextArea = context.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)
+ .data(lineData);
+ contextArea.enter().append('path')
+ .attr("class", classArea)
+ .style("fill", $$.color)
+ .style("opacity", function () {
+ $$.orgAreaOpacity = +d3.select(this).style('opacity');
+ return 0;
+ });
+ contextArea
+ .style("opacity", 0)
+ .transition().duration(duration)
+ .attr("d", drawAreaOnSub)
+ .style("fill", $$.color)
+ .style("opacity", $$.orgAreaOpacity);
+ contextArea.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ }
+ }
+ };
+ c3_chart_internal_fn.redrawForBrush = function () {
+ var $$ = this, x = $$.x;
+ $$.redraw({
+ withTransition: false,
+ withY: $$.config.zoom_rescale,
+ withSubchart: false,
+ withUpdateXDomain: true,
+ withDimension: false
+ });
+ $$.config.subchart_onbrush.call($$.api, x.orgDomain());
+ };
+ c3_chart_internal_fn.transformContext = function (withTransition, transitions) {
+ var $$ = this, subXAxis;
+ if (transitions && transitions.axisSubX) {
+ subXAxis = transitions.axisSubX;
+ } else {
+ subXAxis = $$.context.select('.' + CLASS.axisX);
+ if (withTransition) {
+ subXAxis = subXAxis.transition();
+ }
+ }
+ $$.context.attr("transform", $$.getTranslate('context'));
+ subXAxis.attr("transform", $$.getTranslate('subx'));
+ };
+ c3_chart_internal_fn.getDefaultExtent = function () {
+ var $$ = this, config = $$.config,
+ extent = isFunction(config.axis_x_extent) ? config.axis_x_extent($$.getXDomain($$.data.targets)) : config.axis_x_extent;
+ if ($$.isTimeSeries()) {
+ extent = [$$.parseDate(extent[0]), $$.parseDate(extent[1])];
+ }
+ return extent;
+ };
+
+ c3_chart_internal_fn.initZoom = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config, startEvent;
+
+ $$.zoom = d3.behavior.zoom()
+ .on("zoomstart", function () {
+ startEvent = d3.event.sourceEvent;
+ $$.zoom.altDomain = d3.event.sourceEvent.altKey ? $$.x.orgDomain() : null;
+ config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);
+ })
+ .on("zoom", function () {
+ $$.redrawForZoom.call($$);
+ })
+ .on('zoomend', function () {
+ var event = d3.event.sourceEvent;
+ // if click, do nothing. otherwise, click interaction will be canceled.
+ if (event && startEvent.clientX === event.clientX && startEvent.clientY === event.clientY) {
+ return;
+ }
+ $$.redrawEventRect();
+ $$.updateZoom();
+ config.zoom_onzoomend.call($$.api, $$.x.orgDomain());
+ });
+ $$.zoom.scale = function (scale) {
+ return config.axis_rotated ? this.y(scale) : this.x(scale);
+ };
+ $$.zoom.orgScaleExtent = function () {
+ var extent = config.zoom_extent ? config.zoom_extent : [1, 10];
+ return [extent[0], Math.max($$.getMaxDataCount() / extent[1], extent[1])];
+ };
+ $$.zoom.updateScaleExtent = function () {
+ var ratio = diffDomain($$.x.orgDomain()) / diffDomain($$.orgXDomain),
+ extent = this.orgScaleExtent();
+ this.scaleExtent([extent[0] * ratio, extent[1] * ratio]);
+ return this;
+ };
+ };
+ c3_chart_internal_fn.updateZoom = function () {
+ var $$ = this, z = $$.config.zoom_enabled ? $$.zoom : function () {
+ };
+ $$.main.select('.' + CLASS.zoomRect).call(z).on("dblclick.zoom", null);
+ $$.main.selectAll('.' + CLASS.eventRect).call(z).on("dblclick.zoom", null);
+ };
+ c3_chart_internal_fn.redrawForZoom = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x;
+ if (!config.zoom_enabled) {
+ return;
+ }
+ if ($$.filterTargetsToShow($$.data.targets).length === 0) {
+ return;
+ }
+ if (d3.event.sourceEvent.type === 'mousemove' && zoom.altDomain) {
+ x.domain(zoom.altDomain);
+ zoom.scale(x).updateScaleExtent();
+ return;
+ }
+ if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {
+ x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);
+ }
+ $$.redraw({
+ withTransition: false,
+ withY: config.zoom_rescale,
+ withSubchart: false,
+ withEventRect: false,
+ withDimension: false
+ });
+ if (d3.event.sourceEvent.type === 'mousemove') {
+ $$.cancelClick = true;
+ }
+ config.zoom_onzoom.call($$.api, x.orgDomain());
+ };
+
+ c3_chart_internal_fn.generateColor = function () {
+ var $$ = this, config = $$.config, d3 = $$.d3,
+ colors = config.data_colors,
+ pattern = notEmpty(config.color_pattern) ? config.color_pattern : d3.scale.category10().range(),
+ callback = config.data_color,
+ ids = [];
+
+ return function (d) {
+ var id = d.id || d, color;
+
+ // if callback function is provided
+ if (colors[id] instanceof Function) {
+ color = colors[id](d);
+ }
+ // if specified, choose that color
+ else if (colors[id]) {
+ color = colors[id];
+ }
+ // if not specified, choose from pattern
+ else {
+ if (ids.indexOf(id) < 0) {
+ ids.push(id);
+ }
+ color = pattern[ids.indexOf(id) % pattern.length];
+ colors[id] = color;
+ }
+ return callback instanceof Function ? callback(color, d) : color;
+ };
+ };
+ c3_chart_internal_fn.generateLevelColor = function () {
+ var $$ = this, config = $$.config,
+ colors = config.color_pattern,
+ threshold = config.color_threshold,
+ asValue = threshold.unit === 'value',
+ values = threshold.values && threshold.values.length ? threshold.values : [],
+ max = threshold.max || 100;
+ return notEmpty(config.color_threshold) ? function (value) {
+ var i, v, color = colors[colors.length - 1];
+ for (i = 0; i < values.length; i++) {
+ v = asValue ? value : (value * 100 / max);
+ if (v < values[i]) {
+ color = colors[i];
+ break;
+ }
+ }
+ return color;
+ } : null;
+ };
+
+ c3_chart_internal_fn.getYFormat = function (forArc) {
+ var $$ = this,
+ formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat,
+ formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;
+ return function (v, ratio, id) {
+ var format = $$.getAxisId(id) === 'y2' ? formatForY2 : formatForY;
+ return format.call($$, v, ratio);
+ };
+ };
+ c3_chart_internal_fn.yFormat = function (v) {
+ var $$ = this, config = $$.config,
+ format = config.axis_y_tick_format ? config.axis_y_tick_format : $$.defaultValueFormat;
+ return format(v);
+ };
+ c3_chart_internal_fn.y2Format = function (v) {
+ var $$ = this, config = $$.config,
+ format = config.axis_y2_tick_format ? config.axis_y2_tick_format : $$.defaultValueFormat;
+ return format(v);
+ };
+ c3_chart_internal_fn.defaultValueFormat = function (v) {
+ return isValue(v) ? +v : "";
+ };
+ c3_chart_internal_fn.defaultArcValueFormat = function (v, ratio) {
+ return (ratio * 100).toFixed(1) + '%';
+ };
+ c3_chart_internal_fn.formatByAxisId = function (axisId) {
+ var $$ = this, data_labels = $$.config.data_labels,
+ format = function (v) {
+ return isValue(v) ? +v : "";
+ };
+ // find format according to axis id
+ if (typeof data_labels.format === 'function') {
+ format = data_labels.format;
+ } else if (typeof data_labels.format === 'object') {
+ if (data_labels.format[axisId]) {
+ format = data_labels.format[axisId];
+ }
+ }
+ return format;
+ };
+
+ c3_chart_internal_fn.hasCaches = function (ids) {
+ for (var i = 0; i < ids.length; i++) {
+ if (!(ids[i] in this.cache)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ c3_chart_internal_fn.addCache = function (id, target) {
+ this.cache[id] = this.cloneTarget(target);
+ };
+ c3_chart_internal_fn.getCaches = function (ids) {
+ var targets = [], i;
+ for (i = 0; i < ids.length; i++) {
+ if (ids[i] in this.cache) {
+ targets.push(this.cloneTarget(this.cache[ids[i]]));
+ }
+ }
+ return targets;
+ };
+
+ var CLASS = c3_chart_internal_fn.CLASS = {
+ target: 'c3-target',
+ chart: 'c3-chart',
+ chartLine: 'c3-chart-line',
+ chartLines: 'c3-chart-lines',
+ chartBar: 'c3-chart-bar',
+ chartBars: 'c3-chart-bars',
+ chartText: 'c3-chart-text',
+ chartTexts: 'c3-chart-texts',
+ chartArc: 'c3-chart-arc',
+ chartArcs: 'c3-chart-arcs',
+ chartArcsTitle: 'c3-chart-arcs-title',
+ chartArcsBackground: 'c3-chart-arcs-background',
+ chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',
+ chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',
+ chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',
+ selectedCircle: 'c3-selected-circle',
+ selectedCircles: 'c3-selected-circles',
+ eventRect: 'c3-event-rect',
+ eventRects: 'c3-event-rects',
+ eventRectsSingle: 'c3-event-rects-single',
+ eventRectsMultiple: 'c3-event-rects-multiple',
+ zoomRect: 'c3-zoom-rect',
+ brush: 'c3-brush',
+ focused: 'c3-focused',
+ defocused: 'c3-defocused',
+ region: 'c3-region',
+ regions: 'c3-regions',
+ tooltipContainer: 'c3-tooltip-container',
+ tooltip: 'c3-tooltip',
+ tooltipName: 'c3-tooltip-name',
+ shape: 'c3-shape',
+ shapes: 'c3-shapes',
+ line: 'c3-line',
+ lines: 'c3-lines',
+ bar: 'c3-bar',
+ bars: 'c3-bars',
+ circle: 'c3-circle',
+ circles: 'c3-circles',
+ arc: 'c3-arc',
+ arcs: 'c3-arcs',
+ area: 'c3-area',
+ areas: 'c3-areas',
+ empty: 'c3-empty',
+ text: 'c3-text',
+ texts: 'c3-texts',
+ gaugeValue: 'c3-gauge-value',
+ grid: 'c3-grid',
+ gridLines: 'c3-grid-lines',
+ xgrid: 'c3-xgrid',
+ xgrids: 'c3-xgrids',
+ xgridLine: 'c3-xgrid-line',
+ xgridLines: 'c3-xgrid-lines',
+ xgridFocus: 'c3-xgrid-focus',
+ ygrid: 'c3-ygrid',
+ ygrids: 'c3-ygrids',
+ ygridLine: 'c3-ygrid-line',
+ ygridLines: 'c3-ygrid-lines',
+ axis: 'c3-axis',
+ axisX: 'c3-axis-x',
+ axisXLabel: 'c3-axis-x-label',
+ axisY: 'c3-axis-y',
+ axisYLabel: 'c3-axis-y-label',
+ axisY2: 'c3-axis-y2',
+ axisY2Label: 'c3-axis-y2-label',
+ legendBackground: 'c3-legend-background',
+ legendItem: 'c3-legend-item',
+ legendItemEvent: 'c3-legend-item-event',
+ legendItemTile: 'c3-legend-item-tile',
+ legendItemHidden: 'c3-legend-item-hidden',
+ legendItemFocused: 'c3-legend-item-focused',
+ dragarea: 'c3-dragarea',
+ EXPANDED: '_expanded_',
+ SELECTED: '_selected_',
+ INCLUDED: '_included_'
+ };
+ c3_chart_internal_fn.generateClass = function (prefix, targetId) {
+ return " " + prefix + " " + prefix + this.getTargetSelectorSuffix(targetId);
+ };
+ c3_chart_internal_fn.classText = function (d) {
+ return this.generateClass(CLASS.text, d.index);
+ };
+ c3_chart_internal_fn.classTexts = function (d) {
+ return this.generateClass(CLASS.texts, d.id);
+ };
+ c3_chart_internal_fn.classShape = function (d) {
+ return this.generateClass(CLASS.shape, d.index);
+ };
+ c3_chart_internal_fn.classShapes = function (d) {
+ return this.generateClass(CLASS.shapes, d.id);
+ };
+ c3_chart_internal_fn.classLine = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.line, d.id);
+ };
+ c3_chart_internal_fn.classLines = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);
+ };
+ c3_chart_internal_fn.classCircle = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.circle, d.index);
+ };
+ c3_chart_internal_fn.classCircles = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);
+ };
+ c3_chart_internal_fn.classBar = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.bar, d.index);
+ };
+ c3_chart_internal_fn.classBars = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);
+ };
+ c3_chart_internal_fn.classArc = function (d) {
+ return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);
+ };
+ c3_chart_internal_fn.classArcs = function (d) {
+ return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);
+ };
+ c3_chart_internal_fn.classArea = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.area, d.id);
+ };
+ c3_chart_internal_fn.classAreas = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);
+ };
+ c3_chart_internal_fn.classRegion = function (d, i) {
+ return this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '');
+ };
+ c3_chart_internal_fn.classEvent = function (d) {
+ return this.generateClass(CLASS.eventRect, d.index);
+ };
+ c3_chart_internal_fn.classTarget = function (id) {
+ var $$ = this;
+ var additionalClassSuffix = $$.config.data_classes[id], additionalClass = '';
+ if (additionalClassSuffix) {
+ additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;
+ }
+ return $$.generateClass(CLASS.target, id) + additionalClass;
+ };
+ c3_chart_internal_fn.classFocus = function (d) {
+ return this.classFocused(d) + this.classDefocused(d);
+ };
+ c3_chart_internal_fn.classFocused = function (d) {
+ return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');
+ };
+ c3_chart_internal_fn.classDefocused = function (d) {
+ return ' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '');
+ };
+ c3_chart_internal_fn.classChartText = function (d) {
+ return CLASS.chartText + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartLine = function (d) {
+ return CLASS.chartLine + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartBar = function (d) {
+ return CLASS.chartBar + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartArc = function (d) {
+ return CLASS.chartArc + this.classTarget(d.data.id);
+ };
+ c3_chart_internal_fn.getTargetSelectorSuffix = function (targetId) {
+ return targetId || targetId === 0 ? ('-' + targetId).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g, '-') : '';
+ };
+ c3_chart_internal_fn.selectorTarget = function (id, prefix) {
+ return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);
+ };
+ c3_chart_internal_fn.selectorTargets = function (ids, prefix) {
+ var $$ = this;
+ ids = ids || [];
+ return ids.length ? ids.map(function (id) {
+ return $$.selectorTarget(id, prefix);
+ }) : null;
+ };
+ c3_chart_internal_fn.selectorLegend = function (id) {
+ return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);
+ };
+ c3_chart_internal_fn.selectorLegends = function (ids) {
+ var $$ = this;
+ return ids && ids.length ? ids.map(function (id) {
+ return $$.selectorLegend(id);
+ }) : null;
+ };
+
+ var isValue = c3_chart_internal_fn.isValue = function (v) {
+ return v || v === 0;
+ },
+ isFunction = c3_chart_internal_fn.isFunction = function (o) {
+ return typeof o === 'function';
+ },
+ isString = c3_chart_internal_fn.isString = function (o) {
+ return typeof o === 'string';
+ },
+ isUndefined = c3_chart_internal_fn.isUndefined = function (v) {
+ return typeof v === 'undefined';
+ },
+ isDefined = c3_chart_internal_fn.isDefined = function (v) {
+ return typeof v !== 'undefined';
+ },
+ ceil10 = c3_chart_internal_fn.ceil10 = function (v) {
+ return Math.ceil(v / 10) * 10;
+ },
+ asHalfPixel = c3_chart_internal_fn.asHalfPixel = function (n) {
+ return Math.ceil(n) + 0.5;
+ },
+ diffDomain = c3_chart_internal_fn.diffDomain = function (d) {
+ return d[1] - d[0];
+ },
+ isEmpty = c3_chart_internal_fn.isEmpty = function (o) {
+ return !o || (isString(o) && o.length === 0) || (typeof o === 'object' && Object.keys(o).length === 0);
+ },
+ notEmpty = c3_chart_internal_fn.notEmpty = function (o) {
+ return Object.keys(o).length > 0;
+ },
+ getOption = c3_chart_internal_fn.getOption = function (options, key, defaultValue) {
+ return isDefined(options[key]) ? options[key] : defaultValue;
+ },
+ hasValue = c3_chart_internal_fn.hasValue = function (dict, value) {
+ var found = false;
+ Object.keys(dict).forEach(function (key) {
+ if (dict[key] === value) {
+ found = true;
+ }
+ });
+ return found;
+ },
+ getPathBox = c3_chart_internal_fn.getPathBox = function (path) {
+ var box = path.getBoundingClientRect(),
+ items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)],
+ minX = items[0].x, minY = Math.min(items[0].y, items[1].y);
+ return {x: minX, y: minY, width: box.width, height: box.height};
+ };
+
+ c3_chart_fn.focus = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),
+
+ this.revert();
+ this.defocus();
+ candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);
+ if ($$.hasArcType()) {
+ $$.expandArc(targetIds);
+ }
+ $$.toggleFocusLegend(targetIds, true);
+
+ $$.focusedTargetIds = targetIds;
+ $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+
+ c3_chart_fn.defocus = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),
+
+ this.revert();
+ candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);
+ if ($$.hasArcType()) {
+ $$.unexpandArc(targetIds);
+ }
+ $$.toggleFocusLegend(targetIds, false);
+
+ $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ $$.defocusedTargetIds = targetIds;
+ };
+
+ c3_chart_fn.revert = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets
+
+ candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);
+ if ($$.hasArcType()) {
+ $$.unexpandArc(targetIds);
+ }
+ if ($$.config.legend_show) {
+ $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));
+ }
+
+ $$.focusedTargetIds = [];
+ $$.defocusedTargetIds = [];
+ };
+
+ c3_chart_fn.show = function (targetIds, options) {
+ var $$ = this.internal, targets;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ options = options || {};
+
+ $$.removeHiddenTargetIds(targetIds);
+ targets = $$.svg.selectAll($$.selectorTargets(targetIds));
+
+ targets.transition()
+ .style('opacity', 1, 'important')
+ .call($$.endall, function () {
+ targets.style('opacity', null).style('opacity', 1);
+ });
+
+ if (options.withLegend) {
+ $$.showLegend(targetIds);
+ }
+
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ };
+
+ c3_chart_fn.hide = function (targetIds, options) {
+ var $$ = this.internal, targets;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ options = options || {};
+
+ $$.addHiddenTargetIds(targetIds);
+ targets = $$.svg.selectAll($$.selectorTargets(targetIds));
+
+ targets.transition()
+ .style('opacity', 0, 'important')
+ .call($$.endall, function () {
+ targets.style('opacity', null).style('opacity', 0);
+ });
+
+ if (options.withLegend) {
+ $$.hideLegend(targetIds);
+ }
+
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ };
+
+ c3_chart_fn.toggle = function (targetIds, options) {
+ var that = this, $$ = this.internal;
+ $$.mapToTargetIds(targetIds).forEach(function (targetId) {
+ $$.isTargetToShow(targetId) ? that.hide(targetId, options) : that.show(targetId, options);
+ });
+ };
+
+ c3_chart_fn.zoom = function (domain) {
+ var $$ = this.internal;
+ if (domain) {
+ if ($$.isTimeSeries()) {
+ domain = domain.map(function (x) {
+ return $$.parseDate(x);
+ });
+ }
+ $$.brush.extent(domain);
+ $$.redraw({withUpdateXDomain: true, withY: $$.config.zoom_rescale});
+ $$.config.zoom_onzoom.call(this, $$.x.orgDomain());
+ }
+ return $$.brush.extent();
+ };
+ c3_chart_fn.zoom.enable = function (enabled) {
+ var $$ = this.internal;
+ $$.config.zoom_enabled = enabled;
+ $$.updateAndRedraw();
+ };
+ c3_chart_fn.unzoom = function () {
+ var $$ = this.internal;
+ $$.brush.clear().update();
+ $$.redraw({withUpdateXDomain: true});
+ };
+
+ c3_chart_fn.load = function (args) {
+ var $$ = this.internal, config = $$.config;
+ // update xs if specified
+ if (args.xs) {
+ $$.addXs(args.xs);
+ }
+ // update classes if exists
+ if ('classes' in args) {
+ Object.keys(args.classes).forEach(function (id) {
+ config.data_classes[id] = args.classes[id];
+ });
+ }
+ // update categories if exists
+ if ('categories' in args && $$.isCategorized()) {
+ config.axis_x_categories = args.categories;
+ }
+ // update axes if exists
+ if ('axes' in args) {
+ Object.keys(args.axes).forEach(function (id) {
+ config.data_axes[id] = args.axes[id];
+ });
+ }
+ // use cache if exists
+ if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {
+ $$.load($$.getCaches(args.cacheIds), args.done);
+ return;
+ }
+ // unload if needed
+ if ('unload' in args) {
+ // TODO: do not unload if target will load (included in url/rows/columns)
+ $$.unload($$.mapToTargetIds((typeof args.unload === 'boolean' && args.unload) ? null : args.unload), function () {
+ $$.loadFromArgs(args);
+ });
+ } else {
+ $$.loadFromArgs(args);
+ }
+ };
+
+ c3_chart_fn.unload = function (args) {
+ var $$ = this.internal;
+ args = args || {};
+ if (args instanceof Array) {
+ args = {ids: args};
+ } else if (typeof args === 'string') {
+ args = {ids: [args]};
+ }
+ $$.unload($$.mapToTargetIds(args.ids), function () {
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ if (args.done) {
+ args.done();
+ }
+ });
+ };
+
+ c3_chart_fn.flow = function (args) {
+ var $$ = this.internal,
+ targets, data, notfoundIds = [], orgDataCount = $$.getMaxDataCount(),
+ dataCount, domain, baseTarget, baseValue, length = 0, tail = 0, diff, to;
+
+ if (args.json) {
+ data = $$.convertJsonToData(args.json, args.keys);
+ }
+ else if (args.rows) {
+ data = $$.convertRowsToData(args.rows);
+ }
+ else if (args.columns) {
+ data = $$.convertColumnsToData(args.columns);
+ }
+ else {
+ return;
+ }
+ targets = $$.convertDataToTargets(data, true);
+
+ // Update/Add data
+ $$.data.targets.forEach(function (t) {
+ var found = false, i, j;
+ for (i = 0; i < targets.length; i++) {
+ if (t.id === targets[i].id) {
+ found = true;
+
+ if (t.values[t.values.length - 1]) {
+ tail = t.values[t.values.length - 1].index + 1;
+ }
+ length = targets[i].values.length;
+
+ for (j = 0; j < length; j++) {
+ targets[i].values[j].index = tail + j;
+ if (!$$.isTimeSeries()) {
+ targets[i].values[j].x = tail + j;
+ }
+ }
+ t.values = t.values.concat(targets[i].values);
+
+ targets.splice(i, 1);
+ break;
+ }
+ }
+ if (!found) {
+ notfoundIds.push(t.id);
+ }
+ });
+
+ // Append null for not found targets
+ $$.data.targets.forEach(function (t) {
+ var i, j;
+ for (i = 0; i < notfoundIds.length; i++) {
+ if (t.id === notfoundIds[i]) {
+ tail = t.values[t.values.length - 1].index + 1;
+ for (j = 0; j < length; j++) {
+ t.values.push({
+ id: t.id,
+ index: tail + j,
+ x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,
+ value: null
+ });
+ }
+ }
+ }
+ });
+
+ // Generate null values for new target
+ if ($$.data.targets.length) {
+ targets.forEach(function (t) {
+ var i, missing = [];
+ for (i = $$.data.targets[0].values[0].index; i < tail; i++) {
+ missing.push({
+ id: t.id,
+ index: i,
+ x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,
+ value: null
+ });
+ }
+ t.values.forEach(function (v) {
+ v.index += tail;
+ if (!$$.isTimeSeries()) {
+ v.x += tail;
+ }
+ });
+ t.values = missing.concat(t.values);
+ });
+ }
+ $$.data.targets = $$.data.targets.concat(targets); // add remained
+
+ // check data count because behavior needs to change when it's only one
+ dataCount = $$.getMaxDataCount();
+ baseTarget = $$.data.targets[0];
+ baseValue = baseTarget.values[0];
+
+ // Update length to flow if needed
+ if (isDefined(args.to)) {
+ length = 0;
+ to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;
+ baseTarget.values.forEach(function (v) {
+ if (v.x < to) {
+ length++;
+ }
+ });
+ } else if (isDefined(args.length)) {
+ length = args.length;
+ }
+
+ // If only one data, update the domain to flow from left edge of the chart
+ if (!orgDataCount) {
+ if ($$.isTimeSeries()) {
+ if (baseTarget.values.length > 1) {
+ diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;
+ } else {
+ diff = baseValue.x - $$.getXDomain($$.data.targets)[0];
+ }
+ } else {
+ diff = 1;
+ }
+ domain = [baseValue.x - diff, baseValue.x];
+ $$.updateXDomain(null, true, true, false, domain);
+ } else if (orgDataCount === 1) {
+ if ($$.isTimeSeries()) {
+ diff = (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;
+ domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];
+ $$.updateXDomain(null, true, true, false, domain);
+ }
+ }
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Redraw with new targets
+ $$.redraw({
+ flow: {
+ index: baseValue.index,
+ length: length,
+ duration: isValue(args.duration) ? args.duration : $$.config.transition_duration,
+ done: args.done,
+ orgDataCount: orgDataCount,
+ },
+ withLegend: true,
+ withTransition: orgDataCount > 1,
+ withTrimXDomain: false,
+ withUpdateXAxis: true,
+ });
+ };
+
+ c3_chart_internal_fn.generateFlow = function (args) {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+
+ return function () {
+ var targets = args.targets,
+ flow = args.flow,
+ drawBar = args.drawBar,
+ drawLine = args.drawLine,
+ drawArea = args.drawArea,
+ cx = args.cx,
+ cy = args.cy,
+ xv = args.xv,
+ xForText = args.xForText,
+ yForText = args.yForText,
+ duration = args.duration;
+
+ var translateX, scaleX = 1, transform,
+ flowIndex = flow.index,
+ flowLength = flow.length,
+ flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex),
+ flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength),
+ orgDomain = $$.x.domain(), domain,
+ durationForFlow = flow.duration || duration,
+ done = flow.done || function () {
+ },
+ wait = $$.generateWait();
+
+ var xgrid = $$.xgrid || d3.selectAll([]),
+ xgridLines = $$.xgridLines || d3.selectAll([]),
+ mainRegion = $$.mainRegion || d3.selectAll([]),
+ mainText = $$.mainText || d3.selectAll([]),
+ mainBar = $$.mainBar || d3.selectAll([]),
+ mainLine = $$.mainLine || d3.selectAll([]),
+ mainArea = $$.mainArea || d3.selectAll([]),
+ mainCircle = $$.mainCircle || d3.selectAll([]);
+
+ // set flag
+ $$.flowing = true;
+
+ // remove head data after rendered
+ $$.data.targets.forEach(function (d) {
+ d.values.splice(0, flowLength);
+ });
+
+ // update x domain to generate axis elements for flow
+ domain = $$.updateXDomain(targets, true, true);
+ // update elements related to x scale
+ if ($$.updateXGrid) {
+ $$.updateXGrid(true);
+ }
+
+ // generate transform to flow
+ if (!flow.orgDataCount) { // if empty
+ if ($$.data.targets[0].values.length !== 1) {
+ translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);
+ } else {
+ if ($$.isTimeSeries()) {
+ flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);
+ flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);
+ translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);
+ } else {
+ translateX = diffDomain(domain) / 2;
+ }
+ }
+ } else if (flow.orgDataCount === 1 || flowStart.x === flowEnd.x) {
+ translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);
+ } else {
+ if ($$.isTimeSeries()) {
+ translateX = ($$.x(orgDomain[0]) - $$.x(domain[0]));
+ } else {
+ translateX = ($$.x(flowStart.x) - $$.x(flowEnd.x));
+ }
+ }
+ scaleX = (diffDomain(orgDomain) / diffDomain(domain));
+ transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';
+
+ // hide tooltip
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+
+ d3.transition().ease('linear').duration(durationForFlow).each(function () {
+ wait.add($$.axes.x.transition().call($$.xAxis));
+ wait.add(mainBar.transition().attr('transform', transform));
+ wait.add(mainLine.transition().attr('transform', transform));
+ wait.add(mainArea.transition().attr('transform', transform));
+ wait.add(mainCircle.transition().attr('transform', transform));
+ wait.add(mainText.transition().attr('transform', transform));
+ wait.add(mainRegion.filter($$.isRegionOnX).transition().attr('transform', transform));
+ wait.add(xgrid.transition().attr('transform', transform));
+ wait.add(xgridLines.transition().attr('transform', transform));
+ })
+ .call(wait, function () {
+ var i, shapes = [], texts = [], eventRects = [];
+
+ // remove flowed elements
+ if (flowLength) {
+ for (i = 0; i < flowLength; i++) {
+ shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));
+ texts.push('.' + CLASS.text + '-' + (flowIndex + i));
+ eventRects.push('.' + CLASS.eventRect + '-' + (flowIndex + i));
+ }
+ $$.svg.selectAll('.' + CLASS.shapes).selectAll(shapes).remove();
+ $$.svg.selectAll('.' + CLASS.texts).selectAll(texts).remove();
+ $$.svg.selectAll('.' + CLASS.eventRects).selectAll(eventRects).remove();
+ $$.svg.select('.' + CLASS.xgrid).remove();
+ }
+
+ // draw again for removing flowed elements and reverting attr
+ xgrid
+ .attr('transform', null)
+ .attr($$.xgridAttr);
+ xgridLines
+ .attr('transform', null);
+ xgridLines.select('line')
+ .attr("x1", config.axis_rotated ? 0 : xv)
+ .attr("x2", config.axis_rotated ? $$.width : xv);
+ xgridLines.select('text')
+ .attr("x", config.axis_rotated ? $$.width : 0)
+ .attr("y", xv);
+ mainBar
+ .attr('transform', null)
+ .attr("d", drawBar);
+ mainLine
+ .attr('transform', null)
+ .attr("d", drawLine);
+ mainArea
+ .attr('transform', null)
+ .attr("d", drawArea);
+ mainCircle
+ .attr('transform', null)
+ .attr("cx", cx)
+ .attr("cy", cy);
+ mainText
+ .attr('transform', null)
+ .attr('x', xForText)
+ .attr('y', yForText)
+ .style('fill-opacity', $$.opacityForText.bind($$));
+ mainRegion
+ .attr('transform', null);
+ mainRegion.select('rect').filter($$.isRegionOnX)
+ .attr("x", $$.regionX.bind($$))
+ .attr("width", $$.regionWidth.bind($$));
+
+ if (config.interaction_enabled) {
+ $$.redrawEventRect();
+ }
+
+ // callback for end of flow
+ done();
+
+ $$.flowing = false;
+ });
+ };
+ };
+
+ c3_chart_fn.selected = function (targetId) {
+ var $$ = this.internal, d3 = $$.d3;
+ return d3.merge(
+ $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape)
+ .filter(function () {
+ return d3.select(this).classed(CLASS.SELECTED);
+ })
+ .map(function (d) {
+ return d.map(function (d) {
+ var data = d.__data__;
+ return data.data ? data.data : data;
+ });
+ })
+ );
+ };
+ c3_chart_fn.select = function (ids, indices, resetOther) {
+ var $$ = this.internal, d3 = $$.d3, config = $$.config;
+ if (!config.data_selection_enabled) {
+ return;
+ }
+ $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this), id = d.data ? d.data.id : d.id,
+ toggle = $$.getToggle(this, d).bind($$),
+ isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,
+ isTargetIndex = !indices || indices.indexOf(i) >= 0,
+ isSelected = shape.classed(CLASS.SELECTED);
+ // line/area selection not supported yet
+ if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {
+ return;
+ }
+ if (isTargetId && isTargetIndex) {
+ if (config.data_selection_isselectable(d) && !isSelected) {
+ toggle(true, shape.classed(CLASS.SELECTED, true), d, i);
+ }
+ } else if (isDefined(resetOther) && resetOther) {
+ if (isSelected) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ }
+ });
+ };
+ c3_chart_fn.unselect = function (ids, indices) {
+ var $$ = this.internal, d3 = $$.d3, config = $$.config;
+ if (!config.data_selection_enabled) {
+ return;
+ }
+ $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this), id = d.data ? d.data.id : d.id,
+ toggle = $$.getToggle(this, d).bind($$),
+ isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,
+ isTargetIndex = !indices || indices.indexOf(i) >= 0,
+ isSelected = shape.classed(CLASS.SELECTED);
+ // line/area selection not supported yet
+ if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {
+ return;
+ }
+ if (isTargetId && isTargetIndex) {
+ if (config.data_selection_isselectable(d)) {
+ if (isSelected) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ }
+ }
+ });
+ };
+
+ c3_chart_fn.transform = function (type, targetIds) {
+ var $$ = this.internal,
+ options = ['pie', 'donut'].indexOf(type) >= 0 ? {withTransform: true} : null;
+ $$.transformTo(targetIds, type, options);
+ };
+
+ c3_chart_internal_fn.transformTo = function (targetIds, type, optionsForRedraw) {
+ var $$ = this,
+ withTransitionForAxis = !$$.hasArcType(),
+ options = optionsForRedraw || {withTransitionForAxis: withTransitionForAxis};
+ options.withTransitionForTransform = false;
+ $$.transiting = false;
+ $$.setTargetType(targetIds, type);
+ $$.updateAndRedraw(options);
+ };
+
+ c3_chart_fn.groups = function (groups) {
+ var $$ = this.internal, config = $$.config;
+ if (isUndefined(groups)) {
+ return config.data_groups;
+ }
+ config.data_groups = groups;
+ $$.redraw();
+ return config.data_groups;
+ };
+
+ c3_chart_fn.xgrids = function (grids) {
+ var $$ = this.internal, config = $$.config;
+ if (!grids) {
+ return config.grid_x_lines;
+ }
+ config.grid_x_lines = grids;
+ $$.redrawWithoutRescale();
+ return config.grid_x_lines;
+ };
+ c3_chart_fn.xgrids.add = function (grids) {
+ var $$ = this.internal;
+ return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));
+ };
+ c3_chart_fn.xgrids.remove = function (params) { // TODO: multiple
+ var $$ = this.internal;
+ $$.removeGridLines(params, true);
+ };
+
+ c3_chart_fn.ygrids = function (grids) {
+ var $$ = this.internal, config = $$.config;
+ if (!grids) {
+ return config.grid_y_lines;
+ }
+ config.grid_y_lines = grids;
+ $$.redrawWithoutRescale();
+ return config.grid_y_lines;
+ };
+ c3_chart_fn.ygrids.add = function (grids) {
+ var $$ = this.internal;
+ return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));
+ };
+ c3_chart_fn.ygrids.remove = function (params) { // TODO: multiple
+ var $$ = this.internal;
+ $$.removeGridLines(params, false);
+ };
+
+ c3_chart_fn.regions = function (regions) {
+ var $$ = this.internal, config = $$.config;
+ if (!regions) {
+ return config.regions;
+ }
+ config.regions = regions;
+ $$.redrawWithoutRescale();
+ return config.regions;
+ };
+ c3_chart_fn.regions.add = function (regions) {
+ var $$ = this.internal, config = $$.config;
+ if (!regions) {
+ return config.regions;
+ }
+ config.regions = config.regions.concat(regions);
+ $$.redrawWithoutRescale();
+ return config.regions;
+ };
+ c3_chart_fn.regions.remove = function (options) {
+ var $$ = this.internal, config = $$.config,
+ duration, classes, regions;
+
+ options = options || {};
+ duration = $$.getOption(options, "duration", config.transition_duration);
+ classes = $$.getOption(options, "classes", [CLASS.region]);
+
+ regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) {
+ return '.' + c;
+ }));
+ (duration ? regions.transition().duration(duration) : regions)
+ .style('opacity', 0)
+ .remove();
+
+ config.regions = config.regions.filter(function (region) {
+ var found = false;
+ if (!region['class']) {
+ return true;
+ }
+ region['class'].split(' ').forEach(function (c) {
+ if (classes.indexOf(c) >= 0) {
+ found = true;
+ }
+ });
+ return !found;
+ });
+
+ return config.regions;
+ };
+
+ c3_chart_fn.data = function (targetIds) {
+ var targets = this.internal.data.targets;
+ return typeof targetIds === 'undefined' ? targets : targets.filter(function (t) {
+ return [].concat(targetIds).indexOf(t.id) >= 0;
+ });
+ };
+ c3_chart_fn.data.shown = function (targetIds) {
+ return this.internal.filterTargetsToShow(this.data(targetIds));
+ };
+ c3_chart_fn.data.values = function (targetId) {
+ var targets, values = null;
+ if (targetId) {
+ targets = this.data(targetId);
+ values = targets[0] ? targets[0].values.map(function (d) {
+ return d.value;
+ }) : null;
+ }
+ return values;
+ };
+ c3_chart_fn.data.names = function (names) {
+ this.internal.clearLegendItemTextBoxCache();
+ return this.internal.updateDataAttributes('names', names);
+ };
+ c3_chart_fn.data.colors = function (colors) {
+ return this.internal.updateDataAttributes('colors', colors);
+ };
+ c3_chart_fn.data.axes = function (axes) {
+ return this.internal.updateDataAttributes('axes', axes);
+ };
+
+ c3_chart_fn.category = function (i, category) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length > 1) {
+ config.axis_x_categories[i] = category;
+ $$.redraw();
+ }
+ return config.axis_x_categories[i];
+ };
+ c3_chart_fn.categories = function (categories) {
+ var $$ = this.internal, config = $$.config;
+ if (!arguments.length) {
+ return config.axis_x_categories;
+ }
+ config.axis_x_categories = categories;
+ $$.redraw();
+ return config.axis_x_categories;
+ };
+
+ // TODO: fix
+ c3_chart_fn.color = function (id) {
+ var $$ = this.internal;
+ return $$.color(id); // more patterns
+ };
+
+ c3_chart_fn.x = function (x) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ $$.updateTargetX($$.data.targets, x);
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ }
+ return $$.data.xs;
+ };
+ c3_chart_fn.xs = function (xs) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ $$.updateTargetXs($$.data.targets, xs);
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ }
+ return $$.data.xs;
+ };
+
+ c3_chart_fn.axis = function () {
+ };
+ c3_chart_fn.axis.labels = function (labels) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ Object.keys(labels).forEach(function (axisId) {
+ $$.setAxisLabelText(axisId, labels[axisId]);
+ });
+ $$.updateAxisLabels();
+ }
+ // TODO: return some values?
+ };
+ c3_chart_fn.axis.max = function (max) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length) {
+ if (typeof max === 'object') {
+ if (isValue(max.x)) {
+ config.axis_x_max = max.x;
+ }
+ if (isValue(max.y)) {
+ config.axis_y_max = max.y;
+ }
+ if (isValue(max.y2)) {
+ config.axis_y2_max = max.y2;
+ }
+ } else {
+ config.axis_y_max = config.axis_y2_max = max;
+ }
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ } else {
+ return {
+ x: config.axis_x_max,
+ y: config.axis_y_max,
+ y2: config.axis_y2_max
+ };
+ }
+ };
+ c3_chart_fn.axis.min = function (min) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length) {
+ if (typeof min === 'object') {
+ if (isValue(min.x)) {
+ config.axis_x_min = min.x;
+ }
+ if (isValue(min.y)) {
+ config.axis_y_min = min.y;
+ }
+ if (isValue(min.y2)) {
+ config.axis_y2_min = min.y2;
+ }
+ } else {
+ config.axis_y_min = config.axis_y2_min = min;
+ }
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ } else {
+ return {
+ x: config.axis_x_min,
+ y: config.axis_y_min,
+ y2: config.axis_y2_min
+ };
+ }
+ };
+ c3_chart_fn.axis.range = function (range) {
+ if (arguments.length) {
+ if (isDefined(range.max)) {
+ this.axis.max(range.max);
+ }
+ if (isDefined(range.min)) {
+ this.axis.min(range.min);
+ }
+ } else {
+ return {
+ max: this.axis.max(),
+ min: this.axis.min()
+ };
+ }
+ };
+
+ c3_chart_fn.legend = function () {
+ };
+ c3_chart_fn.legend.show = function (targetIds) {
+ var $$ = this.internal;
+ $$.showLegend($$.mapToTargetIds(targetIds));
+ $$.updateAndRedraw({withLegend: true});
+ };
+ c3_chart_fn.legend.hide = function (targetIds) {
+ var $$ = this.internal;
+ $$.hideLegend($$.mapToTargetIds(targetIds));
+ $$.updateAndRedraw({withLegend: true});
+ };
+
+ c3_chart_fn.resize = function (size) {
+ var $$ = this.internal, config = $$.config;
+ config.size_width = size ? size.width : null;
+ config.size_height = size ? size.height : null;
+ this.flush();
+ };
+
+ c3_chart_fn.flush = function () {
+ var $$ = this.internal;
+ $$.updateAndRedraw({withLegend: true, withTransition: false, withTransitionForTransform: false});
+ };
+
+ c3_chart_fn.destroy = function () {
+ var $$ = this.internal;
+ $$.data.targets = undefined;
+ $$.data.xs = {};
+ $$.selectChart.classed('c3', false).html("");
+ window.clearInterval($$.intervalForObserveInserted);
+ window.onresize = null;
+ };
+
+ c3_chart_fn.tooltip = function () {
+ };
+ c3_chart_fn.tooltip.show = function (args) {
+ var $$ = this.internal, index, mouse;
+
+ // determine mouse position on the chart
+ if (args.mouse) {
+ mouse = args.mouse;
+ }
+
+ // determine focus data
+ if (args.data) {
+ if ($$.isMultipleX()) {
+ // if multiple xs, target point will be determined by mouse
+ mouse = [$$.x(args.data.x), $$.getYScale(args.data.id)(args.data.value)];
+ index = null;
+ } else {
+ // TODO: when tooltip_grouped = false
+ index = isValue(args.data.index) ? args.data.index : $$.getIndexByX(args.data.x);
+ }
+ }
+ else if (typeof args.x !== 'undefined') {
+ index = $$.getIndexByX(args.x);
+ }
+ else if (typeof args.index !== 'undefined') {
+ index = args.index;
+ }
+
+ // emulate mouse events to show
+ $$.dispatchEvent('mouseover', index, mouse);
+ $$.dispatchEvent('mousemove', index, mouse);
+ };
+ c3_chart_fn.tooltip.hide = function () {
+ // TODO: get target data by checking the state of focus
+ this.internal.dispatchEvent('mouseout', 0);
+ };
+
+ // Features:
+ // 1. category axis
+ // 2. ceil values of translate/x/y to int for half pixel antialiasing
+ // 3. multiline tick text
+ var tickTextCharSize;
+
+ function c3_axis(d3, params) {
+ var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;
+
+ var tickOffset = 0, tickCulling = true, tickCentered;
+
+ params = params || {};
+ outerTickSize = params.withOuterTick ? 6 : 0;
+
+ function axisX(selection, x) {
+ selection.attr("transform", function (d) {
+ return "translate(" + Math.ceil(x(d) + tickOffset) + ", 0)";
+ });
+ }
+
+ function axisY(selection, y) {
+ selection.attr("transform", function (d) {
+ return "translate(0," + Math.ceil(y(d)) + ")";
+ });
+ }
+
+ function scaleExtent(domain) {
+ var start = domain[0], stop = domain[domain.length - 1];
+ return start < stop ? [start, stop] : [stop, start];
+ }
+
+ function generateTicks(scale) {
+ var i, domain, ticks = [];
+ if (scale.ticks) {
+ return scale.ticks.apply(scale, tickArguments);
+ }
+ domain = scale.domain();
+ for (i = Math.ceil(domain[0]); i < domain[1]; i++) {
+ ticks.push(i);
+ }
+ if (ticks.length > 0 && ticks[0] > 0) {
+ ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));
+ }
+ return ticks;
+ }
+
+ function copyScale() {
+ var newScale = scale.copy(), domain;
+ if (params.isCategory) {
+ domain = scale.domain();
+ newScale.domain([domain[0], domain[1] - 1]);
+ }
+ return newScale;
+ }
+
+ function textFormatted(v) {
+ return tickFormat ? tickFormat(v) : v;
+ }
+
+ function getSizeFor1Char(tick) {
+ if (tickTextCharSize) {
+ return tickTextCharSize;
+ }
+ var size = {
+ h: 11.5,
+ w: 5.5
+ };
+ tick.select('text').text(textFormatted).each(function (d) {
+ var box = this.getBoundingClientRect(),
+ text = textFormatted(d),
+ h = box.height,
+ w = text ? (box.width / text.length) : undefined;
+ if (h && w) {
+ size.h = h;
+ size.w = w;
+ }
+ }).text('');
+ tickTextCharSize = size;
+ return size;
+ }
+
+ function axis(g) {
+ g.each(function () {
+ var g = d3.select(this);
+ var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale();
+
+ var ticks = tickValues ? tickValues : generateTicks(scale1),
+ tick = g.selectAll(".tick").data(ticks, scale1),
+ tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6),
+ // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.
+ tickExit = tick.exit().remove(),
+ tickUpdate = d3.transition(tick).style("opacity", 1),
+ tickTransform, tickX, tickY;
+
+ var range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range()),
+ path = g.selectAll(".domain").data([0]),
+ pathUpdate = (path.enter().append("path").attr("class", "domain"), d3.transition(path));
+ tickEnter.append("line");
+ tickEnter.append("text");
+
+ var lineEnter = tickEnter.select("line"),
+ lineUpdate = tickUpdate.select("line"),
+ textEnter = tickEnter.select("text"),
+ textUpdate = tickUpdate.select("text");
+
+ if (params.isCategory) {
+ tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);
+ tickX = tickCentered ? 0 : tickOffset;
+ tickY = tickCentered ? tickOffset : 0;
+ } else {
+ tickOffset = tickX = 0;
+ }
+
+ var text, tspan, sizeFor1Char = getSizeFor1Char(g.select('.tick')), counts = [];
+ var tickLength = Math.max(innerTickSize, 0) + tickPadding,
+ isVertical = orient === 'left' || orient === 'right';
+
+ // this should be called only when category axis
+ function splitTickText(d, maxWidth) {
+ var tickText = textFormatted(d),
+ subtext, spaceIndex, textWidth, splitted = [];
+
+ if (Object.prototype.toString.call(tickText) === "[object Array]") {
+ return tickText;
+ }
+
+ if (!maxWidth || maxWidth <= 0) {
+ maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110;
+ }
+
+ function split(splitted, text) {
+ spaceIndex = undefined;
+ for (var i = 1; i < text.length; i++) {
+ if (text.charAt(i) === ' ') {
+ spaceIndex = i;
+ }
+ subtext = text.substr(0, i + 1);
+ textWidth = sizeFor1Char.w * subtext.length;
+ // if text width gets over tick width, split by space index or crrent index
+ if (maxWidth < textWidth) {
+ return split(
+ splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)),
+ text.slice(spaceIndex ? spaceIndex + 1 : i)
+ );
+ }
+ }
+ return splitted.concat(text);
+ }
+
+ return split(splitted, tickText + "");
+ }
+
+ function tspanDy(d, i) {
+ var dy = sizeFor1Char.h;
+ if (i === 0) {
+ if (orient === 'left' || orient === 'right') {
+ dy = -((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3);
+ } else {
+ dy = ".71em";
+ }
+ }
+ return dy;
+ }
+
+ function tickSize(d) {
+ var tickPosition = scale(d) + (tickCentered ? 0 : tickOffset);
+ return range[0] < tickPosition && tickPosition < range[1] ? innerTickSize : 0;
+ }
+
+ text = tick.select("text");
+ tspan = text.selectAll('tspan')
+ .data(function (d, i) {
+ var splitted = params.tickMultiline ? splitTickText(d, params.tickWidth) : [].concat(textFormatted(d));
+ counts[i] = splitted.length;
+ return splitted.map(function (s) {
+ return {index: i, splitted: s};
+ });
+ });
+ tspan.enter().append('tspan');
+ tspan.exit().remove();
+ tspan.text(function (d) {
+ return d.splitted;
+ });
+
+ switch (orient) {
+ case "bottom":
+ {
+ tickTransform = axisX;
+ lineEnter.attr("y2", innerTickSize);
+ textEnter.attr("y", tickLength);
+ lineUpdate.attr("x1", tickX).attr("x2", tickX).attr("y2", tickSize);
+ textUpdate.attr("x", 0).attr("y", tickLength);
+ text.style("text-anchor", "middle");
+ tspan.attr('x', 0).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
+ break;
+ }
+ case "top":
+ {
+ tickTransform = axisX;
+ lineEnter.attr("y2", -innerTickSize);
+ textEnter.attr("y", -tickLength);
+ lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
+ textUpdate.attr("x", 0).attr("y", -tickLength);
+ text.style("text-anchor", "middle");
+ tspan.attr('x', 0).attr("dy", "0em");
+ pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
+ break;
+ }
+ case "left":
+ {
+ tickTransform = axisY;
+ lineEnter.attr("x2", -innerTickSize);
+ textEnter.attr("x", -tickLength);
+ lineUpdate.attr("x2", -innerTickSize).attr("y1", tickY).attr("y2", tickY);
+ textUpdate.attr("x", -tickLength).attr("y", tickOffset);
+ text.style("text-anchor", "end");
+ tspan.attr('x', -tickLength).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
+ break;
+ }
+ case "right":
+ {
+ tickTransform = axisY;
+ lineEnter.attr("x2", innerTickSize);
+ textEnter.attr("x", tickLength);
+ lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
+ textUpdate.attr("x", tickLength).attr("y", 0);
+ text.style("text-anchor", "start");
+ tspan.attr('x', tickLength).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
+ break;
+ }
+ }
+ if (scale1.rangeBand) {
+ var x = scale1, dx = x.rangeBand() / 2;
+ scale0 = scale1 = function (d) {
+ return x(d) + dx;
+ };
+ } else if (scale0.rangeBand) {
+ scale0 = scale1;
+ } else {
+ tickExit.call(tickTransform, scale1);
+ }
+ tickEnter.call(tickTransform, scale0);
+ tickUpdate.call(tickTransform, scale1);
+ });
+ }
+
+ axis.scale = function (x) {
+ if (!arguments.length) {
+ return scale;
+ }
+ scale = x;
+ return axis;
+ };
+ axis.orient = function (x) {
+ if (!arguments.length) {
+ return orient;
+ }
+ orient = x in {top: 1, right: 1, bottom: 1, left: 1} ? x + "" : "bottom";
+ return axis;
+ };
+ axis.tickFormat = function (format) {
+ if (!arguments.length) {
+ return tickFormat;
+ }
+ tickFormat = format;
+ return axis;
+ };
+ axis.tickCentered = function (isCentered) {
+ if (!arguments.length) {
+ return tickCentered;
+ }
+ tickCentered = isCentered;
+ return axis;
+ };
+ axis.tickOffset = function () { // This will be overwritten when normal x axis
+ return tickOffset;
+ };
+ axis.ticks = function () {
+ if (!arguments.length) {
+ return tickArguments;
+ }
+ tickArguments = arguments;
+ return axis;
+ };
+ axis.tickCulling = function (culling) {
+ if (!arguments.length) {
+ return tickCulling;
+ }
+ tickCulling = culling;
+ return axis;
+ };
+ axis.tickValues = function (x) {
+ if (typeof x === 'function') {
+ tickValues = function () {
+ return x(scale.domain());
+ };
+ }
+ else {
+ if (!arguments.length) {
+ return tickValues;
+ }
+ tickValues = x;
+ }
+ return axis;
+ };
+ return axis;
+ }
+
+ // fix problems using c3 with phantomjs #578
+ Function.prototype.bind = Function.prototype.bind || function (thisp) {
+ var fn = this;
+ return function () {
+ return fn.apply(thisp, arguments);
+ };
+ };
+
+ if (typeof define === 'function' && define.amd) {
+ define("c3", ["d3"], c3);
+ } else if ('undefined' !== typeof exports && 'undefined' !== typeof module) {
+ module.exports = c3;
+ } else {
+ window.c3 = c3;
+ }
+
+})(window);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.min.js
new file mode 100644
index 00000000..3c335da3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/c3.min.js
@@ -0,0 +1,2665 @@
+!function (a) {
+ "use strict";
+ function b(a) {
+ var b = this.internal = new c(this);
+ b.loadConfig(a), b.init(), function d(a, b, c) {
+ Object.keys(a).forEach(function (e) {
+ b[e] = a[e].bind(c), Object.keys(a[e]).length > 0 && d(a[e], b[e], c)
+ })
+ }(e, this, this)
+ }
+
+ function c(b) {
+ var c = this;
+ c.d3 = a.d3 ? a.d3 : "undefined" != typeof require ? require("d3") : void 0, c.api = b, c.config = c.getDefaultConfig(), c.data = {}, c.cache = {}, c.axes = {}
+ }
+
+ function d(a, b) {
+ function c(a, b) {
+ a.attr("transform", function (a) {
+ return "translate(" + Math.ceil(b(a) + t) + ", 0)"
+ })
+ }
+
+ function d(a, b) {
+ a.attr("transform", function (a) {
+ return "translate(0," + Math.ceil(b(a)) + ")"
+ })
+ }
+
+ function e(a) {
+ var b = a[0], c = a[a.length - 1];
+ return c > b ? [b, c] : [c, b]
+ }
+
+ function f(a) {
+ var b, c, d = [];
+ if (a.ticks)return a.ticks.apply(a, m);
+ for (c = a.domain(), b = Math.ceil(c[0]); b < c[1]; b++)d.push(b);
+ return d.length > 0 && d[0] > 0 && d.unshift(d[0] - (d[1] - d[0])), d
+ }
+
+ function g() {
+ var a, c = o.copy();
+ return b.isCategory && (a = o.domain(), c.domain([a[0], a[1] - 1])), c
+ }
+
+ function h(a) {
+ return l ? l(a) : a
+ }
+
+ function i(a) {
+ if (w)return w;
+ var b = {h: 11.5, w: 5.5};
+ return a.select("text").text(h).each(function (a) {
+ var c = this.getBoundingClientRect(), d = h(a), e = c.height, f = d ? c.width / d.length : void 0;
+ e && f && (b.h = e, b.w = f)
+ }).text(""), w = b, b
+ }
+
+ function j(j) {
+ j.each(function () {
+ function j(a, c) {
+ function d(a, b) {
+ f = void 0;
+ for (var h = 1; h < b.length; h++)if (" " === b.charAt(h) && (f = h), e = b.substr(0, h + 1), g = O.w * e.length, g > c)return d(a.concat(b.substr(0, f ? f : h)), b.slice(f ? f + 1 : h));
+ return a.concat(b)
+ }
+
+ var e, f, g, i = h(a), j = [];
+ return "[object Array]" === Object.prototype.toString.call(i) ? i : ((!c || 0 >= c) && (c = R ? 95 : b.isCategory ? Math.ceil(z(A[1]) - z(A[0])) - 12 : 110), d(j, i + ""))
+ }
+
+ function l(a, b) {
+ var c = O.h;
+ return 0 === b && (c = "left" === p || "right" === p ? -((P[a.index] - 1) * (O.h / 2) - 3) : ".71em"), c
+ }
+
+ function m(a) {
+ var b = o(a) + (n ? 0 : t);
+ return F[0] < b && b < F[1] ? q : 0
+ }
+
+ var u, v, w, x = a.select(this), y = this.__chart__ || o, z = this.__chart__ = g(), A = s ? s : f(z), B = x.selectAll(".tick").data(A, z), C = B.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), D = B.exit().remove(), E = a.transition(B).style("opacity", 1), F = o.rangeExtent ? o.rangeExtent() : e(o.range()), G = x.selectAll(".domain").data([0]), H = (G.enter().append("path").attr("class", "domain"), a.transition(G));
+ C.append("line"), C.append("text");
+ var I = C.select("line"), J = E.select("line"), K = C.select("text"), L = E.select("text");
+ b.isCategory ? (t = Math.ceil((z(1) - z(0)) / 2), v = n ? 0 : t, w = n ? t : 0) : t = v = 0;
+ var M, N, O = i(x.select(".tick")), P = [], Q = Math.max(q, 0) + r, R = "left" === p || "right" === p;
+ switch (M = B.select("text"), N = M.selectAll("tspan").data(function (a, c) {
+ var d = b.tickMultiline ? j(a, b.tickWidth) : [].concat(h(a));
+ return P[c] = d.length, d.map(function (a) {
+ return {index: c, splitted: a}
+ })
+ }), N.enter().append("tspan"), N.exit().remove(), N.text(function (a) {
+ return a.splitted
+ }), p) {
+ case"bottom":
+ u = c, I.attr("y2", q), K.attr("y", Q), J.attr("x1", v).attr("x2", v).attr("y2", m), L.attr("x", 0).attr("y", Q), M.style("text-anchor", "middle"), N.attr("x", 0).attr("dy", l), H.attr("d", "M" + F[0] + "," + k + "V0H" + F[1] + "V" + k);
+ break;
+ case"top":
+ u = c, I.attr("y2", -q), K.attr("y", -Q), J.attr("x2", 0).attr("y2", -q), L.attr("x", 0).attr("y", -Q), M.style("text-anchor", "middle"), N.attr("x", 0).attr("dy", "0em"), H.attr("d", "M" + F[0] + "," + -k + "V0H" + F[1] + "V" + -k);
+ break;
+ case"left":
+ u = d, I.attr("x2", -q), K.attr("x", -Q), J.attr("x2", -q).attr("y1", w).attr("y2", w), L.attr("x", -Q).attr("y", t), M.style("text-anchor", "end"), N.attr("x", -Q).attr("dy", l), H.attr("d", "M" + -k + "," + F[0] + "H0V" + F[1] + "H" + -k);
+ break;
+ case"right":
+ u = d, I.attr("x2", q), K.attr("x", Q), J.attr("x2", q).attr("y2", 0), L.attr("x", Q).attr("y", 0), M.style("text-anchor", "start"), N.attr("x", Q).attr("dy", l), H.attr("d", "M" + k + "," + F[0] + "H0V" + F[1] + "H" + k)
+ }
+ if (z.rangeBand) {
+ var S = z, T = S.rangeBand() / 2;
+ y = z = function (a) {
+ return S(a) + T
+ }
+ } else y.rangeBand ? y = z : D.call(u, z);
+ C.call(u, y), E.call(u, z)
+ })
+ }
+
+ var k, l, m, n, o = a.scale.linear(), p = "bottom", q = 6, r = 3, s = null, t = 0, u = !0;
+ return b = b || {}, k = b.withOuterTick ? 6 : 0, j.scale = function (a) {
+ return arguments.length ? (o = a, j) : o
+ }, j.orient = function (a) {
+ return arguments.length ? (p = a in{top: 1, right: 1, bottom: 1, left: 1} ? a + "" : "bottom", j) : p
+ }, j.tickFormat = function (a) {
+ return arguments.length ? (l = a, j) : l
+ }, j.tickCentered = function (a) {
+ return arguments.length ? (n = a, j) : n
+ }, j.tickOffset = function () {
+ return t
+ }, j.ticks = function () {
+ return arguments.length ? (m = arguments, j) : m
+ }, j.tickCulling = function (a) {
+ return arguments.length ? (u = a, j) : u
+ }, j.tickValues = function (a) {
+ if ("function" == typeof a)s = function () {
+ return a(o.domain())
+ }; else {
+ if (!arguments.length)return s;
+ s = a
+ }
+ return j
+ }, j
+ }
+
+ var e, f, g = {version: "0.4.8"};
+ g.generate = function (a) {
+ return new b(a)
+ }, g.chart = {
+ fn: b.prototype,
+ internal: {fn: c.prototype}
+ }, e = g.chart.fn, f = g.chart.internal.fn, f.init = function () {
+ var a = this, b = a.config;
+ if (a.initParams(), b.data_url)a.convertUrlToData(b.data_url, b.data_mimeType, b.data_keys, a.initWithData); else if (b.data_json)a.initWithData(a.convertJsonToData(b.data_json, b.data_keys)); else if (b.data_rows)a.initWithData(a.convertRowsToData(b.data_rows)); else {
+ if (!b.data_columns)throw Error("url or json or rows or columns is required.");
+ a.initWithData(a.convertColumnsToData(b.data_columns))
+ }
+ }, f.initParams = function () {
+ var a = this, b = a.d3, c = a.config;
+ a.clipId = "c3-" + +new Date + "-clip", a.clipIdForXAxis = a.clipId + "-xaxis", a.clipIdForYAxis = a.clipId + "-yaxis", a.clipIdForGrid = a.clipId + "-grid", a.clipIdForSubchart = a.clipId + "-subchart", a.clipPath = a.getClipPath(a.clipId), a.clipPathForXAxis = a.getClipPath(a.clipIdForXAxis), a.clipPathForYAxis = a.getClipPath(a.clipIdForYAxis), a.clipPathForGrid = a.getClipPath(a.clipIdForGrid), a.clipPathForSubchart = a.getClipPath(a.clipIdForSubchart), a.dragStart = null, a.dragging = !1, a.flowing = !1, a.cancelClick = !1, a.mouseover = !1, a.transiting = !1, a.color = a.generateColor(), a.levelColor = a.generateLevelColor(), a.dataTimeFormat = c.data_xLocaltime ? b.time.format : b.time.format.utc, a.axisTimeFormat = c.axis_x_localtime ? b.time.format : b.time.format.utc, a.defaultAxisTimeFormat = a.axisTimeFormat.multi([[".%L", function (a) {
+ return a.getMilliseconds()
+ }], [":%S", function (a) {
+ return a.getSeconds()
+ }], ["%I:%M", function (a) {
+ return a.getMinutes()
+ }], ["%I %p", function (a) {
+ return a.getHours()
+ }], ["%-m/%-d", function (a) {
+ return a.getDay() && 1 !== a.getDate()
+ }], ["%-m/%-d", function (a) {
+ return 1 !== a.getDate()
+ }], ["%-m/%-d", function (a) {
+ return a.getMonth()
+ }], ["%Y/%-m/%-d", function () {
+ return !0
+ }]]), a.hiddenTargetIds = [], a.hiddenLegendIds = [], a.focusedTargetIds = [], a.defocusedTargetIds = [], a.xOrient = c.axis_rotated ? "left" : "bottom", a.yOrient = c.axis_rotated ? c.axis_y_inner ? "top" : "bottom" : c.axis_y_inner ? "right" : "left", a.y2Orient = c.axis_rotated ? c.axis_y2_inner ? "bottom" : "top" : c.axis_y2_inner ? "left" : "right", a.subXOrient = c.axis_rotated ? "left" : "bottom", a.isLegendRight = "right" === c.legend_position, a.isLegendInset = "inset" === c.legend_position, a.isLegendTop = "top-left" === c.legend_inset_anchor || "top-right" === c.legend_inset_anchor, a.isLegendLeft = "top-left" === c.legend_inset_anchor || "bottom-left" === c.legend_inset_anchor, a.legendStep = 0, a.legendItemWidth = 0, a.legendItemHeight = 0, a.currentMaxTickWidths = {
+ x: 0,
+ y: 0,
+ y2: 0
+ }, a.rotated_padding_left = 30, a.rotated_padding_right = c.axis_rotated && !c.axis_x_show ? 0 : 30, a.rotated_padding_top = 5, a.withoutFadeIn = {}, a.intervalForObserveInserted = void 0, a.axes.subx = b.selectAll([])
+ }, f.initChartElements = function () {
+ this.initBar && this.initBar(), this.initLine && this.initLine(), this.initArc && this.initArc(), this.initGauge && this.initGauge(), this.initText && this.initText()
+ }, f.initWithData = function (b) {
+ var c, d, e = this, f = e.d3, g = e.config, h = !0;
+ e.initPie && e.initPie(), e.initBrush && e.initBrush(), e.initZoom && e.initZoom(), e.selectChart = "function" == typeof g.bindto.node ? g.bindto : f.select(g.bindto), e.selectChart.empty() && (e.selectChart = f.select(document.createElement("div")).style("opacity", 0), e.observeInserted(e.selectChart), h = !1), e.selectChart.html("").classed("c3", !0), e.data.xs = {}, e.data.targets = e.convertDataToTargets(b), g.data_filter && (e.data.targets = e.data.targets.filter(g.data_filter)), g.data_hide && e.addHiddenTargetIds(g.data_hide === !0 ? e.mapToIds(e.data.targets) : g.data_hide), g.legend_hide && e.addHiddenLegendIds(g.legend_hide === !0 ? e.mapToIds(e.data.targets) : g.legend_hide), e.hasType("gauge") && (g.legend_show = !1), e.updateSizes(), e.updateScales(), e.x.domain(f.extent(e.getXDomain(e.data.targets))), e.y.domain(e.getYDomain(e.data.targets, "y")), e.y2.domain(e.getYDomain(e.data.targets, "y2")), e.subX.domain(e.x.domain()), e.subY.domain(e.y.domain()), e.subY2.domain(e.y2.domain()), e.orgXDomain = e.x.domain(), e.brush && e.brush.scale(e.subX), g.zoom_enabled && e.zoom.scale(e.x), e.svg = e.selectChart.append("svg").style("overflow", "hidden").on("mouseenter", function () {
+ return g.onmouseover.call(e)
+ }).on("mouseleave", function () {
+ return g.onmouseout.call(e)
+ }), c = e.svg.append("defs"), e.clipChart = e.appendClip(c, e.clipId), e.clipXAxis = e.appendClip(c, e.clipIdForXAxis), e.clipYAxis = e.appendClip(c, e.clipIdForYAxis), e.clipGrid = e.appendClip(c, e.clipIdForGrid), e.clipSubchart = e.appendClip(c, e.clipIdForSubchart), e.updateSvgSize(), d = e.main = e.svg.append("g").attr("transform", e.getTranslate("main")), e.initSubchart && e.initSubchart(), e.initTooltip && e.initTooltip(), e.initLegend && e.initLegend(), d.append("text").attr("class", i.text + " " + i.empty).attr("text-anchor", "middle").attr("dominant-baseline", "middle"), e.initRegion(), e.initGrid(), d.append("g").attr("clip-path", e.clipPath).attr("class", i.chart), g.grid_lines_front && e.initGridLines(), e.initEventRect(), e.initChartElements(), d.insert("rect", g.zoom_privileged ? null : "g." + i.regions).attr("class", i.zoomRect).attr("width", e.width).attr("height", e.height).style("opacity", 0).on("dblclick.zoom", null), g.axis_x_extent && e.brush.extent(e.getDefaultExtent()), e.initAxis(), e.updateTargets(e.data.targets), h && (e.updateDimension(), e.config.oninit.call(e), e.redraw({
+ withTransform: !0,
+ withUpdateXDomain: !0,
+ withUpdateOrgXDomain: !0,
+ withTransitionForAxis: !1
+ })), null == a.onresize && (a.onresize = e.generateResize()), a.onresize.add && (a.onresize.add(function () {
+ g.onresize.call(e)
+ }), a.onresize.add(function () {
+ e.api.flush()
+ }), a.onresize.add(function () {
+ g.onresized.call(e)
+ })), e.api.element = e.selectChart.node()
+ }, f.smoothLines = function (a, b) {
+ var c = this;
+ "grid" === b && a.each(function () {
+ var a = c.d3.select(this), b = a.attr("x1"), d = a.attr("x2"), e = a.attr("y1"), f = a.attr("y2");
+ a.attr({x1: Math.ceil(b), x2: Math.ceil(d), y1: Math.ceil(e), y2: Math.ceil(f)})
+ })
+ }, f.updateSizes = function () {
+ var a = this, b = a.config, c = a.legend ? a.getLegendHeight() : 0, d = a.legend ? a.getLegendWidth() : 0, e = a.isLegendRight || a.isLegendInset ? 0 : c, f = a.hasArcType(), g = b.axis_rotated || f ? 0 : a.getHorizontalAxisHeight("x"), h = b.subchart_show && !f ? b.subchart_size_height + g : 0;
+ a.currentWidth = a.getCurrentWidth(), a.currentHeight = a.getCurrentHeight(), a.margin = b.axis_rotated ? {
+ top: a.getHorizontalAxisHeight("y2") + a.getCurrentPaddingTop(),
+ right: f ? 0 : a.getCurrentPaddingRight(),
+ bottom: a.getHorizontalAxisHeight("y") + e + a.getCurrentPaddingBottom(),
+ left: h + (f ? 0 : a.getCurrentPaddingLeft())
+ } : {
+ top: 4 + a.getCurrentPaddingTop(),
+ right: f ? 0 : a.getCurrentPaddingRight(),
+ bottom: g + h + e + a.getCurrentPaddingBottom(),
+ left: f ? 0 : a.getCurrentPaddingLeft()
+ }, a.margin2 = b.axis_rotated ? {
+ top: a.margin.top,
+ right: 0 / 0,
+ bottom: 20 + e,
+ left: a.rotated_padding_left
+ } : {top: a.currentHeight - h - e, right: 0 / 0, bottom: g + e, left: a.margin.left}, a.margin3 = {
+ top: 0,
+ right: 0 / 0,
+ bottom: 0,
+ left: 0
+ }, a.updateSizeForLegend && a.updateSizeForLegend(c, d), a.width = a.currentWidth - a.margin.left - a.margin.right, a.height = a.currentHeight - a.margin.top - a.margin.bottom, a.width < 0 && (a.width = 0), a.height < 0 && (a.height = 0), a.width2 = b.axis_rotated ? a.margin.left - a.rotated_padding_left - a.rotated_padding_right : a.width, a.height2 = b.axis_rotated ? a.height : a.currentHeight - a.margin2.top - a.margin2.bottom, a.width2 < 0 && (a.width2 = 0), a.height2 < 0 && (a.height2 = 0), a.arcWidth = a.width - (a.isLegendRight ? d + 10 : 0), a.arcHeight = a.height - (a.isLegendRight ? 0 : 10), a.hasType("gauge") && (a.arcHeight += a.height - a.getGaugeLabelHeight()), a.updateRadius && a.updateRadius(), a.isLegendRight && f && (a.margin3.left = a.arcWidth / 2 + 1.1 * a.radiusExpanded)
+ }, f.updateTargets = function (a) {
+ var b = this, c = b.config;
+ b.updateTargetsForText(a), b.updateTargetsForBar(a), b.updateTargetsForLine(a), b.updateTargetsForArc && b.updateTargetsForArc(a), b.updateTargetsForSubchart && b.updateTargetsForSubchart(a), b.svg.selectAll("." + i.target).filter(function (a) {
+ return b.isTargetToShow(a.id)
+ }).transition().duration(c.transition_duration).style("opacity", 1)
+ }, f.redraw = function (a, b) {
+ var c, d, e, f, g, h, j, k, l, m, n, o, p, q, r, s, u, v, w, x, y, z, A, B, C, D, E, F, G, H = this, I = H.main, J = H.d3, K = H.config, L = H.getShapeIndices(H.isAreaType), M = H.getShapeIndices(H.isBarType), N = H.getShapeIndices(H.isLineType), O = H.hasArcType(), P = H.filterTargetsToShow(H.data.targets), Q = H.xv.bind(H);
+ if (a = a || {}, c = t(a, "withY", !0), d = t(a, "withSubchart", !0), e = t(a, "withTransition", !0), h = t(a, "withTransform", !1), j = t(a, "withUpdateXDomain", !1), k = t(a, "withUpdateOrgXDomain", !1), l = t(a, "withTrimXDomain", !0), p = t(a, "withUpdateXAxis", j), m = t(a, "withLegend", !1), n = t(a, "withEventRect", !0), o = t(a, "withDimension", !0), f = t(a, "withTransitionForExit", e), g = t(a, "withTransitionForAxis", e), w = e ? K.transition_duration : 0, x = f ? w : 0, y = g ? w : 0, b = b || H.generateAxisTransitions(y), m && K.legend_show ? H.updateLegend(H.mapToIds(H.data.targets), a, b) : o && H.updateDimension(!0), H.isCategorized() && 0 === P.length && H.x.domain([0, H.axes.x.selectAll(".tick").size()]), P.length ? (H.updateXDomain(P, j, k, l), K.axis_x_tick_values || (B = K.axis_x_tick_fit || K.axis_x_tick_count ? H.generateTickValues(H.mapTargetsToUniqueXs(P), K.axis_x_tick_count, H.isTimeSeries()) : void 0, H.xAxis.tickValues(B), H.subXAxis.tickValues(B))) : (H.xAxis.tickValues([]), H.subXAxis.tickValues([])), K.zoom_rescale && !a.flow && (E = H.x.orgDomain()), H.y.domain(H.getYDomain(P, "y", E)), H.y2.domain(H.getYDomain(P, "y2", E)), !K.axis_y_tick_values && K.axis_y_tick_count && H.yAxis.tickValues(H.generateTickValues(H.y.domain(), K.axis_y_tick_count)), !K.axis_y2_tick_values && K.axis_y2_tick_count && H.y2Axis.tickValues(H.generateTickValues(H.y2.domain(), K.axis_y2_tick_count)), H.redrawAxis(b, O), H.updateAxisLabels(e), (j || p) && P.length)if (K.axis_x_tick_culling && B) {
+ for (C = 1; C < B.length; C++)if (B.length / C < K.axis_x_tick_culling_max) {
+ D = C;
+ break
+ }
+ H.svg.selectAll("." + i.axisX + " .tick text").each(function (a) {
+ var b = B.indexOf(a);
+ b >= 0 && J.select(this).style("display", b % D ? "none" : "block")
+ })
+ } else H.svg.selectAll("." + i.axisX + " .tick text").style("display", "block");
+ q = H.generateDrawArea ? H.generateDrawArea(L, !1) : void 0, r = H.generateDrawBar ? H.generateDrawBar(M) : void 0, s = H.generateDrawLine ? H.generateDrawLine(N, !1) : void 0, u = H.generateXYForText(L, M, N, !0), v = H.generateXYForText(L, M, N, !1), c && (H.subY.domain(H.getYDomain(P, "y")), H.subY2.domain(H.getYDomain(P, "y2"))), H.tooltip.style("display", "none"), H.updateXgridFocus(), I.select("text." + i.text + "." + i.empty).attr("x", H.width / 2).attr("y", H.height / 2).text(K.data_empty_label_text).transition().style("opacity", P.length ? 0 : 1), H.redrawGrid(w), H.redrawRegion(w), H.redrawBar(x), H.redrawLine(x), H.redrawArea(x), H.redrawCircle(), H.hasDataLabel() && H.redrawText(x), H.redrawArc && H.redrawArc(w, x, h), H.redrawSubchart && H.redrawSubchart(d, b, w, x, L, M, N), I.selectAll("." + i.selectedCircles).filter(H.isBarType.bind(H)).selectAll("circle").remove(), K.interaction_enabled && !a.flow && n && (H.redrawEventRect(), H.updateZoom && H.updateZoom()), H.updateCircleY(), F = (H.config.axis_rotated ? H.circleY : H.circleX).bind(H), G = (H.config.axis_rotated ? H.circleX : H.circleY).bind(H), J.transition().duration(w).each(function () {
+ var b = [];
+ H.addTransitionForBar(b, r), H.addTransitionForLine(b, s), H.addTransitionForArea(b, q), H.addTransitionForCircle(b, F, G), H.addTransitionForText(b, u, v, a.flow), H.addTransitionForRegion(b), H.addTransitionForGrid(b), a.flow && (z = H.generateWait(), b.forEach(function (a) {
+ z.add(a)
+ }), A = H.generateFlow({
+ targets: P,
+ flow: a.flow,
+ duration: w,
+ drawBar: r,
+ drawLine: s,
+ drawArea: q,
+ cx: F,
+ cy: G,
+ xv: Q,
+ xForText: u,
+ yForText: v
+ }))
+ }).call(z || function () {
+ }, A || function () {
+ }), H.mapToIds(H.data.targets).forEach(function (a) {
+ H.withoutFadeIn[a] = !0
+ })
+ }, f.updateAndRedraw = function (a) {
+ var b, c = this, d = c.config;
+ a = a || {}, a.withTransition = t(a, "withTransition", !0), a.withTransform = t(a, "withTransform", !1), a.withLegend = t(a, "withLegend", !1), a.withUpdateXDomain = !0, a.withUpdateOrgXDomain = !0, a.withTransitionForExit = !1, a.withTransitionForTransform = t(a, "withTransitionForTransform", a.withTransition), c.updateSizes(), a.withLegend && d.legend_show || (b = c.generateAxisTransitions(a.withTransitionForAxis ? d.transition_duration : 0), c.updateScales(), c.updateSvgSize(), c.transformAll(a.withTransitionForTransform, b)), c.redraw(a, b)
+ }, f.redrawWithoutRescale = function () {
+ this.redraw({withY: !1, withSubchart: !1, withEventRect: !1, withTransitionForAxis: !1})
+ }, f.isTimeSeries = function () {
+ return "timeseries" === this.config.axis_x_type
+ }, f.isCategorized = function () {
+ return this.config.axis_x_type.indexOf("categor") >= 0
+ }, f.isCustomX = function () {
+ var a = this, b = a.config;
+ return !a.isTimeSeries() && (b.data_x || s(b.data_xs))
+ }, f.isTimeSeriesY = function () {
+ return "timeseries" === this.config.axis_y_type
+ }, f.getTranslate = function (a) {
+ var b, c, d = this, e = d.config;
+ return "main" === a ? (b = p(d.margin.left), c = p(d.margin.top)) : "context" === a ? (b = p(d.margin2.left), c = p(d.margin2.top)) : "legend" === a ? (b = d.margin3.left, c = d.margin3.top) : "x" === a ? (b = 0, c = e.axis_rotated ? 0 : d.height) : "y" === a ? (b = 0, c = e.axis_rotated ? d.height : 0) : "y2" === a ? (b = e.axis_rotated ? 0 : d.width, c = e.axis_rotated ? 1 : 0) : "subx" === a ? (b = 0, c = e.axis_rotated ? 0 : d.height2) : "arc" === a && (b = d.arcWidth / 2, c = d.arcHeight / 2), "translate(" + b + "," + c + ")"
+ }, f.initialOpacity = function (a) {
+ return null !== a.value && this.withoutFadeIn[a.id] ? 1 : 0
+ }, f.initialOpacityForCircle = function (a) {
+ return null !== a.value && this.withoutFadeIn[a.id] ? this.opacityForCircle(a) : 0
+ }, f.opacityForCircle = function (a) {
+ var b = this.config.point_show ? 1 : 0;
+ return j(a.value) ? this.isScatterType(a) ? .5 : b : 0
+ }, f.opacityForText = function () {
+ return this.hasDataLabel() ? 1 : 0
+ }, f.xx = function (a) {
+ return a ? this.x(a.x) : null
+ }, f.xv = function (a) {
+ var b = this, c = a.value;
+ return b.isTimeSeries() ? c = b.parseDate(a.value) : b.isCategorized() && "string" == typeof a.value && (c = b.config.axis_x_categories.indexOf(a.value)), Math.ceil(b.x(c))
+ }, f.yv = function (a) {
+ var b = this, c = a.axis && "y2" === a.axis ? b.y2 : b.y;
+ return Math.ceil(c(a.value))
+ }, f.subxx = function (a) {
+ return a ? this.subX(a.x) : null
+ }, f.transformMain = function (a, b) {
+ var c, d, e, f = this;
+ b && b.axisX ? c = b.axisX : (c = f.main.select("." + i.axisX), a && (c = c.transition())), b && b.axisY ? d = b.axisY : (d = f.main.select("." + i.axisY), a && (d = d.transition())), b && b.axisY2 ? e = b.axisY2 : (e = f.main.select("." + i.axisY2), a && (e = e.transition())), (a ? f.main.transition() : f.main).attr("transform", f.getTranslate("main")), c.attr("transform", f.getTranslate("x")), d.attr("transform", f.getTranslate("y")), e.attr("transform", f.getTranslate("y2")), f.main.select("." + i.chartArcs).attr("transform", f.getTranslate("arc"))
+ }, f.transformAll = function (a, b) {
+ var c = this;
+ c.transformMain(a, b), c.config.subchart_show && c.transformContext(a, b), c.legend && c.transformLegend(a)
+ }, f.updateSvgSize = function () {
+ var a = this, b = a.svg.select(".c3-brush .background");
+ a.svg.attr("width", a.currentWidth).attr("height", a.currentHeight), a.svg.selectAll(["#" + a.clipId, "#" + a.clipIdForGrid]).select("rect").attr("width", a.width).attr("height", a.height), a.svg.select("#" + a.clipIdForXAxis).select("rect").attr("x", a.getXAxisClipX.bind(a)).attr("y", a.getXAxisClipY.bind(a)).attr("width", a.getXAxisClipWidth.bind(a)).attr("height", a.getXAxisClipHeight.bind(a)), a.svg.select("#" + a.clipIdForYAxis).select("rect").attr("x", a.getYAxisClipX.bind(a)).attr("y", a.getYAxisClipY.bind(a)).attr("width", a.getYAxisClipWidth.bind(a)).attr("height", a.getYAxisClipHeight.bind(a)), a.svg.select("#" + a.clipIdForSubchart).select("rect").attr("width", a.width).attr("height", b.size() ? b.attr("height") : 0), a.svg.select("." + i.zoomRect).attr("width", a.width).attr("height", a.height), a.selectChart.style("max-height", a.currentHeight + "px")
+ }, f.updateDimension = function (a) {
+ var b = this;
+ a || (b.config.axis_rotated ? (b.axes.x.call(b.xAxis), b.axes.subx.call(b.subXAxis)) : (b.axes.y.call(b.yAxis), b.axes.y2.call(b.y2Axis))), b.updateSizes(), b.updateScales(), b.updateSvgSize(), b.transformAll(!1)
+ }, f.observeInserted = function (b) {
+ var c = this, d = new MutationObserver(function (e) {
+ e.forEach(function (e) {
+ "childList" === e.type && e.previousSibling && (d.disconnect(), c.intervalForObserveInserted = a.setInterval(function () {
+ b.node().parentNode && (a.clearInterval(c.intervalForObserveInserted), c.updateDimension(), c.config.oninit.call(c), c.redraw({
+ withTransform: !0,
+ withUpdateXDomain: !0,
+ withUpdateOrgXDomain: !0,
+ withTransition: !1,
+ withTransitionForTransform: !1,
+ withLegend: !0
+ }), b.transition().style("opacity", 1))
+ }, 10))
+ })
+ });
+ d.observe(b.node(), {attributes: !0, childList: !0, characterData: !0})
+ }, f.generateResize = function () {
+ function a() {
+ b.forEach(function (a) {
+ a()
+ })
+ }
+
+ var b = [];
+ return a.add = function (a) {
+ b.push(a)
+ }, a
+ }, f.endall = function (a, b) {
+ var c = 0;
+ a.each(function () {
+ ++c
+ }).each("end", function () {
+ --c || b.apply(this, arguments)
+ })
+ }, f.generateWait = function () {
+ var a = [], b = function (b, c) {
+ var d = setInterval(function () {
+ var b = 0;
+ a.forEach(function (a) {
+ if (a.empty())return void(b += 1);
+ try {
+ a.transition()
+ } catch (c) {
+ b += 1
+ }
+ }), b === a.length && (clearInterval(d), c && c())
+ }, 10)
+ };
+ return b.add = function (b) {
+ a.push(b)
+ }, b
+ }, f.parseDate = function (b) {
+ var c, d = this;
+ return c = b instanceof Date ? b : "number" != typeof b && isNaN(b) ? d.dataTimeFormat(d.config.data_xFormat).parse(b) : new Date(+b), (!c || isNaN(+c)) && a.console.error("Failed to parse x '" + b + "' to Date object"), c
+ }, f.getDefaultConfig = function () {
+ var a = {
+ bindto: "#chart",
+ size_width: void 0,
+ size_height: void 0,
+ padding_left: void 0,
+ padding_right: void 0,
+ padding_top: void 0,
+ padding_bottom: void 0,
+ zoom_enabled: !1,
+ zoom_extent: void 0,
+ zoom_privileged: !1,
+ zoom_rescale: !1,
+ zoom_onzoom: function () {
+ },
+ zoom_onzoomstart: function () {
+ },
+ zoom_onzoomend: function () {
+ },
+ interaction_enabled: !0,
+ onmouseover: function () {
+ },
+ onmouseout: function () {
+ },
+ onresize: function () {
+ },
+ onresized: function () {
+ },
+ oninit: function () {
+ },
+ transition_duration: 350,
+ data_x: void 0,
+ data_xs: {},
+ data_xFormat: "%Y-%m-%d",
+ data_xLocaltime: !0,
+ data_xSort: !0,
+ data_idConverter: function (a) {
+ return a
+ },
+ data_names: {},
+ data_classes: {},
+ data_groups: [],
+ data_axes: {},
+ data_type: void 0,
+ data_types: {},
+ data_labels: {},
+ data_order: "desc",
+ data_regions: {},
+ data_color: void 0,
+ data_colors: {},
+ data_hide: !1,
+ data_filter: void 0,
+ data_selection_enabled: !1,
+ data_selection_grouped: !1,
+ data_selection_isselectable: function () {
+ return !0
+ },
+ data_selection_multiple: !0,
+ data_onclick: function () {
+ },
+ data_onmouseover: function () {
+ },
+ data_onmouseout: function () {
+ },
+ data_onselected: function () {
+ },
+ data_onunselected: function () {
+ },
+ data_ondragstart: function () {
+ },
+ data_ondragend: function () {
+ },
+ data_url: void 0,
+ data_json: void 0,
+ data_rows: void 0,
+ data_columns: void 0,
+ data_mimeType: void 0,
+ data_keys: void 0,
+ data_empty_label_text: "",
+ subchart_show: !1,
+ subchart_size_height: 60,
+ subchart_onbrush: function () {
+ },
+ color_pattern: [],
+ color_threshold: {},
+ legend_show: !0,
+ legend_hide: !1,
+ legend_position: "bottom",
+ legend_inset_anchor: "top-left",
+ legend_inset_x: 10,
+ legend_inset_y: 0,
+ legend_inset_step: void 0,
+ legend_item_onclick: void 0,
+ legend_item_onmouseover: void 0,
+ legend_item_onmouseout: void 0,
+ legend_equally: !1,
+ axis_rotated: !1,
+ axis_x_show: !0,
+ axis_x_type: "indexed",
+ axis_x_localtime: !0,
+ axis_x_categories: [],
+ axis_x_tick_centered: !1,
+ axis_x_tick_format: void 0,
+ axis_x_tick_culling: {},
+ axis_x_tick_culling_max: 10,
+ axis_x_tick_count: void 0,
+ axis_x_tick_fit: !0,
+ axis_x_tick_values: null,
+ axis_x_tick_rotate: 0,
+ axis_x_tick_outer: !0,
+ axis_x_tick_multiline: !0,
+ axis_x_tick_width: null,
+ axis_x_max: void 0,
+ axis_x_min: void 0,
+ axis_x_padding: {},
+ axis_x_height: void 0,
+ axis_x_extent: void 0,
+ axis_x_label: {},
+ axis_y_show: !0,
+ axis_y_type: void 0,
+ axis_y_max: void 0,
+ axis_y_min: void 0,
+ axis_y_center: void 0,
+ axis_y_inner: void 0,
+ axis_y_label: {},
+ axis_y_tick_format: void 0,
+ axis_y_tick_outer: !0,
+ axis_y_tick_values: null,
+ axis_y_tick_count: void 0,
+ axis_y_tick_time_value: void 0,
+ axis_y_tick_time_interval: void 0,
+ axis_y_padding: {},
+ axis_y_default: void 0,
+ axis_y2_show: !1,
+ axis_y2_max: void 0,
+ axis_y2_min: void 0,
+ axis_y2_center: void 0,
+ axis_y2_inner: void 0,
+ axis_y2_label: {},
+ axis_y2_tick_format: void 0,
+ axis_y2_tick_outer: !0,
+ axis_y2_tick_values: null,
+ axis_y2_tick_count: void 0,
+ axis_y2_padding: {},
+ axis_y2_default: void 0,
+ grid_x_show: !1,
+ grid_x_type: "tick",
+ grid_x_lines: [],
+ grid_y_show: !1,
+ grid_y_lines: [],
+ grid_y_ticks: 10,
+ grid_focus_show: !0,
+ grid_lines_front: !0,
+ point_show: !0,
+ point_r: 2.5,
+ point_focus_expand_enabled: !0,
+ point_focus_expand_r: void 0,
+ point_select_r: void 0,
+ line_connectNull: !1,
+ line_step_type: "step",
+ bar_width: void 0,
+ bar_width_ratio: .6,
+ bar_width_max: void 0,
+ bar_zerobased: !0,
+ area_zerobased: !0,
+ pie_label_show: !0,
+ pie_label_format: void 0,
+ pie_label_threshold: .05,
+ pie_expand: !0,
+ gauge_label_show: !0,
+ gauge_label_format: void 0,
+ gauge_expand: !0,
+ gauge_min: 0,
+ gauge_max: 100,
+ gauge_units: void 0,
+ gauge_width: void 0,
+ donut_label_show: !0,
+ donut_label_format: void 0,
+ donut_label_threshold: .05,
+ donut_width: void 0,
+ donut_expand: !0,
+ donut_title: "",
+ regions: [],
+ tooltip_show: !0,
+ tooltip_grouped: !0,
+ tooltip_format_title: void 0,
+ tooltip_format_name: void 0,
+ tooltip_format_value: void 0,
+ tooltip_contents: function (a, b, c, d) {
+ return this.getTooltipContent ? this.getTooltipContent(a, b, c, d) : ""
+ },
+ tooltip_init_show: !1,
+ tooltip_init_x: 0,
+ tooltip_init_position: {top: "0px", left: "50px"}
+ };
+ return Object.keys(this.additionalConfig).forEach(function (b) {
+ a[b] = this.additionalConfig[b]
+ }, this), a
+ }, f.additionalConfig = {}, f.loadConfig = function (a) {
+ function b() {
+ var a = d.shift();
+ return a && c && "object" == typeof c && a in c ? (c = c[a], b()) : a ? void 0 : c
+ }
+
+ var c, d, e, f = this.config;
+ Object.keys(f).forEach(function (g) {
+ c = a, d = g.split("_"), e = b(), n(e) && (f[g] = e)
+ })
+ }, f.getScale = function (a, b, c) {
+ return (c ? this.d3.time.scale() : this.d3.scale.linear()).range([a, b])
+ }, f.getX = function (a, b, c, d) {
+ var e, f = this, g = f.getScale(a, b, f.isTimeSeries()), h = c ? g.domain(c) : g;
+ f.isCategorized() ? (d = d || function () {
+ return 0
+ }, g = function (a, b) {
+ var c = h(a) + d(a);
+ return b ? c : Math.ceil(c)
+ }) : g = function (a, b) {
+ var c = h(a);
+ return b ? c : Math.ceil(c)
+ };
+ for (e in h)g[e] = h[e];
+ return g.orgDomain = function () {
+ return h.domain()
+ }, f.isCategorized() && (g.domain = function (a) {
+ return arguments.length ? (h.domain(a), g) : (a = this.orgDomain(), [a[0], a[1] + 1])
+ }), g
+ }, f.getY = function (a, b, c) {
+ var d = this.getScale(a, b, this.isTimeSeriesY());
+ return c && d.domain(c), d
+ }, f.getYScale = function (a) {
+ return "y2" === this.getAxisId(a) ? this.y2 : this.y
+ }, f.getSubYScale = function (a) {
+ return "y2" === this.getAxisId(a) ? this.subY2 : this.subY
+ }, f.updateScales = function () {
+ var a = this, b = a.config, c = !a.x;
+ a.xMin = b.axis_rotated ? 1 : 0, a.xMax = b.axis_rotated ? a.height : a.width, a.yMin = b.axis_rotated ? 0 : a.height, a.yMax = b.axis_rotated ? a.width : 1, a.subXMin = a.xMin, a.subXMax = a.xMax, a.subYMin = b.axis_rotated ? 0 : a.height2, a.subYMax = b.axis_rotated ? a.width2 : 1, a.x = a.getX(a.xMin, a.xMax, c ? void 0 : a.x.orgDomain(), function () {
+ return a.xAxis.tickOffset()
+ }), a.y = a.getY(a.yMin, a.yMax, c ? b.axis_y_default : a.y.domain()), a.y2 = a.getY(a.yMin, a.yMax, c ? b.axis_y2_default : a.y2.domain()), a.subX = a.getX(a.xMin, a.xMax, a.orgXDomain, function (b) {
+ return b % 1 ? 0 : a.subXAxis.tickOffset()
+ }), a.subY = a.getY(a.subYMin, a.subYMax, c ? b.axis_y_default : a.subY.domain()), a.subY2 = a.getY(a.subYMin, a.subYMax, c ? b.axis_y2_default : a.subY2.domain()), a.xAxisTickFormat = a.getXAxisTickFormat(), a.xAxisTickValues = a.getXAxisTickValues(), a.yAxisTickValues = a.getYAxisTickValues(), a.y2AxisTickValues = a.getY2AxisTickValues(), a.xAxis = a.getXAxis(a.x, a.xOrient, a.xAxisTickFormat, a.xAxisTickValues, b.axis_x_tick_outer), a.subXAxis = a.getXAxis(a.subX, a.subXOrient, a.xAxisTickFormat, a.xAxisTickValues, b.axis_x_tick_outer), a.yAxis = a.getYAxis(a.y, a.yOrient, b.axis_y_tick_format, a.yAxisTickValues, b.axis_y_tick_outer), a.y2Axis = a.getYAxis(a.y2, a.y2Orient, b.axis_y2_tick_format, a.y2AxisTickValues, b.axis_y2_tick_outer), c || (a.brush && a.brush.scale(a.subX), b.zoom_enabled && a.zoom.scale(a.x)), a.updateArc && a.updateArc()
+ }, f.getYDomainMin = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config, j = h.mapToIds(a), k = h.getValuesAsIdKeyed(a);
+ if (i.data_groups.length > 0)for (g = h.hasNegativeValueInTargets(a), b = 0; b < i.data_groups.length; b++)if (e = i.data_groups[b].filter(function (a) {
+ return j.indexOf(a) >= 0
+ }), 0 !== e.length)for (d = e[0], g && k[d] && k[d].forEach(function (a, b) {
+ k[d][b] = 0 > a ? a : 0
+ }), c = 1; c < e.length; c++)f = e[c], k[f] && k[f].forEach(function (a, b) {
+ h.getAxisId(f) !== h.getAxisId(d) || !k[d] || g && +a > 0 || (k[d][b] += +a)
+ });
+ return h.d3.min(Object.keys(k).map(function (a) {
+ return h.d3.min(k[a])
+ }))
+ }, f.getYDomainMax = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config, j = h.mapToIds(a), k = h.getValuesAsIdKeyed(a);
+ if (i.data_groups.length > 0)for (g = h.hasPositiveValueInTargets(a), b = 0; b < i.data_groups.length; b++)if (e = i.data_groups[b].filter(function (a) {
+ return j.indexOf(a) >= 0
+ }), 0 !== e.length)for (d = e[0], g && k[d] && k[d].forEach(function (a, b) {
+ k[d][b] = a > 0 ? a : 0
+ }), c = 1; c < e.length; c++)f = e[c], k[f] && k[f].forEach(function (a, b) {
+ h.getAxisId(f) !== h.getAxisId(d) || !k[d] || g && 0 > +a || (k[d][b] += +a)
+ });
+ return h.d3.max(Object.keys(k).map(function (a) {
+ return h.d3.max(k[a])
+ }))
+ }, f.getYDomain = function (a, b, c) {
+ var d, e, f, g, h, i, k, l, m, n, o = this, p = o.config, r = a.filter(function (a) {
+ return o.getAxisId(a.id) === b
+ }), t = c ? o.filterByXDomain(r, c) : r, u = "y2" === b ? p.axis_y2_min : p.axis_y_min, v = "y2" === b ? p.axis_y2_max : p.axis_y_max, w = j(u) ? u : o.getYDomainMin(t), x = j(v) ? v : o.getYDomainMax(t), y = "y2" === b ? p.axis_y2_center : p.axis_y_center, z = o.hasType("bar", t) && p.bar_zerobased || o.hasType("area", t) && p.area_zerobased, A = o.hasDataLabel() && p.axis_rotated, B = o.hasDataLabel() && !p.axis_rotated;
+ return w > x && (j(u) ? x = w + 10 : w = x - 10), 0 === t.length ? "y2" === b ? o.y2.domain() : o.y.domain() : (isNaN(w) && (w = 0), isNaN(x) && (x = w), w === x && (0 > w ? x = 0 : w = 0), m = w >= 0 && x >= 0, n = 0 >= w && 0 >= x, (j(u) && m || j(v) && n) && (z = !1), z && (m && (w = 0), n && (x = 0)), d = Math.abs(x - w), e = f = g = .1 * d, "undefined" != typeof y && (h = Math.max(Math.abs(w), Math.abs(x)), x = y + h, w = y - h), A ? (i = o.getDataLabelLength(w, x, b, "width"), k = q(o.y.range()), l = [i[0] / k, i[1] / k], f += d * (l[1] / (1 - l[0] - l[1])), g += d * (l[0] / (1 - l[0] - l[1]))) : B && (i = o.getDataLabelLength(w, x, b, "height"), f += this.convertPixelsToAxisPadding(i[1], d), g += this.convertPixelsToAxisPadding(i[0], d)), "y" === b && s(p.axis_y_padding) && (f = o.getAxisPadding(p.axis_y_padding, "top", f, d), g = o.getAxisPadding(p.axis_y_padding, "bottom", g, d)), "y2" === b && s(p.axis_y2_padding) && (f = o.getAxisPadding(p.axis_y2_padding, "top", f, d), g = o.getAxisPadding(p.axis_y2_padding, "bottom", g, d)), z && (m && (g = w), n && (f = -x)), [w - g, x + f])
+ }, f.getXDomainMin = function (a) {
+ var b = this, c = b.config;
+ return n(c.axis_x_min) ? b.isTimeSeries() ? this.parseDate(c.axis_x_min) : c.axis_x_min : b.d3.min(a, function (a) {
+ return b.d3.min(a.values, function (a) {
+ return a.x
+ })
+ })
+ }, f.getXDomainMax = function (a) {
+ var b = this, c = b.config;
+ return n(c.axis_x_max) ? b.isTimeSeries() ? this.parseDate(c.axis_x_max) : c.axis_x_max : b.d3.max(a, function (a) {
+ return b.d3.max(a.values, function (a) {
+ return a.x
+ })
+ })
+ }, f.getXDomainPadding = function (a) {
+ var b, c, d, e, f = this, g = f.config, h = a[1] - a[0];
+ return f.isCategorized() ? c = 0 : f.hasType("bar") ? (b = f.getMaxDataCount(), c = b > 1 ? h / (b - 1) / 2 : .5) : c = .01 * h, "object" == typeof g.axis_x_padding && s(g.axis_x_padding) ? (d = j(g.axis_x_padding.left) ? g.axis_x_padding.left : c, e = j(g.axis_x_padding.right) ? g.axis_x_padding.right : c) : d = e = "number" == typeof g.axis_x_padding ? g.axis_x_padding : c, {
+ left: d,
+ right: e
+ }
+ }, f.getXDomain = function (a) {
+ var b = this, c = [b.getXDomainMin(a), b.getXDomainMax(a)], d = c[0], e = c[1], f = b.getXDomainPadding(c), g = 0, h = 0;
+ return d - e !== 0 || b.isCategorized() || (b.isTimeSeries() ? (d = new Date(.5 * d.getTime()), e = new Date(1.5 * e.getTime())) : (d = 0 === d ? 1 : .5 * d, e = 0 === e ? -1 : 1.5 * e)), (d || 0 === d) && (g = b.isTimeSeries() ? new Date(d.getTime() - f.left) : d - f.left), (e || 0 === e) && (h = b.isTimeSeries() ? new Date(e.getTime() + f.right) : e + f.right), [g, h]
+ }, f.updateXDomain = function (a, b, c, d, e) {
+ var f = this, g = f.config;
+ return c && (f.x.domain(e ? e : f.d3.extent(f.getXDomain(a))), f.orgXDomain = f.x.domain(), g.zoom_enabled && f.zoom.scale(f.x).updateScaleExtent(), f.subX.domain(f.x.domain()), f.brush && f.brush.scale(f.subX)), b && (f.x.domain(e ? e : !f.brush || f.brush.empty() ? f.orgXDomain : f.brush.extent()), g.zoom_enabled && f.zoom.scale(f.x).updateScaleExtent()), d && f.x.domain(f.trimXDomain(f.x.orgDomain())), f.x.domain()
+ }, f.trimXDomain = function (a) {
+ var b = this;
+ return a[0] <= b.orgXDomain[0] && (a[1] = +a[1] + (b.orgXDomain[0] - a[0]), a[0] = b.orgXDomain[0]), b.orgXDomain[1] <= a[1] && (a[0] = +a[0] - (a[1] - b.orgXDomain[1]), a[1] = b.orgXDomain[1]), a
+ }, f.isX = function (a) {
+ var b = this, c = b.config;
+ return c.data_x && a === c.data_x || s(c.data_xs) && u(c.data_xs, a)
+ }, f.isNotX = function (a) {
+ return !this.isX(a)
+ }, f.getXKey = function (a) {
+ var b = this, c = b.config;
+ return c.data_x ? c.data_x : s(c.data_xs) ? c.data_xs[a] : null
+ }, f.getXValuesOfXKey = function (a, b) {
+ var c, d = this, e = b && s(b) ? d.mapToIds(b) : [];
+ return e.forEach(function (b) {
+ d.getXKey(b) === a && (c = d.data.xs[b])
+ }), c
+ }, f.getIndexByX = function (a) {
+ var b = this, c = b.filterByX(b.data.targets, a);
+ return c.length ? c[0].index : null
+ }, f.getXValue = function (a, b) {
+ var c = this;
+ return a in c.data.xs && c.data.xs[a] && j(c.data.xs[a][b]) ? c.data.xs[a][b] : b
+ }, f.getOtherTargetXs = function () {
+ var a = this, b = Object.keys(a.data.xs);
+ return b.length ? a.data.xs[b[0]] : null
+ }, f.getOtherTargetX = function (a) {
+ var b = this.getOtherTargetXs();
+ return b && a < b.length ? b[a] : null
+ }, f.addXs = function (a) {
+ var b = this;
+ Object.keys(a).forEach(function (c) {
+ b.config.data_xs[c] = a[c]
+ })
+ }, f.hasMultipleX = function (a) {
+ return this.d3.set(Object.keys(a).map(function (b) {
+ return a[b]
+ })).size() > 1
+ }, f.isMultipleX = function () {
+ return s(this.config.data_xs) || !this.config.data_xSort || this.hasType("scatter")
+ }, f.addName = function (a) {
+ var b, c = this;
+ return a && (b = c.config.data_names[a.id], a.name = b ? b : a.id), a
+ }, f.getValueOnIndex = function (a, b) {
+ var c = a.filter(function (a) {
+ return a.index === b
+ });
+ return c.length ? c[0] : null
+ }, f.updateTargetX = function (a, b) {
+ var c = this;
+ a.forEach(function (a) {
+ a.values.forEach(function (d, e) {
+ d.x = c.generateTargetX(b[e], a.id, e)
+ }), c.data.xs[a.id] = b
+ })
+ }, f.updateTargetXs = function (a, b) {
+ var c = this;
+ a.forEach(function (a) {
+ b[a.id] && c.updateTargetX([a], b[a.id])
+ })
+ }, f.generateTargetX = function (a, b, c) {
+ var d, e = this;
+ return d = e.isTimeSeries() ? e.parseDate(a ? a : e.getXValue(b, c)) : e.isCustomX() && !e.isCategorized() ? j(a) ? +a : e.getXValue(b, c) : c
+ }, f.cloneTarget = function (a) {
+ return {
+ id: a.id, id_org: a.id_org, values: a.values.map(function (a) {
+ return {x: a.x, value: a.value, id: a.id}
+ })
+ }
+ }, f.updateXs = function () {
+ var a = this;
+ a.data.targets.length && (a.xs = [], a.data.targets[0].values.forEach(function (b) {
+ a.xs[b.index] = b.x
+ }))
+ }, f.getPrevX = function (a) {
+ var b = this.xs[a - 1];
+ return "undefined" != typeof b ? b : null
+ }, f.getNextX = function (a) {
+ var b = this.xs[a + 1];
+ return "undefined" != typeof b ? b : null
+ }, f.getMaxDataCount = function () {
+ var a = this;
+ return a.d3.max(a.data.targets, function (a) {
+ return a.values.length
+ })
+ }, f.getMaxDataCountTarget = function (a) {
+ var b, c = a.length, d = 0;
+ return c > 1 ? a.forEach(function (a) {
+ a.values.length > d && (b = a, d = a.values.length)
+ }) : b = c ? a[0] : null, b
+ }, f.getEdgeX = function (a) {
+ var b = this;
+ return a.length ? [b.d3.min(a, function (a) {
+ return a.values[0].x
+ }), b.d3.max(a, function (a) {
+ return a.values[a.values.length - 1].x
+ })] : [0, 0]
+ }, f.mapToIds = function (a) {
+ return a.map(function (a) {
+ return a.id
+ })
+ }, f.mapToTargetIds = function (a) {
+ var b = this;
+ return a ? l(a) ? [a] : a : b.mapToIds(b.data.targets)
+ }, f.hasTarget = function (a, b) {
+ var c, d = this.mapToIds(a);
+ for (c = 0; c < d.length; c++)if (d[c] === b)return !0;
+ return !1
+ }, f.isTargetToShow = function (a) {
+ return this.hiddenTargetIds.indexOf(a) < 0
+ }, f.isLegendToShow = function (a) {
+ return this.hiddenLegendIds.indexOf(a) < 0
+ }, f.filterTargetsToShow = function (a) {
+ var b = this;
+ return a.filter(function (a) {
+ return b.isTargetToShow(a.id)
+ })
+ }, f.mapTargetsToUniqueXs = function (a) {
+ var b = this, c = b.d3.set(b.d3.merge(a.map(function (a) {
+ return a.values.map(function (a) {
+ return +a.x
+ })
+ }))).values();
+ return c.map(b.isTimeSeries() ? function (a) {
+ return new Date(+a)
+ } : function (a) {
+ return +a
+ })
+ }, f.addHiddenTargetIds = function (a) {
+ this.hiddenTargetIds = this.hiddenTargetIds.concat(a)
+ }, f.removeHiddenTargetIds = function (a) {
+ this.hiddenTargetIds = this.hiddenTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, f.addHiddenLegendIds = function (a) {
+ this.hiddenLegendIds = this.hiddenLegendIds.concat(a)
+ }, f.removeHiddenLegendIds = function (a) {
+ this.hiddenLegendIds = this.hiddenLegendIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, f.getValuesAsIdKeyed = function (a) {
+ var b = {};
+ return a.forEach(function (a) {
+ b[a.id] = [], a.values.forEach(function (c) {
+ b[a.id].push(c.value)
+ })
+ }), b
+ }, f.checkValueInTargets = function (a, b) {
+ var c, d, e, f = Object.keys(a);
+ for (c = 0; c < f.length; c++)for (e = a[f[c]].values, d = 0; d < e.length; d++)if (b(e[d].value))return !0;
+ return !1
+ }, f.hasNegativeValueInTargets = function (a) {
+ return this.checkValueInTargets(a, function (a) {
+ return 0 > a
+ })
+ }, f.hasPositiveValueInTargets = function (a) {
+ return this.checkValueInTargets(a, function (a) {
+ return a > 0
+ })
+ }, f.isOrderDesc = function () {
+ var a = this.config;
+ return "string" == typeof a.data_order && "desc" === a.data_order.toLowerCase()
+ }, f.isOrderAsc = function () {
+ var a = this.config;
+ return "string" == typeof a.data_order && "asc" === a.data_order.toLowerCase()
+ }, f.orderTargets = function (a) {
+ var b = this, c = b.config, d = b.isOrderAsc(), e = b.isOrderDesc();
+ return d || e ? a.sort(function (a, b) {
+ var c = function (a, b) {
+ return a + Math.abs(b.value)
+ }, e = a.values.reduce(c, 0), f = b.values.reduce(c, 0);
+ return d ? f - e : e - f
+ }) : k(c.data_order) && a.sort(c.data_order), a
+ }, f.filterByX = function (a, b) {
+ return this.d3.merge(a.map(function (a) {
+ return a.values
+ })).filter(function (a) {
+ return a.x - b === 0
+ })
+ }, f.filterRemoveNull = function (a) {
+ return a.filter(function (a) {
+ return j(a.value)
+ })
+ }, f.filterByXDomain = function (a, b) {
+ return a.map(function (a) {
+ return {
+ id: a.id, id_org: a.id_org, values: a.values.filter(function (a) {
+ return b[0] <= a.x && a.x <= b[1]
+ })
+ }
+ })
+ }, f.hasDataLabel = function () {
+ var a = this.config;
+ return "boolean" == typeof a.data_labels && a.data_labels ? !0 : "object" == typeof a.data_labels && s(a.data_labels) ? !0 : !1
+ }, f.getDataLabelLength = function (a, b, c, d) {
+ var e = this, f = [0, 0], g = 1.3;
+ return e.selectChart.select("svg").selectAll(".dummy").data([a, b]).enter().append("text").text(function (a) {
+ return e.formatByAxisId(c)(a)
+ }).each(function (a, b) {
+ f[b] = this.getBoundingClientRect()[d] * g
+ }).remove(), f
+ }, f.isNoneArc = function (a) {
+ return this.hasTarget(this.data.targets, a.id)
+ },f.isArc = function (a) {
+ return "data"in a && this.hasTarget(this.data.targets, a.data.id)
+ },f.findSameXOfValues = function (a, b) {
+ var c, d = a[b].x, e = [];
+ for (c = b - 1; c >= 0 && d === a[c].x; c--)e.push(a[c]);
+ for (c = b; c < a.length && d === a[c].x; c++)e.push(a[c]);
+ return e
+ },f.findClosestFromTargets = function (a, b) {
+ var c, d = this;
+ return c = a.map(function (a) {
+ return d.findClosest(a.values, b)
+ }), d.findClosest(c, b)
+ },f.findClosest = function (a, b) {
+ var c, d = this, e = 100;
+ return a.filter(function (a) {
+ return a && d.isBarType(a.id)
+ }).forEach(function (a) {
+ var b = d.main.select("." + i.bars + d.getTargetSelectorSuffix(a.id) + " ." + i.bar + "-" + a.index).node();
+ !c && d.isWithinBar(b) && (c = a)
+ }), a.filter(function (a) {
+ return a && !d.isBarType(a.id)
+ }).forEach(function (a) {
+ var f = d.dist(a, b);
+ e > f && (e = f, c = a)
+ }), c
+ },f.dist = function (a, b) {
+ var c = this, d = c.config, e = d.axis_rotated ? 1 : 0, f = d.axis_rotated ? 0 : 1, g = c.circleY(a, a.index), h = c.x(a.x);
+ return Math.pow(h - b[e], 2) + Math.pow(g - b[f], 2)
+ },f.convertValuesToStep = function (a) {
+ var b, c = [].concat(a);
+ if (!this.isCategorized())return a;
+ for (b = a.length + 1; b > 0; b--)c[b] = c[b - 1];
+ return c[0] = {x: c[0].x - 1, value: c[0].value, id: c[0].id}, c[a.length + 1] = {
+ x: c[a.length].x + 1,
+ value: c[a.length].value,
+ id: c[a.length].id
+ }, c
+ },f.updateDataAttributes = function (a, b) {
+ var c = this, d = c.config, e = d["data_" + a];
+ return "undefined" == typeof b ? e : (Object.keys(b).forEach(function (a) {
+ e[a] = b[a]
+ }), c.redraw({withLegend: !0}), e)
+ },f.convertUrlToData = function (a, b, c, d) {
+ var e = this, f = b ? b : "csv";
+ e.d3.xhr(a, function (a, b) {
+ var g;
+ g = "json" === f ? e.convertJsonToData(JSON.parse(b.response), c) : "tsv" === f ? e.convertTsvToData(b.response) : e.convertCsvToData(b.response), d.call(e, g)
+ })
+ },f.convertXsvToData = function (a, b) {
+ var c, d = b.parseRows(a);
+ return 1 === d.length ? (c = [{}], d[0].forEach(function (a) {
+ c[0][a] = null
+ })) : c = b.parse(a), c
+ },f.convertCsvToData = function (a) {
+ return this.convertXsvToData(a, this.d3.csv)
+ },f.convertTsvToData = function (a) {
+ return this.convertXsvToData(a, this.d3.tsv)
+ },f.convertJsonToData = function (a, b) {
+ var c, d, e = this, f = [];
+ return b ? (c = b.value, b.x && (c.push(b.x), e.config.data_x = b.x), f.push(c), a.forEach(function (a) {
+ var b = [];
+ c.forEach(function (c) {
+ var d = m(a[c]) ? null : a[c];
+ b.push(d)
+ }), f.push(b)
+ }), d = e.convertRowsToData(f)) : (Object.keys(a).forEach(function (b) {
+ f.push([b].concat(a[b]))
+ }), d = e.convertColumnsToData(f)), d
+ },f.convertRowsToData = function (a) {
+ var b, c, d = a[0], e = {}, f = [];
+ for (b = 1; b < a.length; b++) {
+ for (e = {}, c = 0; c < a[b].length; c++) {
+ if (m(a[b][c]))throw new Error("Source data is missing a component at (" + b + "," + c + ")!");
+ e[d[c]] = a[b][c]
+ }
+ f.push(e)
+ }
+ return f
+ },f.convertColumnsToData = function (a) {
+ var b, c, d, e = [];
+ for (b = 0; b < a.length; b++)for (d = a[b][0], c = 1; c < a[b].length; c++) {
+ if (m(e[c - 1]) && (e[c - 1] = {}), m(a[b][c]))throw new Error("Source data is missing a component at (" + b + "," + c + ")!");
+ e[c - 1][d] = a[b][c]
+ }
+ return e
+ },f.convertDataToTargets = function (a, b) {
+ var c, d = this, e = d.config, f = d.d3.keys(a[0]).filter(d.isNotX, d), g = d.d3.keys(a[0]).filter(d.isX, d);
+ return f.forEach(function (c) {
+ var f = d.getXKey(c);
+ d.isCustomX() || d.isTimeSeries() ? g.indexOf(f) >= 0 ? d.data.xs[c] = (b && d.data.xs[c] ? d.data.xs[c] : []).concat(a.map(function (a) {
+ return a[f]
+ }).filter(j).map(function (a, b) {
+ return d.generateTargetX(a, c, b)
+ })) : e.data_x ? d.data.xs[c] = d.getOtherTargetXs() : s(e.data_xs) && (d.data.xs[c] = d.getXValuesOfXKey(f, d.data.targets)) : d.data.xs[c] = a.map(function (a, b) {
+ return b
+ })
+ }), f.forEach(function (a) {
+ if (!d.data.xs[a])throw new Error('x is not defined for id = "' + a + '".')
+ }), c = f.map(function (b, c) {
+ var f = e.data_idConverter(b);
+ return {
+ id: f, id_org: b, values: a.map(function (a, g) {
+ var h = d.getXKey(b), i = a[h], j = d.generateTargetX(i, b, g);
+ return d.isCustomX() && d.isCategorized() && 0 === c && i && (0 === g && (e.axis_x_categories = []), e.axis_x_categories.push(i)), (m(a[b]) || d.data.xs[b].length <= g) && (j = void 0), {
+ x: j,
+ value: null === a[b] || isNaN(a[b]) ? null : +a[b],
+ id: f
+ }
+ }).filter(function (a) {
+ return n(a.x)
+ })
+ }
+ }), c.forEach(function (a) {
+ var b;
+ e.data_xSort && (a.values = a.values.sort(function (a, b) {
+ var c = a.x || 0 === a.x ? a.x : 1 / 0, d = b.x || 0 === b.x ? b.x : 1 / 0;
+ return c - d
+ })), b = 0, a.values.forEach(function (a) {
+ a.index = b++
+ }), d.data.xs[a.id].sort(function (a, b) {
+ return a - b
+ })
+ }), e.data_type && d.setTargetType(d.mapToIds(c).filter(function (a) {
+ return !(a in e.data_types)
+ }), e.data_type), c.forEach(function (a) {
+ d.addCache(a.id_org, a)
+ }), c
+ },f.load = function (a, b) {
+ var c = this;
+ a && (b.filter && (a = a.filter(b.filter)), (b.type || b.types) && a.forEach(function (a) {
+ c.setTargetType(a.id, b.types ? b.types[a.id] : b.type)
+ }), c.data.targets.forEach(function (b) {
+ for (var c = 0; c < a.length; c++)if (b.id === a[c].id) {
+ b.values = a[c].values, a.splice(c, 1);
+ break
+ }
+ }), c.data.targets = c.data.targets.concat(a)), c.updateTargets(c.data.targets), c.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0,
+ withLegend: !0
+ }), b.done && b.done()
+ },f.loadFromArgs = function (a) {
+ var b = this;
+ a.data ? b.load(b.convertDataToTargets(a.data), a) : a.url ? b.convertUrlToData(a.url, a.mimeType, a.keys, function (c) {
+ b.load(b.convertDataToTargets(c), a)
+ }) : a.json ? b.load(b.convertDataToTargets(b.convertJsonToData(a.json, a.keys)), a) : a.rows ? b.load(b.convertDataToTargets(b.convertRowsToData(a.rows)), a) : a.columns ? b.load(b.convertDataToTargets(b.convertColumnsToData(a.columns)), a) : b.load(null, a)
+ },f.unload = function (a, b) {
+ var c = this;
+ return b || (b = function () {
+ }), a = a.filter(function (a) {
+ return c.hasTarget(c.data.targets, a)
+ }), a && 0 !== a.length ? (c.svg.selectAll(a.map(function (a) {
+ return c.selectorTarget(a)
+ })).transition().style("opacity", 0).remove().call(c.endall, b), void a.forEach(function (a) {
+ c.withoutFadeIn[a] = !1, c.legend && c.legend.selectAll("." + i.legendItem + c.getTargetSelectorSuffix(a)).remove(), c.data.targets = c.data.targets.filter(function (b) {
+ return b.id !== a
+ })
+ })) : void b()
+ },f.categoryName = function (a) {
+ var b = this.config;
+ return a < b.axis_x_categories.length ? b.axis_x_categories[a] : a
+ },f.initEventRect = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.eventRects).style("fill-opacity", 0)
+ },f.redrawEventRect = function () {
+ var a, b, c = this, d = c.config, e = c.isMultipleX(), f = c.main.select("." + i.eventRects).style("cursor", d.zoom_enabled ? d.axis_rotated ? "ns-resize" : "ew-resize" : null).classed(i.eventRectsMultiple, e).classed(i.eventRectsSingle, !e);
+ f.selectAll("." + i.eventRect).remove(), c.eventRect = f.selectAll("." + i.eventRect), e ? (a = c.eventRect.data([0]), c.generateEventRectsForMultipleXs(a.enter()), c.updateEventRect(a)) : (b = c.getMaxDataCountTarget(c.data.targets), f.datum(b ? b.values : []), c.eventRect = f.selectAll("." + i.eventRect), a = c.eventRect.data(function (a) {
+ return a
+ }), c.generateEventRectsForSingleX(a.enter()), c.updateEventRect(a), a.exit().remove())
+ },f.updateEventRect = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config;
+ a = a || h.eventRect.data(function (a) {
+ return a
+ }), h.isMultipleX() ? (b = 0, c = 0, d = h.width, e = h.height) : (!h.isCustomX() && !h.isTimeSeries() || h.isCategorized() ? (f = h.getEventRectWidth(), g = function (a) {
+ return h.x(a.x) - f / 2
+ }) : (h.updateXs(), f = function (a) {
+ var b = h.getPrevX(a.index), c = h.getNextX(a.index);
+ return null === b && null === c ? i.axis_rotated ? h.height : h.width : (null === b && (b = h.x.domain()[0]), null === c && (c = h.x.domain()[1]), Math.max(0, (h.x(c) - h.x(b)) / 2))
+ }, g = function (a) {
+ var b = h.getPrevX(a.index), c = h.getNextX(a.index), d = h.data.xs[a.id][a.index];
+ return null === b && null === c ? 0 : (null === b && (b = h.x.domain()[0]), (h.x(d) + h.x(b)) / 2)
+ }), b = i.axis_rotated ? 0 : g, c = i.axis_rotated ? g : 0, d = i.axis_rotated ? h.width : f, e = i.axis_rotated ? f : h.height), a.attr("class", h.classEvent.bind(h)).attr("x", b).attr("y", c).attr("width", d).attr("height", e)
+ },f.generateEventRectsForSingleX = function (a) {
+ var b = this, c = b.d3, d = b.config;
+ a.append("rect").attr("class", b.classEvent.bind(b)).style("cursor", d.data_selection_enabled && d.data_selection_grouped ? "pointer" : null).on("mouseover", function (a) {
+ var c, e, f = a.index;
+ b.dragging || b.flowing || b.hasArcType() || (c = b.data.targets.map(function (a) {
+ return b.addName(b.getValueOnIndex(a.values, f))
+ }), e = [], Object.keys(d.data_names).forEach(function (a) {
+ for (var b = 0; b < c.length; b++)if (c[b] && c[b].id === a) {
+ e.push(c[b]), c.shift(b);
+ break
+ }
+ }), c = e.concat(c), d.point_focus_expand_enabled && b.expandCircles(f, null, !0), b.expandBars(f, null, !0), b.main.selectAll("." + i.shape + "-" + f).each(function (a) {
+ d.data_onmouseover.call(b.api, a)
+ }))
+ }).on("mouseout", function (a) {
+ var c = a.index;
+ b.hasArcType() || (b.hideXGridFocus(), b.hideTooltip(), b.unexpandCircles(), b.unexpandBars(), b.main.selectAll("." + i.shape + "-" + c).each(function (a) {
+ d.data_onmouseout.call(b.api, a)
+ }))
+ }).on("mousemove", function (a) {
+ var e, f = a.index, g = b.svg.select("." + i.eventRect + "-" + f);
+ b.dragging || b.flowing || b.hasArcType() || (b.isStepType(a) && "step-after" === b.config.line_step_type && c.mouse(this)[0] < b.x(b.getXValue(a.id, f)) && (f -= 1), e = b.filterTargetsToShow(b.data.targets).map(function (a) {
+ return b.addName(b.getValueOnIndex(a.values, f))
+ }), d.tooltip_grouped && (b.showTooltip(e, c.mouse(this)), b.showXGridFocus(e)), (!d.tooltip_grouped || d.data_selection_enabled && !d.data_selection_grouped) && b.main.selectAll("." + i.shape + "-" + f).each(function () {
+ c.select(this).classed(i.EXPANDED, !0), d.data_selection_enabled && g.style("cursor", d.data_selection_grouped ? "pointer" : null), d.tooltip_grouped || (b.hideXGridFocus(), b.hideTooltip(), d.data_selection_grouped || (b.unexpandCircles(f), b.unexpandBars(f)))
+ }).filter(function (a) {
+ return b.isWithinShape(this, a)
+ }).each(function (a) {
+ d.data_selection_enabled && (d.data_selection_grouped || d.data_selection_isselectable(a)) && g.style("cursor", "pointer"), d.tooltip_grouped || (b.showTooltip([a], c.mouse(this)), b.showXGridFocus([a]), d.point_focus_expand_enabled && b.expandCircles(f, a.id, !0), b.expandBars(f, a.id, !0))
+ }))
+ }).on("click", function (a) {
+ var e = a.index;
+ if (!b.hasArcType() && b.toggleShape) {
+ if (b.cancelClick)return void(b.cancelClick = !1);
+ b.isStepType(a) && "step-after" === d.line_step_type && c.mouse(this)[0] < b.x(b.getXValue(a.id, e)) && (e -= 1), b.main.selectAll("." + i.shape + "-" + e).each(function (a) {
+ (d.data_selection_grouped || b.isWithinShape(this, a)) && (b.toggleShape(this, a, e), b.config.data_onclick.call(b.api, a, this))
+ })
+ }
+ }).call(c.behavior.drag().origin(Object).on("drag", function () {
+ b.drag(c.mouse(this))
+ }).on("dragstart", function () {
+ b.dragstart(c.mouse(this))
+ }).on("dragend", function () {
+ b.dragend()
+ }))
+ },f.generateEventRectsForMultipleXs = function (a) {
+ function b() {
+ c.svg.select("." + i.eventRect).style("cursor", null), c.hideXGridFocus(), c.hideTooltip(), c.unexpandCircles(), c.unexpandBars()
+ }
+
+ var c = this, d = c.d3, e = c.config;
+ a.append("rect").attr("x", 0).attr("y", 0).attr("width", c.width).attr("height", c.height).attr("class", i.eventRect).on("mouseout", function () {
+ c.hasArcType() || b()
+ }).on("mousemove", function () {
+ var a, f, g, h, j = c.filterTargetsToShow(c.data.targets);
+ if (!c.dragging && !c.hasArcType(j)) {
+ if (a = d.mouse(this), f = c.findClosestFromTargets(j, a), !c.mouseover || f && f.id === c.mouseover.id || (e.data_onmouseout.call(c.api, c.mouseover), c.mouseover = void 0), !f)return void b();
+ g = c.isScatterType(f) || !e.tooltip_grouped ? [f] : c.filterByX(j, f.x), h = g.map(function (a) {
+ return c.addName(a)
+ }), c.showTooltip(h, a), e.point_focus_expand_enabled && c.expandCircles(f.index, f.id, !0), c.expandBars(f.index, f.id, !0), c.showXGridFocus(h), (c.isBarType(f.id) || c.dist(f, a) < 100) && (c.svg.select("." + i.eventRect).style("cursor", "pointer"), c.mouseover || (e.data_onmouseover.call(c.api, f), c.mouseover = f))
+ }
+ }).on("click", function () {
+ var a, b, f = c.filterTargetsToShow(c.data.targets);
+ c.hasArcType(f) || (a = d.mouse(this), b = c.findClosestFromTargets(f, a), b && (c.isBarType(b.id) || c.dist(b, a) < 100) && c.main.selectAll("." + i.shapes + c.getTargetSelectorSuffix(b.id)).select("." + i.shape + "-" + b.index).each(function () {
+ (e.data_selection_grouped || c.isWithinShape(this, b)) && (c.toggleShape(this, b, b.index), c.config.data_onclick.call(c.api, b, this))
+ }))
+ }).call(d.behavior.drag().origin(Object).on("drag", function () {
+ c.drag(d.mouse(this))
+ }).on("dragstart", function () {
+ c.dragstart(d.mouse(this))
+ }).on("dragend", function () {
+ c.dragend()
+ }))
+ },f.dispatchEvent = function (b, c, d) {
+ var e = this, f = "." + i.eventRect + (e.isMultipleX() ? "" : "-" + c), g = e.main.select(f).node(), h = g.getBoundingClientRect(), j = h.left + (d ? d[0] : 0), k = h.top + (d ? d[1] : 0), l = document.createEvent("MouseEvents");
+ l.initMouseEvent(b, !0, !0, a, 0, j, k, j, k, !1, !1, !1, !1, 0, null), g.dispatchEvent(l)
+ },f.getCurrentWidth = function () {
+ var a = this, b = a.config;
+ return b.size_width ? b.size_width : a.getParentWidth()
+ },f.getCurrentHeight = function () {
+ var a = this, b = a.config, c = b.size_height ? b.size_height : a.getParentHeight();
+ return c > 0 ? c : 320 / (a.hasType("gauge") ? 2 : 1)
+ },f.getCurrentPaddingTop = function () {
+ var a = this.config;
+ return j(a.padding_top) ? a.padding_top : 0
+ },f.getCurrentPaddingBottom = function () {
+ var a = this.config;
+ return j(a.padding_bottom) ? a.padding_bottom : 0
+ },f.getCurrentPaddingLeft = function (a) {
+ var b = this, c = b.config;
+ return j(c.padding_left) ? c.padding_left : c.axis_rotated ? c.axis_x_show ? Math.max(o(b.getAxisWidthByAxisId("x", a)), 40) : 1 : !c.axis_y_show || c.axis_y_inner ? b.getYAxisLabelPosition().isOuter ? 30 : 1 : o(b.getAxisWidthByAxisId("y", a))
+ },f.getCurrentPaddingRight = function () {
+ var a = this, b = a.config, c = 10, d = a.isLegendRight ? a.getLegendWidth() + 20 : 0;
+ return j(b.padding_right) ? b.padding_right + 1 : b.axis_rotated ? c + d : !b.axis_y2_show || b.axis_y2_inner ? 2 + d + (a.getY2AxisLabelPosition().isOuter ? 20 : 0) : o(a.getAxisWidthByAxisId("y2")) + d
+ },f.getParentRectValue = function (a) {
+ for (var b, c = this.selectChart.node(); c && "BODY" !== c.tagName && !(b = c.getBoundingClientRect()[a]);)c = c.parentNode;
+ return b
+ },f.getParentWidth = function () {
+ return this.getParentRectValue("width")
+ },f.getParentHeight = function () {
+ var a = this.selectChart.style("height");
+ return a.indexOf("px") > 0 ? +a.replace("px", "") : 0
+ },f.getSvgLeft = function (a) {
+ var b = this, c = b.config, d = c.axis_rotated || !c.axis_rotated && !c.axis_y_inner, e = c.axis_rotated ? i.axisX : i.axisY, f = b.main.select("." + e).node(), g = f && d ? f.getBoundingClientRect() : {right: 0}, h = b.selectChart.node().getBoundingClientRect(), j = b.hasArcType(), k = g.right - h.left - (j ? 0 : b.getCurrentPaddingLeft(a));
+ return k > 0 ? k : 0
+ },f.getAxisWidthByAxisId = function (a, b) {
+ var c = this, d = c.getAxisLabelPositionById(a);
+ return c.getMaxTickWidth(a, b) + (d.isInner ? 20 : 40)
+ },f.getHorizontalAxisHeight = function (a) {
+ var b = this, c = b.config, d = 30;
+ return "x" !== a || c.axis_x_show ? "x" === a && c.axis_x_height ? c.axis_x_height : "y" !== a || c.axis_y_show ? "y2" !== a || c.axis_y2_show ? ("x" === a && !c.axis_rotated && c.axis_x_tick_rotate && (d = b.getMaxTickWidth(a) * Math.cos(Math.PI * (90 - c.axis_x_tick_rotate) / 180)), d + (b.getAxisLabelPositionById(a).isInner ? 0 : 10) + ("y2" === a ? -10 : 0)) : b.rotated_padding_top : !c.legend_show || b.isLegendRight || b.isLegendInset ? 1 : 10 : 8
+ },f.getEventRectWidth = function () {
+ var a, b, c, d, e, f, g = this, h = g.getMaxDataCountTarget(g.data.targets);
+ return h ? (a = h.values[0], b = h.values[h.values.length - 1], c = g.x(b.x) - g.x(a.x), 0 === c ? g.config.axis_rotated ? g.height : g.width : (d = g.getMaxDataCount(), e = g.hasType("bar") ? (d - (g.isCategorized() ? .25 : 1)) / d : 1, f = d > 1 ? c * e / (d - 1) : c, 1 > f ? 1 : f)) : 0
+ },f.getShapeIndices = function (a) {
+ var b, c, d = this, e = d.config, f = {}, g = 0;
+ return d.filterTargetsToShow(d.data.targets.filter(a, d)).forEach(function (a) {
+ for (b = 0; b < e.data_groups.length; b++)if (!(e.data_groups[b].indexOf(a.id) < 0))for (c = 0; c < e.data_groups[b].length; c++)if (e.data_groups[b][c]in f) {
+ f[a.id] = f[e.data_groups[b][c]];
+ break
+ }
+ m(f[a.id]) && (f[a.id] = g++)
+ }), f.__max__ = g - 1, f
+ },f.getShapeX = function (a, b, c, d) {
+ var e = this, f = d ? e.subX : e.x;
+ return function (d) {
+ var e = d.id in c ? c[d.id] : 0;
+ return d.x || 0 === d.x ? f(d.x) - a * (b / 2 - e) : 0
+ }
+ },f.getShapeY = function (a) {
+ var b = this;
+ return function (c) {
+ var d = a ? b.getSubYScale(c.id) : b.getYScale(c.id);
+ return d(c.value)
+ }
+ },f.getShapeOffset = function (a, b, c) {
+ var d = this, e = d.orderTargets(d.filterTargetsToShow(d.data.targets.filter(a, d))), f = e.map(function (a) {
+ return a.id
+ });
+ return function (a, g) {
+ var h = c ? d.getSubYScale(a.id) : d.getYScale(a.id), i = h(0), j = i;
+ return e.forEach(function (c) {
+ var e = d.isStepType(a) ? d.convertValuesToStep(c.values) : c.values;
+ c.id !== a.id && b[c.id] === b[a.id] && f.indexOf(c.id) < f.indexOf(a.id) && e[g].value * a.value >= 0 && (j += h(e[g].value) - i)
+ }), j
+ }
+ },f.isWithinShape = function (a, b) {
+ var c, d = this, e = d.d3.select(a);
+ return d.isTargetToShow(b.id) ? "circle" === a.nodeName ? c = d.isStepType(b) ? d.isWithinStep(a, d.getYScale(b.id)(b.value)) : d.isWithinCircle(a, 1.5 * d.pointSelectR(b)) : "path" === a.nodeName && (c = e.classed(i.bar) ? d.isWithinBar(a) : !0) : c = !1, c
+ },f.getInterpolate = function (a) {
+ var b = this;
+ return b.isSplineType(a) ? "cardinal" : b.isStepType(a) ? b.config.line_step_type : "linear"
+ },f.initLine = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartLines)
+ },f.updateTargetsForLine = function (a) {
+ var b, c, d = this, e = d.config, f = d.classChartLine.bind(d), g = d.classLines.bind(d), h = d.classAreas.bind(d), j = d.classCircles.bind(d), k = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartLines).selectAll("." + i.chartLine).data(a).attr("class", function (a) {
+ return f(a) + k(a)
+ }), c = b.enter().append("g").attr("class", f).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", g), c.append("g").attr("class", h), c.append("g").attr("class", function (a) {
+ return d.generateClass(i.selectedCircles, a.id)
+ }), c.append("g").attr("class", j).style("cursor", function (a) {
+ return e.data_selection_isselectable(a) ? "pointer" : null
+ }), a.forEach(function (a) {
+ d.main.selectAll("." + i.selectedCircles + d.getTargetSelectorSuffix(a.id)).selectAll("." + i.selectedCircle).each(function (b) {
+ b.value = a.values[b.index].value
+ })
+ })
+ },f.redrawLine = function (a) {
+ var b = this;
+ b.mainLine = b.main.selectAll("." + i.lines).selectAll("." + i.line).data(b.lineData.bind(b)), b.mainLine.enter().append("path").attr("class", b.classLine.bind(b)).style("stroke", b.color), b.mainLine.style("opacity", b.initialOpacity.bind(b)).style("shape-rendering", function (a) {
+ return b.isStepType(a) ? "crispEdges" : ""
+ }).attr("transform", null), b.mainLine.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForLine = function (a, b) {
+ var c = this;
+ a.push(c.mainLine.transition().attr("d", b).style("stroke", c.color).style("opacity", 1))
+ },f.generateDrawLine = function (a, b) {
+ var c = this, d = c.config, e = c.d3.svg.line(), f = c.generateGetLinePoints(a, b), g = b ? c.getSubYScale : c.getYScale, h = function (a) {
+ return (b ? c.subxx : c.xx).call(c, a)
+ }, i = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[0][1] : g.call(c, a.id)(a.value)
+ };
+ return e = d.axis_rotated ? e.x(i).y(h) : e.x(h).y(i), d.line_connectNull || (e = e.defined(function (a) {
+ return null != a.value
+ })), function (a) {
+ var f, h = d.line_connectNull ? c.filterRemoveNull(a.values) : a.values, i = b ? c.x : c.subX, j = g.call(c, a.id), k = 0, l = 0;
+ return c.isLineType(a) ? d.data_regions[a.id] ? f = c.lineWithRegions(h, i, j, d.data_regions[a.id]) : (c.isStepType(a) && (h = c.convertValuesToStep(h)), f = e.interpolate(c.getInterpolate(a))(h)) : (h[0] && (k = i(h[0].x), l = j(h[0].value)), f = d.axis_rotated ? "M " + l + " " + k : "M " + k + " " + l), f ? f : "M 0 0"
+ }
+ },f.generateGetLinePoints = function (a, b) {
+ var c = this, d = c.config, e = a.__max__ + 1, f = c.getShapeX(0, e, a, !!b), g = c.getShapeY(!!b), h = c.getShapeOffset(c.isLineType, a, !!b), i = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var e = i.call(c, a.id)(0), j = h(a, b) || e, k = f(a), l = g(a);
+ return d.axis_rotated && (0 < a.value && e > l || a.value < 0 && l > e) && (l = e), [[k, l - (e - j)], [k, l - (e - j)], [k, l - (e - j)], [k, l - (e - j)]]
+ }
+ },f.lineWithRegions = function (a, b, c, d) {
+ function e(a, b) {
+ var c;
+ for (c = 0; c < b.length; c++)if (b[c].start < a && a <= b[c].end)return !0;
+ return !1
+ }
+
+ var f, g, h, i, j, k, l, o, p, q, r, s, t = this, u = t.config, v = -1, w = "M", x = [];
+ if (n(d))for (f = 0; f < d.length; f++)x[f] = {}, x[f].start = m(d[f].start) ? a[0].x : t.isTimeSeries() ? t.parseDate(d[f].start) : d[f].start, x[f].end = m(d[f].end) ? a[a.length - 1].x : t.isTimeSeries() ? t.parseDate(d[f].end) : d[f].end;
+ for (r = u.axis_rotated ? function (a) {
+ return c(a.value)
+ } : function (a) {
+ return b(a.x)
+ }, s = u.axis_rotated ? function (a) {
+ return b(a.x)
+ } : function (a) {
+ return c(a.value)
+ }, h = t.isTimeSeries() ? function (a, d, e, f) {
+ var g = a.x.getTime(), h = d.x - a.x, i = new Date(g + h * e), k = new Date(g + h * (e + f));
+ return "M" + b(i) + " " + c(j(e)) + " " + b(k) + " " + c(j(e + f))
+ } : function (a, d, e, f) {
+ return "M" + b(i(e), !0) + " " + c(j(e)) + " " + b(i(e + f), !0) + " " + c(j(e + f))
+ }, f = 0; f < a.length; f++) {
+ if (m(x) || !e(a[f].x, x))w += " " + r(a[f]) + " " + s(a[f]); else for (i = t.getScale(a[f - 1].x, a[f].x, t.isTimeSeries()), j = t.getScale(a[f - 1].value, a[f].value), k = b(a[f].x) - b(a[f - 1].x), l = c(a[f].value) - c(a[f - 1].value), o = Math.sqrt(Math.pow(k, 2) + Math.pow(l, 2)), p = 2 / o, q = 2 * p, g = p; 1 >= g; g += q)w += h(a[f - 1], a[f], g, p);
+ v = a[f].x
+ }
+ return w
+ },f.redrawArea = function (a) {
+ var b = this, c = b.d3;
+ b.mainArea = b.main.selectAll("." + i.areas).selectAll("." + i.area).data(b.lineData.bind(b)), b.mainArea.enter().append("path").attr("class", b.classArea.bind(b)).style("fill", b.color).style("opacity", function () {
+ return b.orgAreaOpacity = +c.select(this).style("opacity"), 0
+ }), b.mainArea.style("opacity", b.orgAreaOpacity), b.mainArea.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForArea = function (a, b) {
+ var c = this;
+ a.push(c.mainArea.transition().attr("d", b).style("fill", c.color).style("opacity", c.orgAreaOpacity))
+ },f.generateDrawArea = function (a, b) {
+ var c = this, d = c.config, e = c.d3.svg.area(), f = c.generateGetAreaPoints(a, b), g = b ? c.getSubYScale : c.getYScale, h = function (a) {
+ return (b ? c.subxx : c.xx).call(c, a)
+ }, i = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[0][1] : g.call(c, a.id)(0)
+ }, j = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[1][1] : g.call(c, a.id)(a.value)
+ };
+ return e = d.axis_rotated ? e.x0(i).x1(j).y(h) : e.x(h).y0(i).y1(j), d.line_connectNull || (e = e.defined(function (a) {
+ return null !== a.value
+ })), function (a) {
+ var b, f = d.line_connectNull ? c.filterRemoveNull(a.values) : a.values, g = 0, h = 0;
+ return c.isAreaType(a) ? (c.isStepType(a) && (f = c.convertValuesToStep(f)), b = e.interpolate(c.getInterpolate(a))(f)) : (f[0] && (g = c.x(f[0].x), h = c.getYScale(a.id)(f[0].value)), b = d.axis_rotated ? "M " + h + " " + g : "M " + g + " " + h), b ? b : "M 0 0"
+ }
+ },f.generateGetAreaPoints = function (a, b) {
+ var c = this, d = c.config, e = a.__max__ + 1, f = c.getShapeX(0, e, a, !!b), g = c.getShapeY(!!b), h = c.getShapeOffset(c.isAreaType, a, !!b), i = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var e = i.call(c, a.id)(0), j = h(a, b) || e, k = f(a), l = g(a);
+ return d.axis_rotated && (0 < a.value && e > l || a.value < 0 && l > e) && (l = e), [[k, j], [k, l - (e - j)], [k, l - (e - j)], [k, j]]
+ }
+ },f.redrawCircle = function () {
+ var a = this;
+ a.mainCircle = a.main.selectAll("." + i.circles).selectAll("." + i.circle).data(a.lineOrScatterData.bind(a)), a.mainCircle.enter().append("circle").attr("class", a.classCircle.bind(a)).attr("r", a.pointR.bind(a)).style("fill", a.color), a.mainCircle.style("opacity", a.initialOpacityForCircle.bind(a)), a.mainCircle.exit().remove()
+ },f.addTransitionForCircle = function (a, b, c) {
+ var d = this;
+ a.push(d.mainCircle.transition().style("opacity", d.opacityForCircle.bind(d)).style("fill", d.color).attr("cx", b).attr("cy", c)), a.push(d.main.selectAll("." + i.selectedCircle).transition().attr("cx", b).attr("cy", c))
+ },f.circleX = function (a) {
+ return a.x || 0 === a.x ? this.x(a.x) : null
+ },f.updateCircleY = function () {
+ var a, b, c = this;
+ c.config.data_groups.length > 0 ? (a = c.getShapeIndices(c.isLineType), b = c.generateGetLinePoints(a), c.circleY = function (a, c) {
+ return b(a, c)[0][1]
+ }) : c.circleY = function (a) {
+ return c.getYScale(a.id)(a.value)
+ }
+ },f.getCircles = function (a, b) {
+ var c = this;
+ return (b ? c.main.selectAll("." + i.circles + c.getTargetSelectorSuffix(b)) : c.main).selectAll("." + i.circle + (j(a) ? "-" + a : ""))
+ },f.expandCircles = function (a, b, c) {
+ var d = this, e = d.pointExpandedR.bind(d);
+ c && d.unexpandCircles(), d.getCircles(a, b).classed(i.EXPANDED, !0).attr("r", e)
+ },f.unexpandCircles = function (a) {
+ var b = this, c = b.pointR.bind(b);
+ b.getCircles(a).filter(function () {
+ return b.d3.select(this).classed(i.EXPANDED)
+ }).classed(i.EXPANDED, !1).attr("r", c)
+ },f.pointR = function (a) {
+ var b = this, c = b.config;
+ return b.isStepType(a) ? 0 : k(c.point_r) ? c.point_r(a) : c.point_r
+ },f.pointExpandedR = function (a) {
+ var b = this, c = b.config;
+ return c.point_focus_expand_enabled ? c.point_focus_expand_r ? c.point_focus_expand_r : 1.75 * b.pointR(a) : b.pointR(a)
+ },f.pointSelectR = function (a) {
+ var b = this, c = b.config;
+ return c.point_select_r ? c.point_select_r : 4 * b.pointR(a)
+ },f.isWithinCircle = function (a, b) {
+ var c = this.d3, d = c.mouse(a), e = c.select(a), f = +e.attr("cx"), g = +e.attr("cy");
+ return Math.sqrt(Math.pow(f - d[0], 2) + Math.pow(g - d[1], 2)) < b
+ },f.isWithinStep = function (a, b) {
+ return Math.abs(b - this.d3.mouse(a)[1]) < 30
+ },f.initBar = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartBars)
+ },f.updateTargetsForBar = function (a) {
+ var b, c, d = this, e = d.config, f = d.classChartBar.bind(d), g = d.classBars.bind(d), h = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartBars).selectAll("." + i.chartBar).data(a).attr("class", function (a) {
+ return f(a) + h(a)
+ }), c = b.enter().append("g").attr("class", f).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", g).style("cursor", function (a) {
+ return e.data_selection_isselectable(a) ? "pointer" : null
+ })
+ },f.redrawBar = function (a) {
+ var b = this, c = b.barData.bind(b), d = b.classBar.bind(b), e = b.initialOpacity.bind(b), f = function (a) {
+ return b.color(a.id)
+ };
+ b.mainBar = b.main.selectAll("." + i.bars).selectAll("." + i.bar).data(c), b.mainBar.enter().append("path").attr("class", d).style("stroke", f).style("fill", f), b.mainBar.style("opacity", e), b.mainBar.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForBar = function (a, b) {
+ var c = this;
+ a.push(c.mainBar.transition().attr("d", b).style("fill", c.color).style("opacity", 1))
+ },f.getBarW = function (a, b) {
+ var c = this, d = c.config, e = "number" == typeof d.bar_width ? d.bar_width : b ? 2 * a.tickOffset() * d.bar_width_ratio / b : 0;
+ return d.bar_width_max && e > d.bar_width_max ? d.bar_width_max : e
+ },f.getBars = function (a, b) {
+ var c = this;
+ return (b ? c.main.selectAll("." + i.bars + c.getTargetSelectorSuffix(b)) : c.main).selectAll("." + i.bar + (j(a) ? "-" + a : ""))
+ },f.expandBars = function (a, b, c) {
+ var d = this;
+ c && d.unexpandBars(), d.getBars(a, b).classed(i.EXPANDED, !0)
+ },f.unexpandBars = function (a) {
+ var b = this;
+ b.getBars(a).classed(i.EXPANDED, !1)
+ },f.generateDrawBar = function (a, b) {
+ var c = this, d = c.config, e = c.generateGetBarPoints(a, b);
+ return function (a, b) {
+ var c = e(a, b), f = d.axis_rotated ? 1 : 0, g = d.axis_rotated ? 0 : 1, h = "M " + c[0][f] + "," + c[0][g] + " L" + c[1][f] + "," + c[1][g] + " L" + c[2][f] + "," + c[2][g] + " L" + c[3][f] + "," + c[3][g] + " z";
+ return h
+ }
+ },f.generateGetBarPoints = function (a, b) {
+ var c = this, d = b ? c.subXAxis : c.xAxis, e = a.__max__ + 1, f = c.getBarW(d, e), g = c.getShapeX(f, e, a, !!b), h = c.getShapeY(!!b), i = c.getShapeOffset(c.isBarType, a, !!b), j = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var d = j.call(c, a.id)(0), e = i(a, b) || d, k = g(a), l = h(a);
+ return c.config.axis_rotated && (0 < a.value && d > l || a.value < 0 && l > d) && (l = d), [[k, e], [k, l - (d - e)], [k + f, l - (d - e)], [k + f, e]]
+ }
+ },f.isWithinBar = function (a) {
+ var b = this.d3.mouse(a), c = a.getBoundingClientRect(), d = a.pathSegList.getItem(0), e = a.pathSegList.getItem(1), f = Math.min(d.x, e.x), g = Math.min(d.y, e.y), h = c.width, i = c.height, j = 2, k = f - j, l = f + h + j, m = g + i + j, n = g - j;
+ return k < b[0] && b[0] < l && n < b[1] && b[1] < m
+ },f.initText = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartTexts), a.mainText = a.d3.selectAll([])
+ },f.updateTargetsForText = function (a) {
+ var b, c, d = this, e = d.classChartText.bind(d), f = d.classTexts.bind(d), g = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartTexts).selectAll("." + i.chartText).data(a).attr("class", function (a) {
+ return e(a) + g(a)
+ }), c = b.enter().append("g").attr("class", e).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", f)
+ },f.redrawText = function (a) {
+ var b = this, c = b.config, d = b.barOrLineData.bind(b), e = b.classText.bind(b);
+ b.mainText = b.main.selectAll("." + i.texts).selectAll("." + i.text).data(d), b.mainText.enter().append("text").attr("class", e).attr("text-anchor", function (a) {
+ return c.axis_rotated ? a.value < 0 ? "end" : "start" : "middle"
+ }).style("stroke", "none").style("fill", function (a) {
+ return b.color(a)
+ }).style("fill-opacity", 0), b.mainText.text(function (a, c, d) {
+ return b.formatByAxisId(b.getAxisId(a.id))(a.value, a.id, c, d)
+ }), b.mainText.exit().transition().duration(a).style("fill-opacity", 0).remove()
+ },f.addTransitionForText = function (a, b, c, d) {
+ var e = this, f = d ? 0 : e.opacityForText.bind(e);
+ a.push(e.mainText.transition().attr("x", b).attr("y", c).style("fill", e.color).style("fill-opacity", f))
+ },f.getTextRect = function (a, b) {
+ var c, d = this.d3.select("body").classed("c3", !0), e = d.append("svg").style("visibility", "hidden");
+ return e.selectAll(".dummy").data([a]).enter().append("text").classed(b ? b : "", !0).text(a).each(function () {
+ c = this.getBoundingClientRect()
+ }), e.remove(), d.classed("c3", !1), c
+ },f.generateXYForText = function (a, b, c, d) {
+ var e = this, f = e.generateGetAreaPoints(b, !1), g = e.generateGetBarPoints(b, !1), h = e.generateGetLinePoints(c, !1), i = d ? e.getXForText : e.getYForText;
+ return function (a, b) {
+ var c = e.isAreaType(a) ? f : e.isBarType(a) ? g : h;
+ return i.call(e, c(a, b), a, this)
+ }
+ },f.getXForText = function (a, b, c) {
+ var d, e, f = this, g = c.getBoundingClientRect();
+ return f.config.axis_rotated ? (e = f.isBarType(b) ? 4 : 6, d = a[2][1] + e * (b.value < 0 ? -1 : 1)) : d = f.hasType("bar") ? (a[2][0] + a[0][0]) / 2 : a[0][0], null === b.value && (d > f.width ? d = f.width - g.width : 0 > d && (d = 4)), d
+ },f.getYForText = function (a, b, c) {
+ var d, e = this, f = c.getBoundingClientRect();
+ return d = e.config.axis_rotated ? (a[0][0] + a[2][0] + .6 * f.height) / 2 : a[2][1] + (b.value < 0 ? f.height : e.isBarType(b) ? -3 : -6), null !== b.value || e.config.axis_rotated || (d < f.height ? d = f.height : d > this.height && (d = this.height - 4)), d
+ },f.setTargetType = function (a, b) {
+ var c = this, d = c.config;
+ c.mapToTargetIds(a).forEach(function (a) {
+ c.withoutFadeIn[a] = b === d.data_types[a], d.data_types[a] = b
+ }), a || (d.data_type = b)
+ },f.hasType = function (a, b) {
+ var c = this, d = c.config.data_types, e = !1;
+ return b = b || c.data.targets, b && b.length ? b.forEach(function (b) {
+ var c = d[b.id];
+ (c && c.indexOf(a) >= 0 || !c && "line" === a) && (e = !0)
+ }) : Object.keys(d).length ? Object.keys(d).forEach(function (b) {
+ d[b] === a && (e = !0)
+ }) : e = c.config.data_type === a, e
+ },f.hasArcType = function (a) {
+ return this.hasType("pie", a) || this.hasType("donut", a) || this.hasType("gauge", a)
+ },f.isLineType = function (a) {
+ var b = this.config, c = l(a) ? a : a.id;
+ return !b.data_types[c] || ["line", "spline", "area", "area-spline", "step", "area-step"].indexOf(b.data_types[c]) >= 0
+ },f.isStepType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["step", "area-step"].indexOf(this.config.data_types[b]) >= 0
+ },f.isSplineType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["spline", "area-spline"].indexOf(this.config.data_types[b]) >= 0
+ },f.isAreaType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["area", "area-spline", "area-step"].indexOf(this.config.data_types[b]) >= 0
+ },f.isBarType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "bar" === this.config.data_types[b]
+ },f.isScatterType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "scatter" === this.config.data_types[b]
+ },f.isPieType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "pie" === this.config.data_types[b]
+ },f.isGaugeType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "gauge" === this.config.data_types[b]
+ },f.isDonutType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "donut" === this.config.data_types[b]
+ },f.isArcType = function (a) {
+ return this.isPieType(a) || this.isDonutType(a) || this.isGaugeType(a)
+ },f.lineData = function (a) {
+ return this.isLineType(a) ? [a] : []
+ },f.arcData = function (a) {
+ return this.isArcType(a.data) ? [a] : []
+ },f.barData = function (a) {
+ return this.isBarType(a) ? a.values : []
+ },f.lineOrScatterData = function (a) {
+ return this.isLineType(a) || this.isScatterType(a) ? a.values : []
+ },f.barOrLineData = function (a) {
+ return this.isBarType(a) || this.isLineType(a) ? a.values : []
+ },f.initGrid = function () {
+ var a = this, b = a.config, c = a.d3;
+ a.grid = a.main.append("g").attr("clip-path", a.clipPathForGrid).attr("class", i.grid), b.grid_x_show && a.grid.append("g").attr("class", i.xgrids), b.grid_y_show && a.grid.append("g").attr("class", i.ygrids), b.grid_focus_show && a.grid.append("g").attr("class", i.xgridFocus).append("line").attr("class", i.xgridFocus), a.xgrid = c.selectAll([]), b.grid_lines_front || a.initGridLines()
+ },f.initGridLines = function () {
+ var a = this, b = a.d3;
+ a.gridLines = a.main.append("g").attr("clip-path", a.clipPathForGrid).attr("class", i.grid + " " + i.gridLines), a.gridLines.append("g").attr("class", i.xgridLines), a.gridLines.append("g").attr("class", i.ygridLines), a.xgridLines = b.selectAll([])
+ },f.updateXGrid = function (a) {
+ var b = this, c = b.config, d = b.d3, e = b.generateGridData(c.grid_x_type, b.x), f = b.isCategorized() ? b.xAxis.tickOffset() : 0;
+ b.xgridAttr = c.axis_rotated ? {
+ x1: 0, x2: b.width, y1: function (a) {
+ return b.x(a) - f
+ }, y2: function (a) {
+ return b.x(a) - f
+ }
+ } : {
+ x1: function (a) {
+ return b.x(a) + f
+ }, x2: function (a) {
+ return b.x(a) + f
+ }, y1: 0, y2: b.height
+ }, b.xgrid = b.main.select("." + i.xgrids).selectAll("." + i.xgrid).data(e), b.xgrid.enter().append("line").attr("class", i.xgrid), a || b.xgrid.attr(b.xgridAttr).style("opacity", function () {
+ return +d.select(this).attr(c.axis_rotated ? "y1" : "x1") === (c.axis_rotated ? b.height : 0) ? 0 : 1
+ }), b.xgrid.exit().remove()
+ },f.updateYGrid = function () {
+ var a = this, b = a.config, c = a.yAxis.tickValues() || a.y.ticks(b.grid_y_ticks);
+ a.ygrid = a.main.select("." + i.ygrids).selectAll("." + i.ygrid).data(c), a.ygrid.enter().append("line").attr("class", i.ygrid), a.ygrid.attr("x1", b.axis_rotated ? a.y : 0).attr("x2", b.axis_rotated ? a.y : a.width).attr("y1", b.axis_rotated ? 0 : a.y).attr("y2", b.axis_rotated ? a.height : a.y), a.ygrid.exit().remove(), a.smoothLines(a.ygrid, "grid")
+ },f.redrawGrid = function (a) {
+ var b, c, d, e = this, f = e.main, g = e.config;
+ e.grid.style("visibility", e.hasArcType() ? "hidden" : "visible"), f.select("line." + i.xgridFocus).style("visibility", "hidden"), g.grid_x_show && e.updateXGrid(), e.xgridLines = f.select("." + i.xgridLines).selectAll("." + i.xgridLine).data(g.grid_x_lines), b = e.xgridLines.enter().append("g").attr("class", function (a) {
+ return i.xgridLine + (a["class"] ? " " + a["class"] : "")
+ }), b.append("line").style("opacity", 0), b.append("text").attr("text-anchor", "end").attr("transform", g.axis_rotated ? "" : "rotate(-90)").attr("dx", g.axis_rotated ? 0 : -e.margin.top).attr("dy", -5).style("opacity", 0), e.xgridLines.exit().transition().duration(a).style("opacity", 0).remove(), g.grid_y_show && e.updateYGrid(), e.ygridLines = f.select("." + i.ygridLines).selectAll("." + i.ygridLine).data(g.grid_y_lines), c = e.ygridLines.enter().append("g").attr("class", function (a) {
+ return i.ygridLine + (a["class"] ? " " + a["class"] : "")
+ }), c.append("line").style("opacity", 0), c.append("text").attr("text-anchor", "end").attr("transform", g.axis_rotated ? "rotate(-90)" : "").attr("dx", g.axis_rotated ? 0 : -e.margin.top).attr("dy", -5).style("opacity", 0), d = e.yv.bind(e), e.ygridLines.select("line").transition().duration(a).attr("x1", g.axis_rotated ? d : 0).attr("x2", g.axis_rotated ? d : e.width).attr("y1", g.axis_rotated ? 0 : d).attr("y2", g.axis_rotated ? e.height : d).style("opacity", 1), e.ygridLines.select("text").transition().duration(a).attr("x", g.axis_rotated ? 0 : e.width).attr("y", d).text(function (a) {
+ return a.text
+ }).style("opacity", 1), e.ygridLines.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForGrid = function (a) {
+ var b = this, c = b.config, d = b.xv.bind(b);
+ a.push(b.xgridLines.select("line").transition().attr("x1", c.axis_rotated ? 0 : d).attr("x2", c.axis_rotated ? b.width : d).attr("y1", c.axis_rotated ? d : b.margin.top).attr("y2", c.axis_rotated ? d : b.height).style("opacity", 1)), a.push(b.xgridLines.select("text").transition().attr("x", c.axis_rotated ? b.width : 0).attr("y", d).text(function (a) {
+ return a.text
+ }).style("opacity", 1))
+ },f.showXGridFocus = function (a) {
+ var b = this, c = b.config, d = a.filter(function (a) {
+ return a && j(a.value)
+ }), e = b.main.selectAll("line." + i.xgridFocus), f = b.xx.bind(b);
+ c.tooltip_show && (b.hasType("scatter") || b.hasArcType() || (e.style("visibility", "visible").data([d[0]]).attr(c.axis_rotated ? "y1" : "x1", f).attr(c.axis_rotated ? "y2" : "x2", f), b.smoothLines(e, "grid")))
+ },f.hideXGridFocus = function () {
+ this.main.select("line." + i.xgridFocus).style("visibility", "hidden")
+ },f.updateXgridFocus = function () {
+ var a = this, b = a.config;
+ a.main.select("line." + i.xgridFocus).attr("x1", b.axis_rotated ? 0 : -10).attr("x2", b.axis_rotated ? a.width : -10).attr("y1", b.axis_rotated ? -10 : 0).attr("y2", b.axis_rotated ? -10 : a.height)
+ },f.generateGridData = function (a, b) {
+ var c, d, e, f, g = this, h = [], j = g.main.select("." + i.axisX).selectAll(".tick").size();
+ if ("year" === a)for (c = g.getXDomain(), d = c[0].getFullYear(), e = c[1].getFullYear(), f = d; e >= f; f++)h.push(new Date(f + "-01-01 00:00:00")); else h = b.ticks(10), h.length > j && (h = h.filter(function (a) {
+ return ("" + a).indexOf(".") < 0
+ }));
+ return h
+ },f.getGridFilterToRemove = function (a) {
+ return a ? function (b) {
+ var c = !1;
+ return [].concat(a).forEach(function (a) {
+ ("value"in a && b.value === a.value || "class"in a && b["class"] === a["class"]) && (c = !0)
+ }), c
+ } : function () {
+ return !0
+ }
+ },f.removeGridLines = function (a, b) {
+ var c = this, d = c.config, e = c.getGridFilterToRemove(a), f = function (a) {
+ return !e(a)
+ }, g = b ? i.xgridLines : i.ygridLines, h = b ? i.xgridLine : i.ygridLine;
+ c.main.select("." + g).selectAll("." + h).filter(e).transition().duration(d.transition_duration).style("opacity", 0).remove(), b ? d.grid_x_lines = d.grid_x_lines.filter(f) : d.grid_y_lines = d.grid_y_lines.filter(f)
+ },f.initTooltip = function () {
+ var a, b = this, c = b.config;
+ if (b.tooltip = b.selectChart.style("position", "relative").append("div").attr("class", i.tooltipContainer).style("position", "absolute").style("pointer-events", "none").style("display", "none"), c.tooltip_init_show) {
+ if (b.isTimeSeries() && l(c.tooltip_init_x)) {
+ for (c.tooltip_init_x = b.parseDate(c.tooltip_init_x), a = 0; a < b.data.targets[0].values.length && b.data.targets[0].values[a].x - c.tooltip_init_x !== 0; a++);
+ c.tooltip_init_x = a
+ }
+ b.tooltip.html(c.tooltip_contents.call(b, b.data.targets.map(function (a) {
+ return b.addName(a.values[c.tooltip_init_x])
+ }), b.getXAxisTickFormat(), b.getYFormat(b.hasArcType()), b.color)), b.tooltip.style("top", c.tooltip_init_position.top).style("left", c.tooltip_init_position.left).style("display", "block")
+ }
+ },f.getTooltipContent = function (a, b, c, d) {
+ var e, f, g, h, j, k, l = this, m = l.config, n = m.tooltip_format_title || b, o = m.tooltip_format_name || function (a) {
+ return a
+ }, p = m.tooltip_format_value || c;
+ for (f = 0; f < a.length; f++)a[f] && (a[f].value || 0 === a[f].value) && (e || (g = n ? n(a[f].x) : a[f].x, e = "<table class='" + i.tooltip + "'>" + (g || 0 === g ? "<tr><th colspan='2'>" + g + "</th></tr>" : "")), j = o(a[f].name, a[f].ratio, a[f].id, a[f].index), h = p(a[f].value, a[f].ratio, a[f].id, a[f].index), k = l.levelColor ? l.levelColor(a[f].value) : d(a[f].id), e += "<tr class='" + i.tooltipName + "-" + a[f].id + "'>", e += "<td class='name'><span style='background-color:" + k + "'></span>" + j + "</td>", e += "<td class='value'>" + h + "</td>", e += "</tr>");
+ return e + "</table>"
+ },f.showTooltip = function (a, b) {
+ var c, d, e, f, g, h, i, k = this, l = k.config, m = k.hasArcType(), n = a.filter(function (a) {
+ return a && j(a.value)
+ });
+ 0 !== n.length && l.tooltip_show && (k.tooltip.html(l.tooltip_contents.call(k, a, k.getXAxisTickFormat(), k.getYFormat(m), k.color)).style("display", "block"), c = k.tooltip.property("offsetWidth"), d = k.tooltip.property("offsetHeight"), m ? (f = k.width / 2 + b[0], h = k.height / 2 + b[1] + 20) : (e = k.getSvgLeft(!0), l.axis_rotated ? (f = e + b[0] + 100, g = f + c, i = k.currentWidth - k.getCurrentPaddingRight(), h = k.x(n[0].x) + 20) : (f = e + k.getCurrentPaddingLeft(!0) + k.x(n[0].x) + 20, g = f + c, i = e + k.currentWidth - k.getCurrentPaddingRight(), h = b[1] + 15), g > i && (f -= g - i), h + d > k.currentHeight && (h -= d + 30)), 0 > h && (h = 0), k.tooltip.style("top", h + "px").style("left", f + "px"))
+ },f.hideTooltip = function () {
+ this.tooltip.style("display", "none")
+ },f.initLegend = function () {
+ var a = this;
+ return a.legendHasRendered = !1, a.legend = a.svg.append("g").attr("transform", a.getTranslate("legend")), a.config.legend_show ? void a.updateLegendWithDefaults() : (a.legend.style("visibility", "hidden"), void(a.hiddenLegendIds = a.mapToIds(a.data.targets)))
+ },f.updateLegendWithDefaults = function () {
+ var a = this;
+ a.updateLegend(a.mapToIds(a.data.targets), {
+ withTransform: !1,
+ withTransitionForTransform: !1,
+ withTransition: !1
+ })
+ },f.updateSizeForLegend = function (a, b) {
+ var c = this, d = c.config, e = {
+ top: c.isLegendTop ? c.getCurrentPaddingTop() + d.legend_inset_y + 5.5 : c.currentHeight - a - c.getCurrentPaddingBottom() - d.legend_inset_y,
+ left: c.isLegendLeft ? c.getCurrentPaddingLeft() + d.legend_inset_x + .5 : c.currentWidth - b - c.getCurrentPaddingRight() - d.legend_inset_x + .5
+ };
+ c.margin3 = {
+ top: c.isLegendRight ? 0 : c.isLegendInset ? e.top : c.currentHeight - a,
+ right: 0 / 0,
+ bottom: 0,
+ left: c.isLegendRight ? c.currentWidth - b : c.isLegendInset ? e.left : 0
+ }
+ },f.transformLegend = function (a) {
+ var b = this;
+ (a ? b.legend.transition() : b.legend).attr("transform", b.getTranslate("legend"))
+ },f.updateLegendStep = function (a) {
+ this.legendStep = a
+ },f.updateLegendItemWidth = function (a) {
+ this.legendItemWidth = a
+ },f.updateLegendItemHeight = function (a) {
+ this.legendItemHeight = a
+ },f.getLegendWidth = function () {
+ var a = this;
+ return a.config.legend_show ? a.isLegendRight || a.isLegendInset ? a.legendItemWidth * (a.legendStep + 1) : a.currentWidth : 0
+ },f.getLegendHeight = function () {
+ var a = this, b = 0;
+ return a.config.legend_show && (b = a.isLegendRight ? a.currentHeight : Math.max(20, a.legendItemHeight) * (a.legendStep + 1)), b
+ },f.opacityForLegend = function (a) {
+ return a.classed(i.legendItemHidden) ? null : 1
+ },f.opacityForUnfocusedLegend = function (a) {
+ return a.classed(i.legendItemHidden) ? null : .3
+ },f.toggleFocusLegend = function (a, b) {
+ var c = this;
+ a = c.mapToTargetIds(a), c.legend.selectAll("." + i.legendItem).filter(function (b) {
+ return a.indexOf(b) >= 0
+ }).classed(i.legendItemFocused, b).transition().duration(100).style("opacity", function () {
+ var a = b ? c.opacityForLegend : c.opacityForUnfocusedLegend;
+ return a.call(c, c.d3.select(this))
+ })
+ },f.revertLegend = function () {
+ var a = this, b = a.d3;
+ a.legend.selectAll("." + i.legendItem).classed(i.legendItemFocused, !1).transition().duration(100).style("opacity", function () {
+ return a.opacityForLegend(b.select(this))
+ })
+ },f.showLegend = function (a) {
+ var b = this, c = b.config;
+ c.legend_show || (c.legend_show = !0, b.legend.style("visibility", "visible"), b.legendHasRendered || b.updateLegendWithDefaults()), b.removeHiddenLegendIds(a), b.legend.selectAll(b.selectorLegends(a)).style("visibility", "visible").transition().style("opacity", function () {
+ return b.opacityForLegend(b.d3.select(this))
+ })
+ },f.hideLegend = function (a) {
+ var b = this, c = b.config;
+ c.legend_show && r(a) && (c.legend_show = !1, b.legend.style("visibility", "hidden")), b.addHiddenLegendIds(a), b.legend.selectAll(b.selectorLegends(a)).style("opacity", 0).style("visibility", "hidden")
+ };
+ var h = {};
+ f.clearLegendItemTextBoxCache = function () {
+ h = {}
+ }, f.updateLegend = function (a, b, c) {
+ function d(a, b) {
+ return h[b] || (h[b] = w.getTextRect(a.textContent, i.legendItem)), h[b]
+ }
+
+ function e(b, c, e) {
+ function f(a, b) {
+ b || (g = (o - E - n) / 2, C > g && (g = (o - n) / 2, E = 0, K++)), J[a] = K, I[K] = w.isLegendInset ? 10 : g, F[a] = E, E += n
+ }
+
+ var g, h, i = 0 === e, j = e === a.length - 1, k = d(b, c), l = k.width + D + (!j || w.isLegendRight || w.isLegendInset ? z : 0), m = k.height + y, n = w.isLegendRight || w.isLegendInset ? m : l, o = w.isLegendRight || w.isLegendInset ? w.getLegendHeight() : w.getLegendWidth();
+ return i && (E = 0, K = 0, A = 0, B = 0), x.legend_show && !w.isLegendToShow(c) ? void(G[c] = H[c] = J[c] = F[c] = 0) : (G[c] = l, H[c] = m, (!A || l >= A) && (A = l), (!B || m >= B) && (B = m), h = w.isLegendRight || w.isLegendInset ? B : A, void(x.legend_equally ? (Object.keys(G).forEach(function (a) {
+ G[a] = A
+ }), Object.keys(H).forEach(function (a) {
+ H[a] = B
+ }), g = (o - h * a.length) / 2, C > g ? (E = 0, K = 0, a.forEach(function (a) {
+ f(a)
+ })) : f(c, !0)) : f(c)))
+ }
+
+ var f, g, j, k, l, m, o, p, q, r, s, u, v, w = this, x = w.config, y = 4, z = 10, A = 0, B = 0, C = 10, D = 15, E = 0, F = {}, G = {}, H = {}, I = [0], J = {}, K = 0, L = w.legend.selectAll("." + i.legendItemFocused).size();
+ b = b || {}, p = t(b, "withTransition", !0), q = t(b, "withTransitionForTransform", !0), w.isLegendInset && (K = x.legend_inset_step ? x.legend_inset_step : a.length, w.updateLegendStep(K)), w.isLegendRight ? (f = function (a) {
+ return A * J[a]
+ }, k = function (a) {
+ return I[J[a]] + F[a]
+ }) : w.isLegendInset ? (f = function (a) {
+ return A * J[a] + 10
+ }, k = function (a) {
+ return I[J[a]] + F[a]
+ }) : (f = function (a) {
+ return I[J[a]] + F[a]
+ }, k = function (a) {
+ return B * J[a]
+ }), g = function (a, b) {
+ return f(a, b) + 14
+ }, l = function (a, b) {
+ return k(a, b) + 9
+ }, j = function (a, b) {
+ return f(a, b)
+ }, m = function (a, b) {
+ return k(a, b) - 5
+ }, o = w.legend.selectAll("." + i.legendItem).data(a).enter().append("g").attr("class", function (a) {
+ return w.generateClass(i.legendItem, a)
+ }).style("visibility", function (a) {
+ return w.isLegendToShow(a) ? "visible" : "hidden"
+ }).style("cursor", "pointer").on("click", function (a) {
+ x.legend_item_onclick ? x.legend_item_onclick.call(w, a) : w.d3.event.altKey ? (w.api.hide(), w.api.show(a)) : (w.api.toggle(a), w.isTargetToShow(a) ? w.api.focus(a) : w.api.revert())
+ }).on("mouseover", function (a) {
+ w.d3.select(this).classed(i.legendItemFocused, !0), !w.transiting && w.isTargetToShow(a) && w.api.focus(a), x.legend_item_onmouseover && x.legend_item_onmouseover.call(w, a)
+ }).on("mouseout", function (a) {
+ w.d3.select(this).classed(i.legendItemFocused, !1), w.api.revert(), x.legend_item_onmouseout && x.legend_item_onmouseout.call(w, a)
+ }), o.append("text").text(function (a) {
+ return n(x.data_names[a]) ? x.data_names[a] : a
+ }).each(function (a, b) {
+ e(this, a, b)
+ }).style("pointer-events", "none").attr("x", w.isLegendRight || w.isLegendInset ? g : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : l), o.append("rect").attr("class", i.legendItemEvent).style("fill-opacity", 0).attr("x", w.isLegendRight || w.isLegendInset ? j : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : m), o.append("rect").attr("class", i.legendItemTile).style("pointer-events", "none").style("fill", w.color).attr("x", w.isLegendRight || w.isLegendInset ? g : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : k).attr("width", 10).attr("height", 10), v = w.legend.select("." + i.legendBackground + " rect"), w.isLegendInset && A > 0 && 0 === v.size() && (v = w.legend.insert("g", "." + i.legendItem).attr("class", i.legendBackground).append("rect")), r = w.legend.selectAll("text").data(a).text(function (a) {
+ return n(x.data_names[a]) ? x.data_names[a] : a
+ }).each(function (a, b) {
+ e(this, a, b)
+ }), (p ? r.transition() : r).attr("x", g).attr("y", l), s = w.legend.selectAll("rect." + i.legendItemEvent).data(a), (p ? s.transition() : s).attr("width", function (a) {
+ return G[a]
+ }).attr("height", function (a) {
+ return H[a]
+ }).attr("x", j).attr("y", m), u = w.legend.selectAll("rect." + i.legendItemTile).data(a), (p ? u.transition() : u).style("fill", w.color).attr("x", f).attr("y", k), v && (p ? v.transition() : v).attr("height", w.getLegendHeight() - 12).attr("width", A * (K + 1) + 10), w.legend.selectAll("." + i.legendItem).classed(i.legendItemHidden, function (a) {
+ return !w.isTargetToShow(a)
+ }).transition().style("opacity", function (a) {
+ var b = w.d3.select(this);
+ return w.isTargetToShow(a) ? !L || b.classed(i.legendItemFocused) ? w.opacityForLegend(b) : w.opacityForUnfocusedLegend(b) : null
+ }), w.updateLegendItemWidth(A), w.updateLegendItemHeight(B), w.updateLegendStep(K), w.updateSizes(), w.updateScales(), w.updateSvgSize(), w.transformAll(q, c), w.legendHasRendered = !0
+ }, f.initAxis = function () {
+ var a = this, b = a.config, c = a.main;
+ a.axes.x = c.append("g").attr("class", i.axis + " " + i.axisX).attr("clip-path", a.clipPathForXAxis).attr("transform", a.getTranslate("x")).style("visibility", b.axis_x_show ? "visible" : "hidden"), a.axes.x.append("text").attr("class", i.axisXLabel).attr("transform", b.axis_rotated ? "rotate(-90)" : "").style("text-anchor", a.textAnchorForXAxisLabel.bind(a)), a.axes.y = c.append("g").attr("class", i.axis + " " + i.axisY).attr("clip-path", b.axis_y_inner ? "" : a.clipPathForYAxis).attr("transform", a.getTranslate("y")).style("visibility", b.axis_y_show ? "visible" : "hidden"), a.axes.y.append("text").attr("class", i.axisYLabel).attr("transform", b.axis_rotated ? "" : "rotate(-90)").style("text-anchor", a.textAnchorForYAxisLabel.bind(a)), a.axes.y2 = c.append("g").attr("class", i.axis + " " + i.axisY2).attr("transform", a.getTranslate("y2")).style("visibility", b.axis_y2_show ? "visible" : "hidden"), a.axes.y2.append("text").attr("class", i.axisY2Label).attr("transform", b.axis_rotated ? "" : "rotate(-90)").style("text-anchor", a.textAnchorForY2AxisLabel.bind(a))
+ }, f.getXAxis = function (a, b, c, e, f) {
+ var g = this, h = g.config, i = {
+ isCategory: g.isCategorized(),
+ withOuterTick: f,
+ tickMultiline: h.axis_x_tick_multiline,
+ tickWidth: h.axis_x_tick_width
+ }, j = d(g.d3, i).scale(a).orient(b);
+ return g.isTimeSeries() && e && (e = e.map(function (a) {
+ return g.parseDate(a)
+ })), j.tickFormat(c).tickValues(e), g.isCategorized() ? (j.tickCentered(h.axis_x_tick_centered), r(h.axis_x_tick_culling) && (h.axis_x_tick_culling = !1)) : j.tickOffset = function () {
+ var a = this.scale(), b = g.getEdgeX(g.data.targets), c = a(b[1]) - a(b[0]), d = c ? c : h.axis_rotated ? g.height : g.width;
+ return d / g.getMaxDataCount() / 2
+ }, j
+ }, f.getYAxis = function (a, b, c, e, f) {
+ var g = {withOuterTick: f}, h = d(this.d3, g).scale(a).orient(b).tickFormat(c);
+ return this.isTimeSeriesY() ? h.ticks(this.d3.time[this.config.axis_y_tick_time_value], this.config.axis_y_tick_time_interval) : h.tickValues(e), h
+ }, f.getAxisId = function (a) {
+ var b = this.config;
+ return a in b.data_axes ? b.data_axes[a] : "y"
+ }, f.getXAxisTickFormat = function () {
+ var a = this, b = a.config, c = a.isTimeSeries() ? a.defaultAxisTimeFormat : a.isCategorized() ? a.categoryName : function (a) {
+ return 0 > a ? a.toFixed(0) : a
+ };
+ return b.axis_x_tick_format && (k(b.axis_x_tick_format) ? c = b.axis_x_tick_format : a.isTimeSeries() && (c = function (c) {
+ return c ? a.axisTimeFormat(b.axis_x_tick_format)(c) : ""
+ })), k(c) ? function (b) {
+ return c.call(a, b)
+ } : c
+ }, f.getAxisTickValues = function (a, b) {
+ return a ? a : b ? b.tickValues() : void 0
+ }, f.getXAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_x_tick_values, this.xAxis)
+ }, f.getYAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y_tick_values, this.yAxis)
+ }, f.getY2AxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y2_tick_values, this.y2Axis)
+ }, f.getAxisLabelOptionByAxisId = function (a) {
+ var b, c = this, d = c.config;
+ return "y" === a ? b = d.axis_y_label : "y2" === a ? b = d.axis_y2_label : "x" === a && (b = d.axis_x_label), b
+ }, f.getAxisLabelText = function (a) {
+ var b = this.getAxisLabelOptionByAxisId(a);
+ return l(b) ? b : b ? b.text : null
+ }, f.setAxisLabelText = function (a, b) {
+ var c = this, d = c.config, e = c.getAxisLabelOptionByAxisId(a);
+ l(e) ? "y" === a ? d.axis_y_label = b : "y2" === a ? d.axis_y2_label = b : "x" === a && (d.axis_x_label = b) : e && (e.text = b)
+ }, f.getAxisLabelPosition = function (a, b) {
+ var c = this.getAxisLabelOptionByAxisId(a), d = c && "object" == typeof c && c.position ? c.position : b;
+ return {
+ isInner: d.indexOf("inner") >= 0,
+ isOuter: d.indexOf("outer") >= 0,
+ isLeft: d.indexOf("left") >= 0,
+ isCenter: d.indexOf("center") >= 0,
+ isRight: d.indexOf("right") >= 0,
+ isTop: d.indexOf("top") >= 0,
+ isMiddle: d.indexOf("middle") >= 0,
+ isBottom: d.indexOf("bottom") >= 0
+ }
+ }, f.getXAxisLabelPosition = function () {
+ return this.getAxisLabelPosition("x", this.config.axis_rotated ? "inner-top" : "inner-right")
+ }, f.getYAxisLabelPosition = function () {
+ return this.getAxisLabelPosition("y", this.config.axis_rotated ? "inner-right" : "inner-top")
+ }, f.getY2AxisLabelPosition = function () {
+ return this.getAxisLabelPosition("y2", this.config.axis_rotated ? "inner-right" : "inner-top")
+ }, f.getAxisLabelPositionById = function (a) {
+ return "y2" === a ? this.getY2AxisLabelPosition() : "y" === a ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition()
+ }, f.textForXAxisLabel = function () {
+ return this.getAxisLabelText("x")
+ }, f.textForYAxisLabel = function () {
+ return this.getAxisLabelText("y")
+ }, f.textForY2AxisLabel = function () {
+ return this.getAxisLabelText("y2")
+ }, f.xForAxisLabel = function (a, b) {
+ var c = this;
+ return a ? b.isLeft ? 0 : b.isCenter ? c.width / 2 : c.width : b.isBottom ? -c.height : b.isMiddle ? -c.height / 2 : 0
+ }, f.dxForAxisLabel = function (a, b) {
+ return a ? b.isLeft ? "0.5em" : b.isRight ? "-0.5em" : "0" : b.isTop ? "-0.5em" : b.isBottom ? "0.5em" : "0"
+ }, f.textAnchorForAxisLabel = function (a, b) {
+ return a ? b.isLeft ? "start" : b.isCenter ? "middle" : "end" : b.isBottom ? "start" : b.isMiddle ? "middle" : "end"
+ }, f.xForXAxisLabel = function () {
+ return this.xForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition())
+ }, f.xForYAxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition())
+ }, f.xForY2AxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition())
+ }, f.dxForXAxisLabel = function () {
+ return this.dxForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition())
+ }, f.dxForYAxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition())
+ }, f.dxForY2AxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition())
+ }, f.dyForXAxisLabel = function () {
+ var a = this, b = a.config, c = a.getXAxisLabelPosition();
+ return b.axis_rotated ? c.isInner ? "1.2em" : -25 - a.getMaxTickWidth("x") : c.isInner ? "-0.5em" : b.axis_x_height ? b.axis_x_height - 10 : "3em"
+ }, f.dyForYAxisLabel = function () {
+ var a = this, b = a.getYAxisLabelPosition();
+ return a.config.axis_rotated ? b.isInner ? "-0.5em" : "3em" : b.isInner ? "1.2em" : -10 - (a.config.axis_y_inner ? 0 : a.getMaxTickWidth("y") + 10)
+ }, f.dyForY2AxisLabel = function () {
+ var a = this, b = a.getY2AxisLabelPosition();
+ return a.config.axis_rotated ? b.isInner ? "1.2em" : "-2.2em" : b.isInner ? "-0.5em" : 15 + (a.config.axis_y2_inner ? 0 : this.getMaxTickWidth("y2") + 15)
+ }, f.textAnchorForXAxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(!a.config.axis_rotated, a.getXAxisLabelPosition())
+ }, f.textAnchorForYAxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(a.config.axis_rotated, a.getYAxisLabelPosition())
+ }, f.textAnchorForY2AxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(a.config.axis_rotated, a.getY2AxisLabelPosition())
+ }, f.xForRotatedTickText = function (a) {
+ return 8 * Math.sin(Math.PI * (a / 180))
+ }, f.yForRotatedTickText = function (a) {
+ return 11.5 - 2.5 * (a / 15) * (a > 0 ? 1 : -1)
+ }, f.rotateTickText = function (a, b, c) {
+ a.selectAll(".tick text").style("text-anchor", c > 0 ? "start" : "end"), b.selectAll(".tick text").attr("y", this.yForRotatedTickText(c)).attr("transform", "rotate(" + c + ")").selectAll("tspan").attr("dx", this.xForRotatedTickText(c))
+ }, f.getMaxTickWidth = function (a, b) {
+ var c, d, e, f = this, g = f.config, h = 0;
+ return b && f.currentMaxTickWidths[a] ? f.currentMaxTickWidths[a] : (f.svg && (c = f.filterTargetsToShow(f.data.targets), "y" === a ? (d = f.y.copy().domain(f.getYDomain(c, "y")), e = f.getYAxis(d, f.yOrient, g.axis_y_tick_format, f.yAxisTickValues)) : "y2" === a ? (d = f.y2.copy().domain(f.getYDomain(c, "y2")), e = f.getYAxis(d, f.y2Orient, g.axis_y2_tick_format, f.y2AxisTickValues)) : (d = f.x.copy().domain(f.getXDomain(c)), e = f.getXAxis(d, f.xOrient, f.xAxisTickFormat, f.xAxisTickValues)), f.d3.select("body").append("g").style("visibility", "hidden").call(e).each(function () {
+ f.d3.select(this).selectAll("text tspan").each(function () {
+ var a = this.getBoundingClientRect();
+ a.left > 0 && h < a.width && (h = a.width)
+ })
+ }).remove()), f.currentMaxTickWidths[a] = 0 >= h ? f.currentMaxTickWidths[a] : h, f.currentMaxTickWidths[a])
+ }, f.updateAxisLabels = function (a) {
+ var b = this, c = b.main.select("." + i.axisX + " ." + i.axisXLabel), d = b.main.select("." + i.axisY + " ." + i.axisYLabel), e = b.main.select("." + i.axisY2 + " ." + i.axisY2Label);
+ (a ? c.transition() : c).attr("x", b.xForXAxisLabel.bind(b)).attr("dx", b.dxForXAxisLabel.bind(b)).attr("dy", b.dyForXAxisLabel.bind(b)).text(b.textForXAxisLabel.bind(b)), (a ? d.transition() : d).attr("x", b.xForYAxisLabel.bind(b)).attr("dx", b.dxForYAxisLabel.bind(b)).attr("dy", b.dyForYAxisLabel.bind(b)).text(b.textForYAxisLabel.bind(b)), (a ? e.transition() : e).attr("x", b.xForY2AxisLabel.bind(b)).attr("dx", b.dxForY2AxisLabel.bind(b)).attr("dy", b.dyForY2AxisLabel.bind(b)).text(b.textForY2AxisLabel.bind(b))
+ }, f.getAxisPadding = function (a, b, c, d) {
+ return j(a[b]) ? "ratio" === a.unit ? a[b] * d : this.convertPixelsToAxisPadding(a[b], d) : c
+ }, f.convertPixelsToAxisPadding = function (a, b) {
+ var c = this.config.axis_rotated ? this.width : this.height;
+ return b * (a / c)
+ }, f.generateTickValues = function (a, b, c) {
+ var d, e, f, g, h, i, j, l = a;
+ if (b)if (d = k(b) ? b() : b, 1 === d)l = [a[0]]; else if (2 === d)l = [a[0], a[a.length - 1]]; else if (d > 2) {
+ for (g = d - 2, e = a[0], f = a[a.length - 1], h = (f - e) / (g + 1), l = [e], i = 0; g > i; i++)j = +e + h * (i + 1), l.push(c ? new Date(j) : j);
+ l.push(f)
+ }
+ return c || (l = l.sort(function (a, b) {
+ return a - b
+ })), l
+ }, f.generateAxisTransitions = function (a) {
+ var b = this, c = b.axes;
+ return {
+ axisX: a ? c.x.transition().duration(a) : c.x,
+ axisY: a ? c.y.transition().duration(a) : c.y,
+ axisY2: a ? c.y2.transition().duration(a) : c.y2,
+ axisSubX: a ? c.subx.transition().duration(a) : c.subx
+ }
+ }, f.redrawAxis = function (a, b) {
+ var c = this, d = c.config;
+ c.axes.x.style("opacity", b ? 0 : 1), c.axes.y.style("opacity", b ? 0 : 1), c.axes.y2.style("opacity", b ? 0 : 1), c.axes.subx.style("opacity", b ? 0 : 1), a.axisX.call(c.xAxis), a.axisY.call(c.yAxis), a.axisY2.call(c.y2Axis), a.axisSubX.call(c.subXAxis), !d.axis_rotated && d.axis_x_tick_rotate && (c.rotateTickText(c.axes.x, a.axisX, d.axis_x_tick_rotate), c.rotateTickText(c.axes.subx, a.axisSubX, d.axis_x_tick_rotate))
+ }, f.getClipPath = function (b) {
+ var c = a.navigator.appVersion.toLowerCase().indexOf("msie 9.") >= 0;
+ return "url(" + (c ? "" : document.URL.split("#")[0]) + "#" + b + ")"
+ }, f.appendClip = function (a, b) {
+ return a.append("clipPath").attr("id", b).append("rect")
+ }, f.getAxisClipX = function (a) {
+ var b = Math.max(30, this.margin.left);
+ return a ? -(1 + b) : -(b - 1)
+ }, f.getAxisClipY = function (a) {
+ return a ? -20 : -this.margin.top
+ }, f.getXAxisClipX = function () {
+ var a = this;
+ return a.getAxisClipX(!a.config.axis_rotated)
+ }, f.getXAxisClipY = function () {
+ var a = this;
+ return a.getAxisClipY(!a.config.axis_rotated)
+ }, f.getYAxisClipX = function () {
+ var a = this;
+ return a.config.axis_y_inner ? -1 : a.getAxisClipX(a.config.axis_rotated)
+ }, f.getYAxisClipY = function () {
+ var a = this;
+ return a.getAxisClipY(a.config.axis_rotated)
+ }, f.getAxisClipWidth = function (a) {
+ var b = this, c = Math.max(30, b.margin.left), d = Math.max(30, b.margin.right);
+ return a ? b.width + 2 + c + d : b.margin.left + 20
+ }, f.getAxisClipHeight = function (a) {
+ return (a ? this.margin.bottom : this.margin.top + this.height) + 20
+ }, f.getXAxisClipWidth = function () {
+ var a = this;
+ return a.getAxisClipWidth(!a.config.axis_rotated)
+ }, f.getXAxisClipHeight = function () {
+ var a = this;
+ return a.getAxisClipHeight(!a.config.axis_rotated)
+ }, f.getYAxisClipWidth = function () {
+ var a = this;
+ return a.getAxisClipWidth(a.config.axis_rotated) + (a.config.axis_y_inner ? 20 : 0)
+ }, f.getYAxisClipHeight = function () {
+ var a = this;
+ return a.getAxisClipHeight(a.config.axis_rotated)
+ }, f.initPie = function () {
+ var a = this, b = a.d3, c = a.config;
+ a.pie = b.layout.pie().value(function (a) {
+ return a.values.reduce(function (a, b) {
+ return a + b.value
+ }, 0)
+ }), c.data_order || a.pie.sort(null)
+ }, f.updateRadius = function () {
+ var a = this, b = a.config, c = b.gauge_width || b.donut_width;
+ a.radiusExpanded = Math.min(a.arcWidth, a.arcHeight) / 2, a.radius = .95 * a.radiusExpanded, a.innerRadiusRatio = c ? (a.radius - c) / a.radius : .6, a.innerRadius = a.hasType("donut") || a.hasType("gauge") ? a.radius * a.innerRadiusRatio : 0
+ }, f.updateArc = function () {
+ var a = this;
+ a.svgArc = a.getSvgArc(), a.svgArcExpanded = a.getSvgArcExpanded(), a.svgArcExpandedSub = a.getSvgArcExpanded(.98)
+ }, f.updateAngle = function (a) {
+ var b, c, d = this, e = d.config, f = !1, g = 0, h = e.gauge_min, i = e.gauge_max;
+ return d.pie(d.filterTargetsToShow(d.data.targets)).forEach(function (b) {
+ f || b.data.id !== a.data.id || (f = !0, a = b, a.index = g), g++
+ }), isNaN(a.endAngle) && (a.endAngle = a.startAngle), d.isGaugeType(a.data) && (b = Math.PI / (i - h), c = a.value < h ? 0 : a.value < i ? a.value - h : i - h, a.startAngle = -1 * (Math.PI / 2), a.endAngle = a.startAngle + b * c), f ? a : null
+ }, f.getSvgArc = function () {
+ var a = this, b = a.d3.svg.arc().outerRadius(a.radius).innerRadius(a.innerRadius), c = function (c, d) {
+ var e;
+ return d ? b(c) : (e = a.updateAngle(c), e ? b(e) : "M 0 0")
+ };
+ return c.centroid = b.centroid, c
+ }, f.getSvgArcExpanded = function (a) {
+ var b = this, c = b.d3.svg.arc().outerRadius(b.radiusExpanded * (a ? a : 1)).innerRadius(b.innerRadius);
+ return function (a) {
+ var d = b.updateAngle(a);
+ return d ? c(d) : "M 0 0"
+ }
+ }, f.getArc = function (a, b, c) {
+ return c || this.isArcType(a.data) ? this.svgArc(a, b) : "M 0 0"
+ }, f.transformForArcLabel = function (a) {
+ var b, c, d, e, f, g = this, h = g.updateAngle(a), i = "";
+ return h && !g.hasType("gauge") && (b = this.svgArc.centroid(h), c = isNaN(b[0]) ? 0 : b[0], d = isNaN(b[1]) ? 0 : b[1], e = Math.sqrt(c * c + d * d), f = g.radius && e ? (36 / g.radius > .375 ? 1.175 - 36 / g.radius : .8) * g.radius / e : 0, i = "translate(" + c * f + "," + d * f + ")"), i
+ }, f.getArcRatio = function (a) {
+ var b = this, c = b.hasType("gauge") ? Math.PI : 2 * Math.PI;
+ return a ? (a.endAngle - a.startAngle) / c : null
+ }, f.convertToArcData = function (a) {
+ return this.addName({id: a.data.id, value: a.value, ratio: this.getArcRatio(a), index: a.index})
+ }, f.textForArcLabel = function (a) {
+ var b, c, d, e, f, g = this;
+ return g.shouldShowArcLabel() ? (b = g.updateAngle(a), c = b ? b.value : null, d = g.getArcRatio(b), e = a.data.id, g.hasType("gauge") || g.meetsArcLabelThreshold(d) ? (f = g.getArcLabelFormat(), f ? f(c, d, e) : g.defaultArcValueFormat(c, d)) : "") : ""
+ }, f.expandArc = function (b) {
+ var c, d = this;
+ return d.transiting ? void(c = a.setInterval(function () {
+ d.transiting || (a.clearInterval(c), d.legend.selectAll(".c3-legend-item-focused").size() > 0 && d.expandArc(b))
+ }, 10)) : (b = d.mapToTargetIds(b), void d.svg.selectAll(d.selectorTargets(b, "." + i.chartArc)).each(function (a) {
+ d.shouldExpand(a.data.id) && d.d3.select(this).selectAll("path").transition().duration(50).attr("d", d.svgArcExpanded).transition().duration(100).attr("d", d.svgArcExpandedSub).each(function (a) {
+ d.isDonutType(a.data)
+ })
+ }))
+ }, f.unexpandArc = function (a) {
+ var b = this;
+ b.transiting || (a = b.mapToTargetIds(a), b.svg.selectAll(b.selectorTargets(a, "." + i.chartArc)).selectAll("path").transition().duration(50).attr("d", b.svgArc), b.svg.selectAll("." + i.arc).style("opacity", 1))
+ }, f.shouldExpand = function (a) {
+ var b = this, c = b.config;
+ return b.isDonutType(a) && c.donut_expand || b.isGaugeType(a) && c.gauge_expand || b.isPieType(a) && c.pie_expand
+ }, f.shouldShowArcLabel = function () {
+ var a = this, b = a.config, c = !0;
+ return a.hasType("donut") ? c = b.donut_label_show : a.hasType("pie") && (c = b.pie_label_show), c
+ }, f.meetsArcLabelThreshold = function (a) {
+ var b = this, c = b.config, d = b.hasType("donut") ? c.donut_label_threshold : c.pie_label_threshold;
+ return a >= d
+ }, f.getArcLabelFormat = function () {
+ var a = this, b = a.config, c = b.pie_label_format;
+ return a.hasType("gauge") ? c = b.gauge_label_format : a.hasType("donut") && (c = b.donut_label_format), c
+ }, f.getArcTitle = function () {
+ var a = this;
+ return a.hasType("donut") ? a.config.donut_title : ""
+ }, f.updateTargetsForArc = function (a) {
+ var b, c, d = this, e = d.main, f = d.classChartArc.bind(d), g = d.classArcs.bind(d), h = d.classFocus.bind(d);
+ b = e.select("." + i.chartArcs).selectAll("." + i.chartArc).data(d.pie(a)).attr("class", function (a) {
+ return f(a) + h(a.data)
+ }), c = b.enter().append("g").attr("class", f), c.append("g").attr("class", g), c.append("text").attr("dy", d.hasType("gauge") ? "-.1em" : ".35em").style("opacity", 0).style("text-anchor", "middle").style("pointer-events", "none")
+ }, f.initArc = function () {
+ var a = this;
+ a.arcs = a.main.select("." + i.chart).append("g").attr("class", i.chartArcs).attr("transform", a.getTranslate("arc")), a.arcs.append("text").attr("class", i.chartArcsTitle).style("text-anchor", "middle").text(a.getArcTitle())
+ }, f.redrawArc = function (a, b, c) {
+ var d, e = this, f = e.d3, g = e.config, h = e.main;
+ d = h.selectAll("." + i.arcs).selectAll("." + i.arc).data(e.arcData.bind(e)), d.enter().append("path").attr("class", e.classArc.bind(e)).style("fill", function (a) {
+ return e.color(a.data)
+ }).style("cursor", function (a) {
+ return g.interaction_enabled && g.data_selection_isselectable(a) ? "pointer" : null
+ }).style("opacity", 0).each(function (a) {
+ e.isGaugeType(a.data) && (a.startAngle = a.endAngle = -1 * (Math.PI / 2)), this._current = a
+ }), d.attr("transform", function (a) {
+ return !e.isGaugeType(a.data) && c ? "scale(0)" : ""
+ }).style("opacity", function (a) {
+ return a === this._current ? 0 : 1
+ }).on("mouseover", g.interaction_enabled ? function (a) {
+ var b, c;
+ e.transiting || (b = e.updateAngle(a), c = e.convertToArcData(b), e.expandArc(b.data.id), e.api.focus(b.data.id), e.toggleFocusLegend(b.data.id, !0), e.config.data_onmouseover(c, this))
+ } : null).on("mousemove", g.interaction_enabled ? function (a) {
+ var b = e.updateAngle(a), c = e.convertToArcData(b), d = [c];
+ e.showTooltip(d, f.mouse(this))
+ } : null).on("mouseout", g.interaction_enabled ? function (a) {
+ var b, c;
+ e.transiting || (b = e.updateAngle(a), c = e.convertToArcData(b), e.unexpandArc(b.data.id), e.api.revert(), e.revertLegend(), e.hideTooltip(), e.config.data_onmouseout(c, this))
+ } : null).on("click", g.interaction_enabled ? function (a, b) {
+ var c = e.updateAngle(a), d = e.convertToArcData(c);
+ e.toggleShape && e.toggleShape(this, d, b), e.config.data_onclick.call(e.api, d, this)
+ } : null).each(function () {
+ e.transiting = !0
+ }).transition().duration(a).attrTween("d", function (a) {
+ var b, c = e.updateAngle(a);
+ return c ? (isNaN(this._current.endAngle) && (this._current.endAngle = this._current.startAngle), b = f.interpolate(this._current, c), this._current = b(0), function (c) {
+ var d = b(c);
+ return d.data = a.data, e.getArc(d, !0)
+ }) : function () {
+ return "M 0 0"
+ }
+ }).attr("transform", c ? "scale(1)" : "").style("fill", function (a) {
+ return e.levelColor ? e.levelColor(a.data.values[0].value) : e.color(a.data.id)
+ }).style("opacity", 1).call(e.endall, function () {
+ e.transiting = !1
+ }), d.exit().transition().duration(b).style("opacity", 0).remove(), h.selectAll("." + i.chartArc).select("text").style("opacity", 0).attr("class", function (a) {
+ return e.isGaugeType(a.data) ? i.gaugeValue : ""
+ }).text(e.textForArcLabel.bind(e)).attr("transform", e.transformForArcLabel.bind(e)).style("font-size", function (a) {
+ return e.isGaugeType(a.data) ? Math.round(e.radius / 5) + "px" : ""
+ }).transition().duration(a).style("opacity", function (a) {
+ return e.isTargetToShow(a.data.id) && e.isArcType(a.data) ? 1 : 0
+ }), h.select("." + i.chartArcsTitle).style("opacity", e.hasType("donut") || e.hasType("gauge") ? 1 : 0), e.hasType("gauge") && (e.arcs.select("." + i.chartArcsBackground).attr("d", function () {
+ var a = {data: [{value: g.gauge_max}], startAngle: -1 * (Math.PI / 2), endAngle: Math.PI / 2};
+ return e.getArc(a, !0, !0)
+ }), e.arcs.select("." + i.chartArcsGaugeUnit).attr("dy", ".75em").text(g.gauge_label_show ? g.gauge_units : ""), e.arcs.select("." + i.chartArcsGaugeMin).attr("dx", -1 * (e.innerRadius + (e.radius - e.innerRadius) / 2) + "px").attr("dy", "1.2em").text(g.gauge_label_show ? g.gauge_min : ""), e.arcs.select("." + i.chartArcsGaugeMax).attr("dx", e.innerRadius + (e.radius - e.innerRadius) / 2 + "px").attr("dy", "1.2em").text(g.gauge_label_show ? g.gauge_max : ""))
+ }, f.initGauge = function () {
+ var a = this.arcs;
+ this.hasType("gauge") && (a.append("path").attr("class", i.chartArcsBackground), a.append("text").attr("class", i.chartArcsGaugeUnit).style("text-anchor", "middle").style("pointer-events", "none"), a.append("text").attr("class", i.chartArcsGaugeMin).style("text-anchor", "middle").style("pointer-events", "none"), a.append("text").attr("class", i.chartArcsGaugeMax).style("text-anchor", "middle").style("pointer-events", "none"))
+ }, f.getGaugeLabelHeight = function () {
+ return this.config.gauge_label_show ? 20 : 0
+ }, f.initRegion = function () {
+ var a = this;
+ a.region = a.main.append("g").attr("clip-path", a.clipPath).attr("class", i.regions)
+ }, f.redrawRegion = function (a) {
+ var b = this, c = b.config;
+ b.region.style("visibility", b.hasArcType() ? "hidden" : "visible"), b.mainRegion = b.main.select("." + i.regions).selectAll("." + i.region).data(c.regions), b.mainRegion.enter().append("g").attr("class", b.classRegion.bind(b)).append("rect").style("fill-opacity", 0), b.mainRegion.exit().transition().duration(a).style("opacity", 0).remove()
+ }, f.addTransitionForRegion = function (a) {
+ var b = this, c = b.regionX.bind(b), d = b.regionY.bind(b), e = b.regionWidth.bind(b), f = b.regionHeight.bind(b);
+ a.push(b.mainRegion.selectAll("rect").transition().attr("x", c).attr("y", d).attr("width", e).attr("height", f).style("fill-opacity", function (a) {
+ return j(a.opacity) ? a.opacity : .1
+ }))
+ }, f.regionX = function (a) {
+ var b, c = this, d = c.config, e = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated && "start"in a ? e(a.start) : 0 : d.axis_rotated ? 0 : "start"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.start) : a.start) : 0
+ }, f.regionY = function (a) {
+ var b, c = this, d = c.config, e = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated ? 0 : "end"in a ? e(a.end) : 0 : d.axis_rotated && "start"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.start) : a.start) : 0
+ }, f.regionWidth = function (a) {
+ var b, c = this, d = c.config, e = c.regionX(a), f = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated && "end"in a ? f(a.end) : c.width : d.axis_rotated ? c.width : "end"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.end) : a.end) : c.width, e > b ? 0 : b - e
+ }, f.regionHeight = function (a) {
+ var b, c = this, d = c.config, e = this.regionY(a), f = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated ? c.height : "start"in a ? f(a.start) : c.height : d.axis_rotated && "end"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.end) : a.end) : c.height, e > b ? 0 : b - e
+ }, f.isRegionOnX = function (a) {
+ return !a.axis || "x" === a.axis
+ }, f.drag = function (a) {
+ var b, c, d, e, f, g, h, j, k = this, l = k.config, m = k.main, n = k.d3;
+ k.hasArcType() || l.data_selection_enabled && (!l.zoom_enabled || k.zoom.altDomain) && l.data_selection_multiple && (b = k.dragStart[0], c = k.dragStart[1], d = a[0], e = a[1], f = Math.min(b, d), g = Math.max(b, d), h = l.data_selection_grouped ? k.margin.top : Math.min(c, e), j = l.data_selection_grouped ? k.height : Math.max(c, e), m.select("." + i.dragarea).attr("x", f).attr("y", h).attr("width", g - f).attr("height", j - h), m.selectAll("." + i.shapes).selectAll("." + i.shape).filter(function (a) {
+ return l.data_selection_isselectable(a)
+ }).each(function (a, b) {
+ var c, d, e, l, m, o, p = n.select(this), q = p.classed(i.SELECTED), r = p.classed(i.INCLUDED), s = !1;
+ if (p.classed(i.circle))c = 1 * p.attr("cx"), d = 1 * p.attr("cy"), m = k.togglePoint, s = c > f && g > c && d > h && j > d; else {
+ if (!p.classed(i.bar))return;
+ o = v(this), c = o.x, d = o.y, e = o.width, l = o.height, m = k.togglePath, s = !(c > g || f > c + e || d > j || h > d + l)
+ }
+ s ^ r && (p.classed(i.INCLUDED, !r), p.classed(i.SELECTED, !q), m.call(k, !q, p, a, b))
+ }))
+ }, f.dragstart = function (a) {
+ var b = this, c = b.config;
+ b.hasArcType() || c.data_selection_enabled && (b.dragStart = a, b.main.select("." + i.chart).append("rect").attr("class", i.dragarea).style("opacity", .1), b.dragging = !0, b.config.data_ondragstart.call(b.api))
+ }, f.dragend = function () {
+ var a = this, b = a.config;
+ a.hasArcType() || b.data_selection_enabled && (a.main.select("." + i.dragarea).transition().duration(100).style("opacity", 0).remove(), a.main.selectAll("." + i.shape).classed(i.INCLUDED, !1), a.dragging = !1, a.config.data_ondragend.call(a.api))
+ }, f.selectPoint = function (a, b, c) {
+ var d = this, e = d.config, f = (e.axis_rotated ? d.circleY : d.circleX).bind(d), g = (e.axis_rotated ? d.circleX : d.circleY).bind(d), h = d.pointSelectR.bind(d);
+ e.data_onselected.call(d.api, b, a.node()), d.main.select("." + i.selectedCircles + d.getTargetSelectorSuffix(b.id)).selectAll("." + i.selectedCircle + "-" + c).data([b]).enter().append("circle").attr("class", function () {
+ return d.generateClass(i.selectedCircle, c)
+ }).attr("cx", f).attr("cy", g).attr("stroke", function () {
+ return d.color(b)
+ }).attr("r", function (a) {
+ return 1.4 * d.pointSelectR(a)
+ }).transition().duration(100).attr("r", h)
+ }, f.unselectPoint = function (a, b, c) {
+ var d = this;
+ d.config.data_onunselected(b, a.node()), d.main.select("." + i.selectedCircles + d.getTargetSelectorSuffix(b.id)).selectAll("." + i.selectedCircle + "-" + c).transition().duration(100).attr("r", 0).remove()
+ }, f.togglePoint = function (a, b, c, d) {
+ a ? this.selectPoint(b, c, d) : this.unselectPoint(b, c, d)
+ }, f.selectPath = function (a, b) {
+ var c = this;
+ c.config.data_onselected.call(c, b, a.node()), a.transition().duration(100).style("fill", function () {
+ return c.d3.rgb(c.color(b)).brighter(.75)
+ })
+ }, f.unselectPath = function (a, b) {
+ var c = this;
+ c.config.data_onunselected.call(c, b, a.node()), a.transition().duration(100).style("fill", function () {
+ return c.color(b)
+ })
+ }, f.togglePath = function (a, b, c, d) {
+ a ? this.selectPath(b, c, d) : this.unselectPath(b, c, d)
+ },f.getToggle = function (a, b) {
+ var c, d = this;
+ return "circle" === a.nodeName ? c = d.isStepType(b) ? function () {
+ } : d.togglePoint : "path" === a.nodeName && (c = d.togglePath), c
+ },f.toggleShape = function (a, b, c) {
+ var d = this, e = d.d3, f = d.config, g = e.select(a), h = g.classed(i.SELECTED), j = d.getToggle(a, b).bind(d);
+ f.data_selection_enabled && f.data_selection_isselectable(b) && (f.data_selection_multiple || d.main.selectAll("." + i.shapes + (f.data_selection_grouped ? d.getTargetSelectorSuffix(b.id) : "")).selectAll("." + i.shape).each(function (a, b) {
+ var c = e.select(this);
+ c.classed(i.SELECTED) && j(!1, c.classed(i.SELECTED, !1), a, b)
+ }), g.classed(i.SELECTED, !h), j(!h, g, b, c))
+ },f.initBrush = function () {
+ var a = this, b = a.d3;
+ a.brush = b.svg.brush().on("brush", function () {
+ a.redrawForBrush()
+ }), a.brush.update = function () {
+ return a.context && a.context.select("." + i.brush).call(this), this
+ }, a.brush.scale = function (b) {
+ return a.config.axis_rotated ? this.y(b) : this.x(b)
+ }
+ },f.initSubchart = function () {
+ var a = this, b = a.config, c = a.context = a.svg.append("g").attr("transform", a.getTranslate("context"));
+ b.subchart_show || c.style("visibility", "hidden"), c.append("g").attr("clip-path", a.clipPathForSubchart).attr("class", i.chart), c.select("." + i.chart).append("g").attr("class", i.chartBars), c.select("." + i.chart).append("g").attr("class", i.chartLines), c.append("g").attr("clip-path", a.clipPath).attr("class", i.brush).call(a.brush).selectAll("rect").attr(b.axis_rotated ? "width" : "height", b.axis_rotated ? a.width2 : a.height2), a.axes.subx = c.append("g").attr("class", i.axisX).attr("transform", a.getTranslate("subx")).attr("clip-path", b.axis_rotated ? "" : a.clipPathForXAxis)
+ },f.updateTargetsForSubchart = function (a) {
+ var b, c, d, e, f = this, g = f.context, h = f.config, j = f.classChartBar.bind(f), k = f.classBars.bind(f), l = f.classChartLine.bind(f), m = f.classLines.bind(f), n = f.classAreas.bind(f);
+ h.subchart_show && (e = g.select("." + i.chartBars).selectAll("." + i.chartBar).data(a).attr("class", j), d = e.enter().append("g").style("opacity", 0).attr("class", j), d.append("g").attr("class", k), c = g.select("." + i.chartLines).selectAll("." + i.chartLine).data(a).attr("class", l), b = c.enter().append("g").style("opacity", 0).attr("class", l), b.append("g").attr("class", m), b.append("g").attr("class", n))
+ },f.redrawSubchart = function (a, b, c, d, e, f, g) {
+ var h, j, k, l, m, n, o = this, p = o.d3, q = o.context, r = o.config, s = o.barData.bind(o), t = o.lineData.bind(o), u = o.classBar.bind(o), v = o.classLine.bind(o), w = o.classArea.bind(o), x = o.initialOpacity.bind(o);
+ r.subchart_show && (p.event && "zoom" === p.event.type && o.brush.extent(o.x.orgDomain()).update(), a && (o.brush.empty() || o.brush.extent(o.x.orgDomain()).update(), l = o.generateDrawArea(e, !0), m = o.generateDrawBar(f, !0), n = o.generateDrawLine(g, !0), k = q.selectAll("." + i.bars).selectAll("." + i.bar).data(s), k.enter().append("path").attr("class", u).style("stroke", "none").style("fill", o.color), k.style("opacity", x).transition().duration(c).attr("d", m).style("opacity", 1), k.exit().transition().duration(c).style("opacity", 0).remove(), h = q.selectAll("." + i.lines).selectAll("." + i.line).data(t), h.enter().append("path").attr("class", v).style("stroke", o.color), h.style("opacity", x).transition().duration(c).attr("d", n).style("opacity", 1), h.exit().transition().duration(c).style("opacity", 0).remove(), j = q.selectAll("." + i.areas).selectAll("." + i.area).data(t), j.enter().append("path").attr("class", w).style("fill", o.color).style("opacity", function () {
+ return o.orgAreaOpacity = +p.select(this).style("opacity"), 0
+ }), j.style("opacity", 0).transition().duration(c).attr("d", l).style("fill", o.color).style("opacity", o.orgAreaOpacity), j.exit().transition().duration(d).style("opacity", 0).remove()))
+ },f.redrawForBrush = function () {
+ var a = this, b = a.x;
+ a.redraw({
+ withTransition: !1,
+ withY: a.config.zoom_rescale,
+ withSubchart: !1,
+ withUpdateXDomain: !0,
+ withDimension: !1
+ }), a.config.subchart_onbrush.call(a.api, b.orgDomain())
+ },f.transformContext = function (a, b) {
+ var c, d = this;
+ b && b.axisSubX ? c = b.axisSubX : (c = d.context.select("." + i.axisX), a && (c = c.transition())), d.context.attr("transform", d.getTranslate("context")), c.attr("transform", d.getTranslate("subx"))
+ },f.getDefaultExtent = function () {
+ var a = this, b = a.config, c = k(b.axis_x_extent) ? b.axis_x_extent(a.getXDomain(a.data.targets)) : b.axis_x_extent;
+ return a.isTimeSeries() && (c = [a.parseDate(c[0]), a.parseDate(c[1])]), c
+ },f.initZoom = function () {
+ var a, b = this, c = b.d3, d = b.config;
+ b.zoom = c.behavior.zoom().on("zoomstart", function () {
+ a = c.event.sourceEvent, b.zoom.altDomain = c.event.sourceEvent.altKey ? b.x.orgDomain() : null, d.zoom_onzoomstart.call(b.api, c.event.sourceEvent)
+ }).on("zoom", function () {
+ b.redrawForZoom.call(b)
+ }).on("zoomend", function () {
+ var e = c.event.sourceEvent;
+ e && a.clientX === e.clientX && a.clientY === e.clientY || (b.redrawEventRect(), b.updateZoom(), d.zoom_onzoomend.call(b.api, b.x.orgDomain()))
+ }), b.zoom.scale = function (a) {
+ return d.axis_rotated ? this.y(a) : this.x(a)
+ }, b.zoom.orgScaleExtent = function () {
+ var a = d.zoom_extent ? d.zoom_extent : [1, 10];
+ return [a[0], Math.max(b.getMaxDataCount() / a[1], a[1])]
+ }, b.zoom.updateScaleExtent = function () {
+ var a = q(b.x.orgDomain()) / q(b.orgXDomain), c = this.orgScaleExtent();
+ return this.scaleExtent([c[0] * a, c[1] * a]), this
+ }
+ },f.updateZoom = function () {
+ var a = this, b = a.config.zoom_enabled ? a.zoom : function () {
+ };
+ a.main.select("." + i.zoomRect).call(b).on("dblclick.zoom", null), a.main.selectAll("." + i.eventRect).call(b).on("dblclick.zoom", null)
+ },f.redrawForZoom = function () {
+ var a = this, b = a.d3, c = a.config, d = a.zoom, e = a.x;
+ if (c.zoom_enabled && 0 !== a.filterTargetsToShow(a.data.targets).length) {
+ if ("mousemove" === b.event.sourceEvent.type && d.altDomain)return e.domain(d.altDomain), void d.scale(e).updateScaleExtent();
+ a.isCategorized() && e.orgDomain()[0] === a.orgXDomain[0] && e.domain([a.orgXDomain[0] - 1e-10, e.orgDomain()[1]]), a.redraw({
+ withTransition: !1,
+ withY: c.zoom_rescale,
+ withSubchart: !1,
+ withEventRect: !1,
+ withDimension: !1
+ }), "mousemove" === b.event.sourceEvent.type && (a.cancelClick = !0), c.zoom_onzoom.call(a.api, e.orgDomain())
+ }
+ },f.generateColor = function () {
+ var a = this, b = a.config, c = a.d3, d = b.data_colors, e = s(b.color_pattern) ? b.color_pattern : c.scale.category10().range(), f = b.data_color, g = [];
+ return function (a) {
+ var b, c = a.id || a;
+ return d[c]instanceof Function ? b = d[c](a) : d[c] ? b = d[c] : (g.indexOf(c) < 0 && g.push(c), b = e[g.indexOf(c) % e.length], d[c] = b), f instanceof Function ? f(b, a) : b
+ }
+ },f.generateLevelColor = function () {
+ var a = this, b = a.config, c = b.color_pattern, d = b.color_threshold, e = "value" === d.unit, f = d.values && d.values.length ? d.values : [], g = d.max || 100;
+ return s(b.color_threshold) ? function (a) {
+ var b, d, h = c[c.length - 1];
+ for (b = 0; b < f.length; b++)if (d = e ? a : 100 * a / g, d < f[b]) {
+ h = c[b];
+ break
+ }
+ return h
+ } : null
+ },f.getYFormat = function (a) {
+ var b = this, c = a && !b.hasType("gauge") ? b.defaultArcValueFormat : b.yFormat, d = a && !b.hasType("gauge") ? b.defaultArcValueFormat : b.y2Format;
+ return function (a, e, f) {
+ var g = "y2" === b.getAxisId(f) ? d : c;
+ return g.call(b, a, e)
+ }
+ },f.yFormat = function (a) {
+ var b = this, c = b.config, d = c.axis_y_tick_format ? c.axis_y_tick_format : b.defaultValueFormat;
+ return d(a)
+ },f.y2Format = function (a) {
+ var b = this, c = b.config, d = c.axis_y2_tick_format ? c.axis_y2_tick_format : b.defaultValueFormat;
+ return d(a)
+ },f.defaultValueFormat = function (a) {
+ return j(a) ? +a : ""
+ },f.defaultArcValueFormat = function (a, b) {
+ return (100 * b).toFixed(1) + "%"
+ },f.formatByAxisId = function (a) {
+ var b = this, c = b.config.data_labels, d = function (a) {
+ return j(a) ? +a : ""
+ };
+ return "function" == typeof c.format ? d = c.format : "object" == typeof c.format && c.format[a] && (d = c.format[a]), d
+ },f.hasCaches = function (a) {
+ for (var b = 0; b < a.length; b++)if (!(a[b]in this.cache))return !1;
+ return !0
+ },f.addCache = function (a, b) {
+ this.cache[a] = this.cloneTarget(b)
+ },f.getCaches = function (a) {
+ var b, c = [];
+ for (b = 0; b < a.length; b++)a[b]in this.cache && c.push(this.cloneTarget(this.cache[a[b]]));
+ return c
+ };
+ var i = f.CLASS = {
+ target: "c3-target",
+ chart: "c3-chart",
+ chartLine: "c3-chart-line",
+ chartLines: "c3-chart-lines",
+ chartBar: "c3-chart-bar",
+ chartBars: "c3-chart-bars",
+ chartText: "c3-chart-text",
+ chartTexts: "c3-chart-texts",
+ chartArc: "c3-chart-arc",
+ chartArcs: "c3-chart-arcs",
+ chartArcsTitle: "c3-chart-arcs-title",
+ chartArcsBackground: "c3-chart-arcs-background",
+ chartArcsGaugeUnit: "c3-chart-arcs-gauge-unit",
+ chartArcsGaugeMax: "c3-chart-arcs-gauge-max",
+ chartArcsGaugeMin: "c3-chart-arcs-gauge-min",
+ selectedCircle: "c3-selected-circle",
+ selectedCircles: "c3-selected-circles",
+ eventRect: "c3-event-rect",
+ eventRects: "c3-event-rects",
+ eventRectsSingle: "c3-event-rects-single",
+ eventRectsMultiple: "c3-event-rects-multiple",
+ zoomRect: "c3-zoom-rect",
+ brush: "c3-brush",
+ focused: "c3-focused",
+ defocused: "c3-defocused",
+ region: "c3-region",
+ regions: "c3-regions",
+ tooltipContainer: "c3-tooltip-container",
+ tooltip: "c3-tooltip",
+ tooltipName: "c3-tooltip-name",
+ shape: "c3-shape",
+ shapes: "c3-shapes",
+ line: "c3-line",
+ lines: "c3-lines",
+ bar: "c3-bar",
+ bars: "c3-bars",
+ circle: "c3-circle",
+ circles: "c3-circles",
+ arc: "c3-arc",
+ arcs: "c3-arcs",
+ area: "c3-area",
+ areas: "c3-areas",
+ empty: "c3-empty",
+ text: "c3-text",
+ texts: "c3-texts",
+ gaugeValue: "c3-gauge-value",
+ grid: "c3-grid",
+ gridLines: "c3-grid-lines",
+ xgrid: "c3-xgrid",
+ xgrids: "c3-xgrids",
+ xgridLine: "c3-xgrid-line",
+ xgridLines: "c3-xgrid-lines",
+ xgridFocus: "c3-xgrid-focus",
+ ygrid: "c3-ygrid",
+ ygrids: "c3-ygrids",
+ ygridLine: "c3-ygrid-line",
+ ygridLines: "c3-ygrid-lines",
+ axis: "c3-axis",
+ axisX: "c3-axis-x",
+ axisXLabel: "c3-axis-x-label",
+ axisY: "c3-axis-y",
+ axisYLabel: "c3-axis-y-label",
+ axisY2: "c3-axis-y2",
+ axisY2Label: "c3-axis-y2-label",
+ legendBackground: "c3-legend-background",
+ legendItem: "c3-legend-item",
+ legendItemEvent: "c3-legend-item-event",
+ legendItemTile: "c3-legend-item-tile",
+ legendItemHidden: "c3-legend-item-hidden",
+ legendItemFocused: "c3-legend-item-focused",
+ dragarea: "c3-dragarea",
+ EXPANDED: "_expanded_",
+ SELECTED: "_selected_",
+ INCLUDED: "_included_"
+ };
+ f.generateClass = function (a, b) {
+ return " " + a + " " + a + this.getTargetSelectorSuffix(b)
+ }, f.classText = function (a) {
+ return this.generateClass(i.text, a.index)
+ }, f.classTexts = function (a) {
+ return this.generateClass(i.texts, a.id)
+ }, f.classShape = function (a) {
+ return this.generateClass(i.shape, a.index)
+ }, f.classShapes = function (a) {
+ return this.generateClass(i.shapes, a.id)
+ }, f.classLine = function (a) {
+ return this.classShape(a) + this.generateClass(i.line, a.id)
+ }, f.classLines = function (a) {
+ return this.classShapes(a) + this.generateClass(i.lines, a.id)
+ }, f.classCircle = function (a) {
+ return this.classShape(a) + this.generateClass(i.circle, a.index)
+ }, f.classCircles = function (a) {
+ return this.classShapes(a) + this.generateClass(i.circles, a.id)
+ }, f.classBar = function (a) {
+ return this.classShape(a) + this.generateClass(i.bar, a.index)
+ }, f.classBars = function (a) {
+ return this.classShapes(a) + this.generateClass(i.bars, a.id)
+ }, f.classArc = function (a) {
+ return this.classShape(a.data) + this.generateClass(i.arc, a.data.id)
+ }, f.classArcs = function (a) {
+ return this.classShapes(a.data) + this.generateClass(i.arcs, a.data.id)
+ }, f.classArea = function (a) {
+ return this.classShape(a) + this.generateClass(i.area, a.id)
+ }, f.classAreas = function (a) {
+ return this.classShapes(a) + this.generateClass(i.areas, a.id)
+ }, f.classRegion = function (a, b) {
+ return this.generateClass(i.region, b) + " " + ("class"in a ? a["class"] : "")
+ }, f.classEvent = function (a) {
+ return this.generateClass(i.eventRect, a.index)
+ }, f.classTarget = function (a) {
+ var b = this, c = b.config.data_classes[a], d = "";
+ return c && (d = " " + i.target + "-" + c), b.generateClass(i.target, a) + d
+ }, f.classFocus = function (a) {
+ return this.classFocused(a) + this.classDefocused(a)
+ }, f.classFocused = function (a) {
+ return " " + (this.focusedTargetIds.indexOf(a.id) >= 0 ? i.focused : "")
+ }, f.classDefocused = function (a) {
+ return " " + (this.defocusedTargetIds.indexOf(a.id) >= 0 ? i.defocused : "")
+ }, f.classChartText = function (a) {
+ return i.chartText + this.classTarget(a.id)
+ }, f.classChartLine = function (a) {
+ return i.chartLine + this.classTarget(a.id)
+ }, f.classChartBar = function (a) {
+ return i.chartBar + this.classTarget(a.id)
+ }, f.classChartArc = function (a) {
+ return i.chartArc + this.classTarget(a.data.id)
+ }, f.getTargetSelectorSuffix = function (a) {
+ return a || 0 === a ? ("-" + a).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g, "-") : ""
+ }, f.selectorTarget = function (a, b) {
+ return (b || "") + "." + i.target + this.getTargetSelectorSuffix(a)
+ }, f.selectorTargets = function (a, b) {
+ var c = this;
+ return a = a || [], a.length ? a.map(function (a) {
+ return c.selectorTarget(a, b)
+ }) : null
+ }, f.selectorLegend = function (a) {
+ return "." + i.legendItem + this.getTargetSelectorSuffix(a)
+ }, f.selectorLegends = function (a) {
+ var b = this;
+ return a && a.length ? a.map(function (a) {
+ return b.selectorLegend(a)
+ }) : null
+ };
+ var j = f.isValue = function (a) {
+ return a || 0 === a
+ }, k = f.isFunction = function (a) {
+ return "function" == typeof a
+ }, l = f.isString = function (a) {
+ return "string" == typeof a
+ }, m = f.isUndefined = function (a) {
+ return "undefined" == typeof a
+ }, n = f.isDefined = function (a) {
+ return "undefined" != typeof a
+ }, o = f.ceil10 = function (a) {
+ return 10 * Math.ceil(a / 10)
+ }, p = f.asHalfPixel = function (a) {
+ return Math.ceil(a) + .5
+ }, q = f.diffDomain = function (a) {
+ return a[1] - a[0]
+ }, r = f.isEmpty = function (a) {
+ return !a || l(a) && 0 === a.length || "object" == typeof a && 0 === Object.keys(a).length
+ }, s = f.notEmpty = function (a) {
+ return Object.keys(a).length > 0
+ }, t = f.getOption = function (a, b, c) {
+ return n(a[b]) ? a[b] : c
+ }, u = f.hasValue = function (a, b) {
+ var c = !1;
+ return Object.keys(a).forEach(function (d) {
+ a[d] === b && (c = !0)
+ }), c
+ }, v = f.getPathBox = function (a) {
+ var b = a.getBoundingClientRect(), c = [a.pathSegList.getItem(0), a.pathSegList.getItem(1)], d = c[0].x, e = Math.min(c[0].y, c[1].y);
+ return {x: d, y: e, width: b.width, height: b.height}
+ };
+ e.focus = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow, c))), this.revert(), this.defocus(), b.classed(i.focused, !0).classed(i.defocused, !1), c.hasArcType() && c.expandArc(a), c.toggleFocusLegend(a, !0), c.focusedTargetIds = a, c.defocusedTargetIds = c.defocusedTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, e.defocus = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow, c))), this.revert(), b.classed(i.focused, !1).classed(i.defocused, !0), c.hasArcType() && c.unexpandArc(a), c.toggleFocusLegend(a, !1), c.focusedTargetIds = c.focusedTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ }), c.defocusedTargetIds = a
+ }, e.revert = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a)), b.classed(i.focused, !1).classed(i.defocused, !1), c.hasArcType() && c.unexpandArc(a), c.config.legend_show && c.showLegend(a.filter(c.isLegendToShow.bind(c))), c.focusedTargetIds = [], c.defocusedTargetIds = []
+ }, e.show = function (a, b) {
+ var c, d = this.internal;
+ a = d.mapToTargetIds(a), b = b || {}, d.removeHiddenTargetIds(a), c = d.svg.selectAll(d.selectorTargets(a)), c.transition().style("opacity", 1, "important").call(d.endall, function () {
+ c.style("opacity", null).style("opacity", 1)
+ }), b.withLegend && d.showLegend(a), d.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0})
+ }, e.hide = function (a, b) {
+ var c, d = this.internal;
+ a = d.mapToTargetIds(a), b = b || {}, d.addHiddenTargetIds(a), c = d.svg.selectAll(d.selectorTargets(a)), c.transition().style("opacity", 0, "important").call(d.endall, function () {
+ c.style("opacity", null).style("opacity", 0)
+ }), b.withLegend && d.hideLegend(a), d.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0})
+ }, e.toggle = function (a) {
+ var b = this, c = this.internal;
+ c.mapToTargetIds(a).forEach(function (a) {
+ c.isTargetToShow(a) ? b.hide(a) : b.show(a)
+ })
+ }, e.zoom = function (a) {
+ var b = this.internal;
+ return a && (b.isTimeSeries() && (a = a.map(function (a) {
+ return b.parseDate(a)
+ })), b.brush.extent(a), b.redraw({
+ withUpdateXDomain: !0,
+ withY: b.config.zoom_rescale
+ }), b.config.zoom_onzoom.call(this, b.x.orgDomain())), b.brush.extent()
+ }, e.zoom.enable = function (a) {
+ var b = this.internal;
+ b.config.zoom_enabled = a, b.updateAndRedraw()
+ }, e.unzoom = function () {
+ var a = this.internal;
+ a.brush.clear().update(), a.redraw({withUpdateXDomain: !0})
+ }, e.load = function (a) {
+ var b = this.internal, c = b.config;
+ return a.xs && b.addXs(a.xs), "classes"in a && Object.keys(a.classes).forEach(function (b) {
+ c.data_classes[b] = a.classes[b]
+ }), "categories"in a && b.isCategorized() && (c.axis_x_categories = a.categories), "axes"in a && Object.keys(a.axes).forEach(function (b) {
+ c.data_axes[b] = a.axes[b]
+ }), "cacheIds"in a && b.hasCaches(a.cacheIds) ? void b.load(b.getCaches(a.cacheIds), a.done) : void("unload"in a ? b.unload(b.mapToTargetIds("boolean" == typeof a.unload && a.unload ? null : a.unload), function () {
+ b.loadFromArgs(a)
+ }) : b.loadFromArgs(a))
+ }, e.unload = function (a) {
+ var b = this.internal;
+ a = a || {}, a instanceof Array ? a = {ids: a} : "string" == typeof a && (a = {ids: [a]}), b.unload(b.mapToTargetIds(a.ids), function () {
+ b.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0}), a.done && a.done()
+ })
+ }, e.flow = function (a) {
+ var b, c, d, e, f, g, h, i, k = this.internal, l = [], m = k.getMaxDataCount(), o = 0, p = 0;
+ if (a.json)c = k.convertJsonToData(a.json, a.keys); else if (a.rows)c = k.convertRowsToData(a.rows); else {
+ if (!a.columns)return;
+ c = k.convertColumnsToData(a.columns)
+ }
+ b = k.convertDataToTargets(c, !0), k.data.targets.forEach(function (a) {
+ var c, d, e = !1;
+ for (c = 0; c < b.length; c++)if (a.id === b[c].id) {
+ for (e = !0, a.values[a.values.length - 1] && (p = a.values[a.values.length - 1].index + 1), o = b[c].values.length, d = 0; o > d; d++)b[c].values[d].index = p + d, k.isTimeSeries() || (b[c].values[d].x = p + d);
+ a.values = a.values.concat(b[c].values), b.splice(c, 1);
+ break
+ }
+ e || l.push(a.id)
+ }), k.data.targets.forEach(function (a) {
+ var b, c;
+ for (b = 0; b < l.length; b++)if (a.id === l[b])for (p = a.values[a.values.length - 1].index + 1, c = 0; o > c; c++)a.values.push({
+ id: a.id,
+ index: p + c,
+ x: k.isTimeSeries() ? k.getOtherTargetX(p + c) : p + c,
+ value: null
+ })
+ }), k.data.targets.length && b.forEach(function (a) {
+ var b, c = [];
+ for (b = k.data.targets[0].values[0].index; p > b; b++)c.push({
+ id: a.id,
+ index: b,
+ x: k.isTimeSeries() ? k.getOtherTargetX(b) : b,
+ value: null
+ });
+ a.values.forEach(function (a) {
+ a.index += p, k.isTimeSeries() || (a.x += p)
+ }), a.values = c.concat(a.values)
+ }), k.data.targets = k.data.targets.concat(b), d = k.getMaxDataCount(), f = k.data.targets[0], g = f.values[0], n(a.to) ? (o = 0, i = k.isTimeSeries() ? k.parseDate(a.to) : a.to, f.values.forEach(function (a) {
+ a.x < i && o++
+ })) : n(a.length) && (o = a.length), m ? 1 === m && k.isTimeSeries() && (h = (f.values[f.values.length - 1].x - g.x) / 2, e = [new Date(+g.x - h), new Date(+g.x + h)], k.updateXDomain(null, !0, !0, !1, e)) : (h = k.isTimeSeries() ? f.values.length > 1 ? f.values[f.values.length - 1].x - g.x : g.x - k.getXDomain(k.data.targets)[0] : 1, e = [g.x - h, g.x], k.updateXDomain(null, !0, !0, !1, e)), k.updateTargets(k.data.targets), k.redraw({
+ flow: {
+ index: g.index,
+ length: o,
+ duration: j(a.duration) ? a.duration : k.config.transition_duration,
+ done: a.done,
+ orgDataCount: m
+ }, withLegend: !0, withTransition: m > 1, withTrimXDomain: !1, withUpdateXAxis: !0
+ })
+ }, f.generateFlow = function (a) {
+ var b = this, c = b.config, d = b.d3;
+ return function () {
+ var e, f, g, h = a.targets, j = a.flow, k = a.drawBar, l = a.drawLine, m = a.drawArea, n = a.cx, o = a.cy, p = a.xv, r = a.xForText, s = a.yForText, t = a.duration, u = 1, v = j.index, w = j.length, x = b.getValueOnIndex(b.data.targets[0].values, v), y = b.getValueOnIndex(b.data.targets[0].values, v + w), z = b.x.domain(), A = j.duration || t, B = j.done || function () {
+ }, C = b.generateWait(), D = b.xgrid || d.selectAll([]), E = b.xgridLines || d.selectAll([]), F = b.mainRegion || d.selectAll([]), G = b.mainText || d.selectAll([]), H = b.mainBar || d.selectAll([]), I = b.mainLine || d.selectAll([]), J = b.mainArea || d.selectAll([]), K = b.mainCircle || d.selectAll([]);
+ b.flowing = !0, b.data.targets.forEach(function (a) {
+ a.values.splice(0, w)
+ }), g = b.updateXDomain(h, !0, !0), b.updateXGrid && b.updateXGrid(!0), j.orgDataCount ? e = 1 === j.orgDataCount || x.x === y.x ? b.x(z[0]) - b.x(g[0]) : b.isTimeSeries() ? b.x(z[0]) - b.x(g[0]) : b.x(x.x) - b.x(y.x) : 1 !== b.data.targets[0].values.length ? e = b.x(z[0]) - b.x(g[0]) : b.isTimeSeries() ? (x = b.getValueOnIndex(b.data.targets[0].values, 0), y = b.getValueOnIndex(b.data.targets[0].values, b.data.targets[0].values.length - 1), e = b.x(x.x) - b.x(y.x)) : e = q(g) / 2, u = q(z) / q(g), f = "translate(" + e + ",0) scale(" + u + ",1)", b.hideXGridFocus(), b.hideTooltip(), d.transition().ease("linear").duration(A).each(function () {
+ C.add(b.axes.x.transition().call(b.xAxis)), C.add(H.transition().attr("transform", f)), C.add(I.transition().attr("transform", f)), C.add(J.transition().attr("transform", f)), C.add(K.transition().attr("transform", f)), C.add(G.transition().attr("transform", f)), C.add(F.filter(b.isRegionOnX).transition().attr("transform", f)), C.add(D.transition().attr("transform", f)), C.add(E.transition().attr("transform", f))
+ }).call(C, function () {
+ var a, d = [], e = [], f = [];
+ if (w) {
+ for (a = 0; w > a; a++)d.push("." + i.shape + "-" + (v + a)), e.push("." + i.text + "-" + (v + a)), f.push("." + i.eventRect + "-" + (v + a));
+ b.svg.selectAll("." + i.shapes).selectAll(d).remove(), b.svg.selectAll("." + i.texts).selectAll(e).remove(), b.svg.selectAll("." + i.eventRects).selectAll(f).remove(), b.svg.select("." + i.xgrid).remove()
+ }
+ D.attr("transform", null).attr(b.xgridAttr), E.attr("transform", null), E.select("line").attr("x1", c.axis_rotated ? 0 : p).attr("x2", c.axis_rotated ? b.width : p), E.select("text").attr("x", c.axis_rotated ? b.width : 0).attr("y", p), H.attr("transform", null).attr("d", k), I.attr("transform", null).attr("d", l), J.attr("transform", null).attr("d", m), K.attr("transform", null).attr("cx", n).attr("cy", o), G.attr("transform", null).attr("x", r).attr("y", s).style("fill-opacity", b.opacityForText.bind(b)), F.attr("transform", null), F.select("rect").filter(b.isRegionOnX).attr("x", b.regionX.bind(b)).attr("width", b.regionWidth.bind(b)), c.interaction_enabled && b.redrawEventRect(), B(), b.flowing = !1
+ })
+ }
+ }, e.selected = function (a) {
+ var b = this.internal, c = b.d3;
+ return c.merge(b.main.selectAll("." + i.shapes + b.getTargetSelectorSuffix(a)).selectAll("." + i.shape).filter(function () {
+ return c.select(this).classed(i.SELECTED)
+ }).map(function (a) {
+ return a.map(function (a) {
+ var b = a.__data__;
+ return b.data ? b.data : b
+ })
+ }))
+ }, e.select = function (a, b, c) {
+ var d = this.internal, e = d.d3, f = d.config;
+ f.data_selection_enabled && d.main.selectAll("." + i.shapes).selectAll("." + i.shape).each(function (g, h) {
+ var j = e.select(this), k = g.data ? g.data.id : g.id, l = d.getToggle(this, g).bind(d), m = f.data_selection_grouped || !a || a.indexOf(k) >= 0, o = !b || b.indexOf(h) >= 0, p = j.classed(i.SELECTED);
+ j.classed(i.line) || j.classed(i.area) || (m && o ? f.data_selection_isselectable(g) && !p && l(!0, j.classed(i.SELECTED, !0), g, h) : n(c) && c && p && l(!1, j.classed(i.SELECTED, !1), g, h))
+ })
+ }, e.unselect = function (a, b) {
+ var c = this.internal, d = c.d3, e = c.config;
+ e.data_selection_enabled && c.main.selectAll("." + i.shapes).selectAll("." + i.shape).each(function (f, g) {
+ var h = d.select(this), j = f.data ? f.data.id : f.id, k = c.getToggle(this, f).bind(c), l = e.data_selection_grouped || !a || a.indexOf(j) >= 0, m = !b || b.indexOf(g) >= 0, n = h.classed(i.SELECTED);
+ h.classed(i.line) || h.classed(i.area) || l && m && e.data_selection_isselectable(f) && n && k(!1, h.classed(i.SELECTED, !1), f, g)
+ })
+ }, e.transform = function (a, b) {
+ var c = this.internal, d = ["pie", "donut"].indexOf(a) >= 0 ? {withTransform: !0} : null;
+ c.transformTo(b, a, d)
+ }, f.transformTo = function (a, b, c) {
+ var d = this, e = !d.hasArcType(), f = c || {withTransitionForAxis: e};
+ f.withTransitionForTransform = !1, d.transiting = !1, d.setTargetType(a, b), d.updateAndRedraw(f)
+ }, e.groups = function (a) {
+ var b = this.internal, c = b.config;
+ return m(a) ? c.data_groups : (c.data_groups = a, b.redraw(), c.data_groups)
+ }, e.xgrids = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.grid_x_lines = a, b.redrawWithoutRescale(), c.grid_x_lines) : c.grid_x_lines
+ }, e.xgrids.add = function (a) {
+ var b = this.internal;
+ return this.xgrids(b.config.grid_x_lines.concat(a ? a : []))
+ }, e.xgrids.remove = function (a) {
+ var b = this.internal;
+ b.removeGridLines(a, !0)
+ }, e.ygrids = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.grid_y_lines = a, b.redrawWithoutRescale(), c.grid_y_lines) : c.grid_y_lines
+ }, e.ygrids.add = function (a) {
+ var b = this.internal;
+ return this.ygrids(b.config.grid_y_lines.concat(a ? a : []))
+ }, e.ygrids.remove = function (a) {
+ var b = this.internal;
+ b.removeGridLines(a, !1)
+ }, e.regions = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.regions = a, b.redrawWithoutRescale(), c.regions) : c.regions
+ }, e.regions.add = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.regions = c.regions.concat(a), b.redrawWithoutRescale(), c.regions) : c.regions
+ }, e.regions.remove = function (a) {
+ var b, c, d, e = this.internal, f = e.config;
+ return a = a || {}, b = e.getOption(a, "duration", f.transition_duration), c = e.getOption(a, "classes", [i.region]), d = e.main.select("." + i.regions).selectAll(c.map(function (a) {
+ return "." + a
+ })), (b ? d.transition().duration(b) : d).style("opacity", 0).remove(), f.regions = f.regions.filter(function (a) {
+ var b = !1;
+ return a["class"] ? (a["class"].split(" ").forEach(function (a) {
+ c.indexOf(a) >= 0 && (b = !0)
+ }), !b) : !0
+ }), f.regions
+ }, e.data = function (a) {
+ var b = this.internal.data.targets;
+ return "undefined" == typeof a ? b : b.filter(function (b) {
+ return [].concat(a).indexOf(b.id) >= 0
+ })
+ }, e.data.shown = function (a) {
+ return this.internal.filterTargetsToShow(this.data(a))
+ }, e.data.values = function (a) {
+ var b, c = null;
+ return a && (b = this.data(a), c = b[0] ? b[0].values.map(function (a) {
+ return a.value
+ }) : null), c
+ }, e.data.names = function (a) {
+ return this.internal.clearLegendItemTextBoxCache(), this.internal.updateDataAttributes("names", a)
+ }, e.data.colors = function (a) {
+ return this.internal.updateDataAttributes("colors", a)
+ }, e.data.axes = function (a) {
+ return this.internal.updateDataAttributes("axes", a)
+ }, e.category = function (a, b) {
+ var c = this.internal, d = c.config;
+ return arguments.length > 1 && (d.axis_x_categories[a] = b, c.redraw()), d.axis_x_categories[a]
+ }, e.categories = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? (c.axis_x_categories = a, b.redraw(), c.axis_x_categories) : c.axis_x_categories
+ }, e.color = function (a) {
+ var b = this.internal;
+ return b.color(a)
+ }, e.x = function (a) {
+ var b = this.internal;
+ return arguments.length && (b.updateTargetX(b.data.targets, a), b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })), b.data.xs
+ }, e.xs = function (a) {
+ var b = this.internal;
+ return arguments.length && (b.updateTargetXs(b.data.targets, a), b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })), b.data.xs
+ }, e.axis = function () {
+ }, e.axis.labels = function (a) {
+ var b = this.internal;
+ arguments.length && (Object.keys(a).forEach(function (c) {
+ b.setAxisLabelText(c, a[c])
+ }), b.updateAxisLabels())
+ }, e.axis.max = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? ("object" == typeof a ? (j(a.x) && (c.axis_x_max = a.x), j(a.y) && (c.axis_y_max = a.y), j(a.y2) && (c.axis_y2_max = a.y2)) : c.axis_y_max = c.axis_y2_max = a, void b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })) : {x: c.axis_x_max, y: c.axis_y_max, y2: c.axis_y2_max}
+ }, e.axis.min = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? ("object" == typeof a ? (j(a.x) && (c.axis_x_min = a.x), j(a.y) && (c.axis_y_min = a.y), j(a.y2) && (c.axis_y2_min = a.y2)) : c.axis_y_min = c.axis_y2_min = a, void b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })) : {x: c.axis_x_min, y: c.axis_y_min, y2: c.axis_y2_min}
+ }, e.axis.range = function (a) {
+ return arguments.length ? (n(a.max) && this.axis.max(a.max), void(n(a.min) && this.axis.min(a.min))) : {
+ max: this.axis.max(),
+ min: this.axis.min()
+ }
+ }, e.legend = function () {
+ }, e.legend.show = function (a) {
+ var b = this.internal;
+ b.showLegend(b.mapToTargetIds(a)), b.updateAndRedraw({withLegend: !0})
+ }, e.legend.hide = function (a) {
+ var b = this.internal;
+ b.hideLegend(b.mapToTargetIds(a)), b.updateAndRedraw({withLegend: !0})
+ }, e.resize = function (a) {
+ var b = this.internal, c = b.config;
+ c.size_width = a ? a.width : null, c.size_height = a ? a.height : null, this.flush()
+ }, e.flush = function () {
+ var a = this.internal;
+ a.updateAndRedraw({withLegend: !0, withTransition: !1, withTransitionForTransform: !1})
+ }, e.destroy = function () {
+ var b = this.internal;
+ b.data.targets = void 0, b.data.xs = {}, b.selectChart.classed("c3", !1).html(""), a.clearInterval(b.intervalForObserveInserted), a.onresize = null
+ }, e.tooltip = function () {
+ }, e.tooltip.show = function (a) {
+ var b, c, d = this.internal;
+ a.mouse && (c = a.mouse), a.data ? d.isMultipleX() ? (c = [d.x(a.data.x), d.getYScale(a.data.id)(a.data.value)], b = null) : b = j(a.data.index) ? a.data.index : d.getIndexByX(a.data.x) : "undefined" != typeof a.x ? b = d.getIndexByX(a.x) : "undefined" != typeof a.index && (b = a.index), d.dispatchEvent("mouseover", b, c), d.dispatchEvent("mousemove", b, c)
+ }, e.tooltip.hide = function () {
+ this.internal.dispatchEvent("mouseout", 0)
+ };
+ var w;
+ "function" == typeof define && define.amd ? define("c3", ["d3"], g) : "undefined" != typeof exports && "undefined" != typeof module ? module.exports = g : a.c3 = g
+}(window); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/d3.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/d3.min.js
new file mode 100644
index 00000000..3ff71133
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/d3.min.js
@@ -0,0 +1,6152 @@
+!function () {
+ function n(n, t) {
+ return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0
+ }
+
+ function t(n) {
+ return null === n ? 0 / 0 : +n
+ }
+
+ function e(n) {
+ return !isNaN(n)
+ }
+
+ function r(n) {
+ return {
+ left: function (t, e, r, u) {
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) < 0 ? r = i + 1 : u = i
+ }
+ return r
+ }, right: function (t, e, r, u) {
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) > 0 ? u = i : r = i + 1
+ }
+ return r
+ }
+ }
+ }
+
+ function u(n) {
+ return n.length
+ }
+
+ function i(n) {
+ for (var t = 1; n * t % 1;)t *= 10;
+ return t
+ }
+
+ function o(n, t) {
+ for (var e in t)Object.defineProperty(n.prototype, e, {value: t[e], enumerable: !1})
+ }
+
+ function a() {
+ this._ = Object.create(null)
+ }
+
+ function c(n) {
+ return (n += "") === la || n[0] === sa ? sa + n : n
+ }
+
+ function l(n) {
+ return (n += "")[0] === sa ? n.slice(1) : n
+ }
+
+ function s(n) {
+ return c(n)in this._
+ }
+
+ function f(n) {
+ return (n = c(n))in this._ && delete this._[n]
+ }
+
+ function h() {
+ var n = [];
+ for (var t in this._)n.push(l(t));
+ return n
+ }
+
+ function g() {
+ var n = 0;
+ for (var t in this._)++n;
+ return n
+ }
+
+ function p() {
+ for (var n in this._)return !1;
+ return !0
+ }
+
+ function v() {
+ this._ = Object.create(null)
+ }
+
+ function d(n, t, e) {
+ return function () {
+ var r = e.apply(t, arguments);
+ return r === t ? n : r
+ }
+ }
+
+ function m(n, t) {
+ if (t in n)return t;
+ t = t.charAt(0).toUpperCase() + t.slice(1);
+ for (var e = 0, r = fa.length; r > e; ++e) {
+ var u = fa[e] + t;
+ if (u in n)return u
+ }
+ }
+
+ function y() {
+ }
+
+ function x() {
+ }
+
+ function M(n) {
+ function t() {
+ for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);
+ return n
+ }
+
+ var e = [], r = new a;
+ return t.on = function (t, u) {
+ var i, o = r.get(t);
+ return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {on: u})), n)
+ }, t
+ }
+
+ function _() {
+ Bo.event.preventDefault()
+ }
+
+ function b() {
+ for (var n, t = Bo.event; n = t.sourceEvent;)t = n;
+ return t
+ }
+
+ function w(n) {
+ for (var t = new x, e = 0, r = arguments.length; ++e < r;)t[arguments[e]] = M(t);
+ return t.of = function (e, r) {
+ return function (u) {
+ try {
+ var i = u.sourceEvent = Bo.event;
+ u.target = n, Bo.event = u, t[u.type].apply(e, r)
+ } finally {
+ Bo.event = i
+ }
+ }
+ }, t
+ }
+
+ function S(n) {
+ return ga(n, ya), n
+ }
+
+ function k(n) {
+ return "function" == typeof n ? n : function () {
+ return pa(n, this)
+ }
+ }
+
+ function E(n) {
+ return "function" == typeof n ? n : function () {
+ return va(n, this)
+ }
+ }
+
+ function A(n, t) {
+ function e() {
+ this.removeAttribute(n)
+ }
+
+ function r() {
+ this.removeAttributeNS(n.space, n.local)
+ }
+
+ function u() {
+ this.setAttribute(n, t)
+ }
+
+ function i() {
+ this.setAttributeNS(n.space, n.local, t)
+ }
+
+ function o() {
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttribute(n) : this.setAttribute(n, e)
+ }
+
+ function a() {
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)
+ }
+
+ return n = Bo.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? i : u
+ }
+
+ function C(n) {
+ return n.trim().replace(/\s+/g, " ")
+ }
+
+ function N(n) {
+ return new RegExp("(?:^|\\s+)" + Bo.requote(n) + "(?:\\s+|$)", "g")
+ }
+
+ function z(n) {
+ return (n + "").trim().split(/^|\s+/)
+ }
+
+ function L(n, t) {
+ function e() {
+ for (var e = -1; ++e < u;)n[e](this, t)
+ }
+
+ function r() {
+ for (var e = -1, r = t.apply(this, arguments); ++e < u;)n[e](this, r)
+ }
+
+ n = z(n).map(T);
+ var u = n.length;
+ return "function" == typeof t ? r : e
+ }
+
+ function T(n) {
+ var t = N(n);
+ return function (e, r) {
+ if (u = e.classList)return r ? u.add(n) : u.remove(n);
+ var u = e.getAttribute("class") || "";
+ r ? (t.lastIndex = 0, t.test(u) || e.setAttribute("class", C(u + " " + n))) : e.setAttribute("class", C(u.replace(t, " ")))
+ }
+ }
+
+ function q(n, t, e) {
+ function r() {
+ this.style.removeProperty(n)
+ }
+
+ function u() {
+ this.style.setProperty(n, t, e)
+ }
+
+ function i() {
+ var r = t.apply(this, arguments);
+ null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)
+ }
+
+ return null == t ? r : "function" == typeof t ? i : u
+ }
+
+ function R(n, t) {
+ function e() {
+ delete this[n]
+ }
+
+ function r() {
+ this[n] = t
+ }
+
+ function u() {
+ var e = t.apply(this, arguments);
+ null == e ? delete this[n] : this[n] = e
+ }
+
+ return null == t ? e : "function" == typeof t ? u : r
+ }
+
+ function D(n) {
+ return "function" == typeof n ? n : (n = Bo.ns.qualify(n)).local ? function () {
+ return this.ownerDocument.createElementNS(n.space, n.local)
+ } : function () {
+ return this.ownerDocument.createElementNS(this.namespaceURI, n)
+ }
+ }
+
+ function P(n) {
+ return {__data__: n}
+ }
+
+ function U(n) {
+ return function () {
+ return ma(this, n)
+ }
+ }
+
+ function j(t) {
+ return arguments.length || (t = n), function (n, e) {
+ return n && e ? t(n.__data__, e.__data__) : !n - !e
+ }
+ }
+
+ function F(n, t) {
+ for (var e = 0, r = n.length; r > e; e++)for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);
+ return n
+ }
+
+ function H(n) {
+ return ga(n, Ma), n
+ }
+
+ function O(n) {
+ var t, e;
+ return function (r, u, i) {
+ var o, a = n[i].update, c = a.length;
+ for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);
+ return o
+ }
+ }
+
+ function Y() {
+ var n = this.__transition__;
+ n && ++n.active
+ }
+
+ function I(n, t, e) {
+ function r() {
+ var t = this[o];
+ t && (this.removeEventListener(n, t, t.$), delete this[o])
+ }
+
+ function u() {
+ var u = c(t, Jo(arguments));
+ r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t
+ }
+
+ function i() {
+ var t, e = new RegExp("^__on([^.]+)" + Bo.requote(n) + "$");
+ for (var r in this)if (t = r.match(e)) {
+ var u = this[r];
+ this.removeEventListener(t[1], u, u.$), delete this[r]
+ }
+ }
+
+ var o = "__on" + n, a = n.indexOf("."), c = Z;
+ a > 0 && (n = n.slice(0, a));
+ var l = ba.get(n);
+ return l && (n = l, c = V), a ? t ? u : r : t ? y : i
+ }
+
+ function Z(n, t) {
+ return function (e) {
+ var r = Bo.event;
+ Bo.event = e, t[0] = this.__data__;
+ try {
+ n.apply(this, t)
+ } finally {
+ Bo.event = r
+ }
+ }
+ }
+
+ function V(n, t) {
+ var e = Z(n, t);
+ return function (n) {
+ var t = this, r = n.relatedTarget;
+ r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)
+ }
+ }
+
+ function X() {
+ var n = ".dragsuppress-" + ++Sa, t = "click" + n, e = Bo.select(Qo).on("touchmove" + n, _).on("dragstart" + n, _).on("selectstart" + n, _);
+ if (wa) {
+ var r = Ko.style, u = r[wa];
+ r[wa] = "none"
+ }
+ return function (i) {
+ function o() {
+ e.on(t, null)
+ }
+
+ e.on(n, null), wa && (r[wa] = u), i && (e.on(t, function () {
+ _(), o()
+ }, !0), setTimeout(o, 0))
+ }
+ }
+
+ function $(n, t) {
+ t.changedTouches && (t = t.changedTouches[0]);
+ var e = n.ownerSVGElement || n;
+ if (e.createSVGPoint) {
+ var r = e.createSVGPoint();
+ if (0 > ka && (Qo.scrollX || Qo.scrollY)) {
+ e = Bo.select("body").append("svg").style({
+ position: "absolute",
+ top: 0,
+ left: 0,
+ margin: 0,
+ padding: 0,
+ border: "none"
+ }, "important");
+ var u = e[0][0].getScreenCTM();
+ ka = !(u.f || u.e), e.remove()
+ }
+ return ka ? (r.x = t.pageX, r.y = t.pageY) : (r.x = t.clientX, r.y = t.clientY), r = r.matrixTransform(n.getScreenCTM().inverse()), [r.x, r.y]
+ }
+ var i = n.getBoundingClientRect();
+ return [t.clientX - i.left - n.clientLeft, t.clientY - i.top - n.clientTop]
+ }
+
+ function B() {
+ return Bo.event.changedTouches[0].identifier
+ }
+
+ function W() {
+ return Bo.event.target
+ }
+
+ function J() {
+ return Qo
+ }
+
+ function G(n) {
+ return n > 0 ? 1 : 0 > n ? -1 : 0
+ }
+
+ function K(n, t, e) {
+ return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])
+ }
+
+ function Q(n) {
+ return n > 1 ? 0 : -1 > n ? Ea : Math.acos(n)
+ }
+
+ function nt(n) {
+ return n > 1 ? Ca : -1 > n ? -Ca : Math.asin(n)
+ }
+
+ function tt(n) {
+ return ((n = Math.exp(n)) - 1 / n) / 2
+ }
+
+ function et(n) {
+ return ((n = Math.exp(n)) + 1 / n) / 2
+ }
+
+ function rt(n) {
+ return ((n = Math.exp(2 * n)) - 1) / (n + 1)
+ }
+
+ function ut(n) {
+ return (n = Math.sin(n / 2)) * n
+ }
+
+ function it() {
+ }
+
+ function ot(n, t, e) {
+ return this instanceof ot ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ot ? new ot(n.h, n.s, n.l) : Mt("" + n, _t, ot) : new ot(n, t, e)
+ }
+
+ function at(n, t, e) {
+ function r(n) {
+ return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i
+ }
+
+ function u(n) {
+ return Math.round(255 * r(n))
+ }
+
+ var i, o;
+ return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new dt(u(n + 120), u(n), u(n - 120))
+ }
+
+ function ct(n, t, e) {
+ return this instanceof ct ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ct ? new ct(n.h, n.c, n.l) : n instanceof st ? ht(n.l, n.a, n.b) : ht((n = bt((n = Bo.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new ct(n, t, e)
+ }
+
+ function lt(n, t, e) {
+ return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new st(e, Math.cos(n *= La) * t, Math.sin(n) * t)
+ }
+
+ function st(n, t, e) {
+ return this instanceof st ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof st ? new st(n.l, n.a, n.b) : n instanceof ct ? lt(n.h, n.c, n.l) : bt((n = dt(n)).r, n.g, n.b) : new st(n, t, e)
+ }
+
+ function ft(n, t, e) {
+ var r = (n + 16) / 116, u = r + t / 500, i = r - e / 200;
+ return u = gt(u) * Ya, r = gt(r) * Ia, i = gt(i) * Za, new dt(vt(3.2404542 * u - 1.5371385 * r - .4985314 * i), vt(-.969266 * u + 1.8760108 * r + .041556 * i), vt(.0556434 * u - .2040259 * r + 1.0572252 * i))
+ }
+
+ function ht(n, t, e) {
+ return n > 0 ? new ct(Math.atan2(e, t) * Ta, Math.sqrt(t * t + e * e), n) : new ct(0 / 0, 0 / 0, n)
+ }
+
+ function gt(n) {
+ return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037
+ }
+
+ function pt(n) {
+ return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29
+ }
+
+ function vt(n) {
+ return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))
+ }
+
+ function dt(n, t, e) {
+ return this instanceof dt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof dt ? new dt(n.r, n.g, n.b) : Mt("" + n, dt, at) : new dt(n, t, e)
+ }
+
+ function mt(n) {
+ return new dt(n >> 16, 255 & n >> 8, 255 & n)
+ }
+
+ function yt(n) {
+ return mt(n) + ""
+ }
+
+ function xt(n) {
+ return 16 > n ? "0" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)
+ }
+
+ function Mt(n, t, e) {
+ var r, u, i, o = 0, a = 0, c = 0;
+ if (r = /([a-z]+)\((.*)\)/i.exec(n))switch (u = r[2].split(","), r[1]) {
+ case"hsl":
+ return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);
+ case"rgb":
+ return t(St(u[0]), St(u[1]), St(u[2]))
+ }
+ return (i = $a.get(n)) ? t(i.r, i.g, i.b) : (null == n || "#" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))
+ }
+
+ function _t(n, t, e) {
+ var r, u, i = Math.min(n /= 255, t /= 255, e /= 255), o = Math.max(n, t, e), a = o - i, c = (o + i) / 2;
+ return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new ot(r, u, c)
+ }
+
+ function bt(n, t, e) {
+ n = wt(n), t = wt(t), e = wt(e);
+ var r = pt((.4124564 * n + .3575761 * t + .1804375 * e) / Ya), u = pt((.2126729 * n + .7151522 * t + .072175 * e) / Ia), i = pt((.0193339 * n + .119192 * t + .9503041 * e) / Za);
+ return st(116 * u - 16, 500 * (r - u), 200 * (u - i))
+ }
+
+ function wt(n) {
+ return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)
+ }
+
+ function St(n) {
+ var t = parseFloat(n);
+ return "%" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t
+ }
+
+ function kt(n) {
+ return "function" == typeof n ? n : function () {
+ return n
+ }
+ }
+
+ function Et(n) {
+ return n
+ }
+
+ function At(n) {
+ return function (t, e, r) {
+ return 2 === arguments.length && "function" == typeof e && (r = e, e = null), Ct(t, e, n, r)
+ }
+ }
+
+ function Ct(n, t, e, r) {
+ function u() {
+ var n, t = c.status;
+ if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {
+ try {
+ n = e.call(i, c)
+ } catch (r) {
+ return o.error.call(i, r), void 0
+ }
+ o.load.call(i, n)
+ } else o.error.call(i, c)
+ }
+
+ var i = {}, o = Bo.dispatch("beforesend", "progress", "load", "error"), a = {}, c = new XMLHttpRequest, l = null;
+ return !Qo.XDomainRequest || "withCredentials"in c || !/^(http(s)?:)?\/\//.test(n) || (c = new XDomainRequest), "onload"in c ? c.onload = c.onerror = u : c.onreadystatechange = function () {
+ c.readyState > 3 && u()
+ }, c.onprogress = function (n) {
+ var t = Bo.event;
+ Bo.event = n;
+ try {
+ o.progress.call(i, c)
+ } finally {
+ Bo.event = t
+ }
+ }, i.header = function (n, t) {
+ return n = (n + "").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", i)
+ }, i.mimeType = function (n) {
+ return arguments.length ? (t = null == n ? null : n + "", i) : t
+ }, i.responseType = function (n) {
+ return arguments.length ? (l = n, i) : l
+ }, i.response = function (n) {
+ return e = n, i
+ }, ["get", "post"].forEach(function (n) {
+ i[n] = function () {
+ return i.send.apply(i, [n].concat(Jo(arguments)))
+ }
+ }), i.send = function (e, r, u) {
+ if (2 === arguments.length && "function" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), c.setRequestHeader)for (var s in a)c.setRequestHeader(s, a[s]);
+ return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on("error", u).on("load", function (n) {
+ u(null, n)
+ }), o.beforesend.call(i, c), c.send(null == r ? null : r), i
+ }, i.abort = function () {
+ return c.abort(), i
+ }, Bo.rebind(i, o, "on"), null == r ? i : i.get(Nt(r))
+ }
+
+ function Nt(n) {
+ return 1 === n.length ? function (t, e) {
+ n(null == t ? e : null)
+ } : n
+ }
+
+ function zt(n) {
+ var t = n.responseType;
+ return t && "text" !== t ? n.response : n.responseText
+ }
+
+ function Lt() {
+ var n = Tt(), t = qt() - n;
+ t > 24 ? (isFinite(t) && (clearTimeout(Ga), Ga = setTimeout(Lt, t)), Ja = 0) : (Ja = 1, Qa(Lt))
+ }
+
+ function Tt() {
+ var n = Date.now();
+ for (Ka = Ba; Ka;)n >= Ka.t && (Ka.f = Ka.c(n - Ka.t)), Ka = Ka.n;
+ return n
+ }
+
+ function qt() {
+ for (var n, t = Ba, e = 1 / 0; t;)t.f ? t = n ? n.n = t.n : Ba = t.n : (t.t < e && (e = t.t), t = (n = t).n);
+ return Wa = n, e
+ }
+
+ function Rt(n, t) {
+ return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)
+ }
+
+ function Dt(n, t) {
+ var e = Math.pow(10, 3 * ca(8 - t));
+ return {
+ scale: t > 8 ? function (n) {
+ return n / e
+ } : function (n) {
+ return n * e
+ }, symbol: n
+ }
+ }
+
+ function Pt(n) {
+ var t = n.decimal, e = n.thousands, r = n.grouping, u = n.currency, i = r && e ? function (n, t) {
+ for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));)a = r[o = (o + 1) % r.length];
+ return i.reverse().join(e)
+ } : Et;
+ return function (n) {
+ var e = tc.exec(n), r = e[1] || " ", o = e[2] || ">", a = e[3] || "-", c = e[4] || "", l = e[5], s = +e[6], f = e[7], h = e[8], g = e[9], p = 1, v = "", d = "", m = !1, y = !0;
+ switch (h && (h = +h.substring(1)), (l || "0" === r && "=" === o) && (l = r = "0", o = "="), g) {
+ case"n":
+ f = !0, g = "g";
+ break;
+ case"%":
+ p = 100, d = "%", g = "f";
+ break;
+ case"p":
+ p = 100, d = "%", g = "r";
+ break;
+ case"b":
+ case"o":
+ case"x":
+ case"X":
+ "#" === c && (v = "0" + g.toLowerCase());
+ case"c":
+ y = !1;
+ case"d":
+ m = !0, h = 0;
+ break;
+ case"s":
+ p = -1, g = "r"
+ }
+ "$" === c && (v = u[0], d = u[1]), "r" != g || h || (g = "g"), null != h && ("g" == g ? h = Math.max(1, Math.min(21, h)) : ("e" == g || "f" == g) && (h = Math.max(0, Math.min(20, h)))), g = ec.get(g) || Ut;
+ var x = l && f;
+ return function (n) {
+ var e = d;
+ if (m && n % 1)return "";
+ var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, "-") : "-" === a ? "" : a;
+ if (0 > p) {
+ var c = Bo.formatPrefix(n, h);
+ n = c.scale(n), e = c.symbol + d
+ } else n *= p;
+ n = g(n, h);
+ var M, _, b = n.lastIndexOf(".");
+ if (0 > b) {
+ var w = y ? n.lastIndexOf("e") : -1;
+ 0 > w ? (M = n, _ = "") : (M = n.substring(0, w), _ = n.substring(w))
+ } else M = n.substring(0, b), _ = t + n.substring(b + 1);
+ !l && f && (M = i(M, 1 / 0));
+ var S = v.length + M.length + _.length + (x ? 0 : u.length), k = s > S ? new Array(S = s - S + 1).join(r) : "";
+ return x && (M = i(k + M, k.length ? s - _.length : 1 / 0)), u += v, n = M + _, ("<" === o ? u + n + k : ">" === o ? k + u + n : "^" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (x ? n : k + n)) + e
+ }
+ }
+ }
+
+ function Ut(n) {
+ return n + ""
+ }
+
+ function jt() {
+ this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])
+ }
+
+ function Ft(n, t, e) {
+ function r(t) {
+ var e = n(t), r = i(e, 1);
+ return r - t > t - e ? e : r
+ }
+
+ function u(e) {
+ return t(e = n(new uc(e - 1)), 1), e
+ }
+
+ function i(n, e) {
+ return t(n = new uc(+n), e), n
+ }
+
+ function o(n, r, i) {
+ var o = u(n), a = [];
+ if (i > 1)for (; r > o;)e(o) % i || a.push(new Date(+o)), t(o, 1); else for (; r > o;)a.push(new Date(+o)), t(o, 1);
+ return a
+ }
+
+ function a(n, t, e) {
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = n, o(r, t, e)
+ } finally {
+ uc = Date
+ }
+ }
+
+ n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;
+ var c = n.utc = Ht(n);
+ return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n
+ }
+
+ function Ht(n) {
+ return function (t, e) {
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = t, n(r, e)._
+ } finally {
+ uc = Date
+ }
+ }
+ }
+
+ function Ot(n) {
+ function t(n) {
+ function t(t) {
+ for (var e, u, i, o = [], a = -1, c = 0; ++a < r;)37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = oc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = C[e]) && (e = i(t, null == u ? "e" === e ? " " : "0" : u)), o.push(e), c = a + 1);
+ return o.push(n.slice(c, a)), o.join("")
+ }
+
+ var r = n.length;
+ return t.parse = function (t) {
+ var r = {y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0, Z: null}, u = e(r, n, t, 0);
+ if (u != t.length)return null;
+ "p"in r && (r.H = r.H % 12 + 12 * r.p);
+ var i = null != r.Z && uc !== jt, o = new (i ? jt : uc);
+ return "j"in r ? o.setFullYear(r.y, 0, r.j) : "w"in r && ("W"in r || "U"in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, "W"in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (0 | r.Z / 100), r.M + r.Z % 100, r.S, r.L), i ? o._ : o
+ }, t.toString = function () {
+ return n
+ }, t
+ }
+
+ function e(n, t, e, r) {
+ for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {
+ if (r >= l)return -1;
+ if (u = t.charCodeAt(a++), 37 === u) {
+ if (o = t.charAt(a++), i = N[o in oc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0)return -1
+ } else if (u != e.charCodeAt(r++))return -1
+ }
+ return r
+ }
+
+ function r(n, t, e) {
+ b.lastIndex = 0;
+ var r = b.exec(t.slice(e));
+ return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function u(n, t, e) {
+ M.lastIndex = 0;
+ var r = M.exec(t.slice(e));
+ return r ? (n.w = _.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function i(n, t, e) {
+ E.lastIndex = 0;
+ var r = E.exec(t.slice(e));
+ return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function o(n, t, e) {
+ S.lastIndex = 0;
+ var r = S.exec(t.slice(e));
+ return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function a(n, t, r) {
+ return e(n, C.c.toString(), t, r)
+ }
+
+ function c(n, t, r) {
+ return e(n, C.x.toString(), t, r)
+ }
+
+ function l(n, t, r) {
+ return e(n, C.X.toString(), t, r)
+ }
+
+ function s(n, t, e) {
+ var r = x.get(t.slice(e, e += 2).toLowerCase());
+ return null == r ? -1 : (n.p = r, e)
+ }
+
+ var f = n.dateTime, h = n.date, g = n.time, p = n.periods, v = n.days, d = n.shortDays, m = n.months, y = n.shortMonths;
+ t.utc = function (n) {
+ function e(n) {
+ try {
+ uc = jt;
+ var t = new uc;
+ return t._ = n, r(t)
+ } finally {
+ uc = Date
+ }
+ }
+
+ var r = t(n);
+ return e.parse = function (n) {
+ try {
+ uc = jt;
+ var t = r.parse(n);
+ return t && t._
+ } finally {
+ uc = Date
+ }
+ }, e.toString = r.toString, e
+ }, t.multi = t.utc.multi = ae;
+ var x = Bo.map(), M = It(v), _ = Zt(v), b = It(d), w = Zt(d), S = It(m), k = Zt(m), E = It(y), A = Zt(y);
+ p.forEach(function (n, t) {
+ x.set(n.toLowerCase(), t)
+ });
+ var C = {
+ a: function (n) {
+ return d[n.getDay()]
+ }, A: function (n) {
+ return v[n.getDay()]
+ }, b: function (n) {
+ return y[n.getMonth()]
+ }, B: function (n) {
+ return m[n.getMonth()]
+ }, c: t(f), d: function (n, t) {
+ return Yt(n.getDate(), t, 2)
+ }, e: function (n, t) {
+ return Yt(n.getDate(), t, 2)
+ }, H: function (n, t) {
+ return Yt(n.getHours(), t, 2)
+ }, I: function (n, t) {
+ return Yt(n.getHours() % 12 || 12, t, 2)
+ }, j: function (n, t) {
+ return Yt(1 + rc.dayOfYear(n), t, 3)
+ }, L: function (n, t) {
+ return Yt(n.getMilliseconds(), t, 3)
+ }, m: function (n, t) {
+ return Yt(n.getMonth() + 1, t, 2)
+ }, M: function (n, t) {
+ return Yt(n.getMinutes(), t, 2)
+ }, p: function (n) {
+ return p[+(n.getHours() >= 12)]
+ }, S: function (n, t) {
+ return Yt(n.getSeconds(), t, 2)
+ }, U: function (n, t) {
+ return Yt(rc.sundayOfYear(n), t, 2)
+ }, w: function (n) {
+ return n.getDay()
+ }, W: function (n, t) {
+ return Yt(rc.mondayOfYear(n), t, 2)
+ }, x: t(h), X: t(g), y: function (n, t) {
+ return Yt(n.getFullYear() % 100, t, 2)
+ }, Y: function (n, t) {
+ return Yt(n.getFullYear() % 1e4, t, 4)
+ }, Z: ie, "%": function () {
+ return "%"
+ }
+ }, N = {
+ a: r,
+ A: u,
+ b: i,
+ B: o,
+ c: a,
+ d: Qt,
+ e: Qt,
+ H: te,
+ I: te,
+ j: ne,
+ L: ue,
+ m: Kt,
+ M: ee,
+ p: s,
+ S: re,
+ U: Xt,
+ w: Vt,
+ W: $t,
+ x: c,
+ X: l,
+ y: Wt,
+ Y: Bt,
+ Z: Jt,
+ "%": oe
+ };
+ return t
+ }
+
+ function Yt(n, t, e) {
+ var r = 0 > n ? "-" : "", u = (r ? -n : n) + "", i = u.length;
+ return r + (e > i ? new Array(e - i + 1).join(t) + u : u)
+ }
+
+ function It(n) {
+ return new RegExp("^(?:" + n.map(Bo.requote).join("|") + ")", "i")
+ }
+
+ function Zt(n) {
+ for (var t = new a, e = -1, r = n.length; ++e < r;)t.set(n[e].toLowerCase(), e);
+ return t
+ }
+
+ function Vt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 1));
+ return r ? (n.w = +r[0], e + r[0].length) : -1
+ }
+
+ function Xt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.U = +r[0], e + r[0].length) : -1
+ }
+
+ function $t(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.W = +r[0], e + r[0].length) : -1
+ }
+
+ function Bt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 4));
+ return r ? (n.y = +r[0], e + r[0].length) : -1
+ }
+
+ function Wt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1
+ }
+
+ function Jt(n, t, e) {
+ return /^[+-]\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1
+ }
+
+ function Gt(n) {
+ return n + (n > 68 ? 1900 : 2e3)
+ }
+
+ function Kt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.m = r[0] - 1, e + r[0].length) : -1
+ }
+
+ function Qt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.d = +r[0], e + r[0].length) : -1
+ }
+
+ function ne(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.j = +r[0], e + r[0].length) : -1
+ }
+
+ function te(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.H = +r[0], e + r[0].length) : -1
+ }
+
+ function ee(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.M = +r[0], e + r[0].length) : -1
+ }
+
+ function re(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.S = +r[0], e + r[0].length) : -1
+ }
+
+ function ue(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.L = +r[0], e + r[0].length) : -1
+ }
+
+ function ie(n) {
+ var t = n.getTimezoneOffset(), e = t > 0 ? "-" : "+", r = 0 | ca(t) / 60, u = ca(t) % 60;
+ return e + Yt(r, "0", 2) + Yt(u, "0", 2)
+ }
+
+ function oe(n, t, e) {
+ cc.lastIndex = 0;
+ var r = cc.exec(t.slice(e, e + 1));
+ return r ? e + r[0].length : -1
+ }
+
+ function ae(n) {
+ for (var t = n.length, e = -1; ++e < t;)n[e][0] = this(n[e][0]);
+ return function (t) {
+ for (var e = 0, r = n[e]; !r[1](t);)r = n[++e];
+ return r[0](t)
+ }
+ }
+
+ function ce() {
+ }
+
+ function le(n, t, e) {
+ var r = e.s = n + t, u = r - n, i = r - u;
+ e.t = n - i + (t - u)
+ }
+
+ function se(n, t) {
+ n && hc.hasOwnProperty(n.type) && hc[n.type](n, t)
+ }
+
+ function fe(n, t, e) {
+ var r, u = -1, i = n.length - e;
+ for (t.lineStart(); ++u < i;)r = n[u], t.point(r[0], r[1], r[2]);
+ t.lineEnd()
+ }
+
+ function he(n, t) {
+ var e = -1, r = n.length;
+ for (t.polygonStart(); ++e < r;)fe(n[e], t, 1);
+ t.polygonEnd()
+ }
+
+ function ge() {
+ function n(n, t) {
+ n *= La, t = t * La / 2 + Ea / 4;
+ var e = n - r, o = e >= 0 ? 1 : -1, a = o * e, c = Math.cos(t), l = Math.sin(t), s = i * l, f = u * c + s * Math.cos(a), h = s * o * Math.sin(a);
+ pc.add(Math.atan2(h, f)), r = n, u = c, i = l
+ }
+
+ var t, e, r, u, i;
+ vc.point = function (o, a) {
+ vc.point = n, r = (t = o) * La, u = Math.cos(a = (e = a) * La / 2 + Ea / 4), i = Math.sin(a)
+ }, vc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function pe(n) {
+ var t = n[0], e = n[1], r = Math.cos(e);
+ return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]
+ }
+
+ function ve(n, t) {
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]
+ }
+
+ function de(n, t) {
+ return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]
+ }
+
+ function me(n, t) {
+ n[0] += t[0], n[1] += t[1], n[2] += t[2]
+ }
+
+ function ye(n, t) {
+ return [n[0] * t, n[1] * t, n[2] * t]
+ }
+
+ function xe(n) {
+ var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
+ n[0] /= t, n[1] /= t, n[2] /= t
+ }
+
+ function Me(n) {
+ return [Math.atan2(n[1], n[0]), nt(n[2])]
+ }
+
+ function _e(n, t) {
+ return ca(n[0] - t[0]) < Na && ca(n[1] - t[1]) < Na
+ }
+
+ function be(n, t) {
+ n *= La;
+ var e = Math.cos(t *= La);
+ we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))
+ }
+
+ function we(n, t, e) {
+ ++dc, yc += (n - yc) / dc, xc += (t - xc) / dc, Mc += (e - Mc) / dc
+ }
+
+ function Se() {
+ function n(n, u) {
+ n *= La;
+ var i = Math.cos(u *= La), o = i * Math.cos(n), a = i * Math.sin(n), c = Math.sin(u), l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);
+ mc += l, _c += l * (t + (t = o)), bc += l * (e + (e = a)), wc += l * (r + (r = c)), we(t, e, r)
+ }
+
+ var t, e, r;
+ Ac.point = function (u, i) {
+ u *= La;
+ var o = Math.cos(i *= La);
+ t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), Ac.point = n, we(t, e, r)
+ }
+ }
+
+ function ke() {
+ Ac.point = be
+ }
+
+ function Ee() {
+ function n(n, t) {
+ n *= La;
+ var e = Math.cos(t *= La), o = e * Math.cos(n), a = e * Math.sin(n), c = Math.sin(t), l = u * c - i * a, s = i * o - r * c, f = r * a - u * o, h = Math.sqrt(l * l + s * s + f * f), g = r * o + u * a + i * c, p = h && -Q(g) / h, v = Math.atan2(h, g);
+ Sc += p * l, kc += p * s, Ec += p * f, mc += v, _c += v * (r + (r = o)), bc += v * (u + (u = a)), wc += v * (i + (i = c)), we(r, u, i)
+ }
+
+ var t, e, r, u, i;
+ Ac.point = function (o, a) {
+ t = o, e = a, Ac.point = n, o *= La;
+ var c = Math.cos(a *= La);
+ r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)
+ }, Ac.lineEnd = function () {
+ n(t, e), Ac.lineEnd = ke, Ac.point = be
+ }
+ }
+
+ function Ae() {
+ return !0
+ }
+
+ function Ce(n, t, e, r, u) {
+ var i = [], o = [];
+ if (n.forEach(function (n) {
+ if (!((t = n.length - 1) <= 0)) {
+ var t, e = n[0], r = n[t];
+ if (_e(e, r)) {
+ u.lineStart();
+ for (var a = 0; t > a; ++a)u.point((e = n[a])[0], e[1]);
+ return u.lineEnd(), void 0
+ }
+ var c = new ze(e, n, null, !0), l = new ze(e, null, c, !1);
+ c.o = l, i.push(c), o.push(l), c = new ze(r, n, null, !1), l = new ze(r, null, c, !0), c.o = l, i.push(c), o.push(l)
+ }
+ }), o.sort(t), Ne(i), Ne(o), i.length) {
+ for (var a = 0, c = e, l = o.length; l > a; ++a)o[a].e = c = !c;
+ for (var s, f, h = i[0]; ;) {
+ for (var g = h, p = !0; g.v;)if ((g = g.n) === h)return;
+ s = g.z, u.lineStart();
+ do {
+ if (g.v = g.o.v = !0, g.e) {
+ if (p)for (var a = 0, l = s.length; l > a; ++a)u.point((f = s[a])[0], f[1]); else r(g.x, g.n.x, 1, u);
+ g = g.n
+ } else {
+ if (p) {
+ s = g.p.z;
+ for (var a = s.length - 1; a >= 0; --a)u.point((f = s[a])[0], f[1])
+ } else r(g.x, g.p.x, -1, u);
+ g = g.p
+ }
+ g = g.o, s = g.z, p = !p
+ } while (!g.v);
+ u.lineEnd()
+ }
+ }
+ }
+
+ function Ne(n) {
+ if (t = n.length) {
+ for (var t, e, r = 0, u = n[0]; ++r < t;)u.n = e = n[r], e.p = u, u = e;
+ u.n = e = n[0], e.p = u
+ }
+ }
+
+ function ze(n, t, e, r) {
+ this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null
+ }
+
+ function Le(n, t, e, r) {
+ return function (u, i) {
+ function o(t, e) {
+ var r = u(t, e);
+ n(t = r[0], e = r[1]) && i.point(t, e)
+ }
+
+ function a(n, t) {
+ var e = u(n, t);
+ d.point(e[0], e[1])
+ }
+
+ function c() {
+ y.point = a, d.lineStart()
+ }
+
+ function l() {
+ y.point = o, d.lineEnd()
+ }
+
+ function s(n, t) {
+ v.push([n, t]);
+ var e = u(n, t);
+ M.point(e[0], e[1])
+ }
+
+ function f() {
+ M.lineStart(), v = []
+ }
+
+ function h() {
+ s(v[0][0], v[0][1]), M.lineEnd();
+ var n, t = M.clean(), e = x.buffer(), r = e.length;
+ if (v.pop(), p.push(v), v = null, r)if (1 & t) {
+ n = e[0];
+ var u, r = n.length - 1, o = -1;
+ if (r > 0) {
+ for (_ || (i.polygonStart(), _ = !0), i.lineStart(); ++o < r;)i.point((u = n[o])[0], u[1]);
+ i.lineEnd()
+ }
+ } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))
+ }
+
+ var g, p, v, d = t(i), m = u.invert(r[0], r[1]), y = {
+ point: o,
+ lineStart: c,
+ lineEnd: l,
+ polygonStart: function () {
+ y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []
+ },
+ polygonEnd: function () {
+ y.point = o, y.lineStart = c, y.lineEnd = l, g = Bo.merge(g);
+ var n = je(m, p);
+ g.length ? (_ || (i.polygonStart(), _ = !0), Ce(g, Re, n, e, i)) : n && (_ || (i.polygonStart(), _ = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), _ && (i.polygonEnd(), _ = !1), g = p = null
+ },
+ sphere: function () {
+ i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()
+ }
+ }, x = qe(), M = t(x), _ = !1;
+ return y
+ }
+ }
+
+ function Te(n) {
+ return n.length > 1
+ }
+
+ function qe() {
+ var n, t = [];
+ return {
+ lineStart: function () {
+ t.push(n = [])
+ }, point: function (t, e) {
+ n.push([t, e])
+ }, lineEnd: y, buffer: function () {
+ var e = t;
+ return t = [], n = null, e
+ }, rejoin: function () {
+ t.length > 1 && t.push(t.pop().concat(t.shift()))
+ }
+ }
+ }
+
+ function Re(n, t) {
+ return ((n = n.x)[0] < 0 ? n[1] - Ca - Na : Ca - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ca - Na : Ca - t[1])
+ }
+
+ function De(n) {
+ var t, e = 0 / 0, r = 0 / 0, u = 0 / 0;
+ return {
+ lineStart: function () {
+ n.lineStart(), t = 1
+ }, point: function (i, o) {
+ var a = i > 0 ? Ea : -Ea, c = ca(i - e);
+ ca(c - Ea) < Na ? (n.point(e, r = (r + o) / 2 > 0 ? Ca : -Ca), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= Ea && (ca(e - u) < Na && (e -= u * Na), ca(i - a) < Na && (i -= a * Na), r = Pe(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a
+ }, lineEnd: function () {
+ n.lineEnd(), e = r = 0 / 0
+ }, clean: function () {
+ return 2 - t
+ }
+ }
+ }
+
+ function Pe(n, t, e, r) {
+ var u, i, o = Math.sin(n - e);
+ return ca(o) > Na ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2
+ }
+
+ function Ue(n, t, e, r) {
+ var u;
+ if (null == n)u = e * Ca, r.point(-Ea, u), r.point(0, u), r.point(Ea, u), r.point(Ea, 0), r.point(Ea, -u), r.point(0, -u), r.point(-Ea, -u), r.point(-Ea, 0), r.point(-Ea, u); else if (ca(n[0] - t[0]) > Na) {
+ var i = n[0] < t[0] ? Ea : -Ea;
+ u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)
+ } else r.point(t[0], t[1])
+ }
+
+ function je(n, t) {
+ var e = n[0], r = n[1], u = [Math.sin(e), -Math.cos(e), 0], i = 0, o = 0;
+ pc.reset();
+ for (var a = 0, c = t.length; c > a; ++a) {
+ var l = t[a], s = l.length;
+ if (s)for (var f = l[0], h = f[0], g = f[1] / 2 + Ea / 4, p = Math.sin(g), v = Math.cos(g), d = 1; ;) {
+ d === s && (d = 0), n = l[d];
+ var m = n[0], y = n[1] / 2 + Ea / 4, x = Math.sin(y), M = Math.cos(y), _ = m - h, b = _ >= 0 ? 1 : -1, w = b * _, S = w > Ea, k = p * x;
+ if (pc.add(Math.atan2(k * b * Math.sin(w), v * M + k * Math.cos(w))), i += S ? _ + b * Aa : _, S ^ h >= e ^ m >= e) {
+ var E = de(pe(f), pe(n));
+ xe(E);
+ var A = de(u, E);
+ xe(A);
+ var C = (S ^ _ >= 0 ? -1 : 1) * nt(A[2]);
+ (r > C || r === C && (E[0] || E[1])) && (o += S ^ _ >= 0 ? 1 : -1)
+ }
+ if (!d++)break;
+ h = m, p = x, v = M, f = n
+ }
+ }
+ return (-Na > i || Na > i && 0 > pc) ^ 1 & o
+ }
+
+ function Fe(n) {
+ function t(n, t) {
+ return Math.cos(n) * Math.cos(t) > i
+ }
+
+ function e(n) {
+ var e, i, c, l, s;
+ return {
+ lineStart: function () {
+ l = c = !1, s = 1
+ }, point: function (f, h) {
+ var g, p = [f, h], v = t(f, h), d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? Ea : -Ea), h) : 0;
+ if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (_e(e, g) || _e(p, g)) && (p[0] += Na, p[1] += Na, v = t(p[0], p[1]))), v !== c)s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g; else if (a && e && o ^ v) {
+ var m;
+ d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))
+ }
+ !v || e && _e(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d
+ }, lineEnd: function () {
+ c && n.lineEnd(), e = null
+ }, clean: function () {
+ return s | (l && c) << 1
+ }
+ }
+ }
+
+ function r(n, t, e) {
+ var r = pe(n), u = pe(t), o = [1, 0, 0], a = de(r, u), c = ve(a, a), l = a[0], s = c - l * l;
+ if (!s)return !e && n;
+ var f = i * c / s, h = -i * l / s, g = de(o, a), p = ye(o, f), v = ye(a, h);
+ me(p, v);
+ var d = g, m = ve(p, d), y = ve(d, d), x = m * m - y * (ve(p, p) - 1);
+ if (!(0 > x)) {
+ var M = Math.sqrt(x), _ = ye(d, (-m - M) / y);
+ if (me(_, p), _ = Me(_), !e)return _;
+ var b, w = n[0], S = t[0], k = n[1], E = t[1];
+ w > S && (b = w, w = S, S = b);
+ var A = S - w, C = ca(A - Ea) < Na, N = C || Na > A;
+ if (!C && k > E && (b = k, k = E, E = b), N ? C ? k + E > 0 ^ _[1] < (ca(_[0] - w) < Na ? k : E) : k <= _[1] && _[1] <= E : A > Ea ^ (w <= _[0] && _[0] <= S)) {
+ var z = ye(d, (-m + M) / y);
+ return me(z, p), [_, Me(z)]
+ }
+ }
+ }
+
+ function u(t, e) {
+ var r = o ? n : Ea - n, u = 0;
+ return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u
+ }
+
+ var i = Math.cos(n), o = i > 0, a = ca(i) > Na, c = gr(n, 6 * La);
+ return Le(t, e, c, o ? [0, -n] : [-Ea, n - Ea])
+ }
+
+ function He(n, t, e, r) {
+ return function (u) {
+ var i, o = u.a, a = u.b, c = o.x, l = o.y, s = a.x, f = a.y, h = 0, g = 1, p = s - c, v = f - l;
+ if (i = n - c, p || !(i > 0)) {
+ if (i /= p, 0 > p) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (p > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = e - c, p || !(0 > i)) {
+ if (i /= p, 0 > p) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (p > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ if (i = t - l, v || !(i > 0)) {
+ if (i /= v, 0 > v) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (v > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = r - l, v || !(0 > i)) {
+ if (i /= v, 0 > v) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (v > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ return h > 0 && (u.a = {x: c + h * p, y: l + h * v}), 1 > g && (u.b = {
+ x: c + g * p,
+ y: l + g * v
+ }), u
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function Oe(n, t, e, r) {
+ function u(r, u) {
+ return ca(r[0] - n) < Na ? u > 0 ? 0 : 3 : ca(r[0] - e) < Na ? u > 0 ? 2 : 1 : ca(r[1] - t) < Na ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2
+ }
+
+ function i(n, t) {
+ return o(n.x, t.x)
+ }
+
+ function o(n, t) {
+ var e = u(n, 1), r = u(t, 1);
+ return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]
+ }
+
+ return function (a) {
+ function c(n) {
+ for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o)i = a[o], l[1] <= r ? i[1] > r && K(l, i, n) > 0 && ++t : i[1] <= r && K(l, i, n) < 0 && --t, l = i;
+ return 0 !== t
+ }
+
+ function l(i, a, c, l) {
+ var s = 0, f = 0;
+ if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {
+ do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)
+ } else l.point(a[0], a[1])
+ }
+
+ function s(u, i) {
+ return u >= n && e >= u && i >= t && r >= i
+ }
+
+ function f(n, t) {
+ s(n, t) && a.point(n, t)
+ }
+
+ function h() {
+ N.point = p, d && d.push(m = []), S = !0, w = !1, _ = b = 0 / 0
+ }
+
+ function g() {
+ v && (p(y, x), M && w && A.rejoin(), v.push(A.buffer())), N.point = f, w && a.lineEnd()
+ }
+
+ function p(n, t) {
+ n = Math.max(-Nc, Math.min(Nc, n)), t = Math.max(-Nc, Math.min(Nc, t));
+ var e = s(n, t);
+ if (d && m.push([n, t]), S)y = n, x = t, M = e, S = !1, e && (a.lineStart(), a.point(n, t)); else if (e && w)a.point(n, t); else {
+ var r = {a: {x: _, y: b}, b: {x: n, y: t}};
+ C(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)
+ }
+ _ = n, b = t, w = e
+ }
+
+ var v, d, m, y, x, M, _, b, w, S, k, E = a, A = qe(), C = He(n, t, e, r), N = {
+ point: f,
+ lineStart: h,
+ lineEnd: g,
+ polygonStart: function () {
+ a = A, v = [], d = [], k = !0
+ },
+ polygonEnd: function () {
+ a = E, v = Bo.merge(v);
+ var t = c([n, r]), e = k && t, u = v.length;
+ (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null
+ }
+ };
+ return N
+ }
+ }
+
+ function Ye(n, t) {
+ function e(e, r) {
+ return e = n(e, r), t(e[0], e[1])
+ }
+
+ return n.invert && t.invert && (e.invert = function (e, r) {
+ return e = t.invert(e, r), e && n.invert(e[0], e[1])
+ }), e
+ }
+
+ function Ie(n) {
+ var t = 0, e = Ea / 3, r = ir(n), u = r(t, e);
+ return u.parallels = function (n) {
+ return arguments.length ? r(t = n[0] * Ea / 180, e = n[1] * Ea / 180) : [180 * (t / Ea), 180 * (e / Ea)]
+ }, u
+ }
+
+ function Ze(n, t) {
+ function e(n, t) {
+ var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;
+ return [e * Math.sin(n *= u), o - e * Math.cos(n)]
+ }
+
+ var r = Math.sin(n), u = (r + Math.sin(t)) / 2, i = 1 + r * (2 * u - r), o = Math.sqrt(i) / u;
+ return e.invert = function (n, t) {
+ var e = o - t;
+ return [Math.atan2(n, e) / u, nt((i - (n * n + e * e) * u * u) / (2 * u))]
+ }, e
+ }
+
+ function Ve() {
+ function n(n, t) {
+ Lc += u * n - r * t, r = n, u = t
+ }
+
+ var t, e, r, u;
+ Pc.point = function (i, o) {
+ Pc.point = n, t = r = i, e = u = o
+ }, Pc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function Xe(n, t) {
+ Tc > n && (Tc = n), n > Rc && (Rc = n), qc > t && (qc = t), t > Dc && (Dc = t)
+ }
+
+ function $e() {
+ function n(n, t) {
+ o.push("M", n, ",", t, i)
+ }
+
+ function t(n, t) {
+ o.push("M", n, ",", t), a.point = e
+ }
+
+ function e(n, t) {
+ o.push("L", n, ",", t)
+ }
+
+ function r() {
+ a.point = n
+ }
+
+ function u() {
+ o.push("Z")
+ }
+
+ var i = Be(4.5), o = [], a = {
+ point: n, lineStart: function () {
+ a.point = t
+ }, lineEnd: r, polygonStart: function () {
+ a.lineEnd = u
+ }, polygonEnd: function () {
+ a.lineEnd = r, a.point = n
+ }, pointRadius: function (n) {
+ return i = Be(n), a
+ }, result: function () {
+ if (o.length) {
+ var n = o.join("");
+ return o = [], n
+ }
+ }
+ };
+ return a
+ }
+
+ function Be(n) {
+ return "m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z"
+ }
+
+ function We(n, t) {
+ yc += n, xc += t, ++Mc
+ }
+
+ function Je() {
+ function n(n, r) {
+ var u = n - t, i = r - e, o = Math.sqrt(u * u + i * i);
+ _c += o * (t + n) / 2, bc += o * (e + r) / 2, wc += o, We(t = n, e = r)
+ }
+
+ var t, e;
+ jc.point = function (r, u) {
+ jc.point = n, We(t = r, e = u)
+ }
+ }
+
+ function Ge() {
+ jc.point = We
+ }
+
+ function Ke() {
+ function n(n, t) {
+ var e = n - r, i = t - u, o = Math.sqrt(e * e + i * i);
+ _c += o * (r + n) / 2, bc += o * (u + t) / 2, wc += o, o = u * n - r * t, Sc += o * (r + n), kc += o * (u + t), Ec += 3 * o, We(r = n, u = t)
+ }
+
+ var t, e, r, u;
+ jc.point = function (i, o) {
+ jc.point = n, We(t = r = i, e = u = o)
+ }, jc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function Qe(n) {
+ function t(t, e) {
+ n.moveTo(t, e), n.arc(t, e, o, 0, Aa)
+ }
+
+ function e(t, e) {
+ n.moveTo(t, e), a.point = r
+ }
+
+ function r(t, e) {
+ n.lineTo(t, e)
+ }
+
+ function u() {
+ a.point = t
+ }
+
+ function i() {
+ n.closePath()
+ }
+
+ var o = 4.5, a = {
+ point: t, lineStart: function () {
+ a.point = e
+ }, lineEnd: u, polygonStart: function () {
+ a.lineEnd = i
+ }, polygonEnd: function () {
+ a.lineEnd = u, a.point = t
+ }, pointRadius: function (n) {
+ return o = n, a
+ }, result: y
+ };
+ return a
+ }
+
+ function nr(n) {
+ function t(n) {
+ return (a ? r : e)(n)
+ }
+
+ function e(t) {
+ return rr(t, function (e, r) {
+ e = n(e, r), t.point(e[0], e[1])
+ })
+ }
+
+ function r(t) {
+ function e(e, r) {
+ e = n(e, r), t.point(e[0], e[1])
+ }
+
+ function r() {
+ x = 0 / 0, S.point = i, t.lineStart()
+ }
+
+ function i(e, r) {
+ var i = pe([e, r]), o = n(e, r);
+ u(x, M, y, _, b, w, x = o[0], M = o[1], y = e, _ = i[0], b = i[1], w = i[2], a, t), t.point(x, M)
+ }
+
+ function o() {
+ S.point = e, t.lineEnd()
+ }
+
+ function c() {
+ r(), S.point = l, S.lineEnd = s
+ }
+
+ function l(n, t) {
+ i(f = n, h = t), g = x, p = M, v = _, d = b, m = w, S.point = i
+ }
+
+ function s() {
+ u(x, M, y, _, b, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()
+ }
+
+ var f, h, g, p, v, d, m, y, x, M, _, b, w, S = {
+ point: e,
+ lineStart: r,
+ lineEnd: o,
+ polygonStart: function () {
+ t.polygonStart(), S.lineStart = c
+ },
+ polygonEnd: function () {
+ t.polygonEnd(), S.lineStart = r
+ }
+ };
+ return S
+ }
+
+ function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {
+ var y = s - t, x = f - e, M = y * y + x * x;
+ if (M > 4 * i && d--) {
+ var _ = a + g, b = c + p, w = l + v, S = Math.sqrt(_ * _ + b * b + w * w), k = Math.asin(w /= S), E = ca(ca(w) - 1) < Na || ca(r - h) < Na ? (r + h) / 2 : Math.atan2(b, _), A = n(E, k), C = A[0], N = A[1], z = C - t, L = N - e, T = x * z - y * L;
+ (T * T / M > i || ca((y * z + x * L) / M - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, C, N, E, _ /= S, b /= S, w, d, m), m.point(C, N), u(C, N, E, _, b, w, s, f, h, g, p, v, d, m))
+ }
+ }
+
+ var i = .5, o = Math.cos(30 * La), a = 16;
+ return t.precision = function (n) {
+ return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)
+ }, t
+ }
+
+ function tr(n) {
+ var t = nr(function (t, e) {
+ return n([t * Ta, e * Ta])
+ });
+ return function (n) {
+ return or(t(n))
+ }
+ }
+
+ function er(n) {
+ this.stream = n
+ }
+
+ function rr(n, t) {
+ return {
+ point: t, sphere: function () {
+ n.sphere()
+ }, lineStart: function () {
+ n.lineStart()
+ }, lineEnd: function () {
+ n.lineEnd()
+ }, polygonStart: function () {
+ n.polygonStart()
+ }, polygonEnd: function () {
+ n.polygonEnd()
+ }
+ }
+ }
+
+ function ur(n) {
+ return ir(function () {
+ return n
+ })()
+ }
+
+ function ir(n) {
+ function t(n) {
+ return n = a(n[0] * La, n[1] * La), [n[0] * h + c, l - n[1] * h]
+ }
+
+ function e(n) {
+ return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Ta, n[1] * Ta]
+ }
+
+ function r() {
+ a = Ye(o = lr(m, y, x), i);
+ var n = i(v, d);
+ return c = g - n[0] * h, l = p + n[1] * h, u()
+ }
+
+ function u() {
+ return s && (s.valid = !1, s = null), t
+ }
+
+ var i, o, a, c, l, s, f = nr(function (n, t) {
+ return n = i(n, t), [n[0] * h + c, l - n[1] * h]
+ }), h = 150, g = 480, p = 250, v = 0, d = 0, m = 0, y = 0, x = 0, M = Cc, _ = Et, b = null, w = null;
+ return t.stream = function (n) {
+ return s && (s.valid = !1), s = or(M(o, f(_(n)))), s.valid = !0, s
+ }, t.clipAngle = function (n) {
+ return arguments.length ? (M = null == n ? (b = n, Cc) : Fe((b = +n) * La), u()) : b
+ }, t.clipExtent = function (n) {
+ return arguments.length ? (w = n, _ = n ? Oe(n[0][0], n[0][1], n[1][0], n[1][1]) : Et, u()) : w
+ }, t.scale = function (n) {
+ return arguments.length ? (h = +n, r()) : h
+ }, t.translate = function (n) {
+ return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]
+ }, t.center = function (n) {
+ return arguments.length ? (v = n[0] % 360 * La, d = n[1] % 360 * La, r()) : [v * Ta, d * Ta]
+ }, t.rotate = function (n) {
+ return arguments.length ? (m = n[0] % 360 * La, y = n[1] % 360 * La, x = n.length > 2 ? n[2] % 360 * La : 0, r()) : [m * Ta, y * Ta, x * Ta]
+ }, Bo.rebind(t, f, "precision"), function () {
+ return i = n.apply(this, arguments), t.invert = i.invert && e, r()
+ }
+ }
+
+ function or(n) {
+ return rr(n, function (t, e) {
+ n.point(t * La, e * La)
+ })
+ }
+
+ function ar(n, t) {
+ return [n, t]
+ }
+
+ function cr(n, t) {
+ return [n > Ea ? n - Aa : -Ea > n ? n + Aa : n, t]
+ }
+
+ function lr(n, t, e) {
+ return n ? t || e ? Ye(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr
+ }
+
+ function sr(n) {
+ return function (t, e) {
+ return t += n, [t > Ea ? t - Aa : -Ea > t ? t + Aa : t, e]
+ }
+ }
+
+ function fr(n) {
+ var t = sr(n);
+ return t.invert = sr(-n), t
+ }
+
+ function hr(n, t) {
+ function e(n, t) {
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * r + a * u;
+ return [Math.atan2(c * i - s * o, a * r - l * u), nt(s * i + c * o)]
+ }
+
+ var r = Math.cos(n), u = Math.sin(n), i = Math.cos(t), o = Math.sin(t);
+ return e.invert = function (n, t) {
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * i - c * o;
+ return [Math.atan2(c * i + l * o, a * r + s * u), nt(s * r - a * u)]
+ }, e
+ }
+
+ function gr(n, t) {
+ var e = Math.cos(n), r = Math.sin(n);
+ return function (u, i, o, a) {
+ var c = o * t;
+ null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * Aa)) : (u = n + o * Aa, i = n - .5 * c);
+ for (var l, s = u; o > 0 ? s > i : i > s; s -= c)a.point((l = Me([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])
+ }
+ }
+
+ function pr(n, t) {
+ var e = pe(t);
+ e[0] -= n, xe(e);
+ var r = Q(-e[1]);
+ return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Na) % (2 * Math.PI)
+ }
+
+ function vr(n, t, e) {
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function (n) {
+ return r.map(function (t) {
+ return [n, t]
+ })
+ }
+ }
+
+ function dr(n, t, e) {
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function (n) {
+ return r.map(function (t) {
+ return [t, n]
+ })
+ }
+ }
+
+ function mr(n) {
+ return n.source
+ }
+
+ function yr(n) {
+ return n.target
+ }
+
+ function xr(n, t, e, r) {
+ var u = Math.cos(t), i = Math.sin(t), o = Math.cos(r), a = Math.sin(r), c = u * Math.cos(n), l = u * Math.sin(n), s = o * Math.cos(e), f = o * Math.sin(e), h = 2 * Math.asin(Math.sqrt(ut(r - t) + u * o * ut(e - n))), g = 1 / Math.sin(h), p = h ? function (n) {
+ var t = Math.sin(n *= h) * g, e = Math.sin(h - n) * g, r = e * c + t * s, u = e * l + t * f, o = e * i + t * a;
+ return [Math.atan2(u, r) * Ta, Math.atan2(o, Math.sqrt(r * r + u * u)) * Ta]
+ } : function () {
+ return [n * Ta, t * Ta]
+ };
+ return p.distance = h, p
+ }
+
+ function Mr() {
+ function n(n, u) {
+ var i = Math.sin(u *= La), o = Math.cos(u), a = ca((n *= La) - t), c = Math.cos(a);
+ Fc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o
+ }
+
+ var t, e, r;
+ Hc.point = function (u, i) {
+ t = u * La, e = Math.sin(i *= La), r = Math.cos(i), Hc.point = n
+ }, Hc.lineEnd = function () {
+ Hc.point = Hc.lineEnd = y
+ }
+ }
+
+ function _r(n, t) {
+ function e(t, e) {
+ var r = Math.cos(t), u = Math.cos(e), i = n(r * u);
+ return [i * u * Math.sin(t), i * Math.sin(e)]
+ }
+
+ return e.invert = function (n, e) {
+ var r = Math.sqrt(n * n + e * e), u = t(r), i = Math.sin(u), o = Math.cos(u);
+ return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]
+ }, e
+ }
+
+ function br(n, t) {
+ function e(n, t) {
+ o > 0 ? -Ca + Na > t && (t = -Ca + Na) : t > Ca - Na && (t = Ca - Na);
+ var e = o / Math.pow(u(t), i);
+ return [e * Math.sin(i * n), o - e * Math.cos(i * n)]
+ }
+
+ var r = Math.cos(n), u = function (n) {
+ return Math.tan(Ea / 4 + n / 2)
+ }, i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)), o = r * Math.pow(u(n), i) / i;
+ return i ? (e.invert = function (n, t) {
+ var e = o - t, r = G(i) * Math.sqrt(n * n + e * e);
+ return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ca]
+ }, e) : Sr
+ }
+
+ function wr(n, t) {
+ function e(n, t) {
+ var e = i - t;
+ return [e * Math.sin(u * n), i - e * Math.cos(u * n)]
+ }
+
+ var r = Math.cos(n), u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n), i = r / u + n;
+ return ca(u) < Na ? ar : (e.invert = function (n, t) {
+ var e = i - t;
+ return [Math.atan2(n, e) / u, i - G(u) * Math.sqrt(n * n + e * e)]
+ }, e)
+ }
+
+ function Sr(n, t) {
+ return [n, Math.log(Math.tan(Ea / 4 + t / 2))]
+ }
+
+ function kr(n) {
+ var t, e = ur(n), r = e.scale, u = e.translate, i = e.clipExtent;
+ return e.scale = function () {
+ var n = r.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.translate = function () {
+ var n = u.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.clipExtent = function (n) {
+ var o = i.apply(e, arguments);
+ if (o === e) {
+ if (t = null == n) {
+ var a = Ea * r(), c = u();
+ i([[c[0] - a, c[1] - a], [c[0] + a, c[1] + a]])
+ }
+ } else t && (o = null);
+ return o
+ }, e.clipExtent(null)
+ }
+
+ function Er(n, t) {
+ return [Math.log(Math.tan(Ea / 4 + t / 2)), -n]
+ }
+
+ function Ar(n) {
+ return n[0]
+ }
+
+ function Cr(n) {
+ return n[1]
+ }
+
+ function Nr(n) {
+ for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {
+ for (; r > 1 && K(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;)--r;
+ e[r++] = u
+ }
+ return e.slice(0, r)
+ }
+
+ function zr(n, t) {
+ return n[0] - t[0] || n[1] - t[1]
+ }
+
+ function Lr(n, t, e) {
+ return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])
+ }
+
+ function Tr(n, t, e, r) {
+ var u = n[0], i = e[0], o = t[0] - u, a = r[0] - i, c = n[1], l = e[1], s = t[1] - c, f = r[1] - l, h = (a * (c - l) - f * (u - i)) / (f * o - a * s);
+ return [u + h * o, c + h * s]
+ }
+
+ function qr(n) {
+ var t = n[0], e = n[n.length - 1];
+ return !(t[0] - e[0] || t[1] - e[1])
+ }
+
+ function Rr() {
+ tu(this), this.edge = this.site = this.circle = null
+ }
+
+ function Dr(n) {
+ var t = Kc.pop() || new Rr;
+ return t.site = n, t
+ }
+
+ function Pr(n) {
+ Xr(n), Wc.remove(n), Kc.push(n), tu(n)
+ }
+
+ function Ur(n) {
+ var t = n.circle, e = t.x, r = t.cy, u = {x: e, y: r}, i = n.P, o = n.N, a = [n];
+ Pr(n);
+ for (var c = i; c.circle && ca(e - c.circle.x) < Na && ca(r - c.circle.cy) < Na;)i = c.P, a.unshift(c), Pr(c), c = i;
+ a.unshift(c), Xr(c);
+ for (var l = o; l.circle && ca(e - l.circle.x) < Na && ca(r - l.circle.cy) < Na;)o = l.N, a.push(l), Pr(l), l = o;
+ a.push(l), Xr(l);
+ var s, f = a.length;
+ for (s = 1; f > s; ++s)l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);
+ c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)
+ }
+
+ function jr(n) {
+ for (var t, e, r, u, i = n.x, o = n.y, a = Wc._; a;)if (r = Fr(a, o) - i, r > Na)a = a.L; else {
+ if (u = i - Hr(a, o), !(u > Na)) {
+ r > -Na ? (t = a.P, e = a) : u > -Na ? (t = a, e = a.N) : t = e = a;
+ break
+ }
+ if (!a.R) {
+ t = a;
+ break
+ }
+ a = a.R
+ }
+ var c = Dr(n);
+ if (Wc.insert(t, c), t || e) {
+ if (t === e)return Xr(t), e = Dr(t.site), Wc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), Vr(e), void 0;
+ if (!e)return c.edge = Jr(t.site, c.site), void 0;
+ Xr(t), Xr(e);
+ var l = t.site, s = l.x, f = l.y, h = n.x - s, g = n.y - f, p = e.site, v = p.x - s, d = p.y - f, m = 2 * (h * d - g * v), y = h * h + g * g, x = v * v + d * d, M = {
+ x: (d * y - g * x) / m + s,
+ y: (h * x - v * y) / m + f
+ };
+ Kr(e.edge, l, p, M), c.edge = Jr(l, n, null, M), e.edge = Jr(n, p, null, M), Vr(t), Vr(e)
+ }
+ }
+
+ function Fr(n, t) {
+ var e = n.site, r = e.x, u = e.y, i = u - t;
+ if (!i)return r;
+ var o = n.P;
+ if (!o)return -1 / 0;
+ e = o.site;
+ var a = e.x, c = e.y, l = c - t;
+ if (!l)return a;
+ var s = a - r, f = 1 / i - 1 / l, h = s / l;
+ return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2
+ }
+
+ function Hr(n, t) {
+ var e = n.N;
+ if (e)return Fr(e, t);
+ var r = n.site;
+ return r.y === t ? r.x : 1 / 0
+ }
+
+ function Or(n) {
+ this.site = n, this.edges = []
+ }
+
+ function Yr(n) {
+ for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Bc, d = v.length; d--;)if (i = v[d], i && i.prepare())for (a = i.edges, c = a.length, o = 0; c > o;)s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ca(r - t) > Na || ca(u - e) > Na) && (a.splice(o, 0, new Qr(Gr(i.site, s, ca(r - f) < Na && p - u > Na ? {
+ x: f,
+ y: ca(t - f) < Na ? e : p
+ } : ca(u - p) < Na && h - r > Na ? {x: ca(e - p) < Na ? t : h, y: p} : ca(r - h) < Na && u - g > Na ? {
+ x: h,
+ y: ca(t - h) < Na ? e : g
+ } : ca(u - g) < Na && r - f > Na ? {x: ca(e - g) < Na ? t : f, y: g} : null), i.site, null)), ++c)
+ }
+
+ function Ir(n, t) {
+ return t.angle - n.angle
+ }
+
+ function Zr() {
+ tu(this), this.x = this.y = this.arc = this.site = this.cy = null
+ }
+
+ function Vr(n) {
+ var t = n.P, e = n.N;
+ if (t && e) {
+ var r = t.site, u = n.site, i = e.site;
+ if (r !== i) {
+ var o = u.x, a = u.y, c = r.x - o, l = r.y - a, s = i.x - o, f = i.y - a, h = 2 * (c * f - l * s);
+ if (!(h >= -za)) {
+ var g = c * c + l * l, p = s * s + f * f, v = (f * g - l * p) / h, d = (c * p - s * g) / h, f = d + a, m = Qc.pop() || new Zr;
+ m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;
+ for (var y = null, x = Gc._; x;)if (m.y < x.y || m.y === x.y && m.x <= x.x) {
+ if (!x.L) {
+ y = x.P;
+ break
+ }
+ x = x.L
+ } else {
+ if (!x.R) {
+ y = x;
+ break
+ }
+ x = x.R
+ }
+ Gc.insert(y, m), y || (Jc = m)
+ }
+ }
+ }
+ }
+
+ function Xr(n) {
+ var t = n.circle;
+ t && (t.P || (Jc = t.N), Gc.remove(t), Qc.push(t), tu(t), n.circle = null)
+ }
+
+ function $r(n) {
+ for (var t, e = $c, r = He(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;)t = e[u], (!Br(t, n) || !r(t) || ca(t.a.x - t.b.x) < Na && ca(t.a.y - t.b.y) < Na) && (t.a = t.b = null, e.splice(u, 1))
+ }
+
+ function Br(n, t) {
+ var e = n.b;
+ if (e)return !0;
+ var r, u, i = n.a, o = t[0][0], a = t[1][0], c = t[0][1], l = t[1][1], s = n.l, f = n.r, h = s.x, g = s.y, p = f.x, v = f.y, d = (h + p) / 2, m = (g + v) / 2;
+ if (v === g) {
+ if (o > d || d >= a)return;
+ if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: d, y: c};
+ e = {x: d, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: d, y: l};
+ e = {x: d, y: c}
+ }
+ } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: (c - u) / r, y: c};
+ e = {x: (l - u) / r, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: (l - u) / r, y: l};
+ e = {x: (c - u) / r, y: c}
+ } else if (v > g) {
+ if (i) {
+ if (i.x >= a)return
+ } else i = {x: o, y: r * o + u};
+ e = {x: a, y: r * a + u}
+ } else {
+ if (i) {
+ if (i.x < o)return
+ } else i = {x: a, y: r * a + u};
+ e = {x: o, y: r * o + u}
+ }
+ return n.a = i, n.b = e, !0
+ }
+
+ function Wr(n, t) {
+ this.l = n, this.r = t, this.a = this.b = null
+ }
+
+ function Jr(n, t, e, r) {
+ var u = new Wr(n, t);
+ return $c.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Bc[n.i].edges.push(new Qr(u, n, t)), Bc[t.i].edges.push(new Qr(u, t, n)), u
+ }
+
+ function Gr(n, t, e) {
+ var r = new Wr(n, null);
+ return r.a = t, r.b = e, $c.push(r), r
+ }
+
+ function Kr(n, t, e, r) {
+ n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)
+ }
+
+ function Qr(n, t, e) {
+ var r = n.a, u = n.b;
+ this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)
+ }
+
+ function nu() {
+ this._ = null
+ }
+
+ function tu(n) {
+ n.U = n.C = n.L = n.R = n.P = n.N = null
+ }
+
+ function eu(n, t) {
+ var e = t, r = t.R, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e
+ }
+
+ function ru(n, t) {
+ var e = t, r = t.L, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e
+ }
+
+ function uu(n) {
+ for (; n.L;)n = n.L;
+ return n
+ }
+
+ function iu(n, t) {
+ var e, r, u, i = n.sort(ou).pop();
+ for ($c = [], Bc = new Array(n.length), Wc = new nu, Gc = new nu; ;)if (u = Jc, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Bc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop(); else {
+ if (!u)break;
+ Ur(u.arc)
+ }
+ t && ($r(t), Yr(t));
+ var o = {cells: Bc, edges: $c};
+ return Wc = Gc = $c = Bc = null, o
+ }
+
+ function ou(n, t) {
+ return t.y - n.y || t.x - n.x
+ }
+
+ function au(n, t, e) {
+ return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)
+ }
+
+ function cu(n) {
+ return n.x
+ }
+
+ function lu(n) {
+ return n.y
+ }
+
+ function su() {
+ return {leaf: !0, nodes: [], point: null, x: null, y: null}
+ }
+
+ function fu(n, t, e, r, u, i) {
+ if (!n(t, e, r, u, i)) {
+ var o = .5 * (e + u), a = .5 * (r + i), c = t.nodes;
+ c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)
+ }
+ }
+
+ function hu(n, t) {
+ n = Bo.rgb(n), t = Bo.rgb(t);
+ var e = n.r, r = n.g, u = n.b, i = t.r - e, o = t.g - r, a = t.b - u;
+ return function (n) {
+ return "#" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))
+ }
+ }
+
+ function gu(n, t) {
+ var e, r = {}, u = {};
+ for (e in n)e in t ? r[e] = du(n[e], t[e]) : u[e] = n[e];
+ for (e in t)e in n || (u[e] = t[e]);
+ return function (n) {
+ for (e in r)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function pu(n, t) {
+ return n = +n, t = +t, function (e) {
+ return n * (1 - e) + t * e
+ }
+ }
+
+ function vu(n, t) {
+ var e, r, u, i = tl.lastIndex = el.lastIndex = 0, o = -1, a = [], c = [];
+ for (n += "", t += ""; (e = tl.exec(n)) && (r = el.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({
+ i: o,
+ x: pu(e, r)
+ })), i = el.lastIndex;
+ return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function (n) {
+ return t(n) + ""
+ }) : function () {
+ return t
+ } : (t = c.length, function (n) {
+ for (var e, r = 0; t > r; ++r)a[(e = c[r]).i] = e.x(n);
+ return a.join("")
+ })
+ }
+
+ function du(n, t) {
+ for (var e, r = Bo.interpolators.length; --r >= 0 && !(e = Bo.interpolators[r](n, t)););
+ return e
+ }
+
+ function mu(n, t) {
+ var e, r = [], u = [], i = n.length, o = t.length, a = Math.min(n.length, t.length);
+ for (e = 0; a > e; ++e)r.push(du(n[e], t[e]));
+ for (; i > e; ++e)u[e] = n[e];
+ for (; o > e; ++e)u[e] = t[e];
+ return function (n) {
+ for (e = 0; a > e; ++e)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function yu(n) {
+ return function (t) {
+ return 0 >= t ? 0 : t >= 1 ? 1 : n(t)
+ }
+ }
+
+ function xu(n) {
+ return function (t) {
+ return 1 - n(1 - t)
+ }
+ }
+
+ function Mu(n) {
+ return function (t) {
+ return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))
+ }
+ }
+
+ function _u(n) {
+ return n * n
+ }
+
+ function bu(n) {
+ return n * n * n
+ }
+
+ function wu(n) {
+ if (0 >= n)return 0;
+ if (n >= 1)return 1;
+ var t = n * n, e = t * n;
+ return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)
+ }
+
+ function Su(n) {
+ return function (t) {
+ return Math.pow(t, n)
+ }
+ }
+
+ function ku(n) {
+ return 1 - Math.cos(n * Ca)
+ }
+
+ function Eu(n) {
+ return Math.pow(2, 10 * (n - 1))
+ }
+
+ function Au(n) {
+ return 1 - Math.sqrt(1 - n * n)
+ }
+
+ function Cu(n, t) {
+ var e;
+ return arguments.length < 2 && (t = .45), arguments.length ? e = t / Aa * Math.asin(1 / n) : (n = 1, e = t / 4), function (r) {
+ return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * Aa / t)
+ }
+ }
+
+ function Nu(n) {
+ return n || (n = 1.70158), function (t) {
+ return t * t * ((n + 1) * t - n)
+ }
+ }
+
+ function zu(n) {
+ return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375
+ }
+
+ function Lu(n, t) {
+ n = Bo.hcl(n), t = Bo.hcl(t);
+ var e = n.h, r = n.c, u = n.l, i = t.h - e, o = t.c - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
+ return lt(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Tu(n, t) {
+ n = Bo.hsl(n), t = Bo.hsl(t);
+ var e = n.h, r = n.s, u = n.l, i = t.h - e, o = t.s - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
+ return at(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function qu(n, t) {
+ n = Bo.lab(n), t = Bo.lab(t);
+ var e = n.l, r = n.a, u = n.b, i = t.l - e, o = t.a - r, a = t.b - u;
+ return function (n) {
+ return ft(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Ru(n, t) {
+ return t -= n, function (e) {
+ return Math.round(n + t * e)
+ }
+ }
+
+ function Du(n) {
+ var t = [n.a, n.b], e = [n.c, n.d], r = Uu(t), u = Pu(t, e), i = Uu(ju(e, t, -u)) || 0;
+ t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Ta, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Ta : 0
+ }
+
+ function Pu(n, t) {
+ return n[0] * t[0] + n[1] * t[1]
+ }
+
+ function Uu(n) {
+ var t = Math.sqrt(Pu(n, n));
+ return t && (n[0] /= t, n[1] /= t), t
+ }
+
+ function ju(n, t, e) {
+ return n[0] += e * t[0], n[1] += e * t[1], n
+ }
+
+ function Fu(n, t) {
+ var e, r = [], u = [], i = Bo.transform(n), o = Bo.transform(t), a = i.translate, c = o.translate, l = i.rotate, s = o.rotate, f = i.skew, h = o.skew, g = i.scale, p = o.scale;
+ return a[0] != c[0] || a[1] != c[1] ? (r.push("translate(", null, ",", null, ")"), u.push({
+ i: 1,
+ x: pu(a[0], c[0])
+ }, {
+ i: 3,
+ x: pu(a[1], c[1])
+ })) : c[0] || c[1] ? r.push("translate(" + c + ")") : r.push(""), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({
+ i: r.push(r.pop() + "rotate(", null, ")") - 2,
+ x: pu(l, s)
+ })) : s && r.push(r.pop() + "rotate(" + s + ")"), f != h ? u.push({
+ i: r.push(r.pop() + "skewX(", null, ")") - 2,
+ x: pu(f, h)
+ }) : h && r.push(r.pop() + "skewX(" + h + ")"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + "scale(", null, ",", null, ")"), u.push({
+ i: e - 4,
+ x: pu(g[0], p[0])
+ }, {
+ i: e - 2,
+ x: pu(g[1], p[1])
+ })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + "scale(" + p + ")"), e = u.length, function (n) {
+ for (var t, i = -1; ++i < e;)r[(t = u[i]).i] = t.x(n);
+ return r.join("")
+ }
+ }
+
+ function Hu(n, t) {
+ return t = (t -= n = +n) || 1 / t, function (e) {
+ return (e - n) / t
+ }
+ }
+
+ function Ou(n, t) {
+ return t = (t -= n = +n) || 1 / t, function (e) {
+ return Math.max(0, Math.min(1, (e - n) / t))
+ }
+ }
+
+ function Yu(n) {
+ for (var t = n.source, e = n.target, r = Zu(t, e), u = [t]; t !== r;)t = t.parent, u.push(t);
+ for (var i = u.length; e !== r;)u.splice(i, 0, e), e = e.parent;
+ return u
+ }
+
+ function Iu(n) {
+ for (var t = [], e = n.parent; null != e;)t.push(n), n = e, e = e.parent;
+ return t.push(n), t
+ }
+
+ function Zu(n, t) {
+ if (n === t)return n;
+ for (var e = Iu(n), r = Iu(t), u = e.pop(), i = r.pop(), o = null; u === i;)o = u, u = e.pop(), i = r.pop();
+ return o
+ }
+
+ function Vu(n) {
+ n.fixed |= 2
+ }
+
+ function Xu(n) {
+ n.fixed &= -7
+ }
+
+ function $u(n) {
+ n.fixed |= 4, n.px = n.x, n.py = n.y
+ }
+
+ function Bu(n) {
+ n.fixed &= -5
+ }
+
+ function Wu(n, t, e) {
+ var r = 0, u = 0;
+ if (n.charge = 0, !n.leaf)for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;)i = o[c], null != i && (Wu(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);
+ if (n.point) {
+ n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);
+ var l = t * e[n.point.index];
+ n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y
+ }
+ n.cx = r / n.charge, n.cy = u / n.charge
+ }
+
+ function Ju(n, t) {
+ return Bo.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = ei, n
+ }
+
+ function Gu(n, t) {
+ for (var e = [n]; null != (n = e.pop());)if (t(n), (u = n.children) && (r = u.length))for (var r, u; --r >= 0;)e.push(u[r])
+ }
+
+ function Ku(n, t) {
+ for (var e = [n], r = []; null != (n = e.pop());)if (r.push(n), (i = n.children) && (u = i.length))for (var u, i, o = -1; ++o < u;)e.push(i[o]);
+ for (; null != (n = r.pop());)t(n)
+ }
+
+ function Qu(n) {
+ return n.children
+ }
+
+ function ni(n) {
+ return n.value
+ }
+
+ function ti(n, t) {
+ return t.value - n.value
+ }
+
+ function ei(n) {
+ return Bo.merge(n.map(function (n) {
+ return (n.children || []).map(function (t) {
+ return {source: n, target: t}
+ })
+ }))
+ }
+
+ function ri(n) {
+ return n.x
+ }
+
+ function ui(n) {
+ return n.y
+ }
+
+ function ii(n, t, e) {
+ n.y0 = t, n.y = e
+ }
+
+ function oi(n) {
+ return Bo.range(n.length)
+ }
+
+ function ai(n) {
+ for (var t = -1, e = n[0].length, r = []; ++t < e;)r[t] = 0;
+ return r
+ }
+
+ function ci(n) {
+ for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);
+ return r
+ }
+
+ function li(n) {
+ return n.reduce(si, 0)
+ }
+
+ function si(n, t) {
+ return n + t[1]
+ }
+
+ function fi(n, t) {
+ return hi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))
+ }
+
+ function hi(n, t) {
+ for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;)i[e] = u * e + r;
+ return i
+ }
+
+ function gi(n) {
+ return [Bo.min(n), Bo.max(n)]
+ }
+
+ function pi(n, t) {
+ return n.value - t.value
+ }
+
+ function vi(n, t) {
+ var e = n._pack_next;
+ n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t
+ }
+
+ function di(n, t) {
+ n._pack_next = t, t._pack_prev = n
+ }
+
+ function mi(n, t) {
+ var e = t.x - n.x, r = t.y - n.y, u = n.r + t.r;
+ return .999 * u * u > e * e + r * r
+ }
+
+ function yi(n) {
+ function t(n) {
+ s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)
+ }
+
+ if ((e = n.children) && (l = e.length)) {
+ var e, r, u, i, o, a, c, l, s = 1 / 0, f = -1 / 0, h = 1 / 0, g = -1 / 0;
+ if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))for (i = e[2], bi(r, u, i), t(i), vi(r, i), r._pack_prev = i, vi(i, u), u = r._pack_next, o = 3; l > o; o++) {
+ bi(r, u, i = e[o]);
+ var p = 0, v = 1, d = 1;
+ for (a = u._pack_next; a !== u; a = a._pack_next, v++)if (mi(a, i)) {
+ p = 1;
+ break
+ }
+ if (1 == p)for (c = r._pack_prev; c !== a._pack_prev && !mi(c, i); c = c._pack_prev, d++);
+ p ? (d > v || v == d && u.r < r.r ? di(r, u = a) : di(r = c, u), o--) : (vi(r, i), u = i, t(i))
+ }
+ var m = (s + f) / 2, y = (h + g) / 2, x = 0;
+ for (o = 0; l > o; o++)i = e[o], i.x -= m, i.y -= y, x = Math.max(x, i.r + Math.sqrt(i.x * i.x + i.y * i.y));
+ n.r = x, e.forEach(Mi)
+ }
+ }
+
+ function xi(n) {
+ n._pack_next = n._pack_prev = n
+ }
+
+ function Mi(n) {
+ delete n._pack_next, delete n._pack_prev
+ }
+
+ function _i(n, t, e, r) {
+ var u = n.children;
+ if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)for (var i = -1, o = u.length; ++i < o;)_i(u[i], t, e, r)
+ }
+
+ function bi(n, t, e) {
+ var r = n.r + e.r, u = t.x - n.x, i = t.y - n.y;
+ if (r && (u || i)) {
+ var o = t.r + e.r, a = u * u + i * i;
+ o *= o, r *= r;
+ var c = .5 + (r - o) / (2 * a), l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);
+ e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u
+ } else e.x = n.x + r, e.y = n.y
+ }
+
+ function wi(n, t) {
+ return n.parent == t.parent ? 1 : 2
+ }
+
+ function Si(n) {
+ var t = n.children;
+ return t.length ? t[0] : n.t
+ }
+
+ function ki(n) {
+ var t, e = n.children;
+ return (t = e.length) ? e[t - 1] : n.t
+ }
+
+ function Ei(n, t, e) {
+ var r = e / (t.i - n.i);
+ t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e
+ }
+
+ function Ai(n) {
+ for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;)t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)
+ }
+
+ function Ci(n, t, e) {
+ return n.a.parent === t.parent ? n.a : e
+ }
+
+ function Ni(n) {
+ return 1 + Bo.max(n, function (n) {
+ return n.y
+ })
+ }
+
+ function zi(n) {
+ return n.reduce(function (n, t) {
+ return n + t.x
+ }, 0) / n.length
+ }
+
+ function Li(n) {
+ var t = n.children;
+ return t && t.length ? Li(t[0]) : n
+ }
+
+ function Ti(n) {
+ var t, e = n.children;
+ return e && (t = e.length) ? Ti(e[t - 1]) : n
+ }
+
+ function qi(n) {
+ return {x: n.x, y: n.y, dx: n.dx, dy: n.dy}
+ }
+
+ function Ri(n, t) {
+ var e = n.x + t[3], r = n.y + t[0], u = n.dx - t[1] - t[3], i = n.dy - t[0] - t[2];
+ return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {x: e, y: r, dx: u, dy: i}
+ }
+
+ function Di(n) {
+ var t = n[0], e = n[n.length - 1];
+ return e > t ? [t, e] : [e, t]
+ }
+
+ function Pi(n) {
+ return n.rangeExtent ? n.rangeExtent() : Di(n.range())
+ }
+
+ function Ui(n, t, e, r) {
+ var u = e(n[0], n[1]), i = r(t[0], t[1]);
+ return function (n) {
+ return i(u(n))
+ }
+ }
+
+ function ji(n, t) {
+ var e, r = 0, u = n.length - 1, i = n[r], o = n[u];
+ return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n
+ }
+
+ function Fi(n) {
+ return n ? {
+ floor: function (t) {
+ return Math.floor(t / n) * n
+ }, ceil: function (t) {
+ return Math.ceil(t / n) * n
+ }
+ } : gl
+ }
+
+ function Hi(n, t, e, r) {
+ var u = [], i = [], o = 0, a = Math.min(n.length, t.length) - 1;
+ for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;)u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));
+ return function (t) {
+ var e = Bo.bisect(n, t, 1, a) - 1;
+ return i[e](u[e](t))
+ }
+ }
+
+ function Oi(n, t, e, r) {
+ function u() {
+ var u = Math.min(n.length, t.length) > 2 ? Hi : Ui, c = r ? Ou : Hu;
+ return o = u(n, t, c, e), a = u(t, n, c, du), i
+ }
+
+ function i(n) {
+ return o(n)
+ }
+
+ var o, a;
+ return i.invert = function (n) {
+ return a(n)
+ }, i.domain = function (t) {
+ return arguments.length ? (n = t.map(Number), u()) : n
+ }, i.range = function (n) {
+ return arguments.length ? (t = n, u()) : t
+ }, i.rangeRound = function (n) {
+ return i.range(n).interpolate(Ru)
+ }, i.clamp = function (n) {
+ return arguments.length ? (r = n, u()) : r
+ }, i.interpolate = function (n) {
+ return arguments.length ? (e = n, u()) : e
+ }, i.ticks = function (t) {
+ return Vi(n, t)
+ }, i.tickFormat = function (t, e) {
+ return Xi(n, t, e)
+ }, i.nice = function (t) {
+ return Ii(n, t), u()
+ }, i.copy = function () {
+ return Oi(n, t, e, r)
+ }, u()
+ }
+
+ function Yi(n, t) {
+ return Bo.rebind(n, t, "range", "rangeRound", "interpolate", "clamp")
+ }
+
+ function Ii(n, t) {
+ return ji(n, Fi(Zi(n, t)[2]))
+ }
+
+ function Zi(n, t) {
+ null == t && (t = 10);
+ var e = Di(n), r = e[1] - e[0], u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)), i = t / r * u;
+ return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e
+ }
+
+ function Vi(n, t) {
+ return Bo.range.apply(Bo, Zi(n, t))
+ }
+
+ function Xi(n, t, e) {
+ var r = Zi(n, t);
+ if (e) {
+ var u = tc.exec(e);
+ if (u.shift(), "s" === u[8]) {
+ var i = Bo.formatPrefix(Math.max(ca(r[0]), ca(r[1])));
+ return u[7] || (u[7] = "." + $i(i.scale(r[2]))), u[8] = "f", e = Bo.format(u.join("")), function (n) {
+ return e(i.scale(n)) + i.symbol
+ }
+ }
+ u[7] || (u[7] = "." + Bi(u[8], r)), e = u.join("")
+ } else e = ",." + $i(r[2]) + "f";
+ return Bo.format(e)
+ }
+
+ function $i(n) {
+ return -Math.floor(Math.log(n) / Math.LN10 + .01)
+ }
+
+ function Bi(n, t) {
+ var e = $i(t[2]);
+ return n in pl ? Math.abs(e - $i(Math.max(ca(t[0]), ca(t[1])))) + +("e" !== n) : e - 2 * ("%" === n)
+ }
+
+ function Wi(n, t, e, r) {
+ function u(n) {
+ return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)
+ }
+
+ function i(n) {
+ return e ? Math.pow(t, n) : -Math.pow(t, -n)
+ }
+
+ function o(t) {
+ return n(u(t))
+ }
+
+ return o.invert = function (t) {
+ return i(n.invert(t))
+ }, o.domain = function (t) {
+ return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r
+ }, o.base = function (e) {
+ return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t
+ }, o.nice = function () {
+ var t = ji(r.map(u), e ? Math : dl);
+ return n.domain(t), r = t.map(i), o
+ }, o.ticks = function () {
+ var n = Di(r), o = [], a = n[0], c = n[1], l = Math.floor(u(a)), s = Math.ceil(u(c)), f = t % 1 ? 2 : t;
+ if (isFinite(s - l)) {
+ if (e) {
+ for (; s > l; l++)for (var h = 1; f > h; h++)o.push(i(l) * h);
+ o.push(i(l))
+ } else for (o.push(i(l)); l++ < s;)for (var h = f - 1; h > 0; h--)o.push(i(l) * h);
+ for (l = 0; o[l] < a; l++);
+ for (s = o.length; o[s - 1] > c; s--);
+ o = o.slice(l, s)
+ }
+ return o
+ }, o.tickFormat = function (n, t) {
+ if (!arguments.length)return vl;
+ arguments.length < 2 ? t = vl : "function" != typeof t && (t = Bo.format(t));
+ var r, a = Math.max(.1, n / o.ticks().length), c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);
+ return function (n) {
+ return n / i(c(u(n) + r)) <= a ? t(n) : ""
+ }
+ }, o.copy = function () {
+ return Wi(n.copy(), t, e, r)
+ }, Yi(o, n)
+ }
+
+ function Ji(n, t, e) {
+ function r(t) {
+ return n(u(t))
+ }
+
+ var u = Gi(t), i = Gi(1 / t);
+ return r.invert = function (t) {
+ return i(n.invert(t))
+ }, r.domain = function (t) {
+ return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e
+ }, r.ticks = function (n) {
+ return Vi(e, n)
+ }, r.tickFormat = function (n, t) {
+ return Xi(e, n, t)
+ }, r.nice = function (n) {
+ return r.domain(Ii(e, n))
+ }, r.exponent = function (o) {
+ return arguments.length ? (u = Gi(t = o), i = Gi(1 / t), n.domain(e.map(u)), r) : t
+ }, r.copy = function () {
+ return Ji(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Gi(n) {
+ return function (t) {
+ return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)
+ }
+ }
+
+ function Ki(n, t) {
+ function e(e) {
+ return i[((u.get(e) || ("range" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]
+ }
+
+ function r(t, e) {
+ return Bo.range(n.length).map(function (n) {
+ return t + e * n
+ })
+ }
+
+ var u, i, o;
+ return e.domain = function (r) {
+ if (!arguments.length)return n;
+ n = [], u = new a;
+ for (var i, o = -1, c = r.length; ++o < c;)u.has(i = r[o]) || u.set(i, n.push(i));
+ return e[t.t].apply(e, t.a)
+ }, e.range = function (n) {
+ return arguments.length ? (i = n, o = 0, t = {t: "range", a: arguments}, e) : i
+ }, e.rangePoints = function (u, a) {
+ arguments.length < 2 && (a = 0);
+ var c = u[0], l = u[1], s = (l - c) / (Math.max(1, n.length - 1) + a);
+ return i = r(n.length < 2 ? (c + l) / 2 : c + s * a / 2, s), o = 0, t = {t: "rangePoints", a: arguments}, e
+ }, e.rangeBands = function (u, a, c) {
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = (f - s) / (n.length - a + 2 * c);
+ return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {t: "rangeBands", a: arguments}, e
+ }, e.rangeRoundBands = function (u, a, c) {
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = Math.floor((f - s) / (n.length - a + 2 * c)), g = f - s - (n.length - a) * h;
+ return i = r(s + Math.round(g / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {
+ t: "rangeRoundBands",
+ a: arguments
+ }, e
+ }, e.rangeBand = function () {
+ return o
+ }, e.rangeExtent = function () {
+ return Di(t.a[0])
+ }, e.copy = function () {
+ return Ki(n, t)
+ }, e.domain(n)
+ }
+
+ function Qi(r, u) {
+ function i() {
+ var n = 0, t = u.length;
+ for (a = []; ++n < t;)a[n - 1] = Bo.quantile(r, n / t);
+ return o
+ }
+
+ function o(n) {
+ return isNaN(n = +n) ? void 0 : u[Bo.bisect(a, n)]
+ }
+
+ var a;
+ return o.domain = function (u) {
+ return arguments.length ? (r = u.map(t).filter(e).sort(n), i()) : r
+ }, o.range = function (n) {
+ return arguments.length ? (u = n, i()) : u
+ }, o.quantiles = function () {
+ return a
+ }, o.invertExtent = function (n) {
+ return n = u.indexOf(n), 0 > n ? [0 / 0, 0 / 0] : [n > 0 ? a[n - 1] : r[0], n < a.length ? a[n] : r[r.length - 1]]
+ }, o.copy = function () {
+ return Qi(r, u)
+ }, i()
+ }
+
+ function no(n, t, e) {
+ function r(t) {
+ return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]
+ }
+
+ function u() {
+ return i = e.length / (t - n), o = e.length - 1, r
+ }
+
+ var i, o;
+ return r.domain = function (e) {
+ return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]
+ }, r.range = function (n) {
+ return arguments.length ? (e = n, u()) : e
+ }, r.invertExtent = function (t) {
+ return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]
+ }, r.copy = function () {
+ return no(n, t, e)
+ }, u()
+ }
+
+ function to(n, t) {
+ function e(e) {
+ return e >= e ? t[Bo.bisect(n, e)] : void 0
+ }
+
+ return e.domain = function (t) {
+ return arguments.length ? (n = t, e) : n
+ }, e.range = function (n) {
+ return arguments.length ? (t = n, e) : t
+ }, e.invertExtent = function (e) {
+ return e = t.indexOf(e), [n[e - 1], n[e]]
+ }, e.copy = function () {
+ return to(n, t)
+ }, e
+ }
+
+ function eo(n) {
+ function t(n) {
+ return +n
+ }
+
+ return t.invert = t, t.domain = t.range = function (e) {
+ return arguments.length ? (n = e.map(t), t) : n
+ }, t.ticks = function (t) {
+ return Vi(n, t)
+ }, t.tickFormat = function (t, e) {
+ return Xi(n, t, e)
+ }, t.copy = function () {
+ return eo(n)
+ }, t
+ }
+
+ function ro(n) {
+ return n.innerRadius
+ }
+
+ function uo(n) {
+ return n.outerRadius
+ }
+
+ function io(n) {
+ return n.startAngle
+ }
+
+ function oo(n) {
+ return n.endAngle
+ }
+
+ function ao(n) {
+ function t(t) {
+ function o() {
+ l.push("M", i(n(s), a))
+ }
+
+ for (var c, l = [], s = [], f = -1, h = t.length, g = kt(e), p = kt(r); ++f < h;)u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);
+ return s.length && o(), l.length ? l.join("") : null
+ }
+
+ var e = Ar, r = Cr, u = Ae, i = co, o = i.key, a = .7;
+ return t.x = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t.defined = function (n) {
+ return arguments.length ? (u = n, t) : u
+ }, t.interpolate = function (n) {
+ return arguments.length ? (o = "function" == typeof n ? i = n : (i = wl.get(n) || co).key, t) : o
+ }, t.tension = function (n) {
+ return arguments.length ? (a = n, t) : a
+ }, t
+ }
+
+ function co(n) {
+ return n.join("L")
+ }
+
+ function lo(n) {
+ return co(n) + "Z"
+ }
+
+ function so(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r[0] + (r = n[t])[0]) / 2, "V", r[1]);
+ return e > 1 && u.push("H", r[0]), u.join("")
+ }
+
+ function fo(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("V", (r = n[t])[1], "H", r[0]);
+ return u.join("")
+ }
+
+ function ho(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r = n[t])[0], "V", r[1]);
+ return u.join("")
+ }
+
+ function go(n, t) {
+ return n.length < 4 ? co(n) : n[1] + mo(n.slice(1, n.length - 1), yo(n, t))
+ }
+
+ function po(n, t) {
+ return n.length < 3 ? co(n) : n[0] + mo((n.push(n[0]), n), yo([n[n.length - 2]].concat(n, [n[1]]), t))
+ }
+
+ function vo(n, t) {
+ return n.length < 3 ? co(n) : n[0] + mo(n, yo(n, t))
+ }
+
+ function mo(n, t) {
+ if (t.length < 1 || n.length != t.length && n.length != t.length + 2)return co(n);
+ var e = n.length != t.length, r = "", u = n[0], i = n[1], o = t[0], a = o, c = 1;
+ if (e && (r += "Q" + (i[0] - 2 * o[0] / 3) + "," + (i[1] - 2 * o[1] / 3) + "," + i[0] + "," + i[1], u = n[1], c = 2), t.length > 1) {
+ a = t[1], i = n[c], c++, r += "C" + (u[0] + o[0]) + "," + (u[1] + o[1]) + "," + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1];
+ for (var l = 2; l < t.length; l++, c++)i = n[c], a = t[l], r += "S" + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1]
+ }
+ if (e) {
+ var s = n[c];
+ r += "Q" + (i[0] + 2 * a[0] / 3) + "," + (i[1] + 2 * a[1] / 3) + "," + s[0] + "," + s[1]
+ }
+ return r
+ }
+
+ function yo(n, t) {
+ for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;)e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);
+ return r
+ }
+
+ function xo(n) {
+ if (n.length < 3)return co(n);
+ var t = 1, e = n.length, r = n[0], u = r[0], i = r[1], o = [u, u, u, (r = n[1])[0]], a = [i, i, i, r[1]], c = [u, ",", i, "L", wo(El, o), ",", wo(El, a)];
+ for (n.push(n[e - 1]); ++t <= e;)r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), So(c, o, a);
+ return n.pop(), c.push("L", r), c.join("")
+ }
+
+ function Mo(n) {
+ if (n.length < 4)return co(n);
+ for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;)t = n[r], i.push(t[0]), o.push(t[1]);
+ for (e.push(wo(El, i) + "," + wo(El, o)), --r; ++r < u;)t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), So(e, i, o);
+ return e.join("")
+ }
+
+ function _o(n) {
+ for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;)e = n[r % u], o.push(e[0]), a.push(e[1]);
+ for (t = [wo(El, o), ",", wo(El, a)], --r; ++r < i;)e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), So(t, o, a);
+ return t.join("")
+ }
+
+ function bo(n, t) {
+ var e = n.length - 1;
+ if (e)for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;)r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);
+ return xo(n)
+ }
+
+ function wo(n, t) {
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]
+ }
+
+ function So(n, t, e) {
+ n.push("C", wo(Sl, t), ",", wo(Sl, e), ",", wo(kl, t), ",", wo(kl, e), ",", wo(El, t), ",", wo(El, e))
+ }
+
+ function ko(n, t) {
+ return (t[1] - n[1]) / (t[0] - n[0])
+ }
+
+ function Eo(n) {
+ for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = ko(u, i); ++t < e;)r[t] = (o + (o = ko(u = i, i = n[t + 1]))) / 2;
+ return r[t] = o, r
+ }
+
+ function Ao(n) {
+ for (var t, e, r, u, i = [], o = Eo(n), a = -1, c = n.length - 1; ++a < c;)t = ko(n[a], n[a + 1]), ca(t) < Na ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));
+ for (a = -1; ++a <= c;)u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);
+ return i
+ }
+
+ function Co(n) {
+ return n.length < 3 ? co(n) : n[0] + mo(n, Ao(n))
+ }
+
+ function No(n) {
+ for (var t, e, r, u = -1, i = n.length; ++u < i;)t = n[u], e = t[0], r = t[1] + _l, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);
+ return n
+ }
+
+ function zo(n) {
+ function t(t) {
+ function c() {
+ v.push("M", a(n(m), f), s, l(n(d.reverse()), f), "Z")
+ }
+
+ for (var h, g, p, v = [], d = [], m = [], y = -1, x = t.length, M = kt(e), _ = kt(u), b = e === r ? function () {
+ return g
+ } : kt(r), w = u === i ? function () {
+ return p
+ } : kt(i); ++y < x;)o.call(this, h = t[y], y) ? (d.push([g = +M.call(this, h, y), p = +_.call(this, h, y)]), m.push([+b.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);
+ return d.length && c(), v.length ? v.join("") : null
+ }
+
+ var e = Ar, r = Ar, u = 0, i = Cr, o = Ae, a = co, c = a.key, l = a, s = "L", f = .7;
+ return t.x = function (n) {
+ return arguments.length ? (e = r = n, t) : r
+ }, t.x0 = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.x1 = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t.y = function (n) {
+ return arguments.length ? (u = i = n, t) : i
+ }, t.y0 = function (n) {
+ return arguments.length ? (u = n, t) : u
+ }, t.y1 = function (n) {
+ return arguments.length ? (i = n, t) : i
+ }, t.defined = function (n) {
+ return arguments.length ? (o = n, t) : o
+ }, t.interpolate = function (n) {
+ return arguments.length ? (c = "function" == typeof n ? a = n : (a = wl.get(n) || co).key, l = a.reverse || a, s = a.closed ? "M" : "L", t) : c
+ }, t.tension = function (n) {
+ return arguments.length ? (f = n, t) : f
+ }, t
+ }
+
+ function Lo(n) {
+ return n.radius
+ }
+
+ function To(n) {
+ return [n.x, n.y]
+ }
+
+ function qo(n) {
+ return function () {
+ var t = n.apply(this, arguments), e = t[0], r = t[1] + _l;
+ return [e * Math.cos(r), e * Math.sin(r)]
+ }
+ }
+
+ function Ro() {
+ return 64
+ }
+
+ function Do() {
+ return "circle"
+ }
+
+ function Po(n) {
+ var t = Math.sqrt(n / Ea);
+ return "M0," + t + "A" + t + "," + t + " 0 1,1 0," + -t + "A" + t + "," + t + " 0 1,1 0," + t + "Z"
+ }
+
+ function Uo(n, t) {
+ return ga(n, Tl), n.id = t, n
+ }
+
+ function jo(n, t, e, r) {
+ var u = n.id;
+ return F(n, "function" == typeof e ? function (n, i, o) {
+ n.__transition__[u].tween.set(t, r(e.call(n, n.__data__, i, o)))
+ } : (e = r(e), function (n) {
+ n.__transition__[u].tween.set(t, e)
+ }))
+ }
+
+ function Fo(n) {
+ return null == n && (n = ""), function () {
+ this.textContent = n
+ }
+ }
+
+ function Ho(n, t, e, r) {
+ var u = n.__transition__ || (n.__transition__ = {active: 0, count: 0}), i = u[e];
+ if (!i) {
+ var o = r.time;
+ i = u[e] = {
+ tween: new a,
+ time: o,
+ ease: r.ease,
+ delay: r.delay,
+ duration: r.duration
+ }, ++u.count, Bo.timer(function (r) {
+ function a(r) {
+ return u.active > e ? l() : (u.active = e, i.event && i.event.start.call(n, s, t), i.tween.forEach(function (e, r) {
+ (r = r.call(n, s, t)) && v.push(r)
+ }), Bo.timer(function () {
+ return p.c = c(r || 1) ? Ae : c, 1
+ }, 0, o), void 0)
+ }
+
+ function c(r) {
+ if (u.active !== e)return l();
+ for (var o = r / g, a = f(o), c = v.length; c > 0;)v[--c].call(n, a);
+ return o >= 1 ? (i.event && i.event.end.call(n, s, t), l()) : void 0
+ }
+
+ function l() {
+ return --u.count ? delete u[e] : delete n.__transition__, 1
+ }
+
+ var s = n.__data__, f = i.ease, h = i.delay, g = i.duration, p = Ka, v = [];
+ return p.t = h + o, r >= h ? a(r - h) : (p.c = a, void 0)
+ }, 0, o)
+ }
+ }
+
+ function Oo(n, t, e) {
+ n.attr("transform", function (n) {
+ var r = t(n);
+ return "translate(" + (isFinite(r) ? r : e(n)) + ",0)"
+ })
+ }
+
+ function Yo(n, t, e) {
+ n.attr("transform", function (n) {
+ var r = t(n);
+ return "translate(0," + (isFinite(r) ? r : e(n)) + ")"
+ })
+ }
+
+ function Io(n) {
+ return n.toISOString()
+ }
+
+ function Zo(n, t, e) {
+ function r(t) {
+ return n(t)
+ }
+
+ function u(n, e) {
+ var r = n[1] - n[0], u = r / e, i = Bo.bisect(Ol, u);
+ return i == Ol.length ? [t.year, Zi(n.map(function (n) {
+ return n / 31536e6
+ }), e)[2]] : i ? t[u / Ol[i - 1] < Ol[i] / u ? i - 1 : i] : [Zl, Zi(n, e)[2]]
+ }
+
+ return r.invert = function (t) {
+ return Vo(n.invert(t))
+ }, r.domain = function (t) {
+ return arguments.length ? (n.domain(t), r) : n.domain().map(Vo)
+ }, r.nice = function (n, t) {
+ function e(e) {
+ return !isNaN(e) && !n.range(e, Vo(+e + 1), t).length
+ }
+
+ var i = r.domain(), o = Di(i), a = null == n ? u(o, 10) : "number" == typeof n && u(o, n);
+ return a && (n = a[0], t = a[1]), r.domain(ji(i, t > 1 ? {
+ floor: function (t) {
+ for (; e(t = n.floor(t));)t = Vo(t - 1);
+ return t
+ }, ceil: function (t) {
+ for (; e(t = n.ceil(t));)t = Vo(+t + 1);
+ return t
+ }
+ } : n))
+ }, r.ticks = function (n, t) {
+ var e = Di(r.domain()), i = null == n ? u(e, 10) : "number" == typeof n ? u(e, n) : !n.range && [{range: n}, t];
+ return i && (n = i[0], t = i[1]), n.range(e[0], Vo(+e[1] + 1), 1 > t ? 1 : t)
+ }, r.tickFormat = function () {
+ return e
+ }, r.copy = function () {
+ return Zo(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Vo(n) {
+ return new Date(n)
+ }
+
+ function Xo(n) {
+ return JSON.parse(n.responseText)
+ }
+
+ function $o(n) {
+ var t = Go.createRange();
+ return t.selectNode(Go.body), t.createContextualFragment(n.responseText)
+ }
+
+ var Bo = {version: "3.4.13"};
+ Date.now || (Date.now = function () {
+ return +new Date
+ });
+ var Wo = [].slice, Jo = function (n) {
+ return Wo.call(n)
+ }, Go = document, Ko = Go.documentElement, Qo = window;
+ try {
+ Jo(Ko.childNodes)[0].nodeType
+ } catch (na) {
+ Jo = function (n) {
+ for (var t = n.length, e = new Array(t); t--;)e[t] = n[t];
+ return e
+ }
+ }
+ try {
+ Go.createElement("div").style.setProperty("opacity", 0, "")
+ } catch (ta) {
+ var ea = Qo.Element.prototype, ra = ea.setAttribute, ua = ea.setAttributeNS, ia = Qo.CSSStyleDeclaration.prototype, oa = ia.setProperty;
+ ea.setAttribute = function (n, t) {
+ ra.call(this, n, t + "")
+ }, ea.setAttributeNS = function (n, t, e) {
+ ua.call(this, n, t, e + "")
+ }, ia.setProperty = function (n, t, e) {
+ oa.call(this, n, t + "", e)
+ }
+ }
+ Bo.ascending = n, Bo.descending = function (n, t) {
+ return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0
+ }, Bo.min = function (n, t) {
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && e > r && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && e > r && (e = r)
+ }
+ return e
+ }, Bo.max = function (n, t) {
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && r > e && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && r > e && (e = r)
+ }
+ return e
+ }, Bo.extent = function (n, t) {
+ var e, r, u, i = -1, o = n.length;
+ if (1 === arguments.length) {
+ for (; ++i < o && !(null != (e = u = n[i]) && e >= e);)e = u = void 0;
+ for (; ++i < o;)null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))
+ } else {
+ for (; ++i < o && !(null != (e = u = t.call(n, n[i], i)) && e >= e);)e = void 0;
+ for (; ++i < o;)null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))
+ }
+ return [e, u]
+ }, Bo.sum = function (n, t) {
+ var r, u = 0, i = n.length, o = -1;
+ if (1 === arguments.length)for (; ++o < i;)e(r = +n[o]) && (u += r); else for (; ++o < i;)e(r = +t.call(n, n[o], o)) && (u += r);
+ return u
+ }, Bo.mean = function (n, r) {
+ var u, i = 0, o = n.length, a = -1, c = o;
+ if (1 === arguments.length)for (; ++a < o;)e(u = t(n[a])) ? i += u : --c; else for (; ++a < o;)e(u = t(r.call(n, n[a], a))) ? i += u : --c;
+ return c ? i / c : void 0
+ }, Bo.quantile = function (n, t) {
+ var e = (n.length - 1) * t + 1, r = Math.floor(e), u = +n[r - 1], i = e - r;
+ return i ? u + i * (n[r] - u) : u
+ }, Bo.median = function (r, u) {
+ var i, o = [], a = r.length, c = -1;
+ if (1 === arguments.length)for (; ++c < a;)e(i = t(r[c])) && o.push(i); else for (; ++c < a;)e(i = t(u.call(r, r[c], c))) && o.push(i);
+ return o.length ? Bo.quantile(o.sort(n), .5) : void 0
+ };
+ var aa = r(n);
+ Bo.bisectLeft = aa.left, Bo.bisect = Bo.bisectRight = aa.right, Bo.bisector = function (t) {
+ return r(1 === t.length ? function (e, r) {
+ return n(t(e), r)
+ } : t)
+ }, Bo.shuffle = function (n) {
+ for (var t, e, r = n.length; r;)e = 0 | Math.random() * r--, t = n[r], n[r] = n[e], n[e] = t;
+ return n
+ }, Bo.permute = function (n, t) {
+ for (var e = t.length, r = new Array(e); e--;)r[e] = n[t[e]];
+ return r
+ }, Bo.pairs = function (n) {
+ for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;)i[e] = [t = u, u = n[++e]];
+ return i
+ }, Bo.zip = function () {
+ if (!(r = arguments.length))return [];
+ for (var n = -1, t = Bo.min(arguments, u), e = new Array(t); ++n < t;)for (var r, i = -1, o = e[n] = new Array(r); ++i < r;)o[i] = arguments[i][n];
+ return e
+ }, Bo.transpose = function (n) {
+ return Bo.zip.apply(Bo, n)
+ }, Bo.keys = function (n) {
+ var t = [];
+ for (var e in n)t.push(e);
+ return t
+ }, Bo.values = function (n) {
+ var t = [];
+ for (var e in n)t.push(n[e]);
+ return t
+ }, Bo.entries = function (n) {
+ var t = [];
+ for (var e in n)t.push({key: e, value: n[e]});
+ return t
+ }, Bo.merge = function (n) {
+ for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;)o += n[i].length;
+ for (e = new Array(o); --u >= 0;)for (r = n[u], t = r.length; --t >= 0;)e[--o] = r[t];
+ return e
+ };
+ var ca = Math.abs;
+ Bo.range = function (n, t, e) {
+ if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), 1 / 0 === (t - n) / e)throw new Error("infinite range");
+ var r, u = [], o = i(ca(e)), a = -1;
+ if (n *= o, t *= o, e *= o, 0 > e)for (; (r = n + e * ++a) > t;)u.push(r / o); else for (; (r = n + e * ++a) < t;)u.push(r / o);
+ return u
+ }, Bo.map = function (n) {
+ var t = new a;
+ if (n instanceof a)n.forEach(function (n, e) {
+ t.set(n, e)
+ }); else for (var e in n)t.set(e, n[e]);
+ return t
+ };
+ var la = "__proto__", sa = "\x00";
+ o(a, {
+ has: s, get: function (n) {
+ return this._[c(n)]
+ }, set: function (n, t) {
+ return this._[c(n)] = t
+ }, remove: f, keys: h, values: function () {
+ var n = [];
+ for (var t in this._)n.push(this._[t]);
+ return n
+ }, entries: function () {
+ var n = [];
+ for (var t in this._)n.push({key: l(t), value: this._[t]});
+ return n
+ }, size: g, empty: p, forEach: function (n) {
+ for (var t in this._)n.call(this, l(t), this._[t])
+ }
+ }), Bo.nest = function () {
+ function n(t, o, c) {
+ if (c >= i.length)return r ? r.call(u, o) : e ? o.sort(e) : o;
+ for (var l, s, f, h, g = -1, p = o.length, v = i[c++], d = new a; ++g < p;)(h = d.get(l = v(s = o[g]))) ? h.push(s) : d.set(l, [s]);
+ return t ? (s = t(), f = function (e, r) {
+ s.set(e, n(t, r, c))
+ }) : (s = {}, f = function (e, r) {
+ s[e] = n(t, r, c)
+ }), d.forEach(f), s
+ }
+
+ function t(n, e) {
+ if (e >= i.length)return n;
+ var r = [], u = o[e++];
+ return n.forEach(function (n, u) {
+ r.push({key: n, values: t(u, e)})
+ }), u ? r.sort(function (n, t) {
+ return u(n.key, t.key)
+ }) : r
+ }
+
+ var e, r, u = {}, i = [], o = [];
+ return u.map = function (t, e) {
+ return n(e, t, 0)
+ }, u.entries = function (e) {
+ return t(n(Bo.map, e, 0), 0)
+ }, u.key = function (n) {
+ return i.push(n), u
+ }, u.sortKeys = function (n) {
+ return o[i.length - 1] = n, u
+ }, u.sortValues = function (n) {
+ return e = n, u
+ }, u.rollup = function (n) {
+ return r = n, u
+ }, u
+ }, Bo.set = function (n) {
+ var t = new v;
+ if (n)for (var e = 0, r = n.length; r > e; ++e)t.add(n[e]);
+ return t
+ }, o(v, {
+ has: s, add: function (n) {
+ return this._[c(n += "")] = !0, n
+ }, remove: f, values: h, size: g, empty: p, forEach: function (n) {
+ for (var t in this._)n.call(this, l(t))
+ }
+ }), Bo.behavior = {}, Bo.rebind = function (n, t) {
+ for (var e, r = 1, u = arguments.length; ++r < u;)n[e = arguments[r]] = d(n, t, t[e]);
+ return n
+ };
+ var fa = ["webkit", "ms", "moz", "Moz", "o", "O"];
+ Bo.dispatch = function () {
+ for (var n = new x, t = -1, e = arguments.length; ++t < e;)n[arguments[t]] = M(n);
+ return n
+ }, x.prototype.on = function (n, t) {
+ var e = n.indexOf("."), r = "";
+ if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n)return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);
+ if (2 === arguments.length) {
+ if (null == t)for (n in this)this.hasOwnProperty(n) && this[n].on(r, null);
+ return this
+ }
+ }, Bo.event = null, Bo.requote = function (n) {
+ return n.replace(ha, "\\$&")
+ };
+ var ha = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g, ga = {}.__proto__ ? function (n, t) {
+ n.__proto__ = t
+ } : function (n, t) {
+ for (var e in t)n[e] = t[e]
+ }, pa = function (n, t) {
+ return t.querySelector(n)
+ }, va = function (n, t) {
+ return t.querySelectorAll(n)
+ }, da = Ko.matches || Ko[m(Ko, "matchesSelector")], ma = function (n, t) {
+ return da.call(n, t)
+ };
+ "function" == typeof Sizzle && (pa = function (n, t) {
+ return Sizzle(n, t)[0] || null
+ }, va = Sizzle, ma = Sizzle.matchesSelector), Bo.selection = function () {
+ return _a
+ };
+ var ya = Bo.selection.prototype = [];
+ ya.select = function (n) {
+ var t, e, r, u, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []), t.parentNode = (r = this[o]).parentNode;
+ for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && "__data__"in u && (e.__data__ = u.__data__)) : t.push(null)
+ }
+ return S(i)
+ }, ya.selectAll = function (n) {
+ var t, e, r = [];
+ n = E(n);
+ for (var u = -1, i = this.length; ++u < i;)for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = Jo(n.call(e, e.__data__, a, u))), t.parentNode = e);
+ return S(r)
+ };
+ var xa = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: "http://www.w3.org/1999/xhtml",
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+ };
+ Bo.ns = {
+ prefix: xa, qualify: function (n) {
+ var t = n.indexOf(":"), e = n;
+ return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), xa.hasOwnProperty(e) ? {
+ space: xa[e],
+ local: n
+ } : n
+ }
+ }, ya.attr = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node();
+ return n = Bo.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)
+ }
+ for (t in n)this.each(A(t, n[t]));
+ return this
+ }
+ return this.each(A(n, t))
+ }, ya.classed = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node(), r = (n = z(n)).length, u = -1;
+ if (t = e.classList) {
+ for (; ++u < r;)if (!t.contains(n[u]))return !1
+ } else for (t = e.getAttribute("class"); ++u < r;)if (!N(n[u]).test(t))return !1;
+ return !0
+ }
+ for (t in n)this.each(L(t, n[t]));
+ return this
+ }
+ return this.each(L(n, t))
+ }, ya.style = function (n, t, e) {
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = "");
+ for (e in n)this.each(q(e, n[e], t));
+ return this
+ }
+ if (2 > r)return Qo.getComputedStyle(this.node(), null).getPropertyValue(n);
+ e = ""
+ }
+ return this.each(q(n, t, e))
+ }, ya.property = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n)return this.node()[n];
+ for (t in n)this.each(R(t, n[t]));
+ return this
+ }
+ return this.each(R(n, t))
+ }, ya.text = function (n) {
+ return arguments.length ? this.each("function" == typeof n ? function () {
+ var t = n.apply(this, arguments);
+ this.textContent = null == t ? "" : t
+ } : null == n ? function () {
+ this.textContent = ""
+ } : function () {
+ this.textContent = n
+ }) : this.node().textContent
+ }, ya.html = function (n) {
+ return arguments.length ? this.each("function" == typeof n ? function () {
+ var t = n.apply(this, arguments);
+ this.innerHTML = null == t ? "" : t
+ } : null == n ? function () {
+ this.innerHTML = ""
+ } : function () {
+ this.innerHTML = n
+ }) : this.node().innerHTML
+ }, ya.append = function (n) {
+ return n = D(n), this.select(function () {
+ return this.appendChild(n.apply(this, arguments))
+ })
+ }, ya.insert = function (n, t) {
+ return n = D(n), t = k(t), this.select(function () {
+ return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)
+ })
+ }, ya.remove = function () {
+ return this.each(function () {
+ var n = this.parentNode;
+ n && n.removeChild(this)
+ })
+ }, ya.data = function (n, t) {
+ function e(n, e) {
+ var r, u, i, o = n.length, f = e.length, h = Math.min(o, f), g = new Array(f), p = new Array(f), v = new Array(o);
+ if (t) {
+ var d, m = new a, y = new Array(o);
+ for (r = -1; ++r < o;)m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;
+ for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = P(i), m.set(d, !0);
+ for (r = -1; ++r < o;)m.get(y[r]) !== !0 && (v[r] = n[r])
+ } else {
+ for (r = -1; ++r < h;)u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = P(i);
+ for (; f > r; ++r)p[r] = P(e[r]);
+ for (; o > r; ++r)v[r] = n[r]
+ }
+ p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, c.push(p), l.push(g), s.push(v)
+ }
+
+ var r, u, i = -1, o = this.length;
+ if (!arguments.length) {
+ for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);
+ return n
+ }
+ var c = H([]), l = S([]), s = S([]);
+ if ("function" == typeof n)for (; ++i < o;)e(r = this[i], n.call(r, r.parentNode.__data__, i)); else for (; ++i < o;)e(r = this[i], n);
+ return l.enter = function () {
+ return c
+ }, l.exit = function () {
+ return s
+ }, l
+ }, ya.datum = function (n) {
+ return arguments.length ? this.property("__data__", n) : this.property("__data__")
+ }, ya.filter = function (n) {
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []), t.parentNode = (e = this[i]).parentNode;
+ for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return S(u)
+ }, ya.order = function () {
+ for (var n = -1, t = this.length; ++n < t;)for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);
+ return this
+ }, ya.sort = function (n) {
+ n = j.apply(this, arguments);
+ for (var t = -1, e = this.length; ++t < e;)this[t].sort(n);
+ return this.order()
+ }, ya.each = function (n) {
+ return F(this, function (t, e, r) {
+ n.call(t, t.__data__, e, r)
+ })
+ }, ya.call = function (n) {
+ var t = Jo(arguments);
+ return n.apply(t[0] = this, t), this
+ }, ya.empty = function () {
+ return !this.node()
+ }, ya.node = function () {
+ for (var n = 0, t = this.length; t > n; n++)for (var e = this[n], r = 0, u = e.length; u > r; r++) {
+ var i = e[r];
+ if (i)return i
+ }
+ return null
+ }, ya.size = function () {
+ var n = 0;
+ return F(this, function () {
+ ++n
+ }), n
+ };
+ var Ma = [];
+ Bo.selection.enter = H, Bo.selection.enter.prototype = Ma, Ma.append = ya.append, Ma.empty = ya.empty, Ma.node = ya.node, Ma.call = ya.call, Ma.size = ya.size, Ma.select = function (n) {
+ for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {
+ r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;
+ for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)
+ }
+ return S(o)
+ }, Ma.insert = function (n, t) {
+ return arguments.length < 2 && (t = O(this)), ya.insert.call(this, n, t)
+ }, ya.transition = function () {
+ for (var n, t, e = Cl || ++ql, r = [], u = Nl || {
+ time: Date.now(),
+ ease: wu,
+ delay: 0,
+ duration: 250
+ }, i = -1, o = this.length; ++i < o;) {
+ r.push(n = []);
+ for (var a = this[i], c = -1, l = a.length; ++c < l;)(t = a[c]) && Ho(t, c, e, u), n.push(t)
+ }
+ return Uo(r, e)
+ }, ya.interrupt = function () {
+ return this.each(Y)
+ }, Bo.select = function (n) {
+ var t = ["string" == typeof n ? pa(n, Go) : n];
+ return t.parentNode = Ko, S([t])
+ }, Bo.selectAll = function (n) {
+ var t = Jo("string" == typeof n ? va(n, Go) : n);
+ return t.parentNode = Ko, S([t])
+ };
+ var _a = Bo.select(Ko);
+ ya.on = function (n, t, e) {
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = !1);
+ for (e in n)this.each(I(e, n[e], t));
+ return this
+ }
+ if (2 > r)return (r = this.node()["__on" + n]) && r._;
+ e = !1
+ }
+ return this.each(I(n, t, e))
+ };
+ var ba = Bo.map({mouseenter: "mouseover", mouseleave: "mouseout"});
+ ba.forEach(function (n) {
+ "on" + n in Go && ba.remove(n)
+ });
+ var wa = "onselectstart"in Go ? null : m(Ko.style, "userSelect"), Sa = 0;
+ Bo.mouse = function (n) {
+ return $(n, b())
+ };
+ var ka = /WebKit/.test(Qo.navigator.userAgent) ? -1 : 0;
+ Bo.touch = function (n, t, e) {
+ if (arguments.length < 3 && (e = t, t = b().changedTouches), t)for (var r, u = 0, i = t.length; i > u; ++u)if ((r = t[u]).identifier === e)return $(n, r)
+ }, Bo.behavior.drag = function () {
+ function n() {
+ this.on("mousedown.drag", u).on("touchstart.drag", i)
+ }
+
+ function t(n, t, u, i, o) {
+ return function () {
+ function a() {
+ var n, e, r = t(h, v);
+ r && (n = r[0] - x[0], e = r[1] - x[1], p |= n | e, x = r, g({
+ type: "drag",
+ x: r[0] + l[0],
+ y: r[1] + l[1],
+ dx: n,
+ dy: e
+ }))
+ }
+
+ function c() {
+ t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && Bo.event.target === f), g({type: "dragend"}))
+ }
+
+ var l, s = this, f = Bo.event.target, h = s.parentNode, g = e.of(s, arguments), p = 0, v = n(), d = ".drag" + (null == v ? "" : "-" + v), m = Bo.select(u()).on(i + d, a).on(o + d, c), y = X(), x = t(h, v);
+ r ? (l = r.apply(s, arguments), l = [l.x - x[0], l.y - x[1]]) : l = [0, 0], g({type: "dragstart"})
+ }
+ }
+
+ var e = w(n, "drag", "dragstart", "dragend"), r = null, u = t(y, Bo.mouse, J, "mousemove", "mouseup"), i = t(B, Bo.touch, W, "touchmove", "touchend");
+ return n.origin = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, Bo.rebind(n, e, "on")
+ }, Bo.touches = function (n, t) {
+ return arguments.length < 2 && (t = b().touches), t ? Jo(t).map(function (t) {
+ var e = $(n, t);
+ return e.identifier = t.identifier, e
+ }) : []
+ };
+ var Ea = Math.PI, Aa = 2 * Ea, Ca = Ea / 2, Na = 1e-6, za = Na * Na, La = Ea / 180, Ta = 180 / Ea, qa = Math.SQRT2, Ra = 2, Da = 4;
+ Bo.interpolateZoom = function (n, t) {
+ function e(n) {
+ var t = n * y;
+ if (m) {
+ var e = et(v), o = i / (Ra * h) * (e * rt(qa * t + v) - tt(v));
+ return [r + o * l, u + o * s, i * e / et(qa * t + v)]
+ }
+ return [r + n * l, u + n * s, i * Math.exp(qa * t)]
+ }
+
+ var r = n[0], u = n[1], i = n[2], o = t[0], a = t[1], c = t[2], l = o - r, s = a - u, f = l * l + s * s, h = Math.sqrt(f), g = (c * c - i * i + Da * f) / (2 * i * Ra * h), p = (c * c - i * i - Da * f) / (2 * c * Ra * h), v = Math.log(Math.sqrt(g * g + 1) - g), d = Math.log(Math.sqrt(p * p + 1) - p), m = d - v, y = (m || Math.log(c / i)) / qa;
+ return e.duration = 1e3 * y, e
+ }, Bo.behavior.zoom = function () {
+ function n(n) {
+ n.on(A, l).on(ja + ".zoom", f).on("dblclick.zoom", h).on(z, s)
+ }
+
+ function t(n) {
+ return [(n[0] - S.x) / S.k, (n[1] - S.y) / S.k]
+ }
+
+ function e(n) {
+ return [n[0] * S.k + S.x, n[1] * S.k + S.y]
+ }
+
+ function r(n) {
+ S.k = Math.max(E[0], Math.min(E[1], n))
+ }
+
+ function u(n, t) {
+ t = e(t), S.x += n[0] - t[0], S.y += n[1] - t[1]
+ }
+
+ function i() {
+ x && x.domain(y.range().map(function (n) {
+ return (n - S.x) / S.k
+ }).map(y.invert)), b && b.domain(M.range().map(function (n) {
+ return (n - S.y) / S.k
+ }).map(M.invert))
+ }
+
+ function o(n) {
+ n({type: "zoomstart"})
+ }
+
+ function a(n) {
+ i(), n({type: "zoom", scale: S.k, translate: [S.x, S.y]})
+ }
+
+ function c(n) {
+ n({type: "zoomend"})
+ }
+
+ function l() {
+ function n() {
+ s = 1, u(Bo.mouse(r), h), a(l)
+ }
+
+ function e() {
+ f.on(C, null).on(N, null), g(s && Bo.event.target === i), c(l)
+ }
+
+ var r = this, i = Bo.event.target, l = L.of(r, arguments), s = 0, f = Bo.select(Qo).on(C, n).on(N, e), h = t(Bo.mouse(r)), g = X();
+ Y.call(r), o(l)
+ }
+
+ function s() {
+ function n() {
+ var n = Bo.touches(g);
+ return h = S.k, n.forEach(function (n) {
+ n.identifier in v && (v[n.identifier] = t(n))
+ }), n
+ }
+
+ function e() {
+ var t = Bo.event.target;
+ Bo.select(t).on(x, i).on(M, f), b.push(t);
+ for (var e = Bo.event.changedTouches, o = 0, c = e.length; c > o; ++o)v[e[o].identifier] = null;
+ var l = n(), s = Date.now();
+ if (1 === l.length) {
+ if (500 > s - m) {
+ var h = l[0], g = v[h.identifier];
+ r(2 * S.k), u(h, g), _(), a(p)
+ }
+ m = s
+ } else if (l.length > 1) {
+ var h = l[0], y = l[1], w = h[0] - y[0], k = h[1] - y[1];
+ d = w * w + k * k
+ }
+ }
+
+ function i() {
+ for (var n, t, e, i, o = Bo.touches(g), c = 0, l = o.length; l > c; ++c, i = null)if (e = o[c], i = v[e.identifier]) {
+ if (t)break;
+ n = e, t = i
+ }
+ if (i) {
+ var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s, f = d && Math.sqrt(s / d);
+ n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + i[0]) / 2, (t[1] + i[1]) / 2], r(f * h)
+ }
+ m = null, u(n, t), a(p)
+ }
+
+ function f() {
+ if (Bo.event.touches.length) {
+ for (var t = Bo.event.changedTouches, e = 0, r = t.length; r > e; ++e)delete v[t[e].identifier];
+ for (var u in v)return void n()
+ }
+ Bo.selectAll(b).on(y, null), w.on(A, l).on(z, s), k(), c(p)
+ }
+
+ var h, g = this, p = L.of(g, arguments), v = {}, d = 0, y = ".zoom-" + Bo.event.changedTouches[0].identifier, x = "touchmove" + y, M = "touchend" + y, b = [], w = Bo.select(g), k = X();
+ Y.call(g), e(), o(p), w.on(A, null).on(z, e)
+ }
+
+ function f() {
+ var n = L.of(this, arguments);
+ d ? clearTimeout(d) : (g = t(p = v || Bo.mouse(this)), Y.call(this), o(n)), d = setTimeout(function () {
+ d = null, c(n)
+ }, 50), _(), r(Math.pow(2, .002 * Pa()) * S.k), u(p, g), a(n)
+ }
+
+ function h() {
+ var n = L.of(this, arguments), e = Bo.mouse(this), i = t(e), l = Math.log(S.k) / Math.LN2;
+ o(n), r(Math.pow(2, Bo.event.shiftKey ? Math.ceil(l) - 1 : Math.floor(l) + 1)), u(e, i), a(n), c(n)
+ }
+
+ var g, p, v, d, m, y, x, M, b, S = {
+ x: 0,
+ y: 0,
+ k: 1
+ }, k = [960, 500], E = Ua, A = "mousedown.zoom", C = "mousemove.zoom", N = "mouseup.zoom", z = "touchstart.zoom", L = w(n, "zoomstart", "zoom", "zoomend");
+ return n.event = function (n) {
+ n.each(function () {
+ var n = L.of(this, arguments), t = S;
+ Cl ? Bo.select(this).transition().each("start.zoom", function () {
+ S = this.__chart__ || {x: 0, y: 0, k: 1}, o(n)
+ }).tween("zoom:zoom", function () {
+ var e = k[0], r = k[1], u = e / 2, i = r / 2, o = Bo.interpolateZoom([(u - S.x) / S.k, (i - S.y) / S.k, e / S.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);
+ return function (t) {
+ var r = o(t), c = e / r[2];
+ this.__chart__ = S = {x: u - r[0] * c, y: i - r[1] * c, k: c}, a(n)
+ }
+ }).each("end.zoom", function () {
+ c(n)
+ }) : (this.__chart__ = S, o(n), a(n), c(n))
+ })
+ }, n.translate = function (t) {
+ return arguments.length ? (S = {x: +t[0], y: +t[1], k: S.k}, i(), n) : [S.x, S.y]
+ }, n.scale = function (t) {
+ return arguments.length ? (S = {x: S.x, y: S.y, k: +t}, i(), n) : S.k
+ }, n.scaleExtent = function (t) {
+ return arguments.length ? (E = null == t ? Ua : [+t[0], +t[1]], n) : E
+ }, n.center = function (t) {
+ return arguments.length ? (v = t && [+t[0], +t[1]], n) : v
+ }, n.size = function (t) {
+ return arguments.length ? (k = t && [+t[0], +t[1]], n) : k
+ }, n.x = function (t) {
+ return arguments.length ? (x = t, y = t.copy(), S = {x: 0, y: 0, k: 1}, n) : x
+ }, n.y = function (t) {
+ return arguments.length ? (b = t, M = t.copy(), S = {x: 0, y: 0, k: 1}, n) : b
+ }, Bo.rebind(n, L, "on")
+ };
+ var Pa, Ua = [0, 1 / 0], ja = "onwheel"in Go ? (Pa = function () {
+ return -Bo.event.deltaY * (Bo.event.deltaMode ? 120 : 1)
+ }, "wheel") : "onmousewheel"in Go ? (Pa = function () {
+ return Bo.event.wheelDelta
+ }, "mousewheel") : (Pa = function () {
+ return -Bo.event.detail
+ }, "MozMousePixelScroll");
+ Bo.color = it, it.prototype.toString = function () {
+ return this.rgb() + ""
+ }, Bo.hsl = ot;
+ var Fa = ot.prototype = new it;
+ Fa.brighter = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, this.l / n)
+ }, Fa.darker = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, n * this.l)
+ }, Fa.rgb = function () {
+ return at(this.h, this.s, this.l)
+ }, Bo.hcl = ct;
+ var Ha = ct.prototype = new it;
+ Ha.brighter = function (n) {
+ return new ct(this.h, this.c, Math.min(100, this.l + Oa * (arguments.length ? n : 1)))
+ }, Ha.darker = function (n) {
+ return new ct(this.h, this.c, Math.max(0, this.l - Oa * (arguments.length ? n : 1)))
+ }, Ha.rgb = function () {
+ return lt(this.h, this.c, this.l).rgb()
+ }, Bo.lab = st;
+ var Oa = 18, Ya = .95047, Ia = 1, Za = 1.08883, Va = st.prototype = new it;
+ Va.brighter = function (n) {
+ return new st(Math.min(100, this.l + Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.darker = function (n) {
+ return new st(Math.max(0, this.l - Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.rgb = function () {
+ return ft(this.l, this.a, this.b)
+ }, Bo.rgb = dt;
+ var Xa = dt.prototype = new it;
+ Xa.brighter = function (n) {
+ n = Math.pow(.7, arguments.length ? n : 1);
+ var t = this.r, e = this.g, r = this.b, u = 30;
+ return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new dt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new dt(u, u, u)
+ }, Xa.darker = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new dt(n * this.r, n * this.g, n * this.b)
+ }, Xa.hsl = function () {
+ return _t(this.r, this.g, this.b)
+ }, Xa.toString = function () {
+ return "#" + xt(this.r) + xt(this.g) + xt(this.b)
+ };
+ var $a = Bo.map({
+ aliceblue: 15792383,
+ antiquewhite: 16444375,
+ aqua: 65535,
+ aquamarine: 8388564,
+ azure: 15794175,
+ beige: 16119260,
+ bisque: 16770244,
+ black: 0,
+ blanchedalmond: 16772045,
+ blue: 255,
+ blueviolet: 9055202,
+ brown: 10824234,
+ burlywood: 14596231,
+ cadetblue: 6266528,
+ chartreuse: 8388352,
+ chocolate: 13789470,
+ coral: 16744272,
+ cornflowerblue: 6591981,
+ cornsilk: 16775388,
+ crimson: 14423100,
+ cyan: 65535,
+ darkblue: 139,
+ darkcyan: 35723,
+ darkgoldenrod: 12092939,
+ darkgray: 11119017,
+ darkgreen: 25600,
+ darkgrey: 11119017,
+ darkkhaki: 12433259,
+ darkmagenta: 9109643,
+ darkolivegreen: 5597999,
+ darkorange: 16747520,
+ darkorchid: 10040012,
+ darkred: 9109504,
+ darksalmon: 15308410,
+ darkseagreen: 9419919,
+ darkslateblue: 4734347,
+ darkslategray: 3100495,
+ darkslategrey: 3100495,
+ darkturquoise: 52945,
+ darkviolet: 9699539,
+ deeppink: 16716947,
+ deepskyblue: 49151,
+ dimgray: 6908265,
+ dimgrey: 6908265,
+ dodgerblue: 2003199,
+ firebrick: 11674146,
+ floralwhite: 16775920,
+ forestgreen: 2263842,
+ fuchsia: 16711935,
+ gainsboro: 14474460,
+ ghostwhite: 16316671,
+ gold: 16766720,
+ goldenrod: 14329120,
+ gray: 8421504,
+ green: 32768,
+ greenyellow: 11403055,
+ grey: 8421504,
+ honeydew: 15794160,
+ hotpink: 16738740,
+ indianred: 13458524,
+ indigo: 4915330,
+ ivory: 16777200,
+ khaki: 15787660,
+ lavender: 15132410,
+ lavenderblush: 16773365,
+ lawngreen: 8190976,
+ lemonchiffon: 16775885,
+ lightblue: 11393254,
+ lightcoral: 15761536,
+ lightcyan: 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray: 13882323,
+ lightgreen: 9498256,
+ lightgrey: 13882323,
+ lightpink: 16758465,
+ lightsalmon: 16752762,
+ lightseagreen: 2142890,
+ lightskyblue: 8900346,
+ lightslategray: 7833753,
+ lightslategrey: 7833753,
+ lightsteelblue: 11584734,
+ lightyellow: 16777184,
+ lime: 65280,
+ limegreen: 3329330,
+ linen: 16445670,
+ magenta: 16711935,
+ maroon: 8388608,
+ mediumaquamarine: 6737322,
+ mediumblue: 205,
+ mediumorchid: 12211667,
+ mediumpurple: 9662683,
+ mediumseagreen: 3978097,
+ mediumslateblue: 8087790,
+ mediumspringgreen: 64154,
+ mediumturquoise: 4772300,
+ mediumvioletred: 13047173,
+ midnightblue: 1644912,
+ mintcream: 16121850,
+ mistyrose: 16770273,
+ moccasin: 16770229,
+ navajowhite: 16768685,
+ navy: 128,
+ oldlace: 16643558,
+ olive: 8421376,
+ olivedrab: 7048739,
+ orange: 16753920,
+ orangered: 16729344,
+ orchid: 14315734,
+ palegoldenrod: 15657130,
+ palegreen: 10025880,
+ paleturquoise: 11529966,
+ palevioletred: 14381203,
+ papayawhip: 16773077,
+ peachpuff: 16767673,
+ peru: 13468991,
+ pink: 16761035,
+ plum: 14524637,
+ powderblue: 11591910,
+ purple: 8388736,
+ red: 16711680,
+ rosybrown: 12357519,
+ royalblue: 4286945,
+ saddlebrown: 9127187,
+ salmon: 16416882,
+ sandybrown: 16032864,
+ seagreen: 3050327,
+ seashell: 16774638,
+ sienna: 10506797,
+ silver: 12632256,
+ skyblue: 8900331,
+ slateblue: 6970061,
+ slategray: 7372944,
+ slategrey: 7372944,
+ snow: 16775930,
+ springgreen: 65407,
+ steelblue: 4620980,
+ tan: 13808780,
+ teal: 32896,
+ thistle: 14204888,
+ tomato: 16737095,
+ turquoise: 4251856,
+ violet: 15631086,
+ wheat: 16113331,
+ white: 16777215,
+ whitesmoke: 16119285,
+ yellow: 16776960,
+ yellowgreen: 10145074
+ });
+ $a.forEach(function (n, t) {
+ $a.set(n, mt(t))
+ }), Bo.functor = kt, Bo.xhr = At(Et), Bo.dsv = function (n, t) {
+ function e(n, e, i) {
+ arguments.length < 3 && (i = e, e = null);
+ var o = Ct(n, t, null == e ? r : u(e), i);
+ return o.row = function (n) {
+ return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e
+ }, o
+ }
+
+ function r(n) {
+ return e.parse(n.responseText)
+ }
+
+ function u(n) {
+ return function (t) {
+ return e.parse(t.responseText, n)
+ }
+ }
+
+ function i(t) {
+ return t.map(o).join(n)
+ }
+
+ function o(n) {
+ return a.test(n) ? '"' + n.replace(/\"/g, '""') + '"' : n
+ }
+
+ var a = new RegExp('["' + n + "\n]"), c = n.charCodeAt(0);
+ return e.parse = function (n, t) {
+ var r;
+ return e.parseRows(n, function (n, e) {
+ if (r)return r(n, e - 1);
+ var u = new Function("d", "return {" + n.map(function (n, t) {
+ return JSON.stringify(n) + ": d[" + t + "]"
+ }).join(",") + "}");
+ r = t ? function (n, e) {
+ return t(u(n), e)
+ } : u
+ })
+ }, e.parseRows = function (n, t) {
+ function e() {
+ if (s >= l)return o;
+ if (u)return u = !1, i;
+ var t = s;
+ if (34 === n.charCodeAt(t)) {
+ for (var e = t; e++ < l;)if (34 === n.charCodeAt(e)) {
+ if (34 !== n.charCodeAt(e + 1))break;
+ ++e
+ }
+ s = e + 2;
+ var r = n.charCodeAt(e + 1);
+ return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/""/g, '"')
+ }
+ for (; l > s;) {
+ var r = n.charCodeAt(s++), a = 1;
+ if (10 === r)u = !0; else if (13 === r)u = !0, 10 === n.charCodeAt(s) && (++s, ++a); else if (r !== c)continue;
+ return n.slice(t, s - a)
+ }
+ return n.slice(t)
+ }
+
+ for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0; (r = e()) !== o;) {
+ for (var h = []; r !== i && r !== o;)h.push(r), r = e();
+ t && null == (h = t(h, f++)) || a.push(h)
+ }
+ return a
+ }, e.format = function (t) {
+ if (Array.isArray(t[0]))return e.formatRows(t);
+ var r = new v, u = [];
+ return t.forEach(function (n) {
+ for (var t in n)r.has(t) || u.push(r.add(t))
+ }), [u.map(o).join(n)].concat(t.map(function (t) {
+ return u.map(function (n) {
+ return o(t[n])
+ }).join(n)
+ })).join("\n")
+ }, e.formatRows = function (n) {
+ return n.map(i).join("\n")
+ }, e
+ }, Bo.csv = Bo.dsv(",", "text/csv"), Bo.tsv = Bo.dsv(" ", "text/tab-separated-values");
+ var Ba, Wa, Ja, Ga, Ka, Qa = Qo[m(Qo, "requestAnimationFrame")] || function (n) {
+ setTimeout(n, 17)
+ };
+ Bo.timer = function (n, t, e) {
+ var r = arguments.length;
+ 2 > r && (t = 0), 3 > r && (e = Date.now());
+ var u = e + t, i = {c: n, t: u, f: !1, n: null};
+ Wa ? Wa.n = i : Ba = i, Wa = i, Ja || (Ga = clearTimeout(Ga), Ja = 1, Qa(Lt))
+ }, Bo.timer.flush = function () {
+ Tt(), qt()
+ }, Bo.round = function (n, t) {
+ return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)
+ };
+ var nc = ["y", "z", "a", "f", "p", "n", "\xb5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"].map(Dt);
+ Bo.formatPrefix = function (n, t) {
+ var e = 0;
+ return n && (0 > n && (n *= -1), t && (n = Bo.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), nc[8 + e / 3]
+ };
+ var tc = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i, ec = Bo.map({
+ b: function (n) {
+ return n.toString(2)
+ }, c: function (n) {
+ return String.fromCharCode(n)
+ }, o: function (n) {
+ return n.toString(8)
+ }, x: function (n) {
+ return n.toString(16)
+ }, X: function (n) {
+ return n.toString(16).toUpperCase()
+ }, g: function (n, t) {
+ return n.toPrecision(t)
+ }, e: function (n, t) {
+ return n.toExponential(t)
+ }, f: function (n, t) {
+ return n.toFixed(t)
+ }, r: function (n, t) {
+ return (n = Bo.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))
+ }
+ }), rc = Bo.time = {}, uc = Date;
+ jt.prototype = {
+ getDate: function () {
+ return this._.getUTCDate()
+ }, getDay: function () {
+ return this._.getUTCDay()
+ }, getFullYear: function () {
+ return this._.getUTCFullYear()
+ }, getHours: function () {
+ return this._.getUTCHours()
+ }, getMilliseconds: function () {
+ return this._.getUTCMilliseconds()
+ }, getMinutes: function () {
+ return this._.getUTCMinutes()
+ }, getMonth: function () {
+ return this._.getUTCMonth()
+ }, getSeconds: function () {
+ return this._.getUTCSeconds()
+ }, getTime: function () {
+ return this._.getTime()
+ }, getTimezoneOffset: function () {
+ return 0
+ }, valueOf: function () {
+ return this._.valueOf()
+ }, setDate: function () {
+ ic.setUTCDate.apply(this._, arguments)
+ }, setDay: function () {
+ ic.setUTCDay.apply(this._, arguments)
+ }, setFullYear: function () {
+ ic.setUTCFullYear.apply(this._, arguments)
+ }, setHours: function () {
+ ic.setUTCHours.apply(this._, arguments)
+ }, setMilliseconds: function () {
+ ic.setUTCMilliseconds.apply(this._, arguments)
+ }, setMinutes: function () {
+ ic.setUTCMinutes.apply(this._, arguments)
+ }, setMonth: function () {
+ ic.setUTCMonth.apply(this._, arguments)
+ }, setSeconds: function () {
+ ic.setUTCSeconds.apply(this._, arguments)
+ }, setTime: function () {
+ ic.setTime.apply(this._, arguments)
+ }
+ };
+ var ic = Date.prototype;
+ rc.year = Ft(function (n) {
+ return n = rc.day(n), n.setMonth(0, 1), n
+ }, function (n, t) {
+ n.setFullYear(n.getFullYear() + t)
+ }, function (n) {
+ return n.getFullYear()
+ }), rc.years = rc.year.range, rc.years.utc = rc.year.utc.range, rc.day = Ft(function (n) {
+ var t = new uc(2e3, 0);
+ return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t
+ }, function (n, t) {
+ n.setDate(n.getDate() + t)
+ }, function (n) {
+ return n.getDate() - 1
+ }), rc.days = rc.day.range, rc.days.utc = rc.day.utc.range, rc.dayOfYear = function (n) {
+ var t = rc.year(n);
+ return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)
+ }, ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"].forEach(function (n, t) {
+ t = 7 - t;
+ var e = rc[n] = Ft(function (n) {
+ return (n = rc.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n
+ }, function (n, t) {
+ n.setDate(n.getDate() + 7 * Math.floor(t))
+ }, function (n) {
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)
+ });
+ rc[n + "s"] = e.range, rc[n + "s"].utc = e.utc.range, rc[n + "OfYear"] = function (n) {
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7)
+ }
+ }), rc.week = rc.sunday, rc.weeks = rc.sunday.range, rc.weeks.utc = rc.sunday.utc.range, rc.weekOfYear = rc.sundayOfYear;
+ var oc = {"-": "", _: " ", 0: "0"}, ac = /^\s*\d+/, cc = /^%/;
+ Bo.locale = function (n) {
+ return {numberFormat: Pt(n), timeFormat: Ot(n)}
+ };
+ var lc = Bo.locale({
+ decimal: ".",
+ thousands: ",",
+ grouping: [3],
+ currency: ["$", ""],
+ dateTime: "%a %b %e %X %Y",
+ date: "%m/%d/%Y",
+ time: "%H:%M:%S",
+ periods: ["AM", "PM"],
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+ });
+ Bo.format = lc.numberFormat, Bo.geo = {}, ce.prototype = {
+ s: 0, t: 0, add: function (n) {
+ le(n, this.t, sc), le(sc.s, this.s, this), this.s ? this.t += sc.t : this.s = sc.t
+ }, reset: function () {
+ this.s = this.t = 0
+ }, valueOf: function () {
+ return this.s
+ }
+ };
+ var sc = new ce;
+ Bo.geo.stream = function (n, t) {
+ n && fc.hasOwnProperty(n.type) ? fc[n.type](n, t) : se(n, t)
+ };
+ var fc = {
+ Feature: function (n, t) {
+ se(n.geometry, t)
+ }, FeatureCollection: function (n, t) {
+ for (var e = n.features, r = -1, u = e.length; ++r < u;)se(e[r].geometry, t)
+ }
+ }, hc = {
+ Sphere: function (n, t) {
+ t.sphere()
+ }, Point: function (n, t) {
+ n = n.coordinates, t.point(n[0], n[1], n[2])
+ }, MultiPoint: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)n = e[r], t.point(n[0], n[1], n[2])
+ }, LineString: function (n, t) {
+ fe(n.coordinates, t, 0)
+ }, MultiLineString: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)fe(e[r], t, 0)
+ }, Polygon: function (n, t) {
+ he(n.coordinates, t)
+ }, MultiPolygon: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)he(e[r], t)
+ }, GeometryCollection: function (n, t) {
+ for (var e = n.geometries, r = -1, u = e.length; ++r < u;)se(e[r], t)
+ }
+ };
+ Bo.geo.area = function (n) {
+ return gc = 0, Bo.geo.stream(n, vc), gc
+ };
+ var gc, pc = new ce, vc = {
+ sphere: function () {
+ gc += 4 * Ea
+ }, point: y, lineStart: y, lineEnd: y, polygonStart: function () {
+ pc.reset(), vc.lineStart = ge
+ }, polygonEnd: function () {
+ var n = 2 * pc;
+ gc += 0 > n ? 4 * Ea + n : n, vc.lineStart = vc.lineEnd = vc.point = y
+ }
+ };
+ Bo.geo.bounds = function () {
+ function n(n, t) {
+ x.push(M = [s = n, h = n]), f > t && (f = t), t > g && (g = t)
+ }
+
+ function t(t, e) {
+ var r = pe([t * La, e * La]);
+ if (m) {
+ var u = de(m, r), i = [u[1], -u[0], 0], o = de(i, u);
+ xe(o), o = Me(o);
+ var c = t - p, l = c > 0 ? 1 : -1, v = o[0] * Ta * l, d = ca(c) > 180;
+ if (d ^ (v > l * p && l * t > v)) {
+ var y = o[1] * Ta;
+ y > g && (g = y)
+ } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {
+ var y = -o[1] * Ta;
+ f > y && (f = y)
+ } else f > e && (f = e), e > g && (g = e);
+ d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)
+ } else n(t, e);
+ m = r, p = t
+ }
+
+ function e() {
+ _.point = t
+ }
+
+ function r() {
+ M[0] = s, M[1] = h, _.point = n, m = null
+ }
+
+ function u(n, e) {
+ if (m) {
+ var r = n - p;
+ y += ca(r) > 180 ? r + (r > 0 ? 360 : -360) : r
+ } else v = n, d = e;
+ vc.point(n, e), t(n, e)
+ }
+
+ function i() {
+ vc.lineStart()
+ }
+
+ function o() {
+ u(v, d), vc.lineEnd(), ca(y) > Na && (s = -(h = 180)), M[0] = s, M[1] = h, m = null
+ }
+
+ function a(n, t) {
+ return (t -= n) < 0 ? t + 360 : t
+ }
+
+ function c(n, t) {
+ return n[0] - t[0]
+ }
+
+ function l(n, t) {
+ return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n
+ }
+
+ var s, f, h, g, p, v, d, m, y, x, M, _ = {
+ point: n, lineStart: e, lineEnd: r, polygonStart: function () {
+ _.point = u, _.lineStart = i, _.lineEnd = o, y = 0, vc.polygonStart()
+ }, polygonEnd: function () {
+ vc.polygonEnd(), _.point = n, _.lineStart = e, _.lineEnd = r, 0 > pc ? (s = -(h = 180), f = -(g = 90)) : y > Na ? g = 90 : -Na > y && (f = -90), M[0] = s, M[1] = h
+ }
+ };
+ return function (n) {
+ g = h = -(s = f = 1 / 0), x = [], Bo.geo.stream(n, _);
+ var t = x.length;
+ if (t) {
+ x.sort(c);
+ for (var e, r = 1, u = x[0], i = [u]; t > r; ++r)e = x[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);
+ for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r)e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])
+ }
+ return x = M = null, 1 / 0 === s || 1 / 0 === f ? [[0 / 0, 0 / 0], [0 / 0, 0 / 0]] : [[s, f], [h, g]]
+ }
+ }(), Bo.geo.centroid = function (n) {
+ dc = mc = yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, Ac);
+ var t = Sc, e = kc, r = Ec, u = t * t + e * e + r * r;
+ return za > u && (t = _c, e = bc, r = wc, Na > mc && (t = yc, e = xc, r = Mc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Ta, nt(r / Math.sqrt(u)) * Ta]
+ };
+ var dc, mc, yc, xc, Mc, _c, bc, wc, Sc, kc, Ec, Ac = {
+ sphere: y,
+ point: be,
+ lineStart: Se,
+ lineEnd: ke,
+ polygonStart: function () {
+ Ac.lineStart = Ee
+ },
+ polygonEnd: function () {
+ Ac.lineStart = Se
+ }
+ }, Cc = Le(Ae, De, Ue, [-Ea, -Ea / 2]), Nc = 1e9;
+ Bo.geo.clipExtent = function () {
+ var n, t, e, r, u, i, o = {
+ stream: function (n) {
+ return u && (u.valid = !1), u = i(n), u.valid = !0, u
+ }, extent: function (a) {
+ return arguments.length ? (i = Oe(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [[n, t], [e, r]]
+ }
+ };
+ return o.extent([[0, 0], [960, 500]])
+ }, (Bo.geo.conicEqualArea = function () {
+ return Ie(Ze)
+ }).raw = Ze, Bo.geo.albers = function () {
+ return Bo.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)
+ }, Bo.geo.albersUsa = function () {
+ function n(n) {
+ var i = n[0], o = n[1];
+ return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t
+ }
+
+ var t, e, r, u, i = Bo.geo.albers(), o = Bo.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), a = Bo.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), c = {
+ point: function (n, e) {
+ t = [n, e]
+ }
+ };
+ return n.invert = function (n) {
+ var t = i.scale(), e = i.translate(), r = (n[0] - e[0]) / t, u = (n[1] - e[1]) / t;
+ return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)
+ }, n.stream = function (n) {
+ var t = i.stream(n), e = o.stream(n), r = a.stream(n);
+ return {
+ point: function (n, u) {
+ t.point(n, u), e.point(n, u), r.point(n, u)
+ }, sphere: function () {
+ t.sphere(), e.sphere(), r.sphere()
+ }, lineStart: function () {
+ t.lineStart(), e.lineStart(), r.lineStart()
+ }, lineEnd: function () {
+ t.lineEnd(), e.lineEnd(), r.lineEnd()
+ }, polygonStart: function () {
+ t.polygonStart(), e.polygonStart(), r.polygonStart()
+ }, polygonEnd: function () {
+ t.polygonEnd(), e.polygonEnd(), r.polygonEnd()
+ }
+ }
+ }, n.precision = function (t) {
+ return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()
+ }, n.scale = function (t) {
+ return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()
+ }, n.translate = function (t) {
+ if (!arguments.length)return i.translate();
+ var l = i.scale(), s = +t[0], f = +t[1];
+ return e = i.translate(t).clipExtent([[s - .455 * l, f - .238 * l], [s + .455 * l, f + .238 * l]]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([[s - .425 * l + Na, f + .12 * l + Na], [s - .214 * l - Na, f + .234 * l - Na]]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([[s - .214 * l + Na, f + .166 * l + Na], [s - .115 * l - Na, f + .234 * l - Na]]).stream(c).point, n
+ }, n.scale(1070)
+ };
+ var zc, Lc, Tc, qc, Rc, Dc, Pc = {
+ point: y, lineStart: y, lineEnd: y, polygonStart: function () {
+ Lc = 0, Pc.lineStart = Ve
+ }, polygonEnd: function () {
+ Pc.lineStart = Pc.lineEnd = Pc.point = y, zc += ca(Lc / 2)
+ }
+ }, Uc = {point: Xe, lineStart: y, lineEnd: y, polygonStart: y, polygonEnd: y}, jc = {
+ point: We,
+ lineStart: Je,
+ lineEnd: Ge,
+ polygonStart: function () {
+ jc.lineStart = Ke
+ },
+ polygonEnd: function () {
+ jc.point = We, jc.lineStart = Je, jc.lineEnd = Ge
+ }
+ };
+ Bo.geo.path = function () {
+ function n(n) {
+ return n && ("function" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), Bo.geo.stream(n, o)), i.result()
+ }
+
+ function t() {
+ return o = null, n
+ }
+
+ var e, r, u, i, o, a = 4.5;
+ return n.area = function (n) {
+ return zc = 0, Bo.geo.stream(n, u(Pc)), zc
+ }, n.centroid = function (n) {
+ return yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, u(jc)), Ec ? [Sc / Ec, kc / Ec] : wc ? [_c / wc, bc / wc] : Mc ? [yc / Mc, xc / Mc] : [0 / 0, 0 / 0]
+ }, n.bounds = function (n) {
+ return Rc = Dc = -(Tc = qc = 1 / 0), Bo.geo.stream(n, u(Uc)), [[Tc, qc], [Rc, Dc]]
+ }, n.projection = function (n) {
+ return arguments.length ? (u = (e = n) ? n.stream || tr(n) : Et, t()) : e
+ }, n.context = function (n) {
+ return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), "function" != typeof a && i.pointRadius(a), t()) : r
+ }, n.pointRadius = function (t) {
+ return arguments.length ? (a = "function" == typeof t ? t : (i.pointRadius(+t), +t), n) : a
+ }, n.projection(Bo.geo.albersUsa()).context(null)
+ }, Bo.geo.transform = function (n) {
+ return {
+ stream: function (t) {
+ var e = new er(t);
+ for (var r in n)e[r] = n[r];
+ return e
+ }
+ }
+ }, er.prototype = {
+ point: function (n, t) {
+ this.stream.point(n, t)
+ }, sphere: function () {
+ this.stream.sphere()
+ }, lineStart: function () {
+ this.stream.lineStart()
+ }, lineEnd: function () {
+ this.stream.lineEnd()
+ }, polygonStart: function () {
+ this.stream.polygonStart()
+ }, polygonEnd: function () {
+ this.stream.polygonEnd()
+ }
+ }, Bo.geo.projection = ur, Bo.geo.projectionMutator = ir, (Bo.geo.equirectangular = function () {
+ return ur(ar)
+ }).raw = ar.invert = ar, Bo.geo.rotation = function (n) {
+ function t(t) {
+ return t = n(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }
+
+ return n = lr(n[0] % 360 * La, n[1] * La, n.length > 2 ? n[2] * La : 0), t.invert = function (t) {
+ return t = n.invert(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }, t
+ }, cr.invert = ar, Bo.geo.circle = function () {
+ function n() {
+ var n = "function" == typeof r ? r.apply(this, arguments) : r, t = lr(-n[0] * La, -n[1] * La, 0).invert, u = [];
+ return e(null, null, 1, {
+ point: function (n, e) {
+ u.push(n = t(n, e)), n[0] *= Ta, n[1] *= Ta
+ }
+ }), {type: "Polygon", coordinates: [u]}
+ }
+
+ var t, e, r = [0, 0], u = 6;
+ return n.origin = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.angle = function (r) {
+ return arguments.length ? (e = gr((t = +r) * La, u * La), n) : t
+ }, n.precision = function (r) {
+ return arguments.length ? (e = gr(t * La, (u = +r) * La), n) : u
+ }, n.angle(90)
+ }, Bo.geo.distance = function (n, t) {
+ var e, r = (t[0] - n[0]) * La, u = n[1] * La, i = t[1] * La, o = Math.sin(r), a = Math.cos(r), c = Math.sin(u), l = Math.cos(u), s = Math.sin(i), f = Math.cos(i);
+ return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)
+ }, Bo.geo.graticule = function () {
+ function n() {
+ return {type: "MultiLineString", coordinates: t()}
+ }
+
+ function t() {
+ return Bo.range(Math.ceil(i / d) * d, u, d).map(h).concat(Bo.range(Math.ceil(l / m) * m, c, m).map(g)).concat(Bo.range(Math.ceil(r / p) * p, e, p).filter(function (n) {
+ return ca(n % d) > Na
+ }).map(s)).concat(Bo.range(Math.ceil(a / v) * v, o, v).filter(function (n) {
+ return ca(n % m) > Na
+ }).map(f))
+ }
+
+ var e, r, u, i, o, a, c, l, s, f, h, g, p = 10, v = p, d = 90, m = 360, y = 2.5;
+ return n.lines = function () {
+ return t().map(function (n) {
+ return {type: "LineString", coordinates: n}
+ })
+ }, n.outline = function () {
+ return {
+ type: "Polygon",
+ coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]
+ }
+ }, n.extent = function (t) {
+ return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()
+ }, n.majorExtent = function (t) {
+ return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [[i, l], [u, c]]
+ }, n.minorExtent = function (t) {
+ return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [[r, a], [e, o]]
+ }, n.step = function (t) {
+ return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()
+ }, n.majorStep = function (t) {
+ return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]
+ }, n.minorStep = function (t) {
+ return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]
+ }, n.precision = function (t) {
+ return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y
+ }, n.majorExtent([[-180, -90 + Na], [180, 90 - Na]]).minorExtent([[-180, -80 - Na], [180, 80 + Na]])
+ }, Bo.geo.greatArc = function () {
+ function n() {
+ return {type: "LineString", coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]}
+ }
+
+ var t, e, r = mr, u = yr;
+ return n.distance = function () {
+ return Bo.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))
+ }, n.source = function (e) {
+ return arguments.length ? (r = e, t = "function" == typeof e ? null : e, n) : r
+ }, n.target = function (t) {
+ return arguments.length ? (u = t, e = "function" == typeof t ? null : t, n) : u
+ }, n.precision = function () {
+ return arguments.length ? n : 0
+ }, n
+ }, Bo.geo.interpolate = function (n, t) {
+ return xr(n[0] * La, n[1] * La, t[0] * La, t[1] * La)
+ }, Bo.geo.length = function (n) {
+ return Fc = 0, Bo.geo.stream(n, Hc), Fc
+ };
+ var Fc, Hc = {
+ sphere: y,
+ point: y,
+ lineStart: Mr,
+ lineEnd: y,
+ polygonStart: y,
+ polygonEnd: y
+ }, Oc = _r(function (n) {
+ return Math.sqrt(2 / (1 + n))
+ }, function (n) {
+ return 2 * Math.asin(n / 2)
+ });
+ (Bo.geo.azimuthalEqualArea = function () {
+ return ur(Oc)
+ }).raw = Oc;
+ var Yc = _r(function (n) {
+ var t = Math.acos(n);
+ return t && t / Math.sin(t)
+ }, Et);
+ (Bo.geo.azimuthalEquidistant = function () {
+ return ur(Yc)
+ }).raw = Yc, (Bo.geo.conicConformal = function () {
+ return Ie(br)
+ }).raw = br, (Bo.geo.conicEquidistant = function () {
+ return Ie(wr)
+ }).raw = wr;
+ var Ic = _r(function (n) {
+ return 1 / n
+ }, Math.atan);
+ (Bo.geo.gnomonic = function () {
+ return ur(Ic)
+ }).raw = Ic, Sr.invert = function (n, t) {
+ return [n, 2 * Math.atan(Math.exp(t)) - Ca]
+ }, (Bo.geo.mercator = function () {
+ return kr(Sr)
+ }).raw = Sr;
+ var Zc = _r(function () {
+ return 1
+ }, Math.asin);
+ (Bo.geo.orthographic = function () {
+ return ur(Zc)
+ }).raw = Zc;
+ var Vc = _r(function (n) {
+ return 1 / (1 + n)
+ }, function (n) {
+ return 2 * Math.atan(n)
+ });
+ (Bo.geo.stereographic = function () {
+ return ur(Vc)
+ }).raw = Vc, Er.invert = function (n, t) {
+ return [-t, 2 * Math.atan(Math.exp(n)) - Ca]
+ }, (Bo.geo.transverseMercator = function () {
+ var n = kr(Er), t = n.center, e = n.rotate;
+ return n.center = function (n) {
+ return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])
+ }, n.rotate = function (n) {
+ return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])
+ }, e([0, 0, 90])
+ }).raw = Er, Bo.geom = {}, Bo.geom.hull = function (n) {
+ function t(n) {
+ if (n.length < 3)return [];
+ var t, u = kt(e), i = kt(r), o = n.length, a = [], c = [];
+ for (t = 0; o > t; t++)a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);
+ for (a.sort(zr), t = 0; o > t; t++)c.push([a[t][0], -a[t][1]]);
+ var l = Nr(a), s = Nr(c), f = s[0] === l[0], h = s[s.length - 1] === l[l.length - 1], g = [];
+ for (t = l.length - 1; t >= 0; --t)g.push(n[a[l[t]][2]]);
+ for (t = +f; t < s.length - h; ++t)g.push(n[a[s[t]][2]]);
+ return g
+ }
+
+ var e = Ar, r = Cr;
+ return arguments.length ? t(n) : (t.x = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t)
+ }, Bo.geom.polygon = function (n) {
+ return ga(n, Xc), n
+ };
+ var Xc = Bo.geom.polygon.prototype = [];
+ Xc.area = function () {
+ for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;)n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];
+ return .5 * u
+ }, Xc.centroid = function (n) {
+ var t, e, r = -1, u = this.length, i = 0, o = 0, a = this[u - 1];
+ for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;)t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;
+ return [i * n, o * n]
+ }, Xc.clip = function (n) {
+ for (var t, e, r, u, i, o, a = qr(n), c = -1, l = this.length - qr(this), s = this[l - 1]; ++c < l;) {
+ for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;)o = t[e], Lr(o, s, u) ? (Lr(i, s, u) || n.push(Tr(i, o, s, u)), n.push(o)) : Lr(i, s, u) && n.push(Tr(i, o, s, u)), i = o;
+ a && n.push(n[0]), s = u
+ }
+ return n
+ };
+ var $c, Bc, Wc, Jc, Gc, Kc = [], Qc = [];
+ Or.prototype.prepare = function () {
+ for (var n, t = this.edges, e = t.length; e--;)n = t[e].edge, n.b && n.a || t.splice(e, 1);
+ return t.sort(Ir), t.length
+ }, Qr.prototype = {
+ start: function () {
+ return this.edge.l === this.site ? this.edge.a : this.edge.b
+ }, end: function () {
+ return this.edge.l === this.site ? this.edge.b : this.edge.a
+ }
+ }, nu.prototype = {
+ insert: function (n, t) {
+ var e, r, u;
+ if (n) {
+ if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {
+ for (n = n.R; n.L;)n = n.L;
+ n.L = t
+ } else n.R = t;
+ e = n
+ } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);
+ for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;)r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;
+ this._.C = !1
+ }, remove: function (n) {
+ n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;
+ var t, e, r, u = n.U, i = n.L, o = n.R;
+ if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {
+ if (n && n.C)return n.C = !1, void 0;
+ do {
+ if (n === this._)break;
+ if (n === u.L) {
+ if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {
+ t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;
+ break
+ }
+ } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {
+ t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;
+ break
+ }
+ t.C = !0, n = u, u = u.U
+ } while (!n.C);
+ n && (n.C = !1)
+ }
+ }
+ }, Bo.geom.voronoi = function (n) {
+ function t(n) {
+ var t = new Array(n.length), r = a[0][0], u = a[0][1], i = a[1][0], o = a[1][1];
+ return iu(e(n), a).cells.forEach(function (e, a) {
+ var c = e.edges, l = e.site, s = t[a] = c.length ? c.map(function (n) {
+ var t = n.start();
+ return [t.x, t.y]
+ }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [[r, o], [i, o], [i, u], [r, u]] : [];
+ s.point = n[a]
+ }), t
+ }
+
+ function e(n) {
+ return n.map(function (n, t) {
+ return {x: Math.round(i(n, t) / Na) * Na, y: Math.round(o(n, t) / Na) * Na, i: t}
+ })
+ }
+
+ var r = Ar, u = Cr, i = r, o = u, a = nl;
+ return n ? t(n) : (t.links = function (n) {
+ return iu(e(n)).edges.filter(function (n) {
+ return n.l && n.r
+ }).map(function (t) {
+ return {source: n[t.l.i], target: n[t.r.i]}
+ })
+ }, t.triangles = function (n) {
+ var t = [];
+ return iu(e(n)).cells.forEach(function (e, r) {
+ for (var u, i, o = e.site, a = e.edges.sort(Ir), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;)u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])
+ }), t
+ }, t.x = function (n) {
+ return arguments.length ? (i = kt(r = n), t) : r
+ }, t.y = function (n) {
+ return arguments.length ? (o = kt(u = n), t) : u
+ }, t.clipExtent = function (n) {
+ return arguments.length ? (a = null == n ? nl : n, t) : a === nl ? null : a
+ }, t.size = function (n) {
+ return arguments.length ? t.clipExtent(n && [[0, 0], n]) : a === nl ? null : a && a[1]
+ }, t)
+ };
+ var nl = [[-1e6, -1e6], [1e6, 1e6]];
+ Bo.geom.delaunay = function (n) {
+ return Bo.geom.voronoi().triangles(n)
+ }, Bo.geom.quadtree = function (n, t, e, r, u) {
+ function i(n) {
+ function i(n, t, e, r, u, i, o, a) {
+ if (!isNaN(e) && !isNaN(r))if (n.leaf) {
+ var c = n.x, s = n.y;
+ if (null != c)if (ca(c - e) + ca(s - r) < .01)l(n, t, e, r, u, i, o, a); else {
+ var f = n.point;
+ n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)
+ } else n.x = e, n.y = r, n.point = t
+ } else l(n, t, e, r, u, i, o, a)
+ }
+
+ function l(n, t, e, r, u, o, a, c) {
+ var l = .5 * (u + a), s = .5 * (o + c), f = e >= l, h = r >= s, g = (h << 1) + f;
+ n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)
+ }
+
+ var s, f, h, g, p, v, d, m, y, x = kt(a), M = kt(c);
+ if (null != t)v = t, d = e, m = r, y = u; else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)for (g = 0; p > g; ++g)s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y); else for (g = 0; p > g; ++g) {
+ var _ = +x(s = n[g], g), b = +M(s, g);
+ v > _ && (v = _), d > b && (d = b), _ > m && (m = _), b > y && (y = b), f.push(_), h.push(b)
+ }
+ var w = m - v, S = y - d;
+ w > S ? y = d + w : m = v + S;
+ var k = su();
+ if (k.add = function (n) {
+ i(k, n, +x(n, ++g), +M(n, g), v, d, m, y)
+ }, k.visit = function (n) {
+ fu(n, k, v, d, m, y)
+ }, g = -1, null == t) {
+ for (; ++g < p;)i(k, n[g], f[g], h[g], v, d, m, y);
+ --g
+ } else n.forEach(k.add);
+ return f = h = n = s = null, k
+ }
+
+ var o, a = Ar, c = Cr;
+ return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function (n) {
+ return arguments.length ? (a = n, i) : a
+ }, i.y = function (n) {
+ return arguments.length ? (c = n, i) : c
+ }, i.extent = function (n) {
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [[t, e], [r, u]]
+ }, i.size = function (n) {
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]
+ }, i)
+ }, Bo.interpolateRgb = hu, Bo.interpolateObject = gu, Bo.interpolateNumber = pu, Bo.interpolateString = vu;
+ var tl = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, el = new RegExp(tl.source, "g");
+ Bo.interpolate = du, Bo.interpolators = [function (n, t) {
+ var e = typeof t;
+ return ("string" === e ? $a.has(t) || /^(#|rgb\(|hsl\()/.test(t) ? hu : vu : t instanceof it ? hu : Array.isArray(t) ? mu : "object" === e && isNaN(t) ? gu : pu)(n, t)
+ }], Bo.interpolateArray = mu;
+ var rl = function () {
+ return Et
+ }, ul = Bo.map({
+ linear: rl, poly: Su, quad: function () {
+ return _u
+ }, cubic: function () {
+ return bu
+ }, sin: function () {
+ return ku
+ }, exp: function () {
+ return Eu
+ }, circle: function () {
+ return Au
+ }, elastic: Cu, back: Nu, bounce: function () {
+ return zu
+ }
+ }), il = Bo.map({
+ "in": Et, out: xu, "in-out": Mu, "out-in": function (n) {
+ return Mu(xu(n))
+ }
+ });
+ Bo.ease = function (n) {
+ var t = n.indexOf("-"), e = t >= 0 ? n.slice(0, t) : n, r = t >= 0 ? n.slice(t + 1) : "in";
+ return e = ul.get(e) || rl, r = il.get(r) || Et, yu(r(e.apply(null, Wo.call(arguments, 1))))
+ }, Bo.interpolateHcl = Lu, Bo.interpolateHsl = Tu, Bo.interpolateLab = qu, Bo.interpolateRound = Ru, Bo.transform = function (n) {
+ var t = Go.createElementNS(Bo.ns.prefix.svg, "g");
+ return (Bo.transform = function (n) {
+ if (null != n) {
+ t.setAttribute("transform", n);
+ var e = t.transform.baseVal.consolidate()
+ }
+ return new Du(e ? e.matrix : ol)
+ })(n)
+ }, Du.prototype.toString = function () {
+ return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"
+ };
+ var ol = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0};
+ Bo.interpolateTransform = Fu, Bo.layout = {}, Bo.layout.bundle = function () {
+ return function (n) {
+ for (var t = [], e = -1, r = n.length; ++e < r;)t.push(Yu(n[e]));
+ return t
+ }
+ }, Bo.layout.chord = function () {
+ function n() {
+ var n, l, f, h, g, p = {}, v = [], d = Bo.range(i), m = [];
+ for (e = [], r = [], n = 0, h = -1; ++h < i;) {
+ for (l = 0, g = -1; ++g < i;)l += u[h][g];
+ v.push(l), m.push(Bo.range(i)), n += l
+ }
+ for (o && d.sort(function (n, t) {
+ return o(v[n], v[t])
+ }), a && m.forEach(function (n, t) {
+ n.sort(function (n, e) {
+ return a(u[t][n], u[t][e])
+ })
+ }), n = (Aa - s * i) / n, l = 0, h = -1; ++h < i;) {
+ for (f = l, g = -1; ++g < i;) {
+ var y = d[h], x = m[y][g], M = u[y][x], _ = l, b = l += M * n;
+ p[y + "-" + x] = {index: y, subindex: x, startAngle: _, endAngle: b, value: M}
+ }
+ r[y] = {index: y, startAngle: f, endAngle: l, value: (l - f) / n}, l += s
+ }
+ for (h = -1; ++h < i;)for (g = h - 1; ++g < i;) {
+ var w = p[h + "-" + g], S = p[g + "-" + h];
+ (w.value || S.value) && e.push(w.value < S.value ? {source: S, target: w} : {source: w, target: S})
+ }
+ c && t()
+ }
+
+ function t() {
+ e.sort(function (n, t) {
+ return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)
+ })
+ }
+
+ var e, r, u, i, o, a, c, l = {}, s = 0;
+ return l.matrix = function (n) {
+ return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u
+ }, l.padding = function (n) {
+ return arguments.length ? (s = n, e = r = null, l) : s
+ }, l.sortGroups = function (n) {
+ return arguments.length ? (o = n, e = r = null, l) : o
+ }, l.sortSubgroups = function (n) {
+ return arguments.length ? (a = n, e = null, l) : a
+ }, l.sortChords = function (n) {
+ return arguments.length ? (c = n, e && t(), l) : c
+ }, l.chords = function () {
+ return e || n(), e
+ }, l.groups = function () {
+ return r || n(), r
+ }, l
+ }, Bo.layout.force = function () {
+ function n(n) {
+ return function (t, e, r, u) {
+ if (t.point !== n) {
+ var i = t.cx - n.x, o = t.cy - n.y, a = u - e, c = i * i + o * o;
+ if (c > a * a / d) {
+ if (p > c) {
+ var l = t.charge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ return !0
+ }
+ if (t.point && c && p > c) {
+ var l = t.pointCharge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ }
+ return !t.charge
+ }
+ }
+
+ function t(n) {
+ n.px = Bo.event.x, n.py = Bo.event.y, a.resume()
+ }
+
+ var e, r, u, i, o, a = {}, c = Bo.dispatch("start", "tick", "end"), l = [1, 1], s = .9, f = al, h = cl, g = -30, p = ll, v = .1, d = .64, m = [], y = [];
+ return a.tick = function () {
+ if ((r *= .99) < .005)return c.end({type: "end", alpha: r = 0}), !0;
+ var t, e, a, f, h, p, d, x, M, _ = m.length, b = y.length;
+ for (e = 0; b > e; ++e)a = y[e], f = a.source, h = a.target, x = h.x - f.x, M = h.y - f.y, (p = x * x + M * M) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, x *= p, M *= p, h.x -= x * (d = f.weight / (h.weight + f.weight)), h.y -= M * d, f.x += x * (d = 1 - d), f.y += M * d);
+ if ((d = r * v) && (x = l[0] / 2, M = l[1] / 2, e = -1, d))for (; ++e < _;)a = m[e], a.x += (x - a.x) * d, a.y += (M - a.y) * d;
+ if (g)for (Wu(t = Bo.geom.quadtree(m), r, o), e = -1; ++e < _;)(a = m[e]).fixed || t.visit(n(a));
+ for (e = -1; ++e < _;)a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);
+ c.tick({type: "tick", alpha: r})
+ }, a.nodes = function (n) {
+ return arguments.length ? (m = n, a) : m
+ }, a.links = function (n) {
+ return arguments.length ? (y = n, a) : y
+ }, a.size = function (n) {
+ return arguments.length ? (l = n, a) : l
+ }, a.linkDistance = function (n) {
+ return arguments.length ? (f = "function" == typeof n ? n : +n, a) : f
+ }, a.distance = a.linkDistance, a.linkStrength = function (n) {
+ return arguments.length ? (h = "function" == typeof n ? n : +n, a) : h
+ }, a.friction = function (n) {
+ return arguments.length ? (s = +n, a) : s
+ }, a.charge = function (n) {
+ return arguments.length ? (g = "function" == typeof n ? n : +n, a) : g
+ }, a.chargeDistance = function (n) {
+ return arguments.length ? (p = n * n, a) : Math.sqrt(p)
+ }, a.gravity = function (n) {
+ return arguments.length ? (v = +n, a) : v
+ }, a.theta = function (n) {
+ return arguments.length ? (d = n * n, a) : Math.sqrt(d)
+ }, a.alpha = function (n) {
+ return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({
+ type: "start",
+ alpha: r = n
+ }), Bo.timer(a.tick)), a) : r
+ }, a.start = function () {
+ function n(n, r) {
+ if (!e) {
+ for (e = new Array(c), a = 0; c > a; ++a)e[a] = [];
+ for (a = 0; l > a; ++a) {
+ var u = y[a];
+ e[u.source.index].push(u.target), e[u.target.index].push(u.source)
+ }
+ }
+ for (var i, o = e[t], a = -1, l = o.length; ++a < l;)if (!isNaN(i = o[a][n]))return i;
+ return Math.random() * r
+ }
+
+ var t, e, r, c = m.length, s = y.length, p = l[0], v = l[1];
+ for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;
+ for (t = 0; s > t; ++t)r = y[t], "number" == typeof r.source && (r.source = m[r.source]), "number" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;
+ for (t = 0; c > t; ++t)r = m[t], isNaN(r.x) && (r.x = n("x", p)), isNaN(r.y) && (r.y = n("y", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);
+ if (u = [], "function" == typeof f)for (t = 0; s > t; ++t)u[t] = +f.call(this, y[t], t); else for (t = 0; s > t; ++t)u[t] = f;
+ if (i = [], "function" == typeof h)for (t = 0; s > t; ++t)i[t] = +h.call(this, y[t], t); else for (t = 0; s > t; ++t)i[t] = h;
+ if (o = [], "function" == typeof g)for (t = 0; c > t; ++t)o[t] = +g.call(this, m[t], t); else for (t = 0; c > t; ++t)o[t] = g;
+ return a.resume()
+ }, a.resume = function () {
+ return a.alpha(.1)
+ }, a.stop = function () {
+ return a.alpha(0)
+ }, a.drag = function () {
+ return e || (e = Bo.behavior.drag().origin(Et).on("dragstart.force", Vu).on("drag.force", t).on("dragend.force", Xu)), arguments.length ? (this.on("mouseover.force", $u).on("mouseout.force", Bu).call(e), void 0) : e
+ }, Bo.rebind(a, c, "on")
+ };
+ var al = 20, cl = 1, ll = 1 / 0;
+ Bo.layout.hierarchy = function () {
+ function n(u) {
+ var i, o = [u], a = [];
+ for (u.depth = 0; null != (i = o.pop());)if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {
+ for (var c, l, s; --c >= 0;)o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;
+ r && (i.value = 0), i.children = l
+ } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;
+ return Ku(u, function (n) {
+ var e, u;
+ t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)
+ }), a
+ }
+
+ var t = ti, e = Qu, r = ni;
+ return n.sort = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.children = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.value = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.revalue = function (t) {
+ return r && (Gu(t, function (n) {
+ n.children && (n.value = 0)
+ }), Ku(t, function (t) {
+ var e;
+ t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)
+ })), t
+ }, n
+ }, Bo.layout.partition = function () {
+ function n(t, e, r, u) {
+ var i = t.children;
+ if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {
+ var o, a, c, l = -1;
+ for (r = t.value ? r / t.value : 0; ++l < o;)n(a = i[l], e, c = a.value * r, u), e += c
+ }
+ }
+
+ function t(n) {
+ var e = n.children, r = 0;
+ if (e && (u = e.length))for (var u, i = -1; ++i < u;)r = Math.max(r, t(e[i]));
+ return 1 + r
+ }
+
+ function e(e, i) {
+ var o = r.call(this, e, i);
+ return n(o[0], 0, u[0], u[1] / t(o[0])), o
+ }
+
+ var r = Bo.layout.hierarchy(), u = [1, 1];
+ return e.size = function (n) {
+ return arguments.length ? (u = n, e) : u
+ }, Ju(e, r)
+ }, Bo.layout.pie = function () {
+ function n(i) {
+ var o = i.map(function (e, r) {
+ return +t.call(n, e, r)
+ }), a = +("function" == typeof r ? r.apply(this, arguments) : r), c = (("function" == typeof u ? u.apply(this, arguments) : u) - a) / Bo.sum(o), l = Bo.range(i.length);
+ null != e && l.sort(e === sl ? function (n, t) {
+ return o[t] - o[n]
+ } : function (n, t) {
+ return e(i[n], i[t])
+ });
+ var s = [];
+ return l.forEach(function (n) {
+ var t;
+ s[n] = {data: i[n], value: t = o[n], startAngle: a, endAngle: a += t * c}
+ }), s
+ }
+
+ var t = Number, e = sl, r = 0, u = Aa;
+ return n.value = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.sort = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.startAngle = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.endAngle = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var sl = {};
+ Bo.layout.stack = function () {
+ function n(a, c) {
+ if (!(h = a.length))return a;
+ var l = a.map(function (e, r) {
+ return t.call(n, e, r)
+ }), s = l.map(function (t) {
+ return t.map(function (t, e) {
+ return [i.call(n, t, e), o.call(n, t, e)]
+ })
+ }), f = e.call(n, s, c);
+ l = Bo.permute(l, f), s = Bo.permute(s, f);
+ var h, g, p, v, d = r.call(n, s, c), m = l[0].length;
+ for (p = 0; m > p; ++p)for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g)u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);
+ return a
+ }
+
+ var t = Et, e = oi, r = ai, u = ii, i = ri, o = ui;
+ return n.values = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.order = function (t) {
+ return arguments.length ? (e = "function" == typeof t ? t : fl.get(t) || oi, n) : e
+ }, n.offset = function (t) {
+ return arguments.length ? (r = "function" == typeof t ? t : hl.get(t) || ai, n) : r
+ }, n.x = function (t) {
+ return arguments.length ? (i = t, n) : i
+ }, n.y = function (t) {
+ return arguments.length ? (o = t, n) : o
+ }, n.out = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var fl = Bo.map({
+ "inside-out": function (n) {
+ var t, e, r = n.length, u = n.map(ci), i = n.map(li), o = Bo.range(r).sort(function (n, t) {
+ return u[n] - u[t]
+ }), a = 0, c = 0, l = [], s = [];
+ for (t = 0; r > t; ++t)e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));
+ return s.reverse().concat(l)
+ }, reverse: function (n) {
+ return Bo.range(n.length).reverse()
+ }, "default": oi
+ }), hl = Bo.map({
+ silhouette: function (n) {
+ var t, e, r, u = n.length, i = n[0].length, o = [], a = 0, c = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ r > a && (a = r), o.push(r)
+ }
+ for (e = 0; i > e; ++e)c[e] = (a - o[e]) / 2;
+ return c
+ }, wiggle: function (n) {
+ var t, e, r, u, i, o, a, c, l, s = n.length, f = n[0], h = f.length, g = [];
+ for (g[0] = c = l = 0, e = 1; h > e; ++e) {
+ for (t = 0, u = 0; s > t; ++t)u += n[t][e][1];
+ for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {
+ for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r)o += (n[r][e][1] - n[r][e - 1][1]) / a;
+ i += o * n[t][e][1]
+ }
+ g[e] = c -= u ? i / u * a : 0, l > c && (l = c)
+ }
+ for (e = 0; h > e; ++e)g[e] -= l;
+ return g
+ }, expand: function (n) {
+ var t, e, r, u = n.length, i = n[0].length, o = 1 / u, a = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ if (r)for (t = 0; u > t; t++)n[t][e][1] /= r; else for (t = 0; u > t; t++)n[t][e][1] = o
+ }
+ for (e = 0; i > e; ++e)a[e] = 0;
+ return a
+ }, zero: ai
+ });
+ Bo.layout.histogram = function () {
+ function n(n, i) {
+ for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;)o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;
+ if (g > 0)for (i = -1; ++i < h;)a = l[i], a >= s[0] && a <= s[1] && (o = c[Bo.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));
+ return c
+ }
+
+ var t = !0, e = Number, r = gi, u = fi;
+ return n.value = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.range = function (t) {
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.bins = function (t) {
+ return arguments.length ? (u = "number" == typeof t ? function (n) {
+ return hi(n, t)
+ } : kt(t), n) : u
+ }, n.frequency = function (e) {
+ return arguments.length ? (t = !!e, n) : t
+ }, n
+ }, Bo.layout.pack = function () {
+ function n(n, i) {
+ var o = e.call(this, n, i), a = o[0], c = u[0], l = u[1], s = null == t ? Math.sqrt : "function" == typeof t ? t : function () {
+ return t
+ };
+ if (a.x = a.y = 0, Ku(a, function (n) {
+ n.r = +s(n.value)
+ }), Ku(a, yi), r) {
+ var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;
+ Ku(a, function (n) {
+ n.r += f
+ }), Ku(a, yi), Ku(a, function (n) {
+ n.r -= f
+ })
+ }
+ return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o
+ }
+
+ var t, e = Bo.layout.hierarchy().sort(pi), r = 0, u = [1, 1];
+ return n.size = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n.radius = function (e) {
+ return arguments.length ? (t = null == e || "function" == typeof e ? e : +e, n) : t
+ }, n.padding = function (t) {
+ return arguments.length ? (r = +t, n) : r
+ }, Ju(n, e)
+ }, Bo.layout.tree = function () {
+ function n(n, u) {
+ var s = o.call(this, n, u), f = s[0], h = t(f);
+ if (Ku(h, e), h.parent.m = -h.z, Gu(h, r), l)Gu(f, i); else {
+ var g = f, p = f, v = f;
+ Gu(f, function (n) {
+ n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)
+ });
+ var d = a(g, p) / 2 - g.x, m = c[0] / (p.x + a(p, g) / 2 + d), y = c[1] / (v.depth || 1);
+ Gu(f, function (n) {
+ n.x = (n.x + d) * m, n.y = n.depth * y
+ })
+ }
+ return s
+ }
+
+ function t(n) {
+ for (var t, e = {
+ A: null,
+ children: [n]
+ }, r = [e]; null != (t = r.pop());)for (var u, i = t.children, o = 0, a = i.length; a > o; ++o)r.push((i[o] = u = {
+ _: i[o],
+ parent: t,
+ children: (u = i[o].children) && u.slice() || [],
+ A: null,
+ a: null,
+ z: 0,
+ m: 0,
+ c: 0,
+ s: 0,
+ t: null,
+ i: o
+ }).a = u);
+ return e.children[0]
+ }
+
+ function e(n) {
+ var t = n.children, e = n.parent.children, r = n.i ? e[n.i - 1] : null;
+ if (t.length) {
+ Ai(n);
+ var i = (t[0].z + t[t.length - 1].z) / 2;
+ r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i
+ } else r && (n.z = r.z + a(n._, r._));
+ n.parent.A = u(n, r, n.parent.A || e[0])
+ }
+
+ function r(n) {
+ n._.x = n.z + n.parent.m, n.m += n.parent.m
+ }
+
+ function u(n, t, e) {
+ if (t) {
+ for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = ki(o), u = Si(u), o && u;)c = Si(c), i = ki(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ei(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;
+ o && !ki(i) && (i.t = o, i.m += f - s), u && !Si(c) && (c.t = u, c.m += l - h, e = n)
+ }
+ return e
+ }
+
+ function i(n) {
+ n.x *= c[0], n.y = n.depth * c[1]
+ }
+
+ var o = Bo.layout.hierarchy().sort(null).value(null), a = wi, c = [1, 1], l = null;
+ return n.separation = function (t) {
+ return arguments.length ? (a = t, n) : a
+ }, n.size = function (t) {
+ return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c
+ }, n.nodeSize = function (t) {
+ return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null
+ }, Ju(n, o)
+ }, Bo.layout.cluster = function () {
+ function n(n, i) {
+ var o, a = t.call(this, n, i), c = a[0], l = 0;
+ Ku(c, function (n) {
+ var t = n.children;
+ t && t.length ? (n.x = zi(t), n.y = Ni(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)
+ });
+ var s = Li(c), f = Ti(c), h = s.x - e(s, f) / 2, g = f.x + e(f, s) / 2;
+ return Ku(c, u ? function (n) {
+ n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]
+ } : function (n) {
+ n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]
+ }), a
+ }
+
+ var t = Bo.layout.hierarchy().sort(null).value(null), e = wi, r = [1, 1], u = !1;
+ return n.separation = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.size = function (t) {
+ return arguments.length ? (u = null == (r = t), n) : u ? null : r
+ }, n.nodeSize = function (t) {
+ return arguments.length ? (u = null != (r = t), n) : u ? r : null
+ }, Ju(n, t)
+ }, Bo.layout.treemap = function () {
+ function n(n, t) {
+ for (var e, r, u = -1, i = n.length; ++u < i;)r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r
+ }
+
+ function t(e) {
+ var i = e.children;
+ if (i && i.length) {
+ var o, a, c, l = f(e), s = [], h = i.slice(), p = 1 / 0, v = "slice" === g ? l.dx : "dice" === g ? l.dy : "slice-dice" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);
+ for (n(h, l.dx * l.dy / e.value), s.area = 0; (c = h.length) > 0;)s.push(o = h[c - 1]), s.area += o.area, "squarify" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);
+ s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)
+ }
+ }
+
+ function e(t) {
+ var r = t.children;
+ if (r && r.length) {
+ var i, o = f(t), a = r.slice(), c = [];
+ for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();)c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);
+ r.forEach(e)
+ }
+ }
+
+ function r(n, t) {
+ for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));
+ return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0
+ }
+
+ function u(n, t, e, r) {
+ var u, i = -1, o = n.length, a = e.x, l = e.y, s = t ? c(n.area / t) : 0;
+ if (t == e.dx) {
+ for ((r || s > e.dy) && (s = e.dy); ++i < o;)u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);
+ u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s
+ } else {
+ for ((r || s > e.dx) && (s = e.dx); ++i < o;)u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);
+ u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s
+ }
+ }
+
+ function i(r) {
+ var u = o || a(r), i = u[0];
+ return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u
+ }
+
+ var o, a = Bo.layout.hierarchy(), c = Math.round, l = [1, 1], s = null, f = qi, h = !1, g = "squarify", p = .5 * (1 + Math.sqrt(5));
+ return i.size = function (n) {
+ return arguments.length ? (l = n, i) : l
+ }, i.padding = function (n) {
+ function t(t) {
+ var e = n.call(i, t, t.depth);
+ return null == e ? qi(t) : Ri(t, "number" == typeof e ? [e, e, e, e] : e)
+ }
+
+ function e(t) {
+ return Ri(t, n)
+ }
+
+ if (!arguments.length)return s;
+ var r;
+ return f = null == (s = n) ? qi : "function" == (r = typeof n) ? t : "number" === r ? (n = [n, n, n, n], e) : e, i
+ }, i.round = function (n) {
+ return arguments.length ? (c = n ? Math.round : Number, i) : c != Number
+ }, i.sticky = function (n) {
+ return arguments.length ? (h = n, o = null, i) : h
+ }, i.ratio = function (n) {
+ return arguments.length ? (p = n, i) : p
+ }, i.mode = function (n) {
+ return arguments.length ? (g = n + "", i) : g
+ }, Ju(i, a)
+ }, Bo.random = {
+ normal: function (n, t) {
+ var e = arguments.length;
+ return 2 > e && (t = 1), 1 > e && (n = 0), function () {
+ var e, r, u;
+ do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);
+ return n + t * e * Math.sqrt(-2 * Math.log(u) / u)
+ }
+ }, logNormal: function () {
+ var n = Bo.random.normal.apply(Bo, arguments);
+ return function () {
+ return Math.exp(n())
+ }
+ }, bates: function (n) {
+ var t = Bo.random.irwinHall(n);
+ return function () {
+ return t() / n
+ }
+ }, irwinHall: function (n) {
+ return function () {
+ for (var t = 0, e = 0; n > e; e++)t += Math.random();
+ return t
+ }
+ }
+ }, Bo.scale = {};
+ var gl = {floor: Et, ceil: Et};
+ Bo.scale.linear = function () {
+ return Oi([0, 1], [0, 1], du, !1)
+ };
+ var pl = {s: 1, g: 1, p: 1, r: 1, e: 1};
+ Bo.scale.log = function () {
+ return Wi(Bo.scale.linear().domain([0, 1]), 10, !0, [1, 10])
+ };
+ var vl = Bo.format(".0e"), dl = {
+ floor: function (n) {
+ return -Math.ceil(-n)
+ }, ceil: function (n) {
+ return -Math.floor(-n)
+ }
+ };
+ Bo.scale.pow = function () {
+ return Ji(Bo.scale.linear(), 1, [0, 1])
+ }, Bo.scale.sqrt = function () {
+ return Bo.scale.pow().exponent(.5)
+ }, Bo.scale.ordinal = function () {
+ return Ki([], {t: "range", a: [[]]})
+ }, Bo.scale.category10 = function () {
+ return Bo.scale.ordinal().range(ml)
+ }, Bo.scale.category20 = function () {
+ return Bo.scale.ordinal().range(yl)
+ }, Bo.scale.category20b = function () {
+ return Bo.scale.ordinal().range(xl)
+ }, Bo.scale.category20c = function () {
+ return Bo.scale.ordinal().range(Ml)
+ };
+ var ml = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(yt), yl = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(yt), xl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(yt), Ml = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(yt);
+ Bo.scale.quantile = function () {
+ return Qi([], [])
+ }, Bo.scale.quantize = function () {
+ return no(0, 1, [0, 1])
+ }, Bo.scale.threshold = function () {
+ return to([.5], [0, 1])
+ }, Bo.scale.identity = function () {
+ return eo([0, 1])
+ }, Bo.svg = {}, Bo.svg.arc = function () {
+ function n() {
+ var n = t.apply(this, arguments), i = e.apply(this, arguments), o = r.apply(this, arguments) + _l, a = u.apply(this, arguments) + _l, c = (o > a && (c = o, o = a, a = c), a - o), l = Ea > c ? "0" : "1", s = Math.cos(o), f = Math.sin(o), h = Math.cos(a), g = Math.sin(a);
+ return c >= bl ? n ? "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "M0," + n + "A" + n + "," + n + " 0 1,0 0," + -n + "A" + n + "," + n + " 0 1,0 0," + n + "Z" : "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "Z" : n ? "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L" + n * h + "," + n * g + "A" + n + "," + n + " 0 " + l + ",0 " + n * s + "," + n * f + "Z" : "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L0,0" + "Z"
+ }
+
+ var t = ro, e = uo, r = io, u = oo;
+ return n.innerRadius = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.outerRadius = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.startAngle = function (t) {
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.endAngle = function (t) {
+ return arguments.length ? (u = kt(t), n) : u
+ }, n.centroid = function () {
+ var n = (t.apply(this, arguments) + e.apply(this, arguments)) / 2, i = (r.apply(this, arguments) + u.apply(this, arguments)) / 2 + _l;
+ return [Math.cos(i) * n, Math.sin(i) * n]
+ }, n
+ };
+ var _l = -Ca, bl = Aa - Na;
+ Bo.svg.line = function () {
+ return ao(Et)
+ };
+ var wl = Bo.map({
+ linear: co,
+ "linear-closed": lo,
+ step: so,
+ "step-before": fo,
+ "step-after": ho,
+ basis: xo,
+ "basis-open": Mo,
+ "basis-closed": _o,
+ bundle: bo,
+ cardinal: vo,
+ "cardinal-open": go,
+ "cardinal-closed": po,
+ monotone: Co
+ });
+ wl.forEach(function (n, t) {
+ t.key = n, t.closed = /-closed$/.test(n)
+ });
+ var Sl = [0, 2 / 3, 1 / 3, 0], kl = [0, 1 / 3, 2 / 3, 0], El = [0, 1 / 6, 2 / 3, 1 / 6];
+ Bo.svg.line.radial = function () {
+ var n = ao(No);
+ return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n
+ }, fo.reverse = ho, ho.reverse = fo, Bo.svg.area = function () {
+ return zo(Et)
+ }, Bo.svg.area.radial = function () {
+ var n = zo(No);
+ return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n
+ }, Bo.svg.chord = function () {
+ function n(n, a) {
+ var c = t(this, i, n, a), l = t(this, o, n, a);
+ return "M" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + "Z"
+ }
+
+ function t(n, t, e, r) {
+ var u = t.call(n, e, r), i = a.call(n, u, r), o = c.call(n, u, r) + _l, s = l.call(n, u, r) + _l;
+ return {r: i, a0: o, a1: s, p0: [i * Math.cos(o), i * Math.sin(o)], p1: [i * Math.cos(s), i * Math.sin(s)]}
+ }
+
+ function e(n, t) {
+ return n.a0 == t.a0 && n.a1 == t.a1
+ }
+
+ function r(n, t, e) {
+ return "A" + n + "," + n + " 0 " + +(e > Ea) + ",1 " + t
+ }
+
+ function u(n, t, e, r) {
+ return "Q 0,0 " + r
+ }
+
+ var i = mr, o = yr, a = Lo, c = io, l = oo;
+ return n.radius = function (t) {
+ return arguments.length ? (a = kt(t), n) : a
+ }, n.source = function (t) {
+ return arguments.length ? (i = kt(t), n) : i
+ }, n.target = function (t) {
+ return arguments.length ? (o = kt(t), n) : o
+ }, n.startAngle = function (t) {
+ return arguments.length ? (c = kt(t), n) : c
+ }, n.endAngle = function (t) {
+ return arguments.length ? (l = kt(t), n) : l
+ }, n
+ }, Bo.svg.diagonal = function () {
+ function n(n, u) {
+ var i = t.call(this, n, u), o = e.call(this, n, u), a = (i.y + o.y) / 2, c = [i, {x: i.x, y: a}, {
+ x: o.x,
+ y: a
+ }, o];
+ return c = c.map(r), "M" + c[0] + "C" + c[1] + " " + c[2] + " " + c[3]
+ }
+
+ var t = mr, e = yr, r = To;
+ return n.source = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.target = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.projection = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n
+ }, Bo.svg.diagonal.radial = function () {
+ var n = Bo.svg.diagonal(), t = To, e = n.projection;
+ return n.projection = function (n) {
+ return arguments.length ? e(qo(t = n)) : t
+ }, n
+ }, Bo.svg.symbol = function () {
+ function n(n, r) {
+ return (Al.get(t.call(this, n, r)) || Po)(e.call(this, n, r))
+ }
+
+ var t = Do, e = Ro;
+ return n.type = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.size = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n
+ };
+ var Al = Bo.map({
+ circle: Po, cross: function (n) {
+ var t = Math.sqrt(n / 5) / 2;
+ return "M" + -3 * t + "," + -t + "H" + -t + "V" + -3 * t + "H" + t + "V" + -t + "H" + 3 * t + "V" + t + "H" + t + "V" + 3 * t + "H" + -t + "V" + t + "H" + -3 * t + "Z"
+ }, diamond: function (n) {
+ var t = Math.sqrt(n / (2 * Ll)), e = t * Ll;
+ return "M0," + -t + "L" + e + ",0" + " 0," + t + " " + -e + ",0" + "Z"
+ }, square: function (n) {
+ var t = Math.sqrt(n) / 2;
+ return "M" + -t + "," + -t + "L" + t + "," + -t + " " + t + "," + t + " " + -t + "," + t + "Z"
+ }, "triangle-down": function (n) {
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + e + "L" + t + "," + -e + " " + -t + "," + -e + "Z"
+ }, "triangle-up": function (n) {
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + -e + "L" + t + "," + e + " " + -t + "," + e + "Z"
+ }
+ });
+ Bo.svg.symbolTypes = Al.keys();
+ var Cl, Nl, zl = Math.sqrt(3), Ll = Math.tan(30 * La), Tl = [], ql = 0;
+ Tl.call = ya.call, Tl.empty = ya.empty, Tl.node = ya.node, Tl.size = ya.size, Bo.transition = function (n) {
+ return arguments.length ? Cl ? n.transition() : n : _a.transition()
+ }, Bo.transition.prototype = Tl, Tl.select = function (n) {
+ var t, e, r, u = this.id, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []);
+ for (var c = this[o], l = -1, s = c.length; ++l < s;)(r = c[l]) && (e = n.call(r, r.__data__, l, o)) ? ("__data__"in r && (e.__data__ = r.__data__), Ho(e, l, u, r.__transition__[u]), t.push(e)) : t.push(null)
+ }
+ return Uo(i, u)
+ }, Tl.selectAll = function (n) {
+ var t, e, r, u, i, o = this.id, a = [];
+ n = E(n);
+ for (var c = -1, l = this.length; ++c < l;)for (var s = this[c], f = -1, h = s.length; ++f < h;)if (r = s[f]) {
+ i = r.__transition__[o], e = n.call(r, r.__data__, f, c), a.push(t = []);
+ for (var g = -1, p = e.length; ++g < p;)(u = e[g]) && Ho(u, g, o, i), t.push(u)
+ }
+ return Uo(a, o)
+ }, Tl.filter = function (n) {
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []);
+ for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return Uo(u, this.id)
+ }, Tl.tween = function (n, t) {
+ var e = this.id;
+ return arguments.length < 2 ? this.node().__transition__[e].tween.get(n) : F(this, null == t ? function (t) {
+ t.__transition__[e].tween.remove(n)
+ } : function (r) {
+ r.__transition__[e].tween.set(n, t)
+ })
+ }, Tl.attr = function (n, t) {
+ function e() {
+ this.removeAttribute(a)
+ }
+
+ function r() {
+ this.removeAttributeNS(a.space, a.local)
+ }
+
+ function u(n) {
+ return null == n ? e : (n += "", function () {
+ var t, e = this.getAttribute(a);
+ return e !== n && (t = o(e, n), function (n) {
+ this.setAttribute(a, t(n))
+ })
+ })
+ }
+
+ function i(n) {
+ return null == n ? r : (n += "", function () {
+ var t, e = this.getAttributeNS(a.space, a.local);
+ return e !== n && (t = o(e, n), function (n) {
+ this.setAttributeNS(a.space, a.local, t(n))
+ })
+ })
+ }
+
+ if (arguments.length < 2) {
+ for (t in n)this.attr(t, n[t]);
+ return this
+ }
+ var o = "transform" == n ? Fu : du, a = Bo.ns.qualify(n);
+ return jo(this, "attr." + n, t, a.local ? i : u)
+ }, Tl.attrTween = function (n, t) {
+ function e(n, e) {
+ var r = t.call(this, n, e, this.getAttribute(u));
+ return r && function (n) {
+ this.setAttribute(u, r(n))
+ }
+ }
+
+ function r(n, e) {
+ var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));
+ return r && function (n) {
+ this.setAttributeNS(u.space, u.local, r(n))
+ }
+ }
+
+ var u = Bo.ns.qualify(n);
+ return this.tween("attr." + n, u.local ? r : e)
+ }, Tl.style = function (n, t, e) {
+ function r() {
+ this.style.removeProperty(n)
+ }
+
+ function u(t) {
+ return null == t ? r : (t += "", function () {
+ var r, u = Qo.getComputedStyle(this, null).getPropertyValue(n);
+ return u !== t && (r = du(u, t), function (t) {
+ this.style.setProperty(n, r(t), e)
+ })
+ })
+ }
+
+ var i = arguments.length;
+ if (3 > i) {
+ if ("string" != typeof n) {
+ 2 > i && (t = "");
+ for (e in n)this.style(e, n[e], t);
+ return this
+ }
+ e = ""
+ }
+ return jo(this, "style." + n, t, u)
+ }, Tl.styleTween = function (n, t, e) {
+ function r(r, u) {
+ var i = t.call(this, r, u, Qo.getComputedStyle(this, null).getPropertyValue(n));
+ return i && function (t) {
+ this.style.setProperty(n, i(t), e)
+ }
+ }
+
+ return arguments.length < 3 && (e = ""), this.tween("style." + n, r)
+ }, Tl.text = function (n) {
+ return jo(this, "text", n, Fo)
+ }, Tl.remove = function () {
+ return this.each("end.transition", function () {
+ var n;
+ this.__transition__.count < 2 && (n = this.parentNode) && n.removeChild(this)
+ })
+ }, Tl.ease = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].ease : ("function" != typeof n && (n = Bo.ease.apply(Bo, arguments)), F(this, function (e) {
+ e.__transition__[t].ease = n
+ }))
+ }, Tl.delay = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].delay : F(this, "function" == typeof n ? function (e, r, u) {
+ e.__transition__[t].delay = +n.call(e, e.__data__, r, u)
+ } : (n = +n, function (e) {
+ e.__transition__[t].delay = n
+ }))
+ }, Tl.duration = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].duration : F(this, "function" == typeof n ? function (e, r, u) {
+ e.__transition__[t].duration = Math.max(1, n.call(e, e.__data__, r, u))
+ } : (n = Math.max(1, n), function (e) {
+ e.__transition__[t].duration = n
+ }))
+ }, Tl.each = function (n, t) {
+ var e = this.id;
+ if (arguments.length < 2) {
+ var r = Nl, u = Cl;
+ Cl = e, F(this, function (t, r, u) {
+ Nl = t.__transition__[e], n.call(t, t.__data__, r, u)
+ }), Nl = r, Cl = u
+ } else F(this, function (r) {
+ var u = r.__transition__[e];
+ (u.event || (u.event = Bo.dispatch("start", "end"))).on(n, t)
+ });
+ return this
+ }, Tl.transition = function () {
+ for (var n, t, e, r, u = this.id, i = ++ql, o = [], a = 0, c = this.length; c > a; a++) {
+ o.push(n = []);
+ for (var t = this[a], l = 0, s = t.length; s > l; l++)(e = t[l]) && (r = Object.create(e.__transition__[u]), r.delay += r.duration, Ho(e, l, i, r)), n.push(e)
+ }
+ return Uo(o, i)
+ }, Bo.svg.axis = function () {
+ function n(n) {
+ n.each(function () {
+ var n, l = Bo.select(this), s = this.__chart__ || e, f = this.__chart__ = e.copy(), h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c, g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : Et : t, p = l.selectAll(".tick").data(h, f), v = p.enter().insert("g", ".domain").attr("class", "tick").style("opacity", Na), d = Bo.transition(p.exit()).style("opacity", Na).remove(), m = Bo.transition(p.order()).style("opacity", 1), y = Math.max(u, 0) + o, x = Pi(f), M = l.selectAll(".domain").data([0]), _ = (M.enter().append("path").attr("class", "domain"), Bo.transition(M));
+ v.append("line"), v.append("text");
+ var b, w, S, k, E = v.select("line"), A = m.select("line"), C = p.select("text").text(g), N = v.select("text"), z = m.select("text"), L = "top" === r || "left" === r ? -1 : 1;
+ if ("bottom" === r || "top" === r ? (n = Oo, b = "x", S = "y", w = "x2", k = "y2", C.attr("dy", 0 > L ? "0em" : ".71em").style("text-anchor", "middle"), _.attr("d", "M" + x[0] + "," + L * i + "V0H" + x[1] + "V" + L * i)) : (n = Yo, b = "y", S = "x", w = "y2", k = "x2", C.attr("dy", ".32em").style("text-anchor", 0 > L ? "end" : "start"), _.attr("d", "M" + L * i + "," + x[0] + "H0V" + x[1] + "H" + L * i)), E.attr(k, L * u), N.attr(S, L * y), A.attr(w, 0).attr(k, L * u), z.attr(b, 0).attr(S, L * y), f.rangeBand) {
+ var T = f, q = T.rangeBand() / 2;
+ s = f = function (n) {
+ return T(n) + q
+ }
+ } else s.rangeBand ? s = f : d.call(n, f, s);
+ v.call(n, s, f), m.call(n, f, f)
+ })
+ }
+
+ var t, e = Bo.scale.linear(), r = Rl, u = 6, i = 6, o = 3, a = [10], c = null;
+ return n.scale = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.orient = function (t) {
+ return arguments.length ? (r = t in Dl ? t + "" : Rl, n) : r
+ }, n.ticks = function () {
+ return arguments.length ? (a = arguments, n) : a
+ }, n.tickValues = function (t) {
+ return arguments.length ? (c = t, n) : c
+ }, n.tickFormat = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.tickSize = function (t) {
+ var e = arguments.length;
+ return e ? (u = +t, i = +arguments[e - 1], n) : u
+ }, n.innerTickSize = function (t) {
+ return arguments.length ? (u = +t, n) : u
+ }, n.outerTickSize = function (t) {
+ return arguments.length ? (i = +t, n) : i
+ }, n.tickPadding = function (t) {
+ return arguments.length ? (o = +t, n) : o
+ }, n.tickSubdivide = function () {
+ return arguments.length && n
+ }, n
+ };
+ var Rl = "bottom", Dl = {top: 1, right: 1, bottom: 1, left: 1};
+ Bo.svg.brush = function () {
+ function n(i) {
+ i.each(function () {
+ var i = Bo.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", u).on("touchstart.brush", u), o = i.selectAll(".background").data([0]);
+ o.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"), i.selectAll(".extent").data([0]).enter().append("rect").attr("class", "extent").style("cursor", "move");
+ var a = i.selectAll(".resize").data(p, Et);
+ a.exit().remove(), a.enter().append("g").attr("class", function (n) {
+ return "resize " + n
+ }).style("cursor", function (n) {
+ return Pl[n]
+ }).append("rect").attr("x", function (n) {
+ return /[ew]$/.test(n) ? -3 : null
+ }).attr("y", function (n) {
+ return /^[ns]/.test(n) ? -3 : null
+ }).attr("width", 6).attr("height", 6).style("visibility", "hidden"), a.style("display", n.empty() ? "none" : null);
+ var s, f = Bo.transition(i), h = Bo.transition(o);
+ c && (s = Pi(c), h.attr("x", s[0]).attr("width", s[1] - s[0]), e(f)), l && (s = Pi(l), h.attr("y", s[0]).attr("height", s[1] - s[0]), r(f)), t(f)
+ })
+ }
+
+ function t(n) {
+ n.selectAll(".resize").attr("transform", function (n) {
+ return "translate(" + s[+/e$/.test(n)] + "," + f[+/^s/.test(n)] + ")"
+ })
+ }
+
+ function e(n) {
+ n.select(".extent").attr("x", s[0]), n.selectAll(".extent,.n>rect,.s>rect").attr("width", s[1] - s[0])
+ }
+
+ function r(n) {
+ n.select(".extent").attr("y", f[0]), n.selectAll(".extent,.e>rect,.w>rect").attr("height", f[1] - f[0])
+ }
+
+ function u() {
+ function u() {
+ 32 == Bo.event.keyCode && (C || (y = null, z[0] -= s[1], z[1] -= f[1], C = 2), _())
+ }
+
+ function p() {
+ 32 == Bo.event.keyCode && 2 == C && (z[0] += s[1], z[1] += f[1], C = 0, _())
+ }
+
+ function v() {
+ var n = Bo.mouse(M), u = !1;
+ x && (n[0] += x[0], n[1] += x[1]), C || (Bo.event.altKey ? (y || (y = [(s[0] + s[1]) / 2, (f[0] + f[1]) / 2]), z[0] = s[+(n[0] < y[0])], z[1] = f[+(n[1] < y[1])]) : y = null), E && d(n, c, 0) && (e(S), u = !0), A && d(n, l, 1) && (r(S), u = !0), u && (t(S), w({
+ type: "brush",
+ mode: C ? "move" : "resize"
+ }))
+ }
+
+ function d(n, t, e) {
+ var r, u, a = Pi(t), c = a[0], l = a[1], p = z[e], v = e ? f : s, d = v[1] - v[0];
+ return C && (c -= p, l -= d + p), r = (e ? g : h) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += p) + d : (y && (p = Math.max(c, Math.min(l, 2 * y[e] - r))), r > p ? (u = r, r = p) : u = p), v[0] != r || v[1] != u ? (e ? o = null : i = null, v[0] = r, v[1] = u, !0) : void 0
+ }
+
+ function m() {
+ v(), S.style("pointer-events", "all").selectAll(".resize").style("display", n.empty() ? "none" : null), Bo.select("body").style("cursor", null), L.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null), N(), w({type: "brushend"})
+ }
+
+ var y, x, M = this, b = Bo.select(Bo.event.target), w = a.of(M, arguments), S = Bo.select(M), k = b.datum(), E = !/^(n|s)$/.test(k) && c, A = !/^(e|w)$/.test(k) && l, C = b.classed("extent"), N = X(), z = Bo.mouse(M), L = Bo.select(Qo).on("keydown.brush", u).on("keyup.brush", p);
+ if (Bo.event.changedTouches ? L.on("touchmove.brush", v).on("touchend.brush", m) : L.on("mousemove.brush", v).on("mouseup.brush", m), S.interrupt().selectAll("*").interrupt(), C)z[0] = s[0] - z[0], z[1] = f[0] - z[1]; else if (k) {
+ var T = +/w$/.test(k), q = +/^n/.test(k);
+ x = [s[1 - T] - z[0], f[1 - q] - z[1]], z[0] = s[T], z[1] = f[q]
+ } else Bo.event.altKey && (y = z.slice());
+ S.style("pointer-events", "none").selectAll(".resize").style("display", null), Bo.select("body").style("cursor", b.style("cursor")), w({type: "brushstart"}), v()
+ }
+
+ var i, o, a = w(n, "brushstart", "brush", "brushend"), c = null, l = null, s = [0, 0], f = [0, 0], h = !0, g = !0, p = Ul[0];
+ return n.event = function (n) {
+ n.each(function () {
+ var n = a.of(this, arguments), t = {x: s, y: f, i: i, j: o}, e = this.__chart__ || t;
+ this.__chart__ = t, Cl ? Bo.select(this).transition().each("start.brush", function () {
+ i = e.i, o = e.j, s = e.x, f = e.y, n({type: "brushstart"})
+ }).tween("brush:brush", function () {
+ var e = mu(s, t.x), r = mu(f, t.y);
+ return i = o = null, function (u) {
+ s = t.x = e(u), f = t.y = r(u), n({type: "brush", mode: "resize"})
+ }
+ }).each("end.brush", function () {
+ i = t.i, o = t.j, n({type: "brush", mode: "resize"}), n({type: "brushend"})
+ }) : (n({type: "brushstart"}), n({type: "brush", mode: "resize"}), n({type: "brushend"}))
+ })
+ }, n.x = function (t) {
+ return arguments.length ? (c = t, p = Ul[!c << 1 | !l], n) : c
+ }, n.y = function (t) {
+ return arguments.length ? (l = t, p = Ul[!c << 1 | !l], n) : l
+ }, n.clamp = function (t) {
+ return arguments.length ? (c && l ? (h = !!t[0], g = !!t[1]) : c ? h = !!t : l && (g = !!t), n) : c && l ? [h, g] : c ? h : l ? g : null
+ }, n.extent = function (t) {
+ var e, r, u, a, h;
+ return arguments.length ? (c && (e = t[0], r = t[1], l && (e = e[0], r = r[0]), i = [e, r], c.invert && (e = c(e), r = c(r)), e > r && (h = e, e = r, r = h), (e != s[0] || r != s[1]) && (s = [e, r])), l && (u = t[0], a = t[1], c && (u = u[1], a = a[1]), o = [u, a], l.invert && (u = l(u), a = l(a)), u > a && (h = u, u = a, a = h), (u != f[0] || a != f[1]) && (f = [u, a])), n) : (c && (i ? (e = i[0], r = i[1]) : (e = s[0], r = s[1], c.invert && (e = c.invert(e), r = c.invert(r)), e > r && (h = e, e = r, r = h))), l && (o ? (u = o[0], a = o[1]) : (u = f[0], a = f[1], l.invert && (u = l.invert(u), a = l.invert(a)), u > a && (h = u, u = a, a = h))), c && l ? [[e, u], [r, a]] : c ? [e, r] : l && [u, a])
+ }, n.clear = function () {
+ return n.empty() || (s = [0, 0], f = [0, 0], i = o = null), n
+ }, n.empty = function () {
+ return !!c && s[0] == s[1] || !!l && f[0] == f[1]
+ }, Bo.rebind(n, a, "on")
+ };
+ var Pl = {
+ n: "ns-resize",
+ e: "ew-resize",
+ s: "ns-resize",
+ w: "ew-resize",
+ nw: "nwse-resize",
+ ne: "nesw-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+ }, Ul = [["n", "e", "s", "w", "nw", "ne", "se", "sw"], ["e", "w"], ["n", "s"], []], jl = rc.format = lc.timeFormat, Fl = jl.utc, Hl = Fl("%Y-%m-%dT%H:%M:%S.%LZ");
+ jl.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? Io : Hl, Io.parse = function (n) {
+ var t = new Date(n);
+ return isNaN(t) ? null : t
+ }, Io.toString = Hl.toString, rc.second = Ft(function (n) {
+ return new uc(1e3 * Math.floor(n / 1e3))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 1e3 * Math.floor(t))
+ }, function (n) {
+ return n.getSeconds()
+ }), rc.seconds = rc.second.range, rc.seconds.utc = rc.second.utc.range, rc.minute = Ft(function (n) {
+ return new uc(6e4 * Math.floor(n / 6e4))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 6e4 * Math.floor(t))
+ }, function (n) {
+ return n.getMinutes()
+ }), rc.minutes = rc.minute.range, rc.minutes.utc = rc.minute.utc.range, rc.hour = Ft(function (n) {
+ var t = n.getTimezoneOffset() / 60;
+ return new uc(36e5 * (Math.floor(n / 36e5 - t) + t))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 36e5 * Math.floor(t))
+ }, function (n) {
+ return n.getHours()
+ }), rc.hours = rc.hour.range, rc.hours.utc = rc.hour.utc.range, rc.month = Ft(function (n) {
+ return n = rc.day(n), n.setDate(1), n
+ }, function (n, t) {
+ n.setMonth(n.getMonth() + t)
+ }, function (n) {
+ return n.getMonth()
+ }), rc.months = rc.month.range, rc.months.utc = rc.month.utc.range;
+ var Ol = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6], Yl = [[rc.second, 1], [rc.second, 5], [rc.second, 15], [rc.second, 30], [rc.minute, 1], [rc.minute, 5], [rc.minute, 15], [rc.minute, 30], [rc.hour, 1], [rc.hour, 3], [rc.hour, 6], [rc.hour, 12], [rc.day, 1], [rc.day, 2], [rc.week, 1], [rc.month, 1], [rc.month, 3], [rc.year, 1]], Il = jl.multi([[".%L", function (n) {
+ return n.getMilliseconds()
+ }], [":%S", function (n) {
+ return n.getSeconds()
+ }], ["%I:%M", function (n) {
+ return n.getMinutes()
+ }], ["%I %p", function (n) {
+ return n.getHours()
+ }], ["%a %d", function (n) {
+ return n.getDay() && 1 != n.getDate()
+ }], ["%b %d", function (n) {
+ return 1 != n.getDate()
+ }], ["%B", function (n) {
+ return n.getMonth()
+ }], ["%Y", Ae]]), Zl = {
+ range: function (n, t, e) {
+ return Bo.range(Math.ceil(n / e) * e, +t, e).map(Vo)
+ }, floor: Et, ceil: Et
+ };
+ Yl.year = rc.year, rc.scale = function () {
+ return Zo(Bo.scale.linear(), Yl, Il)
+ };
+ var Vl = Yl.map(function (n) {
+ return [n[0].utc, n[1]]
+ }), Xl = Fl.multi([[".%L", function (n) {
+ return n.getUTCMilliseconds()
+ }], [":%S", function (n) {
+ return n.getUTCSeconds()
+ }], ["%I:%M", function (n) {
+ return n.getUTCMinutes()
+ }], ["%I %p", function (n) {
+ return n.getUTCHours()
+ }], ["%a %d", function (n) {
+ return n.getUTCDay() && 1 != n.getUTCDate()
+ }], ["%b %d", function (n) {
+ return 1 != n.getUTCDate()
+ }], ["%B", function (n) {
+ return n.getUTCMonth()
+ }], ["%Y", Ae]]);
+ Vl.year = rc.year.utc, rc.scale.utc = function () {
+ return Zo(Bo.scale.linear(), Vl, Xl)
+ }, Bo.text = At(function (n) {
+ return n.responseText
+ }), Bo.json = function (n, t) {
+ return Ct(n, "application/json", Xo, t)
+ }, Bo.html = function (n, t) {
+ return Ct(n, "text/html", $o, t)
+ }, Bo.xml = At(function (n) {
+ return n.responseXML
+ }), "function" == typeof define && define.amd ? define(Bo) : "object" == typeof module && module.exports && (module.exports = Bo), this.d3 = Bo
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/facebox.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/facebox.js
new file mode 100644
index 00000000..fa5c8466
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/facebox.js
@@ -0,0 +1,382 @@
+/*
+ * Facebox (for jQuery)
+ * version: 1.3
+ * @requires jQuery v1.2 or later
+ * @homepage https://github.com/defunkt/facebox
+ *
+ * Licensed under the MIT:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Copyright Forever Chris Wanstrath, Kyle Neath
+ *
+ * Usage:
+ *
+ * jQuery(document).ready(function() {
+ * jQuery('a[rel*=facebox]').facebox()
+ * })
+ *
+ * <a href="#terms" rel="facebox">Terms</a>
+ * Loads the #terms div in the box
+ *
+ * <a href="terms.html" rel="facebox">Terms</a>
+ * Loads the terms.html page in the box
+ *
+ * <a href="terms.png" rel="facebox">Terms</a>
+ * Loads the terms.png image in the box
+ *
+ *
+ * You can also use it programmatically:
+ *
+ * jQuery.facebox('some html')
+ * jQuery.facebox('some html', 'my-groovy-style')
+ *
+ * The above will open a facebox with "some html" as the content.
+ *
+ * jQuery.facebox(function($) {
+ * $.get('blah.html', function(data) { $.facebox(data) })
+ * })
+ *
+ * The above will show a loading screen before the passed function is called,
+ * allowing for a better ajaxy experience.
+ *
+ * The facebox function can also display an ajax page, an image, or the contents of a div:
+ *
+ * jQuery.facebox({ ajax: 'remote.html' })
+ * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style')
+ * jQuery.facebox({ image: 'stairs.jpg' })
+ * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style')
+ * jQuery.facebox({ div: '#box' })
+ * jQuery.facebox({ div: '#box' }, 'my-groovy-style')
+ *
+ * Want to close the facebox? Trigger the 'close.facebox' document event:
+ *
+ * jQuery(document).trigger('close.facebox')
+ *
+ * Facebox also has a bunch of other hooks:
+ *
+ * loading.facebox
+ * beforeReveal.facebox
+ * reveal.facebox (aliased as 'afterReveal.facebox')
+ * init.facebox
+ * afterClose.facebox
+ *
+ * Simply bind a function to any of these hooks:
+ *
+ * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
+ *
+ */
+(function ($) {
+ /*
+ function cloneCanvas(oldCanvas) {
+
+ //create a new canvas
+ var newCanvas = document.createElement('canvas');
+ var context = newCanvas.getContext('2d');
+
+ //set dimensions
+ newCanvas.width = oldCanvas.width;
+ newCanvas.height = oldCanvas.height;
+
+ //apply the old canvas to the new one
+ context.drawImage(oldCanvas, 0, 0);
+
+ //return the new canvas
+ return newCanvas;
+ }
+ */
+ $.facebox = function (data, klass) {
+ $.facebox.loading(data.settings || [])
+
+ if (data.ajax) fillFaceboxFromAjax(data.ajax, klass)
+ else if (data.image) fillFaceboxFromImage(data.image, klass)
+ else if (data.div) fillFaceboxFromHref(data.div, klass)
+ else if ($.isFunction(data)) data.call($)
+ else $.facebox.reveal(data, klass)
+ }
+
+ /*
+ * Public, $.facebox methods
+ */
+
+ $.extend($.facebox, {
+ settings: {
+ opacity: 0.2,
+ overlay: true,
+ loadingImage: '/facebox/loading.gif',
+ closeImage: '/facebox/closelabel.png',
+ imageTypes: ['png', 'jpg', 'jpeg', 'gif'],
+ faceboxHtml: '\
+ <div id="facebox" style="display:none;"> \
+ <div class="popup"> \
+ <div class="content"> \
+ </div> \
+ <a href="#" class="close"></a> \
+ </div> \
+ </div>'
+ },
+
+ loading: function () {
+ init()
+ if ($('#facebox .loading').length == 1) return true
+ showOverlay()
+
+ $('#facebox .content').empty().
+ append('<div class="loading"><img src="' + $.facebox.settings.loadingImage + '"/></div>')
+
+ $('#facebox').show().css({
+ top: getPageScroll()[1] + (getPageHeight() / 10),
+ left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2)
+ })
+
+ $(document).bind('keydown.facebox', function (e) {
+ if (e.keyCode == 27) $.facebox.close()
+ return true
+ })
+ $(document).trigger('loading.facebox')
+ },
+
+ flotPlaceholderId: "",
+ //flotRedrawCallbackId: "",
+ flotRedrawCallback: {},
+ flotRedrawCallbackObjs: {},
+ intervals: {},
+ charts: {},
+
+ isExpand: function (placeholderFlotId) {
+ if (placeholderFlotId.indexOf("_expand") >= 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ clearContent: function (placeholderId) {
+ $('#facebox .content').empty().append('<div id="' + placeholderId + '_expand" class="flot-placeholder-expand">')
+ },
+
+ createChartExpand: function (callback) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ callback(this.flotPlaceholderId + "_expand");
+ },
+
+ createChartExpandObj: function (callbackObj) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ //callback(this.flotPlaceholderId + "_expand");
+ var args = callbackObj.arguments;
+ if (args.length > 0) {
+ args[0] = this.flotPlaceholderId + "_expand";
+ callbackObj.callback.apply(null, args);
+ }
+ },
+
+ reveal: function (data, klass) {
+ $(document).trigger('beforeReveal.facebox')
+ if (klass) $('#facebox .content').addClass(klass)
+ //$('#facebox .content').empty().append(data)
+ /////////////////////////////////////////////
+ //this.createChartExpand(this.flotRedrawCallback[this.flotPlaceholderId]);
+ this.createChartExpandObj(this.flotRedrawCallbackObjs[this.flotPlaceholderId]);
+ //////////////////////////////////////////////////////////////////////
+ $('#facebox .popup').children().fadeIn('normal')
+ $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2))
+ $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
+ },
+
+ close: function () {
+ $(document).trigger('close.facebox')
+ return false
+ }
+ })
+
+ /*
+ * Public, $.fn methods
+ */
+
+ $.fn.facebox = function (settings) {
+ if ($(this).length == 0) return
+
+ init(settings)
+
+ function clickHandler() {
+ $.facebox.loading(true)
+
+ // support for rel="facebox.inline_popup" syntax, to add a class
+ // also supports deprecated "facebox[.inline_popup]" syntax
+ var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
+ if (klass) klass = klass[1]
+
+ fillFaceboxFromHref(this.href, klass)
+ return false
+ }
+
+ return this.bind('click.facebox', clickHandler)
+ }
+
+ /*
+ * Private methods
+ */
+
+ // called one time to setup facebox on this page
+ function init(settings) {
+ if ($.facebox.settings.inited) return true
+ else $.facebox.settings.inited = true
+
+ $(document).trigger('init.facebox')
+ makeCompatible()
+
+ var imageTypes = $.facebox.settings.imageTypes.join('|')
+ $.facebox.settings.imageTypesRegexp = new RegExp('\\.(' + imageTypes + ')(\\?.*)?$', 'i')
+
+ if (settings) $.extend($.facebox.settings, settings)
+ $('body').append($.facebox.settings.faceboxHtml)
+
+ var preload = [new Image(), new Image()]
+ preload[0].src = $.facebox.settings.closeImage
+ preload[1].src = $.facebox.settings.loadingImage
+
+ $('#facebox').find('.b:first, .bl').each(function () {
+ preload.push(new Image())
+ preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
+ })
+
+ $('#facebox .close')
+ .click($.facebox.close)
+ .append('<img src="'
+ + $.facebox.settings.closeImage
+ + '" class="close_image" title="close">')
+
+ //$('#facebox .content').addClass('contentWide')
+ }
+
+ // getPageScroll() by quirksmode.com
+ function getPageScroll() {
+ var xScroll, yScroll;
+ if (self.pageYOffset) {
+ yScroll = self.pageYOffset;
+ xScroll = self.pageXOffset;
+ } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
+ yScroll = document.documentElement.scrollTop;
+ xScroll = document.documentElement.scrollLeft;
+ } else if (document.body) {// all other Explorers
+ yScroll = document.body.scrollTop;
+ xScroll = document.body.scrollLeft;
+ }
+ return new Array(xScroll, yScroll)
+ }
+
+ // Adapted from getPageSize() by quirksmode.com
+ function getPageHeight() {
+ var windowHeight
+ if (self.innerHeight) { // all except Explorer
+ windowHeight = self.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
+ windowHeight = document.documentElement.clientHeight;
+ } else if (document.body) { // other Explorers
+ windowHeight = document.body.clientHeight;
+ }
+ return windowHeight
+ }
+
+ // Backwards compatibility
+ function makeCompatible() {
+ var $s = $.facebox.settings
+
+ $s.loadingImage = $s.loading_image || $s.loadingImage
+ $s.closeImage = $s.close_image || $s.closeImage
+ $s.imageTypes = $s.image_types || $s.imageTypes
+ $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
+ }
+
+ // Figures out what you want to display and displays it
+ // formats are:
+ // div: #id
+ // image: blah.extension
+ // ajax: anything else
+ function fillFaceboxFromHref(href, klass) {
+ // div
+ if (href.match(/#/)) {
+ var url = window.location.href.split('#')[0]
+ var target = href.replace(url, '')
+ if (target == '#') return
+ //选择需要放大的图
+ $.facebox.flotPlaceholderId = $(target).attr("flot_id");
+ //$.facebox.flotRedrawCallbackId = $(target).attr("callback_id");
+ if ($(target).hasClass("flot-placeholder-wrapper-portlet-wide")) {
+ $('#facebox .content').addClass('contentWide');
+ }
+
+ $.facebox.reveal($(target).html(), klass)
+
+ // image
+ } else if (href.match($.facebox.settings.imageTypesRegexp)) {
+ fillFaceboxFromImage(href, klass)
+ // ajax
+ } else {
+ fillFaceboxFromAjax(href, klass)
+ }
+ }
+
+ function fillFaceboxFromImage(href, klass) {
+ var image = new Image()
+ image.onload = function () {
+ $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
+ }
+ image.src = href
+ }
+
+ function fillFaceboxFromAjax(href, klass) {
+ $.facebox.jqxhr = $.get(href, function (data) {
+ $.facebox.reveal(data, klass)
+ })
+ }
+
+ function skipOverlay() {
+ return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
+ }
+
+ function showOverlay() {
+ if (skipOverlay()) return
+
+ if ($('#facebox_overlay').length == 0)
+ $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
+
+ $('#facebox_overlay').hide().addClass("facebox_overlayBG")
+ .css('opacity', $.facebox.settings.opacity)
+ .click(function () {
+ $(document).trigger('close.facebox')
+ })
+ .fadeIn(200)
+ return false
+ }
+
+ function hideOverlay() {
+ if (skipOverlay()) return
+
+ $('#facebox_overlay').fadeOut(200, function () {
+ $("#facebox_overlay").removeClass("facebox_overlayBG")
+ $("#facebox_overlay").addClass("facebox_hide")
+ $("#facebox_overlay").remove()
+ })
+
+ return false
+ }
+
+ /*
+ * Bindings
+ */
+
+ $(document).bind('close.facebox', function () {
+ if ($.facebox.jqxhr) {
+ $.facebox.jqxhr.abort()
+ $.facebox.jqxhr = null
+ }
+ $(document).unbind('keydown.facebox')
+ $('#facebox').fadeOut(function () {
+ $('#facebox .content').removeClass().addClass('content')
+ $('#facebox .loading').remove()
+ $(document).trigger('afterClose.facebox')
+ })
+ hideOverlay()
+ })
+
+})(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/portlet-draggable-jq.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/portlet-draggable-jq.js
new file mode 100644
index 00000000..b114d899
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/assets/js/portlet-draggable-jq.js
@@ -0,0 +1,65 @@
+var PortletDraggable = function () {
+
+ return {
+ //main function to initiate the module
+ init: function () {
+
+ if (!jQuery().sortable) {
+ return;
+ }
+
+ $(".column").sortable({
+ connectWith: ".column",
+ items: ".portlet",
+ opacity: 0.8,
+ forceHelperSize: true,
+ placeholder: 'portlet-sortable-placeholder',
+ forcePlaceholderSize: true,
+ tolerance: "pointer",
+ helper: "clone",
+ /* tolerance: "pointer",
+ forcePlaceholderSize: !0,
+ helper: "clone", */
+ cancel: ".portlet-sortable-empty, .portlet-fullscreen", // cancel dragging if portlet is in fullscreen mode
+ revert: 250, // animation in milliseconds
+ update: function (b, c) {
+ if (c.item.prev().hasClass("portlet-sortable-empty")) {
+ c.item.prev().before(c.item);
+ }
+ //换位置后重绘图例
+ var portlet = $(c.item);
+ /* var placeHolderId = $("a > div", portlet).attr("flot_id");
+ if(placeHolderId){
+ var itemCallbackObj = $.facebox.flotRedrawCallbackObjs[placeHolderId];
+ var args = itemCallbackObj.arguments;
+ $.facebox.isDragged = true;
+ var placeHolder = $("div[id=" + placeHolderId + "]");
+ if($(placeHolder).length > 0){
+ $(placeHolder).empty();
+ //eChart的情况需要去掉_echarts_instance_属性才能重绘
+ if($(placeHolder).attr("_echarts_instance_")){
+ $(placeHolder).removeAttr("_echarts_instance_");
+ }
+ if(itemCallbackObj.callback && args.length > 0){
+ args[0] = placeHolderId;
+ itemCallbackObj.callback.apply(null, args);
+ }
+ }
+ $.facebox.isDragged = false;
+ } */
+ //刷新图例大小
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ //调整放大后的宽度
+ if ($(portlet).parent().hasClass("col-md-6")) {
+ $("a > div", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ } else {
+ $("a > div", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+ }
+ });
+ }
+ };
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/c3Chart.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/c3Chart.js
new file mode 100644
index 00000000..5a3326dc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/c3Chart.js
@@ -0,0 +1,59 @@
+/*
+ graphApp = angular.module('graphApp', []);
+
+ graphApp.controller('GraphCtrl', function ($scope) {
+ $scope.chart = null;
+ $scope.config={};
+ $scope.config.data1="30, 200, 100, 200, 150, 250";
+ $scope.config.data2="70, 30, 10, 240, 150, 125";
+
+ $scope.typeOptions=["line","bar","spline","step","area","area-step","area-spline"];
+
+ $scope.config.type1=$scope.typeOptions[0];
+ $scope.config.type2=$scope.typeOptions[1];
+
+ $scope.showGraph = function() {
+ var config = {};
+ config.bindto = '#placeholderC3';
+ config.data = {};
+ config.data.json = {};
+ config.data.json.data1 = $scope.config.data1.split(",");
+ config.data.json.data2 = $scope.config.data2.split(",");
+ config.axis = {"y":{"label":{"text":"Number of items","position":"outer-middle"}}};
+ config.data.types={"data1":$scope.config.type1,"data2":$scope.config.type2};
+ $scope.chart = c3.generate(config);
+ }
+
+ $scope.changeColor = function() {
+ d3.selectAll('path.c3-bar').style("fill", "red");
+ }
+ });
+ */
+
+var c3ChartDemo = function (placeholderC3, type) {
+ var $scopeX = {};
+ $scopeX.chart = null;
+ $scopeX.config = {};
+ $scopeX.config.data1 = "30, 200, 100, 200, 150, 250";
+ $scopeX.config.data2 = "70, 30, 10, 240, 150, 125";
+
+ $scopeX.typeOptions = ["line", "bar", "spline", "step", "area", "area-step", "area-spline"];
+
+ $scopeX.config.type1 = $scopeX.typeOptions[0];
+ $scopeX.config.type2 = $scopeX.typeOptions[1];
+ var config = {};
+ config.bindto = '#' + placeholderC3;
+ config.data = {};
+ config.data.json = {};
+ config.data.json.data1 = $scopeX.config.data1.split(",");
+ config.data.json.data2 = $scopeX.config.data2.split(",");
+ config.axis = {"y": {"label": {"text": "Number of items", "position": "outer-middle"}}};
+ config.data.types = {"data1": $scopeX.config.type1, "data2": $scopeX.config.type2};
+ if (type && type == "bar") {
+ config.data.types.data1 = $scopeX.config.type2;
+ }
+ if (type && type == "step") {
+ config.data.types.data1 = "step";
+ }
+ $.facebox.charts[placeholderC3] = c3.generate(config);
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-barchart-c3.js
new file mode 100644
index 00000000..6f332f1b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-barchart-c3.js
@@ -0,0 +1,29 @@
+var AlarmCount_BarChart_C3 = function (placeholdeC3) {
+
+ var callbackList = [];
+ var callback = function () {
+
+ }
+ callbackList.push(callback);
+
+ $.ajax({
+ "dataType": "json",
+ "type": "GET",
+ "url": "/web/rest/web/fm/count/total",
+ "data": null,
+ "Content-Type": "",
+ "success": function (json, textStatus, jqXHR) {
+ var alarmcount = json;
+ var inputData = [];
+ for (var i = 0; i < alarmcount.ackedCount.length; i++) {
+ inputData.push(alarmcount.unAckedCount[i] + alarmcount.ackedCount[i]);
+ }
+ //for test
+ inputData = [50, 10, 20, 40];
+ ICT_Bar_Chart_C3(placeholdeC3, inputData, callbackList);
+ },
+ "error": function () {
+ }
+ });
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-linechart-c3.js
new file mode 100644
index 00000000..2991a8b6
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/demo-linechart-c3.js
@@ -0,0 +1,41 @@
+var seriesCount = 3;
+var xMaxLength = 60;
+var colors = ["#d12610", "#37b7f3", "#52e136"];
+
+var ICT_CPU_UsageLine_C3 = function (placeholderC3) {
+
+ var c3Line = ICT_Line_C3(placeholderC3);
+
+ var data = {};
+ var maxNumber = 60;
+
+ function randomNumber() {
+ return Math.floor((Math.random() * maxNumber) + 1);
+ }
+
+ if (!$.facebox.isExpand(placeholderC3)) {
+ $.facebox.intervals[placeholderC3] = window.setInterval(function () {
+
+ //var newSeriesData = {};
+ var newSeriesData = [];
+
+ $.ajax({
+ dataType: "json",
+ "type": "GET",
+ url: "/web/rest/web/dm/dashboard/selfcpu/queryValues",
+ "data": JSON.stringify(data),
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ //newSeriesData.data1 = data.cpuUseRatios[0];
+ //newSeriesData.data2 = randomNumber();
+ newSeriesData.push({name: "data1", value: data.cpuUseRatios[0]});
+ newSeriesData.push({name: "data2", value: randomNumber()});
+ newSeriesData.push({name: "data3", value: randomNumber()});
+ c3Line.setC3Data(newSeriesData);
+ }
+ });
+
+ }, 3 * 1000);
+ }
+
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-barchart-c3.js
new file mode 100644
index 00000000..ee1040ca
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-barchart-c3.js
@@ -0,0 +1,67 @@
+var ICT_Bar_Chart_C3 = function (placeholdeC3, inputData, callbackList) {
+
+ var language;
+ //取得国际化信息
+ $.ajax({
+ dataType: "json",
+ url: "/web/newict/framework/thirdparty/flotchart/i18n/ict-barchart-flot-" + getLanguage() + ".json",
+ async: false,
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ language = data.language;
+ },
+ "error": function (xhr, info) {
+ alert("Communication Error! Error reason:" + info);
+ }
+ });
+
+ var config = {};
+ config.bindto = '#' + placeholdeC3;
+ config.data = {};
+ config.data.json = {};
+ config.data.json["告警"] = inputData;
+ config.axis = {"y": {"label": {"text": "Number of Alarms", "position": "outer-middle"}}};
+ config.axis.x = {
+ type: 'category',
+ categories: [language[0].value, language[1].value, language[2].value, language[3].value]
+ };
+ /* config.axis.y.tick = {
+ format: function(data){
+ return data + "%";
+ }
+ }; */
+ config.data.types = {};
+ config.data.types["告警"] = "bar";
+ config.data.color = function (inColor, data) {
+ if (data.index !== undefined) {
+ return language[data.index].color;
+ }
+ return inColor;
+ },
+ config.data.onclick = function (data, element) {
+ if (data.index !== undefined) {
+ var severity = data.index + 1;
+ window.open(
+ "/web/res/web-framework/default.html?showNav=false&severity="
+ + severity + "#uep-ict-fm-currentAlarm", "fm_portlet_page_title"
+ + severity, "");
+ }
+ },
+ //config.data.colors = ['red', 'green', 'blue', 'yellow'];
+ config.legend = {
+ show: false
+ };
+ $.facebox.charts[placeholdeC3] = c3.generate(config);
+
+ /* if($.facebox.isExpand(placeholdeC3)){
+ barChartData = $.facebox.barChartData;
+ }else{
+ $.facebox.barChartData = barChartData;
+ } */
+
+ $.each(callbackList, function (index, callback) {
+ callback();
+ });
+
+}
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-linechart-c3.js
new file mode 100644
index 00000000..5b6d22bc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/ict-linechart-c3.js
@@ -0,0 +1,81 @@
+var ICT_Line_C3 = function (placeholderC3) {
+
+ //var dataSeries = [];
+ var xkeys = {"x": "x", "value": []};
+
+ //��ʼ�����
+ var config = {};
+ config.bindto = '#' + placeholderC3;
+ config.data = {};
+ config.data.keys = xkeys;
+ config.data.json = [];
+ //�Ŵ���ʾ�����ֱ��ȡ��������
+ if (($.facebox.isExpand(placeholderC3) || $.facebox.isDragged) && $.facebox.flotRealTimeData) {
+ config.data.json = $.facebox.flotRealTimeData;
+ config.data.keys = $.facebox.xkeys;
+ }
+ config.axis = {};
+ config.axis.x = {"type": "timeseries", "tick": {"format": "%S"}};
+ config.axis.y = {"label": {"text": "Ratio of CPUs", "position": "outer-middle"}};
+ config.axis.y.tick = {
+ format: function (data) {
+ return data + "%";
+ }
+ };
+ config.data.types = {"data1": "line", "data2": "spline"};
+ config.data.colors = {
+ data1: '#ff0000',
+ data2: '#00ff00',
+ data3: '#0000ff'
+ };
+ var c3Chart = c3.generate(config);
+ $.facebox.charts[placeholderC3] = c3Chart;
+
+ if (!$.facebox.isExpand(placeholderC3)) {
+
+ var dataService = function () {
+ var data = [];
+ var numDataPoints = 60;
+
+ this.loadData = function (callback, newSeriesData) {
+ if (data.length > numDataPoints) {
+ data.shift();
+ }
+ var newValue = {"x": new Date()};
+ for (var i = 0; i < newSeriesData.length; i++) {
+ newValue[newSeriesData[i].name] = newSeriesData[i].value;
+ }
+ //data.push({"x":new Date(),"data1":newSeriesData.data1,"data2":newSeriesData.data2});
+ data.push(newValue);
+ $.facebox.flotRealTimeData = data;
+ $.facebox.xkeys = xkeys;
+ callback(data);
+ };
+ return this;
+ }();
+
+ return {
+
+ setC3Data: function (newSeriesData) {
+ var values = [];
+ for (var i = 0; i < newSeriesData.length; i++) {
+ values.push(newSeriesData[i].name);
+ }
+ xkeys.value = values;
+ //dataSeries = recalculateSeries(dataSeries, newSeriesData);
+ dataService.loadData(function (newData) {
+ var data = {};
+ data.keys = xkeys;
+ data.json = newData;
+ c3Chart.load(data);
+ //c3Chart.resize();
+ }, newSeriesData);
+
+ //$.facebox.flotRealTimeData = dataSeries;
+ }
+
+ };
+
+ }
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/index3.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/index3.html
new file mode 100644
index 00000000..3d076621
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/demo/index3.html
@@ -0,0 +1,143 @@
+<!DOCTYPE html>
+<html ng-app="graphApp">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title></title>
+ <SCRIPT SRC="debug.js"></SCRIPT>
+ <SCRIPT>
+ if (typeof(parent.loadJsFromIndex) == "undefined" || !parent.loadJsFromIndex) {
+ var jqueryJsPath = "/web/res/web-common/comp/jquery.js";
+ document.write("<" + "SCRIPT SRC=" + jqueryJsPath + "><" + "/SCRIPT>");
+ var frameworkJsPath = "/web/res/web-framework/js/framework.js";
+ document.write("<" + "SCRIPT SRC=" + frameworkJsPath + "><" + "/SCRIPT>");
+ }
+ </SCRIPT>
+ <SCRIPT>
+ if (typeof ($userFrameDir) == 'undefined') {
+ $userFrameDir = "/web/res/web-common/comp/";
+ }
+ var toolUrl = $userFrameDir + "tools.js";
+ document.write("<" + "SCRIPT SRC=" + toolUrl + "><" + "/SCRIPT>");
+ </SCRIPT>
+</head>
+<style>
+ body {
+ margin: 0;
+ padding: 0;
+ }
+</style>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.css">
+<link href="/web/newict/framework/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css">
+<link href="/web/newict/framework/thirdparty/dashboard/assets/css/facebox.css" media="screen" rel="stylesheet"
+ type="text/css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/ict-chart-dashboard.css"
+ rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/components.css" rel="stylesheet">
+<link rel="stylesheet" href="/web/res/web-common/css/ZteIctIcons/style.css"/>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/font-awesome/css/font-awesome.min.css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/transition.css" rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/DashboardICT.css" rel="stylesheet">
+<link href="/web/newict/framework/thirdparty/uniform/css/uniform.default.css" rel="stylesheet" type="text/css">
+<link href="/web/newict/framework/thirdparty/dashboard/assets/css/c3.css" rel="stylesheet" type="text/css">
+<body ng-controller="GraphCtrl">
+<div class="dashBoardHeader">
+ <div id="cf5" class="hover sidebar-toggler">
+ <img class="top shadow" src="images/open.png"/>
+ <img class="bottom shadow" src="images/shrink.png"/>
+ </div>
+ <!-- <button id="savePlots">Save</button> -->
+ <div id="deleteIcon" class="hover delete-icon">
+ <img class="top shadow" src="images/remove.png"/>
+ <img class="bottom shadow deleteIconHidden" src="images/remove_red.png"/>
+ </div>
+</div>
+<div class="plotItemsSelectionWrapper"></div>
+<div class="dashBoardBody">
+ <div class="contentWrapper">
+ <div class="plotsWrapper">
+ <div class="row ui-sortable" id="sortable_portlets_added">
+ <div class="col-md-6 column sortable col-padding-adjust">
+ <div id="droppable" class="portlet portlet-sortable light bg-inverse droppable"
+ style="display: block;"></div>
+ <div class="portlet portlet-sortable-empty"></div>
+ </div>
+ <div class="col-md-6 column sortable col-padding-adjust">
+ <div id="droppable1" class="portlet portlet-sortable light bg-inverse droppable"
+ style="display: block;"></div>
+ <div class="portlet portlet-sortable-empty"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- </div> -->
+<script type="text/javascript" src="/web/newict/framework/thirdparty/jquery-1.10.2.min.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.js"></script>
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/d3.min.js" charset="utf-8"></script>
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/c3.js"></script>
+<!--图例-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/ict-linechart-c3.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/ict-barchart-c3.js"></SCRIPT>
+<!--demo-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/demo-barchart-c3.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/demo-linechart-c3.js"></SCRIPT>
+<!--facebox-->
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/facebox.js"></script>
+<!--portlet-->
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/portlet-draggable-jq.js"
+ type="text/javascript"></script>
+<script src="/web/newict/framework/thirdparty/bootstrap/js/bootstrap.min.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-slimscroll/jquery.slimscroll.min.js"
+ type="text/javascript"></script>
+<!-- <script type="text/javascript" src="js/freewall.js"></script> -->
+<script src="/web/newict/framework/thirdparty/dashboard/demo/c3Chart.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/uniform/jquery.uniform.min.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/dashboard/DashboardICT-jq.js"></script>
+<script>
+ jQuery(document).ready(function () {
+
+ var c3ChartControlHtmlFrag =
+ '<div class="legendC3">' +
+ '<span id="c3-line" data-id="data1" style="background-color: rgb(31, 119, 180);">Line</span>' +
+ '<span id="c3-bar" data-id="data2" style="background-color: rgb(255, 127, 14);">Bar</span>' +
+ '<span id="c3-step" data-id="data3" style="background-color: rgb(44, 160, 44);">Step</span>' +
+ '</div>';
+ DashboardICT.addPlotControlHtmlFrags("c3Chart", c3ChartControlHtmlFrag);
+
+ var c3PlotControlCallback = function (plotCallback, placeholderId) {
+ $("#c3-line").click(function () {
+ plotCallback(placeholderId, "line");
+ var args = [placeholderId, "line"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ $("#c3-bar").click(function () {
+ plotCallback(placeholderId, "bar");
+ var args = [placeholderId, "bar"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ $("#c3-step").click(function () {
+ plotCallback(placeholderId, "step");
+ var args = [placeholderId, "step"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ }
+ DashboardICT.addPlotControlCallbacks("c3Chart", c3PlotControlCallback);
+
+ DashboardICT.init();
+ $("#savePlots").click(function () {
+ var savedPlots = DashboardICT.saveSelectedPlots();
+ });
+
+ });
+</script>
+</body>
+</html>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/CPU统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/CPU统计.png
new file mode 100644
index 00000000..b001823f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/CPU统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/Thumbs.db b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/Thumbs.db
new file mode 100644
index 00000000..74a2eb78
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/Thumbs.db
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/closelabel.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/closelabel.png
new file mode 100644
index 00000000..c339e593
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/closelabel.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/delete.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/delete.png
new file mode 100644
index 00000000..5947c7c9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/delete.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/loading.gif b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/loading.gif
new file mode 100644
index 00000000..f864d5fd
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/loading.gif
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/open.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/open.png
new file mode 100644
index 00000000..a0ebe178
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/open.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove.png
new file mode 100644
index 00000000..ec7713fa
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove_red.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove_red.png
new file mode 100644
index 00000000..bbd4dbd5
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/remove_red.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/shrink.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/shrink.png
new file mode 100644
index 00000000..a5624c8b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/shrink.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/告警统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/告警统计.png
new file mode 100644
index 00000000..0120e90d
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/告警统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计A.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计A.png
new file mode 100644
index 00000000..bd67fa14
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计A.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计B.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计B.png
new file mode 100644
index 00000000..341bd0f1
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计B.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计C.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计C.png
new file mode 100644
index 00000000..f51faa24
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/性能统计C.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/日志统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/日志统计.png
new file mode 100644
index 00000000..c2c78b1f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/dashboard-jq/images/日志统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-barchart-c3.js
new file mode 100644
index 00000000..d5680445
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-barchart-c3.js
@@ -0,0 +1,34 @@
+var AlarmCount_BarChart_C3 = function (placeholdeC3) {
+
+ var callbackList = [];
+ var callback = function (data) {
+ if (data.index !== undefined) {
+ var severity = data.index + 1;
+ window.open(
+ "/web/res/web-framework/default.html?showNav=false&severity="
+ + severity + "#uep-ict-fm-currentAlarm", "fm_portlet_page_title"
+ + severity, "");
+ }
+ }
+ callbackList.push(callback);
+
+ $.ajax({
+ async: false,
+ "dataType": "json",
+ "type": "GET",
+ "url": "/web/rest/web/fm/count/total",
+ "data": null,
+ "Content-Type": "application/json; charset=utf-8",
+ "success": function (json, textStatus, jqXHR) {
+ var alarmcount = json;
+ var inputData = [];
+ for (var i = 0; i < alarmcount.ackedCount.length; i++) {
+ inputData.push(alarmcount.unAckedCount[i] + alarmcount.ackedCount[i]);
+ }
+ ICT_Bar_Chart_C3(placeholdeC3, inputData, callbackList);
+ },
+ "error": function () {
+ }
+ });
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-linechart-c3.js
new file mode 100644
index 00000000..f8aafa68
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/demo/demo-linechart-c3.js
@@ -0,0 +1,40 @@
+var ICT_CPU_UsageLine_C3 = function (placeholderC3) {
+
+ //取得数据系列的名称
+ var seriesNames = [];
+ $.ajax({
+ async: false,
+ dataType: "json",
+ "type": "GET",
+ url: "/web/rest/web/dm/dashboard/selfcpu/queryValues",
+ "data": JSON.stringify(data),
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ seriesNames.push(data.deviceLabels[0]);
+ }
+ });
+
+ var colors = ["#fc4400", '#5ab1ef', '#b6a2de'];
+ var c3Line = ICT_Line_C3(placeholderC3, seriesNames, colors);
+
+ var data = {};
+
+ window.setInterval(function () {
+
+ var newSeriesData = [];
+
+ $.ajax({
+ dataType: "json",
+ "type": "GET",
+ url: "/web/rest/web/dm/dashboard/selfcpu/queryValues",
+ "data": JSON.stringify(data),
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ newSeriesData.push({name: data.deviceLabels[0], value: data.cpuUseRatios[0]});
+ c3Line.setC3Data(newSeriesData);
+ }
+ });
+
+ }, 3 * 1000);
+
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-barchart-c3.js
new file mode 100644
index 00000000..20f87a69
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-barchart-c3.js
@@ -0,0 +1,68 @@
+var ICT_Bar_Chart_C3 = function (placeholdeC3, inputData, callbackList) {
+
+ var language;
+ //取得国际化信息
+ $.ajax({
+ dataType: "json",
+ url: "/web/newict/framework/thirdparty/flotchart/i18n/ict-barchart-flot-" + getLanguage() + ".json",
+ async: false,
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ language = data.language;
+ },
+ "error": function (xhr, info) {
+ alert("Communication Error! Error reason:" + info);
+ }
+ });
+
+ var config = {};
+ config.bindto = '#' + placeholdeC3;
+ config.data = {};
+ config.data.json = {};
+ config.data.json["告警"] = inputData;
+ config.axis = {};
+ config.axis.x = {
+ type: 'category',
+ categories: [language[0].value, language[1].value, language[2].value, language[3].value]
+ };
+ /* config.axis.y.tick = {
+ format: function(data){
+ return data + "%";
+ }
+ }; */
+ config.axis.y = {};
+ config.axis.y.tick = {
+ values: [0, 20, 40, 60]
+ , outer: false
+ };
+ config.data.types = {};
+ config.data.types["告警"] = "bar";
+ config.data.color = function (inColor, data) {
+ if (data.index !== undefined) {
+ return language[data.index].color;
+ }
+ return inColor;
+ },
+ config.data.onclick = function (data, element) {
+ $.each(callbackList, function (index, callback) {
+ callback(data);
+ });
+ },
+ config.legend = {
+ show: false
+ };
+ config.bar = {
+ width: {
+ ratio: 0.3
+ }
+ };
+ config.grid = {
+ y: {
+ show: true
+ }
+ };
+
+ c3.generate(config);
+
+}
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-linechart-c3.js
new file mode 100644
index 00000000..23149f35
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-chart/ict-linechart-c3.js
@@ -0,0 +1,98 @@
+var ICT_Line_C3 = function (placeholderC3, seriesNames, colors) {
+
+ var xkeys = {"x": "x", "value": []};
+
+ //��ʼ�����
+ var config = {};
+ config.bindto = '#' + placeholderC3;
+ config.data = {};
+ config.data.keys = xkeys;
+ config.data.json = [];
+ config.axis = {};
+ config.axis.x = {"type": "timeseries", "tick": {"format": "%H:%M:%S'", count: 5}};
+ config.axis.y = {
+ padding: {
+ left: 0,
+ right: 0,
+ },
+ //,inner: true
+ max: 100,
+ min: 0
+ };
+ config.axis.y.tick = {
+ format: function (data) {
+ return (data + "").substring(0, 4) + "%";
+ }
+ , values: [0, 20, 40, 60, 80, 100]
+ //,centered: true
+ //,fit: true
+ , outer: false
+ };
+ config.data.colors = {};
+ config.data.types = {};
+ if (!colors) {
+ colors = ['#ffb980', '#5ab1ef', '#b6a2de'];
+ }
+ if (seriesNames) {
+ for (var i = 0; i < seriesNames.length; i++) {
+ config.data.colors[seriesNames[i]] = colors[i];
+ config.data.types[seriesNames[i]] = "spline";
+ }
+ }
+
+ /* config.data.color = function(inColor, data) {
+ if(data.index !== undefined) {
+ return colors[data.index];
+ }
+ return inColor;
+ }; */
+ config.grid = {
+ y: {
+ show: true
+ }
+ }
+
+ var c3Chart = c3.generate(config);
+
+ var dataService = new function () {
+ var data = [];
+ var numDataPoints = 60;
+
+ this.loadData = function (callback, newSeriesData) {
+ if (data.length > numDataPoints) {
+ data.shift();
+ }
+ var newValue = {"x": new Date()};
+ for (var i = 0; i < newSeriesData.length; i++) {
+ newValue[newSeriesData[i].name] = newSeriesData[i].value;
+ }
+ //data.push({"x":new Date(),"data1":newSeriesData.data1,"data2":newSeriesData.data2});
+ data.push(newValue);
+ callback(data);
+ };
+ //return this;
+ }
+
+ return {
+
+ setC3Data: function (newSeriesData) {
+ var values = [];
+ for (var i = 0; i < newSeriesData.length; i++) {
+ values.push(newSeriesData[i].name);
+ }
+ xkeys.value = values;
+ //var dataServiceFunc = new dataService();
+ dataService.loadData(function (newData) {
+ var data = {};
+ data.keys = xkeys;
+ data.json = newData;
+ //data.done = DashboardICT.removeYaxisScale;
+ c3Chart.load(data);
+ //c3Chart.resize();
+ }, newSeriesData);
+
+ }
+
+ };
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json
new file mode 100644
index 00000000..907397d0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json
@@ -0,0 +1,86 @@
+{
+ "chartTypes": {
+ "stackChart": {
+ "typeId": "stackChart",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/CPU统计.png",
+ "plotLabel": "堆积图",
+ "placeholderId": "placeholderStack",
+ "plotCallbackName": "Demo_StackChart",
+ "plotSize": "size21"
+ },
+ "alarmCounts": {
+ "typeId": "alarmCounts",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/告警统计.png",
+ "plotLabel": "告警统计",
+ "placeholderId": "placeholderAlarmCounts",
+ "plotCallbackName": "AlarmCounts",
+ "plotSize": "size21"
+ },
+ "logCounts": {
+ "typeId": "logCounts",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/日志统计.png",
+ "plotLabel": "日志统计",
+ "placeholderId": "placeholderPie",
+ "plotCallbackName": "Demo_PieChart",
+ "plotSize": "size21"
+ },
+ "ictCPULine": {
+ "typeId": "ictCPULine",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计A.png",
+ "plotLabel": "性能统计A",
+ "placeholderId": "placeholderCPU",
+ "plotCallbackName": "ICT_CPU_UsageLine",
+ "plotSize": "size21"
+ },
+ "alarmChart": {
+ "typeId": "alarmChart",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计B.png",
+ "plotLabel": "性能统计B",
+ "placeholderId": "placeholderAlarm",
+ "plotCallbackName": "AlarmCount_BarChart",
+ "plotSize": "size21"
+ },
+ "c3Chart": {
+ "typeId": "c3Chart",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计C.png",
+ "plotLabel": "性能统计C",
+ "placeholderId": "placeholderC3Demo",
+ "plotCallbackName": "c3ChartDemo",
+ "plotSize": "size21",
+ "plotControlCallback": "true"
+ },
+ "ictCPULineC3": {
+ "typeId": "ictCPULineC3",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计C.png",
+ "plotLabel": "ICT服务器CPU使用率",
+ "placeholderId": "placeholderC3_CPU",
+ "plotCallbackName": "ICT_CPU_UsageLine_C3",
+ "plotSize": "size21"
+ },
+ "currentAlarm": {
+ "typeId": "currentAlarm",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计C.png",
+ "plotLabel": "当前告警",
+ "placeholderId": "placeholderC3_Alarm",
+ "plotCallbackName": "AlarmCount_BarChart_C3",
+ "plotSize": "size21"
+ },
+ "zzz": {
+ "typeId": "zzz",
+ "chartType": "prototype",
+ "imageURL": "/web/newict/framework/thirdparty/dashboard/images/性能统计C.png",
+ "plotLabel": "性能统计HTML片段",
+ "placeholderId": "placeholderC3_Demo",
+ "plotCallbackName": "c3ChartDemo",
+ "arguments": "line",
+ "htmlSrc": "srcInclude.html",
+ "plotSize": "size21"
+ }
+ },
+ "initPlots": [
+ "ictCPULineC3",
+ "c3Chart",
+ "zzz"
+ ],
+ "languages": {}
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json.sdn b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json.sdn
new file mode 100644
index 00000000..20fc53d2
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig-jq.json.sdn
@@ -0,0 +1,36 @@
+{
+ "chartTypes":{
+ "c3Chart":{
+ "typeId":"c3Chart",
+ "imageURL":"images/性能统计C.png",
+ "plotLabel":"性能统计C",
+ "placeholderId":"placeholderC3",
+ "plotCallbackName":"c3ChartDemo",
+ "plotSize":"size21",
+ "plotControlCallback":"true"
+ },
+ "ictCPULineC3":{
+ "typeId":"ictCPULineC3",
+ "imageURL":"images/性能统计C.png",
+ "plotLabel":"ICT服务器CPU使用率",
+ "placeholderId":"placeholderC3_1",
+ "plotCallbackName":"ICT_CPU_UsageLine_C3",
+ "plotSize":"size21"
+ },
+ "currentAlarm":{
+ "typeId":"currentAlarm",
+ "imageURL":"images/性能统计C.png",
+ "plotLabel":"当前告警",
+ "placeholderId":"placeholderC3_2",
+ "plotCallbackName":"AlarmCount_BarChart_C3",
+ "plotSize":"size21"
+ }
+ },
+
+ "initPlots":[
+ "c3Chart"
+ ],
+
+ "languages":{}
+
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig.json b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig.json
new file mode 100644
index 00000000..f5c9668a
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardConfig.json
@@ -0,0 +1,83 @@
+{
+ "chartTypes": {
+ "stackChart": {
+ "typeId": "stackChart",
+ "imageURL": "images/CPU统计.png",
+ "plotLabel": "堆积图",
+ "placeholderId": "placeholderStack",
+ "plotCallbackName": "Demo_StackChart",
+ "plotSize": "size21"
+ },
+ "alarmCounts": {
+ "typeId": "alarmCounts",
+ "imageURL": "images/告警统计.png",
+ "plotLabel": "告警统计",
+ "placeholderId": "placeholderAlarmCounts",
+ "plotCallbackName": "AlarmCounts",
+ "plotSize": "size21"
+ },
+ "logCounts": {
+ "typeId": "logCounts",
+ "imageURL": "images/日志统计.png",
+ "plotLabel": "日志统计",
+ "placeholderId": "placeholderPie",
+ "plotCallbackName": "Demo_PieChart",
+ "plotSize": "size21"
+ },
+ "ictCPULine": {
+ "typeId": "ictCPULine",
+ "imageURL": "images/性能统计A.png",
+ "plotLabel": "性能统计A",
+ "placeholderId": "placeholderCPU",
+ "plotCallbackName": "ICT_CPU_UsageLine",
+ "plotSize": "size21"
+ },
+ "alarmChart": {
+ "typeId": "alarmChart",
+ "imageURL": "images/性能统计B.png",
+ "plotLabel": "性能统计B",
+ "placeholderId": "placeholderAlarm",
+ "plotCallbackName": "AlarmCount_BarChart",
+ "plotSize": "size21"
+ },
+ "c3Chart": {
+ "typeId": "c3Chart",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "性能统计C",
+ "placeholderId": "placeholderC3",
+ "plotCallbackName": "c3ChartDemo",
+ "plotSize": "size21",
+ "plotControlCallback": "true"
+ },
+ "ictCPULineC3": {
+ "typeId": "ictCPULineC3",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "ICT服务器CPU使用率",
+ "placeholderId": "placeholderC3_1",
+ "plotCallbackName": "ICT_CPU_UsageLine_C3",
+ "plotSize": "size21"
+ },
+ "currentAlarm": {
+ "typeId": "currentAlarm",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "当前告警",
+ "placeholderId": "placeholderC3_2",
+ "plotCallbackName": "AlarmCount_BarChart_C3",
+ "plotSize": "size21"
+ },
+ "zzz": {
+ "typeId": "zzz",
+ "imageURL": "images/性能统计C.png",
+ "plotLabel": "性能统计C",
+ "placeholderId": "placeholderC3_3",
+ "plotCallbackName": "c3ChartDemo",
+ "plotSize": "size21"
+ }
+ },
+ "initPlots": [
+ "ictCPULineC3",
+ "c3Chart",
+ "currentAlarm"
+ ],
+ "languages": {}
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardICT.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardICT.js
new file mode 100644
index 00000000..86fd729c
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/DashboardICT.js
@@ -0,0 +1,291 @@
+var DashboardICT = function () {
+
+ var chartObjs;
+ var plotsSelected;
+ var plotControlCallbacks = {};
+ var plotControlHtmlFrags = {};
+
+ var wall;
+
+ var addDroppableItem = function () {
+ $(".plotsWrapper").droppable({
+ accept: ".draggableItems",
+ drop: function (event, ui) {
+ //var dropLocation = $( ".plotsWrapper" );
+ var plotTypeId = $(ui.draggable).attr("id");
+ if ($("#" + chartObjs[plotTypeId].placeholderId).length > 0) {
+ alert("Plot already exits!");
+ return;
+ }
+ addDraggablePortlet(plotTypeId);
+ }
+ });
+ }
+
+ var addDraggablePortlet = function (plotTypeId) {
+
+ var portletId = chartObjs[plotTypeId].typeId;
+ var portletLabel = chartObjs[plotTypeId].plotLabel;
+ var placeholderId = chartObjs[plotTypeId].placeholderId;
+ var plotCallback = eval(chartObjs[plotTypeId].plotCallbackName);
+ var plotSize = "size11";
+ if (chartObjs[plotTypeId].plotSize) {
+ plotSize = chartObjs[plotTypeId].plotSize;
+ }
+
+ var faceboxDivIndex = $("a[rel=facebox]").length + 1;
+ var portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + ' brickDraggable">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder"></div>' +
+ '</div>' +
+ '</a>' +
+ '</div>';
+
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + ' brickDraggable">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ plotControlHtmlFrags[plotTypeId] +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ '</a>' +
+ '</div>';
+ }
+
+ //插入图例
+ wall.prepend(portletHtml);
+ wall.refresh($(".plotsWrapper").width(), $(".plotsWrapper").height());
+
+ //添加图例控制回调
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ plotControlCallbacks[plotTypeId](plotCallback, placeholderId);
+ }
+
+ plotCallback(placeholderId);
+
+ var args = [placeholderId];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+
+ $.facebox.settings.closeImage = '/web/newict/framework/thirdparty/facebox/closelabel.png';
+ $.facebox.settings.loadingImage = '/web/newict/framework/thirdparty/facebox/loading.gif';
+ //$('a[rel*=facebox]').facebox();
+
+ //addDroppableItem();
+
+ //调整放大后的宽度
+ var portlet = $("#" + portletId + ".portlet");
+ /*if($(portlet).parent().hasClass("col-md-6")){
+ $("a > div", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ }else{
+ $("a > div", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }*/
+ if (plotSize == "size21") {
+ $("div[flot_id=" + placeholderId + "]").addClass("flot-placeholder-wrapper-portlet-wide");
+ } else {
+ $("div[flot_id=" + placeholderId + "]").removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+ }
+
+ return {
+
+ init: function () {
+
+ $.ajax({
+ async: false,
+ "type": "GET",
+ url: "/web/newict/framework/thirdparty/dashboard/DashboardConfig.json",
+ dataType: "json",
+ "success": function (res, textStatus, jqXHR) {
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ //初始化左边的图列类型列表
+ chartObjs = res.chartTypes;
+ var chartSelectHtml = "";
+ for (var chartObj in chartObjs) {
+ chartSelectHtml =
+ '<div id="' + chartObjs[chartObj].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartObj].imageURL + '">' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ }
+ //初始化已选图例
+ plotsSelected = res.initPlots;
+ },
+ "error": function () {
+ alert("Config file load error!");
+ }
+ });
+
+ //组件放大显示插件
+ $.facebox.settings.closeImage = '../facebox/closelabel.png';
+ $.facebox.settings.loadingImage = '../facebox/loading.gif';
+ //$('a[rel*=facebox]').facebox();
+ //Portlet
+ $(".draggableItems").draggable({
+ //containment:"body",
+ revert: false,
+ appendTo: "div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ $("#deleteIcon").droppable({
+ accept: ".portlet",
+ drop: function () {
+ if ($("#deleteIcon .top").hasClass("deleteIconHidden")) {
+ //$( "#droppableItem" ).removeClass("droppedOver");
+ var portletRemoveId = $(".ui-sortable-helper").attr("id");
+ if (portletRemoveId != "droppable") {
+ $("#" + portletRemoveId).remove();
+ }
+ }
+ },
+ tolerance: "touch",
+ over: function (event, ui) {
+ //$( "#droppableItem" ).addClass("droppedOver");
+ }
+ });
+ addDroppableItem();
+ $(".sidebar-toggler").click(function () {
+ $("#cf5 img.top").toggleClass("scale");
+ $("#cf5 img.bottom").toggleClass("rotate");
+
+ $(".plotsWrapper").toggleClass("dashboardExpand", 500, "linear");
+ $(".plotItemsSelectionWrapper").toggleClass("sideBarClose", 500, "linear");
+
+ setTimeout(function () {
+ wall.refresh($(".plotsWrapper").width(), $(".plotsWrapper").height());
+ setTimeout(function () {
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ }, 700);
+ }, 700);
+ });
+ $('.plotItemsSelectionWrapper').slimScroll({
+ position: 'right',
+ width: '177px',
+ height: '610px',
+ color: 'rgb(100, 150, 240)',
+ railColor: '#fff',
+ railOpacity: 0.3
+ });
+ $('.slimScrollDiv').css({
+ 'float': 'left',
+ 'margin-right': '-100%',
+ 'margin-top': '10px'
+ });
+ $("#deleteIcon").click(function () {
+ if ($("#deleteIcon .bottom").hasClass("deleteIconHidden")) {
+ $("#deleteIcon .top").addClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").removeClass("deleteIconHidden", 500);
+ //添加删除小图标
+ $(".removeflot").addClass("removeIcon");
+ $(".removeflot.removeIcon").click(function () {
+ var placeholderId = $(".flot-placeholder", $(this).parent()).attr("id");
+ if ($.facebox.intervals[placeholderId]) {
+ clearInterval($.facebox.intervals[placeholderId]);
+ }
+ $(this).parent().remove();
+ });
+ } else {
+ $("#deleteIcon .top").removeClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").addClass("deleteIconHidden", 500);
+ //去掉删除小图标
+ $(".removeflot.removeIcon").removeClass("removeIcon");
+ }
+ });
+ //自由拖拽
+ wall = new freewall("#freeDraggable");
+ wall.reset({
+ draggable: true,
+ selector: '.portlet',
+ animate: true,
+
+ /*cellW: function(width) {
+ var cellWidth = width / 9;
+ return cellWidth + 10;
+ },*/
+ cellW: 140,
+ cellH: 125,
+ /* cellW: 140,
+ cellH: 125, */
+ delay: 50,
+ fixSize: false,
+ gutterY: 5,
+ gutterX: 5,
+ onResize: function () {
+ //wall.fitWidth();
+ wall.refresh($(".plotsWrapper").width(), $(".plotsWrapper").height());
+ //wall.refresh();
+ /* var callbackObjs = $.facebox.flotRedrawCallbackObjs;
+ for(var callbackObj in callbackObjs){
+ callbackObjs[callbackObj].callback.apply(null, callbackObjs[callbackObj].arguments);
+ } */
+ setTimeout(function () {
+ //wall.refresh($( ".plotsWrapper" ).width(), $( ".plotsWrapper" ).height());
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ }, 700);
+ },
+ onBlockMove: function () {
+ //wall.fitWidth();
+ wall.refresh($(".plotsWrapper").width(), $(".plotsWrapper").height());
+ $(window).trigger("resize");
+ //console.log(this);
+ }
+ });
+ //wall.fitWidth();
+ wall.refresh($(".plotsWrapper").width(), $(".plotsWrapper").height());
+ //wall.fitHeight();
+ //wall.fitZone($( ".plotsWrapper" ).width(), $( ".plotsWrapper" ).height());
+ $(window).trigger("resize");
+ //初始化已选图例
+ for (var i = 0; i < plotsSelected.length; i++) {
+ addDraggablePortlet(plotsSelected[i]);
+ }
+
+ setTimeout(function () {
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ }, 700);
+
+ },
+
+ saveSelectedPlots: function () {
+ var placeholders = [];
+ var plots = $(".flot-placeholder");
+ $.each(plots, function (index, plot) {
+ placeholders.push($(plot).attr('id'));
+ });
+ plotsSelected = [];
+ for (var chartObj in chartObjs) {
+ if (jQuery.inArray(chartObjs[chartObj].placeholderId, placeholders) > -1) {
+ plotsSelected.push(chartObj);
+ }
+ }
+ return plotsSelected;
+ },
+
+ addPlotControlCallbacks: function (plotId, callback) {
+ plotControlCallbacks[plotId] = callback;
+ },
+
+ addPlotControlHtmlFrags: function (plotId, htmlFrag) {
+ plotControlHtmlFrags[plotId] = htmlFrag;
+ }
+ }
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.css
new file mode 100644
index 00000000..a4f9945f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.css
@@ -0,0 +1,257 @@
+/*-- Chart --*/
+
+.c3 svg {
+ /*font: 10px sans-serif; */
+ font: 12px Microsoft yahei;
+ margin-left: -15px;
+}
+
+.c3 path, .c3 line {
+ fill: none;
+ /*stroke: #000;*/
+ stroke: #008acd;
+}
+
+.c3-axis.c3-axis-y {
+ fill: #008acd;
+ stroke-width: 1.25;
+}
+
+.c3 text {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+
+.c3-legend-item-tile,
+.c3-xgrid-focus,
+.c3-ygrid,
+.c3-event-rect,
+.c3-bars path {
+ shape-rendering: crispEdges;
+}
+
+.c3-chart-arc path {
+ stroke: #fff;
+
+}
+
+.c3-chart-arc text {
+ fill: #fff;
+ font-size: 13px;
+}
+
+/*-- Axis --*/
+
+.c3-axis-x .tick {
+}
+
+.c3-axis-x-label {
+}
+
+.c3-axis-y .tick {
+}
+
+.c3-axis-y-label {
+}
+
+.c3-axis-y2 .tick {
+}
+
+.c3-axis-y2-label {
+}
+
+/*-- Grid --*/
+
+.c3-grid line {
+ stroke: #aaa;
+}
+
+.c3-grid text {
+ fill: #aaa;
+}
+
+.c3-xgrid, .c3-ygrid {
+ stroke-dasharray: 3 3;
+}
+
+.c3-xgrid-focus {
+}
+
+/*-- Text on Chart --*/
+
+.c3-text {
+}
+
+.c3-text.c3-empty {
+ fill: #808080;
+ font-size: 2em;
+}
+
+/*-- Line --*/
+
+.c3-line {
+ stroke-width: 2px;
+}
+
+/*-- Point --*/
+
+.c3-circle._expanded_ {
+ stroke-width: 1px;
+ stroke: white;
+}
+
+.c3-selected-circle {
+ fill: white;
+ stroke-width: 2px;
+}
+
+/*-- Bar --*/
+
+.c3-bar {
+ stroke-width: 0;
+}
+
+.c3-bar._expanded_ {
+ fill-opacity: 0.75;
+}
+
+/*-- Arc --*/
+
+.c3-chart-arcs-title {
+ dominant-baseline: middle;
+ font-size: 1.3em;
+}
+
+/*-- Focus --*/
+
+.c3-target.c3-focused {
+ opacity: 1;
+}
+
+.c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {
+ stroke-width: 2px;
+}
+
+.c3-target.c3-defocused {
+ opacity: 0.3 !important;
+}
+
+/*-- Region --*/
+
+.c3-region {
+ fill: steelblue;
+ fill-opacity: .1;
+}
+
+/*-- Brush --*/
+
+.c3-brush .extent {
+ fill-opacity: .1;
+}
+
+/*-- Select - Drag --*/
+
+.c3-dragarea {
+}
+
+/*-- Legend --*/
+
+.c3-legend-item {
+ font-size: 12px;
+}
+
+.c3-legend-item-hidden {
+ opacity: 0.15;
+}
+
+.c3-legend-background {
+ opacity: 0.75;
+ fill: white;
+ stroke: lightgray;
+ stroke-width: 1
+}
+
+/*-- Tooltip --*/
+
+.c3-tooltip-container {
+ z-index: 10;
+}
+
+.c3-tooltip {
+ border-collapse: collapse;
+ border-spacing: 0;
+ background-color: #fff;
+ empty-cells: show;
+ width: auto;
+ -webkit-box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ -moz-box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ box-shadow: 7px 7px 12px -9px rgb(119, 119, 119);
+ opacity: 0.9;
+}
+
+.c3-tooltip tr {
+ border: 1px solid #CCC;
+}
+
+.c3-tooltip th {
+ background-color: #aaa;
+ font-size: 14px;
+ padding: 2px 5px;
+ text-align: left;
+ color: #FFF;
+}
+
+.c3-tooltip td {
+ font-size: 13px;
+ padding: 3px 6px;
+ background-color: #fff;
+ border-left: 1px dotted #999;
+}
+
+.c3-tooltip td > span {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin-right: 6px;
+}
+
+.c3-tooltip td.value {
+ text-align: right;
+}
+
+.c3-area {
+ stroke-width: 0;
+ opacity: 0.2;
+}
+
+.c3-chart-arcs .c3-chart-arcs-background {
+ fill: #e0e0e0;
+ stroke: none;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-unit {
+ fill: #000;
+ font-size: 16px;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-max {
+ fill: #777;
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-min {
+ fill: #777;
+}
+
+.c3-chart-arc .c3-gauge-value {
+ fill: #000;
+ /* font-size: 28px !important;*/
+}
+
+.c3 path.domain {
+ stroke-width: 2px;
+}
+
+/* .c3-shape.c3-bar {
+ stroke-width: 0px;
+} */ \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.min.css
new file mode 100644
index 00000000..984561f7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/c3.min.css
@@ -0,0 +1,175 @@
+.c3 svg {
+ font: 10px sans-serif
+}
+
+.c3 line, .c3 path {
+ fill: none;
+ stroke: #000
+}
+
+.c3 text {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none
+}
+
+.c3-bars path, .c3-event-rect, .c3-legend-item-tile, .c3-xgrid-focus, .c3-ygrid {
+ shape-rendering: crispEdges
+}
+
+.c3-chart-arc path {
+ stroke: #fff
+}
+
+.c3-chart-arc text {
+ fill: #fff;
+ font-size: 13px
+}
+
+.c3-grid line {
+ stroke: #aaa
+}
+
+.c3-grid text {
+ fill: #aaa
+}
+
+.c3-xgrid, .c3-ygrid {
+ stroke-dasharray: 3 3
+}
+
+.c3-text.c3-empty {
+ fill: gray;
+ font-size: 2em
+}
+
+.c3-line {
+ stroke-width: 1px
+}
+
+.c3-circle._expanded_ {
+ stroke-width: 1px;
+ stroke: #fff
+}
+
+.c3-selected-circle {
+ fill: #fff;
+ stroke-width: 2px
+}
+
+.c3-bar {
+ stroke-width: 0
+}
+
+.c3-bar._expanded_ {
+ fill-opacity: .75
+}
+
+.c3-chart-arcs-title {
+ dominant-baseline: middle;
+ font-size: 1.3em
+}
+
+.c3-target.c3-focused {
+ opacity: 1
+}
+
+.c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {
+ stroke-width: 2px
+}
+
+.c3-target.c3-defocused {
+ opacity: .3 !important
+}
+
+.c3-region {
+ fill: #4682b4;
+ fill-opacity: .1
+}
+
+.c3-brush .extent {
+ fill-opacity: .1
+}
+
+.c3-legend-item {
+ font-size: 12px
+}
+
+.c3-legend-item-hidden {
+ opacity: .15
+}
+
+.c3-legend-background {
+ opacity: .75;
+ fill: #fff;
+ stroke: #d3d3d3;
+ stroke-width: 1
+}
+
+.c3-tooltip-container {
+ z-index: 10
+}
+
+.c3-tooltip {
+ border-collapse: collapse;
+ border-spacing: 0;
+ background-color: #fff;
+ empty-cells: show;
+ -webkit-box-shadow: 7px 7px 12px -9px #777;
+ -moz-box-shadow: 7px 7px 12px -9px #777;
+ box-shadow: 7px 7px 12px -9px #777;
+ opacity: .9
+}
+
+.c3-tooltip tr {
+ border: 1px solid #CCC
+}
+
+.c3-tooltip th {
+ background-color: #aaa;
+ font-size: 14px;
+ padding: 2px 5px;
+ text-align: left;
+ color: #FFF
+}
+
+.c3-tooltip td {
+ font-size: 13px;
+ padding: 3px 6px;
+ background-color: #fff;
+ border-left: 1px dotted #999
+}
+
+.c3-tooltip td > span {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin-right: 6px
+}
+
+.c3-tooltip td.value {
+ text-align: right
+}
+
+.c3-area {
+ stroke-width: 0;
+ opacity: .2
+}
+
+.c3-chart-arcs .c3-chart-arcs-background {
+ fill: #e0e0e0;
+ stroke: none
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-unit {
+ fill: #000;
+ font-size: 16px
+}
+
+.c3-chart-arcs .c3-chart-arcs-gauge-max, .c3-chart-arcs .c3-chart-arcs-gauge-min {
+ fill: #777
+}
+
+.c3-chart-arc .c3-gauge-value {
+ fill: #000
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/components.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/components.css
new file mode 100644
index 00000000..780ca221
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/components.css
@@ -0,0 +1,14135 @@
+/***
+Rounded corners reset
+***/
+/* Reset rounded corners for all elements */
+div,
+input,
+select,
+textarea,
+span,
+img,
+table,
+label,
+td,
+th,
+p,
+a,
+button,
+ul,
+code,
+pre,
+li {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 4 !important;
+}
+
+/* except below bootstrap elements */
+.img-circle {
+ border-radius: 50% !important;
+}
+
+.img-rounded {
+ border-radius: 6px !important;
+}
+
+/***
+General reset
+***/
+/* Set default body */
+body {
+ color: #333333;
+ font-family: "Open Sans", sans-serif;
+ padding: 0px !important;
+ margin: 0px !important;
+ font-size: 13px;
+ direction: ltr;
+}
+
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't
+ properly apply the media queries in Bootstrap's CSS. To address this,
+ you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix.
+*/
+@-webkit-viewport {
+ width: device-width;
+}
+
+@-moz-viewport {
+ width: device-width;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+@-o-viewport {
+ width: device-width;
+}
+
+@viewport {
+ width: device-width;
+}
+
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width,
+ and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied
+*/
+@-ms-viewport {
+ width: auto !important;
+}
+
+/* Custom scrollbars for webkit browsers */
+::-webkit-scrollbar {
+ width: 12px;
+}
+
+::-webkit-scrollbar-track {
+ background-color: #eaeaea;
+ border-left: 1px solid #cecece;
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: #cecece;
+}
+
+::-webkit-scrollbar-thumb:hover {
+ background-color: #aaaaaa;
+}
+
+::-webkit-scrollbar-track {
+ border-radius: 0;
+ box-shadow: none;
+ border: 0;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 0;
+ box-shadow: none;
+ border: 0;
+}
+
+/***
+General typography
+***/
+/* Headings */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: "Open Sans", sans-serif;
+ font-weight: 300;
+}
+
+h1 {
+ font-size: 33px;
+}
+
+h2 {
+ font-size: 27px;
+}
+
+h3 {
+ font-size: 23px;
+}
+
+h4 {
+ font-size: 17px;
+}
+
+h5 {
+ font-size: 13px;
+}
+
+h6 {
+ font-size: 12px;
+}
+
+/* Headings helper text */
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+ color: #444444;
+}
+
+/* Block headings */
+h1.block,
+h2.block,
+h3.block,
+h4.block,
+h5.block,
+h6.block {
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+/* Links */
+a {
+ text-shadow: none;
+ color: #5b9bd1;
+}
+
+a:hover {
+ color: #3175af;
+}
+
+a:focus, a:hover, a:active {
+ outline: 0;
+}
+
+/* Horizontal break */
+hr {
+ margin: 20px 0;
+ border: 0;
+ border-top: 1px solid #eee;
+ border-bottom: 0;
+}
+
+/* Unstyled List */
+.list-unstyled li > .list-unstyled {
+ margin-left: 25px;
+}
+
+/* Code */
+code {
+ border: 1px solid #e1e1e1;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+}
+
+/* Disabled Navigation Link */
+.disabled-link .disable-target {
+ opacity: 0.5 !important;
+ filter: alpha(opacity=50) !important;
+}
+
+.disabled-link .disable-target:hover {
+ cursor: not-allowed !important;
+}
+
+.disabled-link:hover {
+ cursor: not-allowed !important;
+}
+
+/***
+Utilities
+***/
+/* Links */
+a:hover {
+ cursor: pointer;
+}
+
+/* Primary Link */
+.primary-link {
+ color: #65A0D0;
+ font-weight: 600;
+}
+
+.primary-link:hover {
+ color: #5194ca;
+}
+
+/* Rounded Element */
+.rounded-2 {
+ border-radius: 2px !important;
+}
+
+.rounded-3 {
+ border-radius: 3px !important;
+}
+
+.rounded-4 {
+ border-radius: 4px !important;
+}
+
+/* Circle Element */
+.circle {
+ border-radius: 25px !important;
+}
+
+.circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+/* General utilities */
+.display-none,
+.display-hide {
+ display: none;
+}
+
+.hidden {
+ display: none !important;
+}
+
+.primary-font {
+ font-family: "Open Sans", sans-serif !important;
+}
+
+.bold {
+ font-weight: 700 !important;
+}
+
+.thin {
+ font-weight: 300 !important;
+}
+
+.uppercase {
+ text-transform: uppercase !important;
+}
+
+.fix-margin {
+ margin-left: 0px !important;
+}
+
+.border {
+ border: 1px solid red;
+}
+
+.font-hg {
+ font-size: 23px;
+}
+
+.font-lg {
+ font-size: 18px;
+}
+
+.font-md {
+ font-size: 14px;
+}
+
+.font-sm {
+ font-size: 13px;
+}
+
+.font-xs {
+ font-size: 11px;
+}
+
+.inline {
+ display: inline;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.text-align-reverse {
+ text-align: right;
+}
+
+/* Margin and padding utilities */
+.no-space {
+ margin: 0px !important;
+ padding: 0px !important;
+}
+
+.no-margin {
+ margin: 0;
+}
+
+.margin-bottom-5 {
+ margin-bottom: 5px;
+}
+
+.margin-bottom-10 {
+ margin-bottom: 10px !important;
+}
+
+.margin-top-10 {
+ margin-top: 10px !important;
+}
+
+.margin-top-15 {
+ margin-top: 15px !important;
+}
+
+.margin-bottom-15 {
+ margin-bottom: 15px !important;
+}
+
+.margin-bottom-20 {
+ margin-bottom: 20px !important;
+}
+
+.margin-top-20 {
+ margin-top: 20px !important;
+}
+
+.margin-bottom-25 {
+ margin-bottom: 25px !important;
+}
+
+.margin-bottom-30 {
+ margin-bottom: 30px !important;
+}
+
+.margin-right-10 {
+ margin-right: 10px !important;
+}
+
+/* IE8 & IE9 mode utilities */
+.visible-ie8 {
+ display: none;
+}
+
+.ie8 .visible-ie8 {
+ display: inherit !important;
+}
+
+.visible-ie9 {
+ display: none;
+}
+
+.ie9 .visible-ie9 {
+ display: inherit !important;
+}
+
+.hidden-ie8 {
+ display: inherit;
+}
+
+.ie8 .hidden-ie8 {
+ display: none !important;
+}
+
+.hidden-ie9 {
+ display: inherit;
+}
+
+.ie9 .hidden-ie9 {
+ display: none !important;
+}
+
+/***
+Responsive Utils
+***/
+@media (max-width: 1024px) {
+ .hidden-1024 {
+ display: none;
+ }
+}
+
+@media (max-width: 480px) {
+ .hidden-480 {
+ display: none;
+ }
+}
+
+@media (max-width: 320px) {
+ .hidden-320 {
+ display: none;
+ }
+}
+
+/***
+Demo Utils
+***/
+.scrollspy-example {
+ position: relative;
+ height: 200px;
+ margin-top: 10px;
+ overflow: auto;
+}
+
+.util-btn-margin-bottom-5 .btn {
+ margin-bottom: 5px !important;
+}
+
+.util-btn-group-margin-bottom-5 .btn-group {
+ margin-bottom: 5px !important;
+}
+
+/***
+Users
+***/
+.user-info {
+ margin-bottom: 10px !important;
+}
+
+.user-info img {
+ float: left;
+ margin-right: 5px;
+}
+
+.user-info .details {
+ display: inline-block;
+}
+
+.user-info .label {
+ font-weight: 300;
+ font-size: 11px;
+}
+
+/***
+Top News Blocks(new in v1.2.2)
+***/
+.top-news {
+ color: #fff;
+ margin: 8px 0;
+}
+
+.top-news em {
+ font-size: 13px;
+ margin-bottom: 8px;
+ margin-bottom: 0;
+ font-style: normal;
+ display: block;
+}
+
+.top-news em i {
+ font-size: 14px;
+}
+
+.top-news span {
+ font-size: 18px;
+ margin-bottom: 5px;
+ display: block;
+ text-align: left;
+}
+
+.top-news a {
+ display: block;
+ text-align: left;
+ padding: 10px;
+ position: relative;
+ margin-bottom: 10px;
+}
+
+.top-news a .top-news-icon {
+ right: 8px;
+ bottom: 15px;
+ opacity: 0.3;
+ font-size: 35px;
+ position: absolute;
+ filter: alpha(opacity=30);
+ /*For IE8*/
+}
+
+/***
+Block Images(new in v1.2.2)
+***/
+.blog-images {
+ margin-bottom: 0;
+}
+
+.blog-images li {
+ padding: 0;
+ margin: 0;
+ display: inline;
+}
+
+.blog-images li a:hover {
+ text-decoration: none;
+}
+
+.blog-images li img {
+ width: 50px;
+ height: 50px;
+ opacity: 0.6;
+ margin: 0 2px 8px;
+}
+
+.blog-images li img:hover {
+ opacity: 1;
+ box-shadow: 0 0 0 4px #72c02c;
+ transition: all 0.4s ease-in-out 0s;
+ -moz-transition: all 0.4s ease-in-out 0s;
+ -webkit-transition: all 0.4s ease-in-out 0s;
+}
+
+/***
+Sidebar Tags
+***/
+.sidebar-tags li {
+ padding: 0;
+}
+
+.sidebar-tags li a {
+ color: #555;
+ font-size: 12px;
+ padding: 3px 5px;
+ background: #f7f7f7;
+ margin: 0 2px 5px 0;
+ display: inline-block;
+}
+
+.sidebar-tags li a:hover, .sidebar-tags li a:hover i {
+ background: #EEE;
+ text-decoration: none;
+ -webkit-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ transition: all 0.3s ease-in-out;
+}
+
+.sidebar-tags li a i {
+ color: #777;
+}
+
+/***
+Custom vertical inline menu
+***/
+.ver-inline-menu {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.ver-inline-menu li {
+ position: relative;
+ margin-bottom: 1px;
+}
+
+.ver-inline-menu li i {
+ width: 37px;
+ height: 37px;
+ display: inline-block;
+ color: #b9cbd5;
+ font-size: 15px;
+ padding: 12px 10px 10px 8px;
+ margin: 0 8px 0 0;
+ text-align: center;
+ background: #e0eaf0 !important;
+}
+
+.ver-inline-menu li a {
+ font-size: 14px;
+ font-weight: 300;
+ color: #557386;
+ display: block;
+ background: #f0f6fa;
+ border-left: solid 2px #c4d5df;
+}
+
+.ver-inline-menu li:hover a {
+ background: #e0eaf0;
+ text-decoration: none;
+}
+
+.ver-inline-menu li:hover i {
+ color: #fff;
+ background: #c4d5df !important;
+}
+
+.ver-inline-menu li.active a {
+ border-left: solid 2px #0c91e5;
+}
+
+.ver-inline-menu li.active i {
+ background: #0c91e5 !important;
+}
+
+.ver-inline-menu li.active a, .ver-inline-menu li.active i {
+ color: #fff;
+ background: #169ef4;
+ text-decoration: none;
+}
+
+.ver-inline-menu li.active a, .ver-inline-menu li:hover a {
+ font-size: 14px;
+}
+
+.ver-inline-menu li.active:after {
+ content: '';
+ display: inline-block;
+ border-bottom: 6px solid transparent;
+ border-top: 6px solid transparent;
+ border-left: 6px solid #169ef4;
+ position: absolute;
+ top: 12px;
+ right: -5px;
+}
+
+@media (max-width: 767px) {
+ .ver-inline-menu > li.active:after {
+ display: none;
+ }
+}
+
+/***
+Separated List
+***/
+.list-separated {
+ margin-top: 10px;
+ margin-bottom: 15px;
+}
+
+.list-separated > div {
+ border-right1: 1px solid #f5f5f5;
+}
+
+.list-separated > div:last-child {
+ border-right: 0;
+}
+
+@media (max-width: 767px) {
+ .list-separated {
+ /* 767px */
+ }
+
+ .list-separated > div {
+ margin-bottom: 20px;
+ }
+}
+
+/***
+Number & Chart Stats
+***/
+.number-stats {
+ margin: 10px 0;
+}
+
+.number-stats .stat-number {
+ display: inline-block;
+ margin: 0 5px;
+}
+
+.number-stats .stat-number .title {
+ font-size: 13px;
+ margin-bottom: 3px;
+ color: #B8C3C7;
+}
+
+.number-stats .stat-number .number {
+ font-size: 27px;
+ line-height: 27px;
+ color: #7D8C9D;
+}
+
+.number-stats .stat-chart {
+ display: inline-block;
+ margin: 0 5px;
+}
+
+.number-stats > div {
+ border-right: 1px solid #f5f5f5;
+}
+
+.number-stats > div:last-child {
+ border-right: 0;
+}
+
+.number-stats .stat-left {
+ float: right;
+}
+
+.number-stats .stat-left .stat-number {
+ float: right;
+ text-align: right;
+}
+
+.number-stats .stat-left .stat-chart {
+ float: right;
+}
+
+.number-stats .stat-right {
+ float: left !important;
+}
+
+.number-stats .stat-right .stat-number {
+ float: left;
+ text-align: left;
+}
+
+.number-stats .stat-right .stat-chart {
+ float: left;
+}
+
+.number-stats .stat-number {
+ float: left;
+ text-align: left;
+}
+
+.number-stats .stat-chart {
+ float: left;
+}
+
+/***
+General User Record Listing
+***/
+.general-item-list > .item {
+ padding: 10px 0;
+ border-bottom: 1px solid #F1F4F7;
+}
+
+.general-item-list > .item:last-child {
+ border-bottom: 0;
+}
+
+.general-item-list > .item > .item-head {
+ margin-bottom: 5px;
+}
+
+.general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after {
+ content: " ";
+ display: table;
+}
+
+.general-item-list > .item > .item-head:after {
+ clear: both;
+}
+
+.general-item-list > .item > .item-head > .item-details {
+ display: inline-block;
+ float: left;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-pic {
+ height: 35px;
+ margin-right: 10px;
+ -webkit-border-radius: 100%;
+ -moz-border-radius: 100%;
+ -ms-border-radius: 100%;
+ -o-border-radius: 100%;
+ border-radius: 100%;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-name {
+ display: inline-block;
+ margin-right: 10px;
+}
+
+.general-item-list > .item > .item-head > .item-details > .item-label {
+ color: #C0C9CC;
+}
+
+.general-item-list > .item > .item-head > .item-status {
+ color: #C0C9CC;
+ top: 10px;
+ position: relative;
+ display: inline-block;
+ float: right;
+}
+
+.general-item-list > .item > .item-head > .item-status > .badge {
+ margin-top: -2px;
+}
+
+.general-item-list > .item > .item-body {
+ color: #96a5aa;
+}
+
+/***
+File dropzone
+***/
+.file-drop-zone {
+ border: 2px dashed #ddd;
+ padding: 30px;
+ text-align: center;
+}
+
+.file-drop-zone.file-drop-zone-over {
+ border-color: #aaa;
+}
+
+/***
+Fontawesome Icons
+***/
+[class^="fa-"],
+[class^="glyphicon-"],
+[class^="icon-"],
+[class*=" fa-"],
+[class*=" glyphicon-"],
+[class*=" icon-"] {
+ display: inline-block;
+ margin-top: 1px;
+ font-size: 14px;
+ *margin-right: .3em;
+ line-height: 14px;
+ -webkit-font-smoothing: antialiased;
+}
+
+/* Make font awesome icons fixed width */
+li [class^="fa-"],
+li [class^="glyphicon-"],
+li [class^="icon-"],
+li [class*=" fa-"],
+li [class*=" glyphicon-"],
+li [class*=" icon-"] {
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+}
+
+li [class^="glyphicon-"],
+li [class*=" glyphicon-"] {
+ top: 2px;
+}
+
+li [class^="icon-"],
+li [class*=" icon-"] {
+ top: 1px;
+ position: relative;
+}
+
+li [class^="fa-"].icon-large,
+li [class^="glyphicon-"].icon-large,
+li [class^="icon-"].icon-large,
+li [class*=" fa-"].icon-large,
+li [class*=" glyphicon-"].icon-large,
+li [class*=" icon-"].icon-large {
+ /* increased font size for icon-large */
+ width: 1.5625em;
+}
+
+/* Icon sizing */
+.fa-sm,
+.icon-sm {
+ font-size: 12px;
+}
+
+.fa-lg,
+.icon-lg {
+ font-size: 16px !important;
+}
+
+.fa-2x {
+ font-size: 2em;
+}
+
+.fa-3x {
+ font-size: 3em;
+}
+
+.fa-4x {
+ font-size: 4em;
+}
+
+.fa-5x {
+ font-size: 5em;
+}
+
+/* Icon coloring */
+.icon-state-default {
+ color: #c6c6c6;
+}
+
+.icon-state-success {
+ color: #45B6AF;
+}
+
+.icon-state-info {
+ color: #89C4F4;
+}
+
+.icon-state-warning {
+ color: #dfba49;
+}
+
+.icon-state-danger {
+ color: #F3565D;
+}
+
+/***
+Font Awesome 4.x Demo
+***/
+.fa-item {
+ font-size: 14px;
+ padding: 10px 10px 10px 20px;
+}
+
+.fa-item i {
+ font-size: 16px;
+ display: inline-block;
+ width: 20px;
+ color: #333;
+}
+
+.fa-item:hover {
+ cursor: pointer;
+ background: #eee;
+}
+
+/***
+Simple Line Icons Demo
+***/
+.simplelineicons-demo .item-box {
+ display: inline-block;
+ font-size: 16px;
+ margin: 0 -0.22em 1em 0;
+ padding-left: 1em;
+ width: 100%;
+}
+
+.simplelineicons-demo .item-box .item {
+ background-color: #fff;
+ color: #33383e;
+ border-radius: 8px;
+ display: inline-block;
+ padding: 10px;
+ width: 100%;
+}
+
+.simplelineicons-demo .item-box .item span {
+ font-size: 22px;
+}
+
+@media only screen and (min-width: 768px) {
+ .simplelineicons-demo .item-box {
+ width: 33.333%;
+ }
+}
+
+/***
+Glyphicons Demo
+***/
+.glyphicons-demo ul {
+ padding-left: 0;
+ padding-bottom: 1px;
+ margin-bottom: 20px;
+ list-style: none;
+ overflow: hidden;
+}
+
+.bs-glyphicon-class {
+ text-align: center;
+}
+
+.bs-glyphicons {
+ padding-left: 0;
+ padding-bottom: 1px;
+ margin-bottom: 20px;
+ list-style: none;
+ overflow: hidden;
+}
+
+.glyphicons-demo ul li {
+ float: left;
+ width: 25%;
+ height: 115px;
+ padding: 10px;
+ margin: 0 -1px -1px 0;
+ font-size: 14px;
+ line-height: 1.4;
+ text-align: center;
+ border: 1px solid #ddd;
+}
+
+.glyphicons-demo .glyphicon {
+ display: block;
+ margin: 5px auto 10px;
+ font-size: 24px;
+ color: #444;
+}
+
+.glyphicons-demo ul li:hover {
+ background-color: rgba(86, 61, 124, 0.1);
+}
+
+@media (min-width: 768px) {
+ .glyphicons-demo ul li {
+ width: 12.5%;
+ }
+}
+
+/***
+Customized Bootstrap Alerts
+***/
+.alert {
+ border-width: 1px;
+}
+
+.alert.alert-borderless {
+ border: 0;
+}
+
+/***
+Bootstrap Alerts
+***/
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+ color: #31708f;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+ color: #8a6d3b;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+/***
+Custom Bootstrap Badges
+***/
+.badge {
+ font-size: 11px !important;
+ font-weight: 300;
+ text-align: center;
+ height: 18px;
+ padding: 3px 6px 3px 6px;
+ -webkit-border-radius: 12px !important;
+ -moz-border-radius: 12px !important;
+ border-radius: 12px !important;
+ text-shadow: none !important;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.badge.badge-roundless {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+.badge.badge-empty {
+ display: inline-block;
+ padding: 0;
+ min-width: 8px;
+ height: 8px;
+ width: 8px;
+}
+
+/* Badge variants */
+.badge-default {
+ background-color: #c6c6c6;
+ background-image: none;
+}
+
+.badge-primary {
+ background-color: #428bca;
+ background-image: none;
+}
+
+.badge-info {
+ background-color: #89C4F4;
+ background-image: none;
+}
+
+.badge-success {
+ background-color: #45B6AF;
+ background-image: none;
+}
+
+.badge-danger {
+ background-color: #F3565D;
+ background-image: none;
+}
+
+.badge-warning {
+ background-color: #dfba49;
+ background-image: none;
+}
+
+/* Fix badge position for navs */
+.nav.nav-pills > li > a > .badge,
+.nav.nav-stacked > li > a > .badge {
+ margin-top: -2px;
+}
+
+/***
+Dropdown Menu Badges
+***/
+.dropdown-menu > li > a > .badge {
+ position: absolute;
+ margin-top: 1px;
+ right: 3px;
+ display: inline;
+ font-size: 11px;
+ font-weight: 300;
+ text-shadow: none;
+ height: 18px;
+ padding: 3px 6px 3px 6px;
+ text-align: center;
+ vertical-align: middle;
+ -webkit-border-radius: 12px !important;
+ -moz-border-radius: 12px !important;
+ border-radius: 12px !important;
+}
+
+.dropdown-menu.badge-roundless {
+ -webkit-border-radius: 0 !important;
+ -moz-border-radius: 0 !important;
+ border-radius: 0 !important;
+}
+
+/***
+Customized Bootstrap Buttons
+***/
+/* Default buttons */
+.btn {
+ border-width: 0;
+ padding: 7px 14px;
+ font-size: 14px;
+ outline: none !important;
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.btn.dropdown-toggle, .btn-group .btn.dropdown-toggle, .btn:hover, .btn:disabled, .btn[disabled], .btn:focus, .btn:active, .btn.active {
+ outline: none !important;
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+}
+
+.btn-default {
+ border-width: 1px;
+ padding: 6px 13px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+/* Bootstrap buttons */
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {
+ color: #333;
+ background-color: #ededed;
+ border-color: #b3b3b3;
+}
+
+.open .btn-default.dropdown-toggle {
+ color: #333;
+ background-color: #ededed;
+ border-color: #b3b3b3;
+}
+
+.btn-default:active, .btn-default.active {
+ background-image: none;
+ background-color: #e0e0e0;
+}
+
+.btn-default:active:hover, .btn-default.active:hover {
+ background-color: #e6e6e6;
+}
+
+.open .btn-default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-default > i {
+ color: #aaa;
+}
+
+.btn-default > i[class^="icon-"],
+.btn-default > i[class*="icon-"] {
+ color: #8c8c8c;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {
+ color: #fff;
+ background-color: #3379b5;
+ border-color: #2a6496;
+}
+
+.open .btn-primary.dropdown-toggle {
+ color: #fff;
+ background-color: #3379b5;
+ border-color: #2a6496;
+}
+
+.btn-primary:active, .btn-primary.active {
+ background-image: none;
+ background-color: #2d6ca2;
+}
+
+.btn-primary:active:hover, .btn-primary.active:hover {
+ background-color: #3071a9;
+}
+
+.open .btn-primary.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #45B6AF;
+ border-color: #3ea49d;
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {
+ color: #fff;
+ background-color: #3b9c96;
+ border-color: #307f7a;
+}
+
+.open .btn-success.dropdown-toggle {
+ color: #fff;
+ background-color: #3b9c96;
+ border-color: #307f7a;
+}
+
+.btn-success:active, .btn-success.active {
+ background-image: none;
+ background-color: #348a84;
+}
+
+.btn-success:active:hover, .btn-success.active:hover {
+ background-color: #37918b;
+}
+
+.open .btn-success.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
+ background-color: #45B6AF;
+ border-color: #3ea49d;
+}
+
+.btn-success .badge {
+ color: #45B6AF;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #89C4F4;
+ border-color: #72b8f2;
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {
+ color: #fff;
+ background-color: #68b4f1;
+ border-color: #43a1ed;
+}
+
+.open .btn-info.dropdown-toggle {
+ color: #fff;
+ background-color: #68b4f1;
+ border-color: #43a1ed;
+}
+
+.btn-info:active, .btn-info.active {
+ background-image: none;
+ background-color: #51a8ef;
+}
+
+.btn-info:active:hover, .btn-info.active:hover {
+ background-color: #5aadf0;
+}
+
+.open .btn-info.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
+ background-color: #89C4F4;
+ border-color: #72b8f2;
+}
+
+.btn-info .badge {
+ color: #89C4F4;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #dfba49;
+ border-color: #dbb233;
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {
+ color: #fff;
+ background-color: #daae2b;
+ border-color: #bb9521;
+}
+
+.open .btn-warning.dropdown-toggle {
+ color: #fff;
+ background-color: #daae2b;
+ border-color: #bb9521;
+}
+
+.btn-warning:active, .btn-warning.active {
+ background-image: none;
+ background-color: #c89f23;
+}
+
+.btn-warning:active:hover, .btn-warning.active:hover {
+ background-color: #d0a625;
+}
+
+.open .btn-warning.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
+ background-color: #dfba49;
+ border-color: #dbb233;
+}
+
+.btn-warning .badge {
+ color: #dfba49;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #F3565D;
+ border-color: #f13e46;
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {
+ color: #fff;
+ background-color: #f1353d;
+ border-color: #ec111b;
+}
+
+.open .btn-danger.dropdown-toggle {
+ color: #fff;
+ background-color: #f1353d;
+ border-color: #ec111b;
+}
+
+.btn-danger:active, .btn-danger.active {
+ background-image: none;
+ background-color: #ef1d26;
+}
+
+.btn-danger:active:hover, .btn-danger.active:hover {
+ background-color: #f0262f;
+}
+
+.open .btn-danger.dropdown-toggle {
+ background-image: none;
+}
+
+.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
+ background-color: #F3565D;
+ border-color: #f13e46;
+}
+
+.btn-danger .badge {
+ color: #F3565D;
+ background-color: #fff;
+}
+
+/* Button sizes */
+.btn > i {
+ font-size: 14px;
+}
+
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ vertical-align: middle;
+}
+
+.btn-lg > i {
+ font-size: 18px;
+}
+
+.btn-sm,
+.btn-xs {
+ padding: 4px 10px 5px 10px;
+ font-size: 13px;
+ line-height: 1.5;
+}
+
+.btn-sm > i,
+.btn-xs > i {
+ font-size: 13px;
+}
+
+.btn-xs {
+ padding: 1px 5px;
+}
+
+.btn-xs > i {
+ font-size: 12px;
+}
+
+/* Small button in button group */
+.btn-group .input-sm .btn-default {
+ padding-top: 3px;
+ padding-bottom: 3px;
+}
+
+/* Arrow link */
+.btn-arrow-link {
+ vertical-align: middle;
+ display: inline-block;
+ font-size: 13px;
+}
+
+.btn-arrow-link > i {
+ font-size: 14px;
+ line-height: 14px;
+ vertical-align: top;
+ margin: 2px 3px 2px 3px;
+ color: #999;
+}
+
+.btn-arrow-link.btn-arrow-link-lg {
+ font-size: 14px;
+}
+
+.btn-arrow-link.btn-arrow-link-lg > i {
+ font-size: 16px;
+ line-height: 16px;
+ margin: 2px 3px 1px 3px;
+}
+
+/* Circle Buttons */
+.btn-circle {
+ border-radius: 25px !important;
+}
+
+.btn-circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.btn-circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.btn-circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+.btn-icon-only {
+ height: 34px;
+ width: 34px;
+ text-align: center;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.btn-icon-only > [class^="icon-"],
+.btn-icon-only > i {
+ text-align: center;
+ margin-top: 2px;
+}
+
+.btn-sm > [class^="glyphicon-"],
+.btn-sm > [class*=" glyphicon-"],
+.btn-sm > i {
+ font-size: 13px;
+}
+
+.btn-xs > [class^="glyphicon-"],
+.btn-xs > [class*=" glyphicon-"],
+.btn-xs > i {
+ font-size: 11px;
+}
+
+.btn-group.btn-group-circle > .btn:first-child {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.btn-group.btn-group-circle > .btn:last-child {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-group.btn-group-devided > .btn {
+ margin-right: 5px;
+}
+
+.btn-group.btn-group-devided > .btn:last-child {
+ margin-right: 0;
+}
+
+.btn-group-vertical.btn-group-vertical-circle > .btn:first-child {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+.btn-group-vertical.btn-group-vertical-circle > .btn:last-child {
+ border-radius: 0 0 25px 25px !important;
+}
+
+/***
+Image Carousel
+***/
+.carousel.image-carousel .carousel-inner {
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.carousel.image-carousel .carousel-control i {
+ position: absolute;
+ top: 40%;
+}
+
+.carousel.image-carousel.image-carousel-hoverable .carousel-control i {
+ display: none;
+}
+
+.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i {
+ display: inline-block;
+}
+
+.carousel.image-carousel .carousel-control.left i {
+ left: 10px;
+}
+
+.carousel.image-carousel .carousel-control.right i {
+ right: 10px;
+}
+
+.carousel.image-carousel .carousel-indicators {
+ margin-top: 10px;
+ bottom: -7px;
+}
+
+.carousel.image-carousel .carousel-indicators li {
+ background-color: #666;
+}
+
+.carousel.image-carousel .carousel-indicators li.active {
+ background-color: #666;
+}
+
+.carousel.image-carousel .carousel-caption {
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 15px 15px 25px 15px;
+ background: #333333;
+ background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2,
+.carousel.image-carousel .carousel-caption p {
+ text-align: left;
+ line-height: 20px;
+ color: #ffffff;
+}
+
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2 {
+ margin: 0 0 5px;
+}
+
+.carousel.image-carousel .carousel-caption h4 a,
+.carousel.image-carousel .carousel-caption h3 a,
+.carousel.image-carousel .carousel-caption h2 a {
+ color: #aaa;
+}
+
+.carousel.image-carousel .carousel-caption p {
+ margin-bottom: 0;
+}
+
+.carousel.image-carousel .carousel-caption .item {
+ margin: 0;
+}
+
+/***
+Charts and statistics
+***/
+.chart,
+.pie,
+.bars {
+ overflow: hidden;
+ height: 300px;
+ width: 100%;
+ font-family: "Open Sans", sans-serif !important;
+ font-size: 14px;
+}
+
+/***
+Statistic lists
+***/
+.item-list.table .percent {
+ width: 30px;
+ float: right;
+ margin-right: 10px;
+ margin-top: 3px;
+}
+
+/***
+Chart tooltips
+***/
+.chart-tooltip {
+ clear: both;
+ z-index: 100;
+ background-color: #736e6e !important;
+ padding: 5px !important;
+ color: #fff;
+}
+
+.chart-tooltip .label {
+ clear: both;
+ display: block;
+ margin-bottom: 2px;
+}
+
+/***
+Mini chart containers
+***/
+.bar-chart,
+.line-chart {
+ display: none;
+}
+
+/***
+Chats
+***/
+.chats {
+ margin: 0;
+ padding: 0;
+ margin-top: -15px;
+}
+
+.chats li {
+ list-style: none;
+ padding: 5px 0;
+ margin: 10px auto;
+ font-size: 12px;
+}
+
+.chats li .body {
+ display: block;
+}
+
+.chats li .avatar {
+ height: 45px;
+ width: 45px;
+ -webkit-border-radius: 50% !important;
+ -moz-border-radius: 50% !important;
+ border-radius: 50% !important;
+}
+
+.chats li.in .avatar {
+ float: left;
+ margin-right: 10px;
+}
+
+.chats li.out .avatar {
+ float: right;
+ margin-left: 10px;
+}
+
+.chats li .name {
+ color: #3590c1;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.chats li .datetime {
+ color: #333;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.chats li .message {
+ display: block;
+ padding: 5px;
+ position: relative;
+}
+
+.chats li.in .message {
+ text-align: left;
+ border-left: 2px solid #1BBC9B;
+ margin-left: 65px;
+ background: #fafafa;
+}
+
+.chats li.in .message .arrow {
+ display: block;
+ position: absolute;
+ top: 5px;
+ left: -8px;
+ width: 0;
+ height: 0;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #1BBC9B;
+}
+
+.chats li.out .message {
+ border-right: 2px solid #F3565D;
+ margin-right: 65px;
+ background: #fafafa;
+ text-align: right;
+}
+
+.chats li.out .message .arrow {
+ display: block;
+ position: absolute;
+ top: 5px;
+ right: -8px;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-left: 8px solid #F3565D;
+}
+
+.chats li.out .name,
+.chats li.out .datetime {
+ text-align: right;
+}
+
+.chat-form {
+ margin-top: 15px;
+ padding: 10px;
+ background-color: #e9eff3;
+ overflow: hidden;
+ clear: both;
+}
+
+.chat-form .input-cont {
+ margin-right: 40px;
+}
+
+.chat-form .input-cont .form-control {
+ border: 1px solid #ddd;
+ width: 100% !important;
+ margin-top: 0;
+ background-color: #fff !important;
+}
+
+.chat-form .input-cont .form-control:focus {
+ border: 1px solid #4b8df9 !important;
+}
+
+.chat-form .btn-cont {
+ margin-top: -42px;
+ position: relative;
+ float: right;
+ width: 44px;
+}
+
+.chat-form .btn-cont .arrow {
+ position: absolute;
+ top: 17px;
+ right: 43px;
+ border-top: 8px solid transparent;
+ border-bottom: 8px solid transparent;
+ border-right: 8px solid #4d90fe;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.chat-form .btn-cont .btn {
+ margin-top: 8px;
+}
+
+.chat-form .btn-cont:hover .arrow {
+ border-right-color: #0362fd;
+}
+
+.chat-form .btn-cont:hover .btn {
+ background-color: #0362fd;
+}
+
+/***
+Customized Bootstrap Close Icon
+***/
+/*
+.close {
+ display: inline-block;
+ margin-top: 0px;
+ margin-right: 0px;
+ width: 9px;
+ height: 9px;
+ background-repeat: no-repeat !important;
+ text-indent: -10000px;
+ outline: none;
+ background-image: url("../img/remove-icon-small.png") !important;
+}
+*/
+/***
+Customized Bootstrap Dropdowns
+***/
+/***
+Dropdowns
+***/
+.dropup.open > .dropdown-toggle,
+.dropdown.open > .dropdown-toggle {
+ border-color: #ddd;
+}
+
+/***
+Dropdown Menu
+***/
+.dropdown-menu {
+ min-width: 175px;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ list-style: none;
+ text-shadow: none;
+ padding: 0px;
+ margin: 10px 0px 0px 0px;
+ background-color: #fffff;
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ border: 1px solid #eee;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.dropdown-menu li.divider {
+ background: #f1f3f6;
+}
+
+.dropdown-menu li > a {
+ padding: 8px 14px;
+ color: #555;
+ text-decoration: none;
+ display: block;
+ clear: both;
+ font-weight: 300;
+ line-height: 18px;
+ white-space: nowrap;
+}
+
+.dropdown-menu li > a > [class^="fa-"],
+.dropdown-menu li > a > [class*=" fa-"] {
+ color: #888;
+}
+
+.dropdown-menu li > a > [class^="icon-"],
+.dropdown-menu li > a > [class*=" icon-"] {
+ color: #666;
+}
+
+.dropdown-menu li > a > [class^="glyphicon-"],
+.dropdown-menu li > a > [class*=" glyphicon-"] {
+ color: #888;
+}
+
+.dropdown-menu li > a:hover,
+.dropdown-menu .active > a,
+.dropdown-menu .active > a:hover {
+ text-decoration: none;
+ background-image: none;
+ background-color: #f6f6f6;
+ color: #555;
+ filter: none;
+}
+
+.dropdown-menu.bottom-up {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+
+.dropdown > .dropdown-menu,
+.dropdown-toggle > .dropdown-menu,
+.btn-group > .dropdown-menu {
+ margin-top: 10px;
+}
+
+.dropdown > .dropdown-menu:before,
+.dropdown-toggle > .dropdown-menu:before,
+.btn-group > .dropdown-menu:before {
+ position: absolute;
+ top: -8px;
+ left: 9px;
+ right: auto;
+ display: inline-block !important;
+ border-right: 8px solid transparent;
+ border-bottom: 8px solid #e0e0e0;
+ border-left: 8px solid transparent;
+ content: '';
+}
+
+.dropdown > .dropdown-menu:after,
+.dropdown-toggle > .dropdown-menu:after,
+.btn-group > .dropdown-menu:after {
+ position: absolute;
+ top: -7px;
+ left: 10px;
+ right: auto;
+ display: inline-block !important;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #fff;
+ border-left: 7px solid transparent;
+ content: '';
+}
+
+.dropdown > .dropdown-menu.pull-left:before,
+.dropdown-toggle > .dropdown-menu.pull-left:before,
+.btn-group > .dropdown-menu.pull-left:before {
+ left: auto;
+ right: 9px;
+}
+
+.dropdown > .dropdown-menu.pull-left:after,
+.dropdown-toggle > .dropdown-menu.pull-left:after,
+.btn-group > .dropdown-menu.pull-left:after {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown > .dropdown-menu.pull-right:before,
+.dropdown-toggle > .dropdown-menu.pull-right:before,
+.btn-group > .dropdown-menu.pull-right:before {
+ left: auto;
+ right: 9px;
+}
+
+.dropdown > .dropdown-menu.pull-right:after,
+.dropdown-toggle > .dropdown-menu.pull-right:after,
+.btn-group > .dropdown-menu.pull-right:after {
+ left: auto;
+ right: 10px;
+}
+
+.dropdown.dropup > .dropdown-menu,
+.dropdown-toggle.dropup > .dropdown-menu,
+.btn-group.dropup > .dropdown-menu {
+ margin-top: 0px;
+ margin-bottom: 10px;
+}
+
+.dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before,
+.dropdown-toggle.dropup > .dropdown-menu:after,
+.dropdown-toggle.dropup > .dropdown-menu:before,
+.btn-group.dropup > .dropdown-menu:after,
+.btn-group.dropup > .dropdown-menu:before {
+ display: none !important;
+}
+
+/* Dropdown submenu support for Bootsrap 3 */
+.dropdown-submenu {
+ position: relative;
+}
+
+.dropdown-submenu > .dropdown-menu {
+ top: 5px;
+ left: 100%;
+ margin-top: -6px;
+ margin-left: -1px;
+}
+
+.dropdown-submenu > a:after {
+ position: absolute;
+ display: inline-block;
+ font-size: 14px;
+ right: 7px;
+ top: 7px;
+ font-family: FontAwesome;
+ height: auto;
+ content: "\f105";
+ font-weight: 300;
+}
+
+.dropdown-submenu:hover > .dropdown-menu {
+ display: block;
+}
+
+.dropdown-submenu:hover > a:after {
+ border-left-color: #ffffff;
+}
+
+.dropdown-submenu.pull-left {
+ float: none;
+}
+
+.dropdown-submenu.pull-left > .dropdown-menu {
+ left: -100%;
+ margin-left: 10px;
+}
+
+.dropup .dropdown-submenu > .dropdown-menu {
+ top: auto;
+ bottom: 0;
+ margin-top: 0;
+ margin-bottom: -2px;
+}
+
+.nav.pull-right > li > .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu:before,
+.nav > li > .dropdown-menu.pull-right:before {
+ right: 12px;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu:after,
+.nav > li > .dropdown-menu.pull-right:after {
+ right: 13px;
+ left: auto;
+}
+
+.nav.pull-right > li > .dropdown-menu .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right .dropdown-menu {
+ right: 100%;
+ left: auto;
+ margin-right: -1px;
+ margin-left: 0;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .navbar-nav .open .dropdown-menu {
+ position: absolute;
+ float: left;
+ width: auto;
+ margin-top: 0;
+ background-color: #ffffff;
+ border: 1px solid #efefef;
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ padding: 6px 0 6px 13px;
+ color: #333;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:active {
+ ackground-color: #eee;
+ }
+}
+
+/***
+Dropdown Checkboxes
+***/
+.dropdown-content {
+ padding: 5px;
+}
+
+.dropdown-content form {
+ margin: 0;
+}
+
+.dropdown.inline .dropdown-menu {
+ display: inline-block;
+ position: relative;
+}
+
+.dropdown-radiobuttons,
+.dropdown-checkboxes {
+ padding: 5px;
+}
+
+.dropdown-radiobuttons label,
+.dropdown-checkboxes label {
+ display: block;
+ font-weight: 300;
+ color: #333;
+ margin-bottom: 4px;
+ margin-top: 4px;
+}
+
+.dropdown-radiobuttons label .radio,
+.dropdown-checkboxes label .radio {
+ margin-right: 3px;
+}
+
+/***
+System feeds
+***/
+.feeds {
+ margin: 0px;
+ padding: 0px;
+ list-style: none;
+}
+
+.feeds li {
+ background-color: #fafafa;
+ color: #82949a;
+ margin-bottom: 7px;
+}
+
+.feeds li:before, .feeds li:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.feeds li:after {
+ clear: both;
+}
+
+.feeds li:last-child {
+ margin-bottom: 0px;
+}
+
+.feeds li .col1 {
+ float: left;
+ width: 100%;
+ clear: both;
+}
+
+.feeds li .col1 > .cont {
+ float: left;
+ margin-right: 75px;
+ overflow: hidden;
+}
+
+.feeds li .col1 > .cont > .cont-col1 {
+ float: left;
+ margin-right: -100%;
+}
+
+.feeds li .col1 > .cont > .cont-col1 > .label {
+ display: inline-block;
+ padding: 5px 4px 6px 5px;
+ vertical-align: middle;
+ text-align: center;
+}
+
+.feeds li .col1 > .cont > .cont-col1 > .label > i {
+ text-align: center;
+ font-size: 14px;
+}
+
+.feeds li .col1 > .cont > .cont-col2 {
+ float: left;
+ width: 100%;
+}
+
+.feeds li .col1 > .cont > .cont-col2 > .desc {
+ margin-left: 35px;
+ padding-top: 4px;
+ padding-bottom: 5px;
+ overflow: hidden;
+}
+
+.feeds li .col2 {
+ float: left;
+ width: 75px;
+ margin-left: -75px;
+}
+
+.feeds li .col2 > .date {
+ padding: 4px 9px 5px 4px;
+ text-align: right;
+ font-style: italic;
+ color: #c1cbd0;
+}
+
+/***
+Form Layouts
+****/
+/* Static info */
+.static-info {
+ margin-bottom: 10px;
+}
+
+.static-info .name {
+ font-size: 14px;
+}
+
+.static-info .value {
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.static-info.align-reverse .name, .static-info.align-reverse .value {
+ text-align: right;
+}
+
+/* Help blocks */
+.help-block {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.help-inline {
+ font-size: 13px;
+ color: #737373;
+ display: inline-block;
+ padding: 5px;
+}
+
+.form-inline input {
+ margin-bottom: 0px !important;
+}
+
+/* Control Label */
+.control-label {
+ margin-top: 1px;
+}
+
+.control-label .required {
+ color: #e02222;
+ font-size: 12px;
+ padding-left: 2px;
+}
+
+.form {
+ padding: 0 !important;
+}
+
+.form .form-body {
+ padding: 10px;
+}
+
+.portlet.light .form .form-body {
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.form .form-actions {
+ padding: 20px 10px;
+ margin: 0;
+ background-color: #f5f5f5;
+ border-top: 1px solid #e5e5e5;
+ *zoom: 1;
+}
+
+.portlet.light .form .form-actions {
+ background: none;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.portlet .form .form-actions {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.form .form-actions:before, .form .form-actions:after {
+ content: " ";
+ display: table;
+}
+
+.form .form-actions:after {
+ clear: both;
+}
+
+.form .form-actions.right {
+ padding-left: 0;
+ padding-right: 10px;
+ text-align: right;
+}
+
+.portlet.light .form .form-actions.right {
+ padding-right: 0;
+}
+
+.form .form-actions.left {
+ padding-left: 10px;
+ padding-right: 0;
+ text-align: left;
+}
+
+.portlet.light .form .form-actions.left {
+ padding-left: 0;
+}
+
+.form .form-actions.nobg {
+ background-color: transparent;
+}
+
+.form .form-actions.top {
+ margin-top: 0;
+ margin-bottom: 20px;
+ border-top: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.portlet.light .form .form-actions.top {
+ background: none;
+}
+
+.form .form-actions .btn-set {
+ display: inline-block;
+}
+
+@media (max-width: 767px) {
+ .form .form-actions {
+ /* 767px */
+ }
+
+ .form .form-actions .btn-set {
+ margin-bottom: 3px;
+ margin-top: 3px;
+ float: left !important;
+ }
+}
+
+.form .form-section {
+ margin: 30px 0px 25px 0px;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #eee;
+}
+
+.form .form-section:first-child {
+ margin-top: 5px;
+}
+
+/* Checkboxes */
+.checkbox,
+.form-horizontal .checkbox {
+ padding: 0;
+}
+
+.checkbox > label,
+.form-horizontal .checkbox > label {
+ padding-left: 0;
+}
+
+.checkbox-list > label {
+ display: block;
+}
+
+.checkbox-list > label.checkbox-inline {
+ display: inline-block;
+}
+
+.checkbox-list > label.checkbox-inline:first-child {
+ padding-left: 0;
+}
+
+/* Radio buttons */
+.radio-list > label {
+ display: block;
+}
+
+.radio-list > label.radio-inline {
+ display: inline-block;
+}
+
+.radio-list > label.radio-inline:first-child {
+ padding-left: 0;
+}
+
+/* Radio buttons in horizontal forms */
+.form-horizontal .radio-list .radio {
+ padding-top: 1px;
+}
+
+.form-horizontal .radio-list > label {
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio > span {
+ margin-top: 2px;
+}
+
+/* Rows seperated form layout */
+.form .form-row-seperated .portlet-body {
+ padding: 0;
+}
+
+.form .form-row-seperated .form-group {
+ margin: 0;
+ border-bottom: 1px solid #efefef;
+ padding: 15px 0;
+}
+
+.form .form-row-seperated .form-group.last {
+ border-bottom: 0;
+ margin-bottom: 0;
+ padding-bottom: 13px;
+}
+
+.form .form-row-seperated .form-group .help-block {
+ margin-bottom: 0;
+}
+
+.form .form-row-seperated .form-body {
+ padding: 0;
+}
+
+.form .form-row-seperated .form-actions {
+ padding-left: 15px !important;
+ padding-right: 15px !important;
+}
+
+/* Form bordered */
+.form .form-bordered .form-group {
+ margin: 0;
+ border-bottom: 1px solid #efefef;
+}
+
+.form .form-bordered .form-group > div {
+ padding: 15px;
+ border-left: 1px solid #efefef;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-group > div {
+ /* 991px */
+ border-left: 0;
+ }
+}
+
+.form .form-bordered .form-group.last {
+ border-bottom: 0;
+}
+
+.form .form-bordered .form-group .control-label {
+ padding-top: 20px;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-group .control-label {
+ /* 991px */
+ padding-top: 10px;
+ }
+}
+
+.form .form-bordered .form-group .help-block {
+ margin-bottom: 0;
+}
+
+.form .form-bordered .form-group .form-control {
+ margin: 0;
+}
+
+.form .form-bordered .form-body {
+ margin: 0;
+ padding: 0;
+}
+
+.form .form-bordered .form-actions {
+ margin-top: 0;
+ padding-left: 16px !important;
+ padding-right: 16px !important;
+}
+
+@media (max-width: 991px) {
+ .form .form-bordered .form-actions {
+ /* 991px */
+ padding-left: 15px !important;
+ padding-right: 15px !important;
+ }
+}
+
+/* Horizontal bordered form */
+.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+.form .form-horizontal.form-bordered.form-row-stripped .form-control {
+ background: #fff !important;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div {
+ background-color: #ffffff;
+}
+
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+ background-color: #fcfcfc;
+}
+
+/***
+Forms
+***/
+/* Input placeholder font color */
+.form-control::-moz-placeholder {
+ color: #b3b3b3;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #b3b3b3;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #b3b3b3;
+}
+
+/* Form inputs */
+.form-control {
+ font-size: 14px;
+ font-weight: normal;
+ color: #333;
+ background-color: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #999;
+ outline: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eeeeee;
+}
+
+.form-control.height-auto {
+ height: auto;
+}
+
+.form-control.form-control-solid {
+ background-color: #F1F3F8;
+ border-color: #F1F3F8;
+ color: #A6B2BA;
+}
+
+.form-control.form-control-solid:focus {
+ border-color: #e3e7f1;
+}
+
+.form-control.form-control-solid::-moz-placeholder {
+ color: #acb7be;
+ opacity: 1;
+}
+
+.form-control.form-control-solid:-ms-input-placeholder {
+ color: #acb7be;
+}
+
+.form-control.form-control-solid::-webkit-input-placeholder {
+ color: #acb7be;
+}
+
+/* Form uneditable input */
+.uneditable-input {
+ padding: 6px 12px;
+ min-width: 206px;
+ font-size: 14px;
+ font-weight: normal;
+ height: 34px;
+ color: #333;
+ background-color: #fff;
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+/* Form input sizing */
+.input-mini {
+ width: 45px !important;
+}
+
+.input-xsmall {
+ width: 80px !important;
+}
+
+.input-small {
+ width: 145px !important;
+}
+
+.input-medium {
+ width: 240px !important;
+}
+
+.input-large {
+ width: 320px !important;
+}
+
+.input-xlarge {
+ width: 420px !important;
+}
+
+.input-inline {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+}
+
+.form-group .input-inline {
+ margin-right: 5px;
+}
+
+.input-sm {
+ height: 28px;
+ padding: 5px 10px;
+ font-size: 13px;
+}
+
+select.input-sm {
+ height: 28px;
+ line-height: 28px;
+ padding: 2px 10px;
+}
+
+@media (max-width: 768px) {
+ /* 768px */
+ .input-large {
+ width: 250px !important;
+ }
+
+ .input-xlarge {
+ width: 300px !important;
+ }
+}
+
+/* Input groups */
+.input-group .btn-default {
+ border-color: #e5e5e5;
+}
+
+.input-group .input-group-addon {
+ border-color: #e5e5e5;
+ background: #e5e5e5;
+ min-width: 39px;
+}
+
+.input-group .input-group-addon > i {
+ color: #999;
+}
+
+/* Input spinner */
+input[type="text"].spinner,
+input[type="password"].spinner,
+input[type="datetime"].spinner,
+input[type="datetime-local"].spinner,
+input[type="date"].spinner,
+input[type="month"].spinner,
+input[type="time"].spinner,
+input[type="week"].spinner,
+input[type="number"].spinner,
+input[type="email"].spinner,
+input[type="url"].spinner,
+input[type="search"].spinner,
+input[type="tel"].spinner,
+input[type="color"].spinner {
+ background-image: url("../img/input-spinner.gif") !important;
+ background-repeat: no-repeat;
+ background-position: right 8px;
+}
+
+/* Form labels */
+label {
+ font-weight: 400;
+ font-size: 14px;
+}
+
+/* Static form control */
+.form-control-static {
+ margin: 2px 0;
+ display: inline-block;
+}
+
+/* Feedback states */
+.has-success .help-block,
+.has-success .help-inline,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #d6e9c6;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .form-control:focus {
+ border-color: #bbdba1;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ border-color: #d6e9c6;
+ background-color: #dff0d8;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .help-inline,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #faebcc;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-warning .form-control:focus {
+ border-color: #f5d89e;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ border-color: #faebcc;
+ background-color: #fcf8e3;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .help-inline,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #ebccd1;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-error .form-control:focus {
+ border-color: #dca7b0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ border-color: #ebccd1;
+ background-color: #f2dede;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+/* Circle Inputs */
+.input-circle {
+ border-radius: 25px !important;
+}
+
+.input-circle-right {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.input-circle-left {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.input-circle-bottom {
+ border-radius: 0 0 25px 25px !important;
+}
+
+.input-circle-top {
+ border-radius: 25px 25px 0 0 !important;
+}
+
+/***
+Custom icon buttons
+***/
+.icon-btn {
+ height: 60px;
+ min-width: 80px;
+ margin: 5px 5px 0 0;
+ border: 1px solid #ddd;
+ padding: 12px 0px 0px 0px;
+ background-color: #fafafa;
+ background-image: none;
+ filter: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ display: inline-block;
+ color: #646464;
+ text-shadow: none;
+ text-align: center;
+ cursor: pointer;
+ position: relative;
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+}
+
+.icon-btn:hover {
+ text-decoration: none;
+ border-color: #999;
+ color: #444;
+ text-shadow: 0 1px 0px white;
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn:hover > .badge {
+ -webkit-transition: all 0.3s ease;
+ -moz-transition: all 0.3s ease;
+ -ms-transition: all 0.3s ease;
+ -o-transition: all 0.3s ease;
+ transition: all 0.3s ease;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn > div {
+ margin-top: 5px;
+ margin-bottom: 20px;
+ color: #000;
+ font-size: 12px;
+ font-weight: 300;
+}
+
+.icon-btn > .badge {
+ position: absolute;
+ font-size: 11px;
+ font-weight: 300;
+ top: -5px;
+ right: -5px;
+ padding: 3px 6px 3px 6px;
+ color: white;
+ text-shadow: none;
+ border-width: 0;
+ border-style: solid;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.icon-btn > i {
+ font-size: 18px;
+}
+
+.ie8 .icon-btn:hover {
+ filter: none;
+}
+
+/***
+Input icons
+***/
+.input-icon {
+ position: relative;
+}
+
+.input-icon > .form-control {
+ padding-left: 33px;
+}
+
+.input-group .input-icon > .form-control {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+
+.input-icon > i {
+ color: #ccc;
+ display: block;
+ position: absolute;
+ margin: 11px 2px 4px 10px;
+ z-index: 3;
+ width: 16px;
+ height: 16px;
+ font-size: 16px;
+ text-align: center;
+}
+
+.modal .input-icon > i {
+ z-index: 10055;
+}
+
+.has-success .input-icon > i {
+ color: #45B6AF;
+}
+
+.has-warning .input-icon > i {
+ color: #dfba49;
+}
+
+.has-info .input-icon > i {
+ color: #89C4F4;
+}
+
+.has-error .input-icon > i {
+ color: #F3565D;
+}
+
+.input-icon.right > .form-control {
+ padding-right: 33px;
+ padding-left: 12px;
+}
+
+.input-group .input-icon.right > .form-control {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.input-icon.right > i {
+ right: 8px;
+ float: right;
+}
+
+.input-icon.input-icon-lg > i {
+ margin-top: 16px;
+}
+
+.input-icon.input-icon-sm > i {
+ margin-top: 8px;
+ font-size: 13px;
+}
+
+/***
+Customized Bootstrap Labels
+***/
+.label {
+ text-shadow: none !important;
+ font-size: 13px;
+ font-weight: 300;
+ padding: 3px 6px 3px 6px;
+ color: #fff;
+ font-family: "Open Sans", sans-serif;
+}
+
+.label.label-sm {
+ font-size: 12px;
+ padding: 0px 4px 1px 4px;
+}
+
+h1 .label, h2 .label, h3 .label, h4 .label, h5 .label, h6 .label {
+ font-size: 75%;
+}
+
+/* Labels variants */
+.label-default {
+ background-color: #c6c6c6;
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: #adadad;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover, .label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #45B6AF;
+}
+
+.label-success[href]:hover, .label-success[href]:focus {
+ background-color: #37918b;
+}
+
+.label-info {
+ background-color: #89C4F4;
+}
+
+.label-info[href]:hover, .label-info[href]:focus {
+ background-color: #5aadf0;
+}
+
+.label-warning {
+ background-color: #dfba49;
+}
+
+.label-warning[href]:hover, .label-warning[href]:focus {
+ background-color: #d0a625;
+}
+
+.label-danger {
+ background-color: #F3565D;
+}
+
+.label-danger[href]:hover, .label-danger[href]:focus {
+ background-color: #f0262f;
+}
+
+/***
+Iconic labels
+***/
+.label.label-icon {
+ padding: 4px 0px 4px 4px;
+ margin-right: 2px;
+ text-align: center !important;
+}
+
+.label.label-icon > i {
+ font-size: 12px;
+ text-align: center !important;
+}
+
+.ie8 .label.label-icon, .ie9 .label.label-icon {
+ padding: 3px 0px 3px 3px;
+}
+
+/***
+Text states
+***/
+.text-default {
+ color: #c6c6c6;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+.text-success {
+ color: #45B6AF;
+}
+
+.text-info {
+ color: #89C4F4;
+}
+
+.text-warning {
+ color: #dfba49;
+}
+
+.text-danger {
+ color: #F3565D;
+}
+
+/***
+Customized List Group
+***/
+/* Contextual variants */
+.list-group .list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+.list-group a.list-group-item-success {
+ color: #3c763d;
+}
+
+.list-group a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+.list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group .list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+.list-group a.list-group-item-info {
+ color: #31708f;
+}
+
+.list-group a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+.list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group .list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+.list-group a.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+.list-group a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+.list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group .list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+.list-group a.list-group-item-danger {
+ color: #a94442;
+}
+
+.list-group a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+.list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+.list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+/***
+UI Loading
+***/
+.loading-message {
+ display: inline-block;
+ min-width: 125px;
+ margin-left: -60px;
+ padding: 10px;
+ margin: 0 auto;
+ color: #000 !important;
+ font-size: 13px;
+ font-weight: 400;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.loading-message.loading-message-boxed {
+ border: 1px solid #ddd;
+ background-color: #eee;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.loading-message > span {
+ line-height: 20px;
+ vertical-align: middle;
+}
+
+.page-loading {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ min-width: 125px;
+ margin-left: -60px;
+ margin-top: -30px;
+ padding: 7px;
+ text-align: center;
+ color: #333;
+ font-size: 13px;
+ border: 1px solid #ddd;
+ background-color: #eee;
+ vertical-align: middle;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.page-loading > span {
+ line-height: 20px;
+ vertical-align: middle;
+}
+
+.page-spinner-bar {
+ position: fixed;
+ z-index: 10051;
+ width: 100px;
+ top: 40%;
+ left: 50%;
+ margin-left: -55px;
+ text-align: center;
+}
+
+.page-spinner-bar > div {
+ margin: 0 5px;
+ width: 18px;
+ height: 18px;
+ background: #eee;
+ border-radius: 100% !important;
+ display: inline-block;
+ -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+ animation: bounceDelay 1.4s infinite ease-in-out;
+ /* Prevent first frame from flickering when animation starts */
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.page-spinner-bar .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s;
+}
+
+.page-spinner-bar .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s;
+}
+
+.block-spinner-bar {
+ display: inline-block;
+ width: 80px;
+ text-align: center;
+}
+
+.block-spinner-bar > div {
+ margin: 0 2px;
+ width: 15px;
+ height: 15px;
+ background: #eee;
+ border-radius: 100% !important;
+ display: inline-block;
+ -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+ animation: bounceDelay 1.4s infinite ease-in-out;
+ /* Prevent first frame from flickering when animation starts */
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+}
+
+.block-spinner-bar .bounce1 {
+ -webkit-animation-delay: -0.32s;
+ animation-delay: -0.32s;
+}
+
+.block-spinner-bar .bounce2 {
+ -webkit-animation-delay: -0.16s;
+ animation-delay: -0.16s;
+}
+
+/***
+Metro icons
+***/
+[class^="m-icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ margin-top: 3px;
+ line-height: 14px;
+ vertical-align: top;
+ background-image: url(../img/syncfusion-icons.png);
+ background-position: 0 0;
+ background-repeat: no-repeat;
+}
+
+[class^="m-icon-big-"] {
+ display: inline-block;
+ width: 30px;
+ height: 30px;
+ margin: 6px;
+ vertical-align: middle;
+ background-image: url(../img/syncfusion-icons.png);
+ background-position: 0 0px;
+ background-repeat: no-repeat;
+}
+
+/* large icons */
+.btn.m-icon-big {
+ padding: 9px 16px 8px 16px;
+}
+
+.btn.m-icon-big.m-icon-only {
+ padding: 9px 8px 8px 0px;
+}
+
+.btn.m-icon-big [class^="m-icon-big-"] {
+ margin: 0 0 0 10px;
+}
+
+.btn.m-icon-ony > i {
+ margin-left: 0px;
+}
+
+/* default icons */
+.btn.m-icon {
+ padding: 7px 14px 7px 14px;
+}
+
+.btn.m-icon [class^="m-icon-"] {
+ margin: 4px 0 0 5px;
+}
+
+.btn.m-icon.m-icon-only {
+ padding: 7px 10px 7px 6px;
+}
+
+/* white icon */
+.m-icon-white {
+ background-image: url(../img/syncfusion-icons-white.png);
+}
+
+/* Misc */
+.m-icon-swapright {
+ background-position: -27px -10px;
+}
+
+.m-icon-swapdown {
+ background-position: -68px -10px;
+}
+
+.m-icon-swapleft {
+ background-position: -8px -10px;
+}
+
+.m-icon-swapup {
+ background-position: -46px -10px;
+}
+
+.m-icon-big-swapright {
+ background-position: -42px -28px;
+}
+
+.m-icon-big-swapdown {
+ background-position: -115px -28px;
+}
+
+.m-icon-big-swapleft {
+ background-position: -6px -28px;
+}
+
+.m-icon-big-swapup {
+ background-position: -78px -28px;
+}
+
+/***
+Customized Bootstrap Modal
+***/
+.modal {
+ z-index: 10050 !important;
+ outline: none;
+ overflow-y: auto !important;
+ /* Fix content shifting to the right on modal open due to scrollbar closed */
+}
+
+.modal .modal-header {
+ border-bottom: 1px solid #EFEFEF;
+}
+
+.modal .modal-header h3 {
+ font-weight: 300;
+}
+
+.modal .modal-header .close {
+ margin-top: 0px !important;
+}
+
+.modal .modal-dialog {
+ z-index: 10051 !important;
+}
+
+.modal > .loading {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-top: -22px;
+ margin-left: -22px;
+}
+
+.modal.in .page-loading {
+ display: none;
+}
+
+.modal-open {
+ overflow-y: auto !important;
+}
+
+.modal-open-noscroll {
+ overflow-y: hidden !important;
+}
+
+.modal-backdrop {
+ border: 0;
+ outline: none;
+ z-index: 10049;
+}
+
+.modal-backdrop, .modal-backdrop.fade.in {
+ background-color: #333 !important;
+}
+
+/* Full width modal */
+.modal-full.modal-dialog {
+ width: 99%;
+}
+
+@media (max-width: 768px) {
+ .modal-full.modal-dialog {
+ width: auto;
+ }
+}
+
+/***
+Notes
+***/
+.note {
+ margin: 0 0 20px 0;
+ padding: 15px 30px 15px 15px;
+ border-left: 5px solid #eee;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+
+.note h1,
+.note h2,
+.note h3,
+.note h4,
+.note h5,
+.note h6 {
+ margin-top: 0;
+}
+
+.note h1 .close,
+.note h2 .close,
+.note h3 .close,
+.note h4 .close,
+.note h5 .close,
+.note h6 .close {
+ margin-right: -10px;
+}
+
+.note p {
+ font-size: 13px;
+}
+
+.note p:last-child {
+ margin-bottom: 0;
+}
+
+.note code,
+.note .highlight {
+ background-color: #fff;
+}
+
+.note.note-default {
+ background-color: lightgray;
+ border-color: #a0a0a0;
+ color: #333333, 80%;
+}
+
+.note.note-default.note-bordered {
+ background-color: #c9c9c9;
+ border-color: #a5a5a5;
+}
+
+.note.note-primary {
+ background-color: #5697d0;
+ border-color: #2a7696;
+ color: #D8E3F2, 80%;
+}
+
+.note.note-primary.note-bordered {
+ background-color: #468dcb;
+ border-color: #2c7c9e;
+}
+
+.note.note-success {
+ background-color: #eef7ea;
+ border-color: #bbdba1;
+ color: #3c763d, 80%;
+}
+
+.note.note-success.note-bordered {
+ background-color: #e2f1dc;
+ border-color: #c1dea8;
+}
+
+.note.note-info {
+ background-color: #eef7fb;
+ border-color: #91d9e8;
+ color: #31708f, 80%;
+}
+
+.note.note-info.note-bordered {
+ background-color: #ddeff8;
+ border-color: #9adcea;
+}
+
+.note.note-warning {
+ background-color: #fcf8e3;
+ border-color: #f2cf87;
+ color: #8a6d3b, 80%;
+}
+
+.note.note-warning.note-bordered {
+ background-color: #faf3d1;
+ border-color: #f3d390;
+}
+
+.note.note-danger {
+ background-color: #f9f0f0;
+ border-color: #dca7b0;
+ color: #a94442, 80%;
+}
+
+.note.note-danger.note-bordered {
+ background-color: #f3e2e2;
+ border-color: #dfaeb7;
+}
+
+/***
+Customized Bootstrap Pagination
+***/
+.pagination {
+ margin: 10px 0;
+}
+
+.pagination.pagination-circle > li:first-child > a {
+ border-radius: 25px 0 0 25px !important;
+}
+
+.pagination.pagination-circle > li:last-child > a {
+ border-radius: 0 25px 25px 0 !important;
+}
+
+.pagination .active > a,
+.pagination .active > a:hover {
+ background: #eee;
+ border-color: #dddddd;
+ color: #333;
+}
+
+/***
+Customized Bootstrap Panels
+***/
+.panel {
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+.panel-group .panel {
+ overflow: visible;
+}
+
+.panel .panel-body {
+ font-size: 13px;
+}
+
+.panel .panel-title > a:hover {
+ text-decoration: none;
+}
+
+.accordion .panel .panel-heading {
+ padding: 0;
+}
+
+.accordion .panel .panel-title {
+ padding: 0;
+}
+
+.accordion .panel .panel-title .accordion-toggle {
+ display: block;
+ padding: 10px 15px;
+}
+
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled {
+ background: url("../img/accordion-plusminus.png") no-repeat;
+ background-position: right -19px;
+ margin-right: 15px;
+}
+
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed {
+ background-position: right 12px;
+}
+
+.panel-default {
+ border-color: #e0e0e0;
+}
+
+.panel-default > .panel-heading {
+ color: #333333;
+ background-color: #f9f9f9;
+ border-color: #e0e0e0;
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #e0e0e0;
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #e0e0e0;
+}
+
+.panel-primary {
+ border-color: #3595bd;
+}
+
+.panel-primary > .panel-heading {
+ color: #D8E3F2;
+ background-color: #428bca;
+ border-color: #3595bd;
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #3595bd;
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #3595bd;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+/***
+Accordions
+***/
+.accordion-heading {
+ background: #eee;
+}
+
+.accordion-heading a {
+ text-decoration: none;
+}
+
+.accordion-heading a:hover {
+ text-decoration: none;
+}
+
+/***
+Customized Bootstrap Popover
+***/
+.popover {
+ box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+ padding: 0;
+}
+
+.popover .popover-title {
+ margin: 0 !important;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #89C4F4;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #428bca;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #45B6AF;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #dfba49;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+ color: #F3565D;
+}
+
+/* popover colors*/
+.popovers.yellow + .popover {
+ background: yellow;
+}
+
+.popovers.yellow + .popover .popover-title {
+ background: yellow;
+}
+
+.popovers.yellow + .popover .popover-content {
+ background: yellow;
+}
+
+/***
+Portlets
+***/
+/* Full Screen portlet mode */
+.page-portlet-fullscreen {
+ overflow: hidden;
+}
+
+/* Basic portlet */
+.portlet {
+ /*height:300px;*/
+ height: 265px;
+ margin-top: 0px;
+ /*margin-bottom: 25px;*/
+ padding: 0px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.portlet.portlet-fullscreen {
+ z-index: 10060;
+ margin: 0;
+ position: fixed;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+.portlet.portlet-fullscreen > .portlet-body {
+ overflow-y: auto;
+ overflow-x: hidden;
+ padding: 0 10px;
+}
+
+.portlet.portlet-fullscreen > .portlet-title {
+ padding: 0 10px;
+}
+
+.portlet > .portlet-title {
+ border-bottom: 1px solid #eee;
+ padding: 0;
+ margin-bottom: 10px;
+ min-height: 41px;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -ms-border-radius: 4px 4px 0 0;
+ -o-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.portlet > .portlet-title:before, .portlet > .portlet-title:after {
+ content: " ";
+ display: table;
+}
+
+.portlet > .portlet-title:after {
+ clear: both;
+}
+
+.portlet > .portlet-title > .caption {
+ float: left;
+ display: inline-block;
+ font-size: 18px;
+ line-height: 18px;
+ font-weight: 300;
+ padding: 10px 0;
+}
+
+.portlet > .portlet-title > .caption.bold {
+ font-weight: 400;
+}
+
+.portlet > .portlet-title > .caption > i {
+ float: left;
+ margin-top: 4px;
+ display: inline-block;
+ font-size: 13px;
+ margin-right: 5px;
+ color: #666;
+}
+
+.portlet > .portlet-title > .caption > i.glyphicon {
+ margin-top: 2px;
+}
+
+.portlet > .portlet-title > .caption > .caption-helper {
+ padding: 0;
+ margin: 0;
+ line-height: 13px;
+ color: #9eacb4;
+ font-size: 13px;
+ font-weight: 400;
+}
+
+.portlet > .portlet-title > .actions {
+ float: right;
+ display: inline-block;
+ padding: 6px 0;
+}
+
+.portlet > .portlet-title > .actions > .dropdown-menu i {
+ color: #555555;
+}
+
+.portlet > .portlet-title > .actions > .btn,
+.portlet > .portlet-title > .actions > .btn.btn-sm,
+.portlet > .portlet-title > .actions > .btn-group > .btn,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm {
+ padding: 4px 10px;
+ font-size: 13px;
+ line-height: 1.5;
+}
+
+.portlet > .portlet-title > .actions > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn.btn-sm.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default {
+ padding: 3px 9px;
+}
+
+.portlet > .portlet-title > .actions > .btn > i,
+.portlet > .portlet-title > .actions > .btn.btn-sm > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i {
+ font-size: 13px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only {
+ padding: 5px 7px 3px 7px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default {
+ padding: 4px 6px 2px 6px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default > i {
+ font-size: 14px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen {
+ font-family: FontAwesome;
+ color: #a0a0a0;
+ padding-top: 3px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm {
+ padding: 3px 3px !important;
+ height: 27px;
+ width: 27px;
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before {
+ content: "\f065";
+}
+
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before {
+ content: "\f066";
+}
+
+.portlet > .portlet-title > .tools {
+ float: right;
+ display: inline-block;
+ padding: 12px 0 8px 0;
+}
+
+.portlet > .portlet-title > .tools > a {
+ display: inline-block;
+ height: 16px;
+ margin-left: 5px;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.portlet > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon.png);
+ background-repeat: no-repeat;
+ width: 11px;
+}
+
+.portlet > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon.png);
+ background-repeat: no-repeat;
+ width: 12px;
+}
+
+.portlet > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon.png);
+ width: 13px;
+}
+
+.portlet > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon.png);
+ width: 14px;
+ visibility: visible;
+}
+
+.portlet > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon.png);
+ width: 14px;
+ visibility: visible;
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen {
+ display: inline-block;
+ top: -3px;
+ position: relative;
+ font-size: 13px;
+ font-family: FontAwesome;
+ color: #ACACAC;
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen:before {
+ content: "\f065";
+}
+
+.portlet > .portlet-title > .tools > a.fullscreen.on:before {
+ content: "\f066";
+}
+
+.portlet > .portlet-title > .tools > a:hover {
+ text-decoration: none;
+ -webkit-transition: all 0.1s ease-in-out;
+ -moz-transition: all 0.1s ease-in-out;
+ -o-transition: all 0.1s ease-in-out;
+ -ms-transition: all 0.1s ease-in-out;
+ transition: all 0.1s ease-in-out;
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+
+.portlet > .portlet-title > .pagination {
+ float: right;
+ display: inline-block;
+ margin: 2px 0 0 0;
+ border: 0;
+ padding: 4px 0;
+}
+
+.portlet > .portlet-title > .nav-tabs {
+ background: none;
+ margin: 0;
+ float: right;
+ display: inline-block;
+ border: 0;
+}
+
+.portlet > .portlet-title > .nav-tabs > li {
+ background: none;
+ margin: 0;
+ border: 0;
+}
+
+.portlet > .portlet-title > .nav-tabs > li > a {
+ background: none;
+ margin: 5px 0 0 1px;
+ border: 0;
+ padding: 8px 10px;
+ color: #fff;
+}
+
+.portlet > .portlet-title > .nav-tabs > li.active > a, .portlet > .portlet-title > .nav-tabs > li:hover > a {
+ color: #333;
+ background: #fff;
+ border: 0;
+}
+
+.portlet > .portlet-body {
+ clear: both;
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.portlet > .portlet-empty {
+ min-height: 125px;
+}
+
+.portlet.full-height-content {
+ margin-bottom: 0;
+}
+
+/* Portlet background colors */
+/* Side bordered portlet */
+.portlet.bordered {
+ border-left: 2px solid #e6e9ec !important;
+}
+
+.portlet.bordered > .portlet-title {
+ border-bottom: 0;
+}
+
+/* Solid colored portlet */
+.portlet.solid {
+ padding: 0 10px 10px 10px;
+ border: 0px;
+}
+
+.portlet.solid > .portlet-title {
+ border-bottom: 0;
+ margin-bottom: 10px;
+}
+
+.portlet.solid > .portlet-title > .caption {
+ padding: 16px 0 2px 0;
+}
+
+.portlet.solid > .portlet-title > .actions {
+ padding: 12px 0 6px 0;
+}
+
+.portlet.solid > .portlet-title > .tools {
+ padding: 14px 0 6px 0;
+}
+
+/* Solid bordered portlet */
+.portlet.solid.bordered > .portlet-title {
+ margin-bottom: 10px;
+}
+
+/* Box portlet */
+.portlet.box {
+ padding: 0px !important;
+}
+
+.portlet.box > .portlet-title {
+ border-bottom: 0;
+ padding: 0 10px;
+ margin-bottom: 0;
+ color: #fff;
+}
+
+.portlet.box > .portlet-title > .caption {
+ padding: 11px 0 9px 0;
+}
+
+.portlet.box > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.box > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box > .portlet-title > .actions {
+ padding: 7px 0 5px 0;
+}
+
+.portlet.box > .portlet-body {
+ background-color: #fff;
+ padding: 10px;
+}
+
+.portlet.box.portlet-fullscreen > .portlet-body {
+ padding: 10px;
+}
+
+/* Light Portlet */
+.portlet.light {
+ padding: 12px 20px 10px 20px;
+ background-color: #fff;
+}
+
+.portlet.light.bordered {
+ border: 1px solid #e1e1e1 !important;
+}
+
+.portlet.light.bordered > .portlet-title {
+ border-bottom: 1px solid #eee;
+}
+
+.portlet.light.bg-inverse {
+ /*background: #F7F7F7;*/
+ background: white;
+ border: 1px solid #e1e1e1 !important;
+ border-radius: 8px !important;
+}
+
+.portlet.light > .portlet-title {
+ padding: 0;
+ min-height: 48px;
+}
+
+.portlet.light > .portlet-title > .caption {
+ color: #666;
+ padding: 10px 0;
+}
+
+.portlet.light > .portlet-title > .caption > .caption-subject {
+ font-size: 16px;
+}
+
+.portlet.light > .portlet-title > .caption > i {
+ color: #777;
+ font-size: 15px;
+ font-weight: 300;
+ margin-top: 3px;
+}
+
+.portlet.light > .portlet-title > .caption.caption-md > .caption-subject {
+ font-size: 15px;
+}
+
+.portlet.light > .portlet-title > .caption.caption-md > i {
+ font-size: 14px;
+}
+
+.portlet.light > .portlet-title > .actions {
+ padding: 6px 0 14px 0;
+}
+
+.portlet.light > .portlet-title > .actions .btn-default {
+ color: #666;
+}
+
+.portlet.light > .portlet-title > .actions .btn-icon-only {
+ height: 27px;
+ width: 27px;
+}
+
+.portlet.light > .portlet-title > .actions .dropdown-menu li > a {
+ color: #555;
+}
+
+.portlet.light > .portlet-title > .inputs {
+ float: right;
+ display: inline-block;
+ padding: 4px 0;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i {
+ font-size: 14px;
+ margin-top: 9px;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control {
+ height: 30px;
+ padding: 2px 26px 3px 10px;
+ font-size: 13px;
+}
+
+.portlet.light > .portlet-title > .inputs > .portlet-input > .form-control {
+ height: 30px;
+ padding: 3px 10px;
+ font-size: 13px;
+}
+
+.portlet.light > .portlet-title > .pagination {
+ padding: 2px 0 13px 0;
+}
+
+.portlet.light > .portlet-title > .tools {
+ padding: 10px 0 13px 0;
+ margin-top: 2px;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li {
+ margin: 0;
+ padding: 0;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li > a {
+ margin: 0;
+ padding: 12px 13px 13px 13px;
+ font-size: 13px;
+ color: #666;
+}
+
+.portlet.light > .portlet-title > .nav-tabs > li.active > a, .portlet.light > .portlet-title > .nav-tabs > li:hover > a {
+ margin: 0;
+ background: none;
+ color: #333;
+}
+
+.portlet.light.form-fit {
+ padding: 0;
+}
+
+.portlet.light.form-fit > .portlet-title {
+ padding: 17px 20px 10px 20px;
+ margin-bottom: 0;
+}
+
+.portlet.light .portlet-body {
+ padding-top: 8px;
+}
+
+.portlet.light.portlet-fullscreen > .portlet-body {
+ padding: 8px 0;
+}
+
+.tab-pane > p:last-child {
+ margin-bottom: 0px;
+}
+
+/* Reverse aligned tabs */
+.tabs-reversed > li {
+ float: right;
+ margin-right: 0;
+}
+
+.tabs-reversed > li > a {
+ margin-right: 0;
+}
+
+/* jQuery UI Draggable Portlets */
+.portlet-sortable:not(.portlet-fullscreen) > .portlet-title {
+ cursor: move;
+}
+
+.portlet-sortable-placeholder {
+ border: 2px dashed #eee;
+ margin-bottom: 25px;
+}
+
+.portlet-sortable-empty {
+ /*height: 45px;*/
+ height: 300px;
+}
+
+/***
+Customized Progress Bars
+***/
+.progress {
+ border: 0;
+ background-image: none;
+ filter: none;
+ box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.progress.progress-sm {
+ height: 12px;
+}
+
+.progress > .progress-bar-default {
+ background-color: #c6c6c6;
+}
+
+.progress-striped .progress > .progress-bar-default {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-success {
+ background-color: #45B6AF;
+}
+
+.progress-striped .progress > .progress-bar-success {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-info {
+ background-color: #89C4F4;
+}
+
+.progress-striped .progress > .progress-bar-info {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-danger {
+ background-color: #F3565D;
+}
+
+.progress-striped .progress > .progress-bar-danger {
+ background-image: none;
+ background-image: none;
+}
+
+.progress > .progress-bar-warning {
+ background-color: #dfba49;
+}
+
+.progress-striped .progress > .progress-bar-warning {
+ background-image: none;
+ background-image: none;
+}
+
+/***
+Dashboard stats
+***/
+.dashboard-stat {
+ display: block;
+ margin-bottom: 25px;
+ overflow: hidden;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.dashboard-stat:before, .dashboard-stat:after {
+ content: " ";
+ display: table;
+}
+
+.dashboard-stat:after {
+ clear: both;
+}
+
+.portlet .dashboard-stat:last-child {
+ margin-bottom: 0;
+}
+
+.dashboard-stat .visual {
+ width: 80px;
+ height: 80px;
+ display: block;
+ float: left;
+ padding-top: 10px;
+ padding-left: 15px;
+ margin-bottom: 15px;
+ font-size: 35px;
+ line-height: 35px;
+}
+
+.dashboard-stat .visual > i {
+ margin-left: -35px;
+ font-size: 110px;
+ line-height: 110px;
+}
+
+.dashboard-stat .details {
+ position: absolute;
+ right: 15px;
+ padding-right: 15px;
+}
+
+.dashboard-stat .details .number {
+ padding-top: 25px;
+ text-align: right;
+ font-size: 34px;
+ line-height: 36px;
+ letter-spacing: -1px;
+ margin-bottom: 0px;
+ font-weight: 300;
+}
+
+.dashboard-stat .details .desc {
+ text-align: right;
+ font-size: 16px;
+ letter-spacing: 0px;
+ font-weight: 300;
+}
+
+.dashboard-stat .more {
+ clear: both;
+ display: block;
+ padding: 6px 10px 6px 10px;
+ position: relative;
+ text-transform: uppercase;
+ font-weight: 300;
+ font-size: 11px;
+ opacity: 0.7;
+ filter: alpha(opacity=70);
+}
+
+.dashboard-stat .more:hover {
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+
+.dashboard-stat .more > i {
+ display: inline-block;
+ margin-top: 1px;
+ float: right;
+}
+
+.dashboard-stat-light {
+ padding-bottom: 20px;
+ margin-bottom: 20px;
+}
+
+.dashboard-stat-light .details {
+ margin-bottom: 5px;
+}
+
+.dashboard-stat-light .details .number {
+ font-weight: 300;
+ margin-bottom: 0px;
+}
+
+/***
+Text Stats
+***/
+.text-stat h3 {
+ margin-top: 5px;
+ margin-bottom: 0px;
+ font-size: 18px;
+}
+
+.text-stat span {
+ font-size: 13px !important;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .text-stat {
+ margin-top: 20px;
+ }
+}
+
+/***
+Social Icons
+***/
+.social-icons {
+ padding: 0;
+ margin: 0;
+}
+
+.social-icons:before, .social-icons:after {
+ content: " ";
+ display: table;
+}
+
+.social-icons:after {
+ clear: both;
+}
+
+.social-icons li {
+ float: left;
+ display: inline;
+ list-style: none;
+ margin-right: 5px;
+ margin-bottom: 5px;
+ text-indent: -9999px;
+}
+
+.social-icons li > a {
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ width: 28px;
+ height: 28px;
+ display: block;
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ -ms-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -webkit-transition: all 0.3s ease-in-out;
+}
+
+.social-icons li:hover > a {
+ background-position: 0 -38px;
+}
+
+.social-icons li .amazon {
+ background: url(../img/social/amazon.png) no-repeat;
+}
+
+.social-icons li .behance {
+ background: url(../img/social/behance.png) no-repeat;
+}
+
+.social-icons li .blogger {
+ background: url(../img/social/blogger.png) no-repeat;
+}
+
+.social-icons li .deviantart {
+ background: url(../img/social/deviantart.png) no-repeat;
+}
+
+.social-icons li .dribbble {
+ background: url(../img/social/dribbble.png) no-repeat;
+}
+
+.social-icons li .dropbox {
+ background: url(../img/social/dropbox.png) no-repeat;
+}
+
+.social-icons li .evernote {
+ background: url(../img/social/evernote.png) no-repeat;
+}
+
+.social-icons li .facebook {
+ background: url(../img/social/facebook.png) no-repeat;
+}
+
+.social-icons li .forrst {
+ background: url(../img/social/forrst.png) no-repeat;
+}
+
+.social-icons li .github {
+ background: url(../img/social/github.png) no-repeat;
+}
+
+.social-icons li .googleplus {
+ background: url(../img/social/googleplus.png) no-repeat;
+}
+
+.social-icons li .jolicloud {
+ background: url(../img/social/jolicloud.png) no-repeat;
+}
+
+.social-icons li .last-fm {
+ background: url(../img/social/last-fm.png) no-repeat;
+}
+
+.social-icons li .linkedin {
+ background: url(../img/social/linkedin.png) no-repeat;
+}
+
+.social-icons li .picasa {
+ background: url(../img/social/picasa.png) no-repeat;
+}
+
+.social-icons li .pintrest {
+ background: url(../img/social/pintrest.png) no-repeat;
+}
+
+.social-icons li .rss {
+ background: url(../img/social/rss.png) no-repeat;
+}
+
+.social-icons li .skype {
+ background: url(../img/social/skype.png) no-repeat;
+}
+
+.social-icons li .spotify {
+ background: url(../img/social/spotify.png) no-repeat;
+}
+
+.social-icons li .stumbleupon {
+ background: url(../img/social/stumbleupon.png) no-repeat;
+}
+
+.social-icons li .tumblr {
+ background: url(../img/social/tumblr.png) no-repeat;
+}
+
+.social-icons li .twitter {
+ background: url(../img/social/twitter.png) no-repeat;
+}
+
+.social-icons li .vimeo {
+ background: url(../img/social/vimeo.png) no-repeat;
+}
+
+.social-icons li .wordpress {
+ background: url(../img/social/wordpress.png) no-repeat;
+}
+
+.social-icons li .xing {
+ background: url(../img/social/xing.png) no-repeat;
+}
+
+.social-icons li .yahoo {
+ background: url(../img/social/yahoo.png) no-repeat;
+}
+
+.social-icons li .youtube {
+ background: url(../img/social/youtube.png) no-repeat;
+}
+
+.social-icons li .vk {
+ background: url(../img/social/vk.png) no-repeat;
+}
+
+.social-icons li .instagram {
+ background: url(../img/social/instagram.png) no-repeat;
+}
+
+.social-icons li .reddit {
+ background: url(../img/social/reddit.png) no-repeat;
+}
+
+.social-icons li .aboutme {
+ background: url(../img/social/aboutme.png) no-repeat;
+}
+
+.social-icons li .flickr {
+ background: url(../img/social/flickr.png) no-repeat;
+}
+
+.social-icons li .foursquare {
+ background: url(../img/social/foursquare.png) no-repeat;
+}
+
+.social-icons li .gravatar {
+ background: url(../img/social/gravatar.png) no-repeat;
+}
+
+.social-icons li .klout {
+ background: url(../img/social/klout.png) no-repeat;
+}
+
+.social-icons li .myspace {
+ background: url(../img/social/myspace.png) no-repeat;
+}
+
+.social-icons li .quora {
+ background: url(../img/social/quora.png) no-repeat;
+}
+
+.social-icons.social-icons-color > li > a {
+ opacity: 0.7;
+ background-position: 0 -38px !important;
+}
+
+.social-icons.social-icons-color > li > a:hover {
+ opacity: 1;
+}
+
+.social-icons.social-icons-circle > li > a {
+ border-radius: 25px !important;
+}
+
+/***
+Inline Social Icons
+***/
+.social-icon {
+ display: inline-block !important;
+ width: 28px;
+ height: 28px;
+ background-position: 0 0;
+ background-repeat: no-repeat;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ -ms-border-radius: 2px;
+ -o-border-radius: 2px;
+ border-radius: 2px;
+ transition: all 0.3s ease-in-out;
+ -o-transition: all 0.3s ease-in-out;
+ -ms-transition: all 0.3s ease-in-out;
+ -moz-transition: all 0.3s ease-in-out;
+ -webkit-transition: all 0.3s ease-in-out;
+}
+
+.social-icon.social-icon-circle {
+ border-radius: 25px !important;
+}
+
+.social-icon.amazon {
+ background: url(../img/social/amazon.png) no-repeat;
+}
+
+.social-icon.behance {
+ background: url(../img/social/behance.png) no-repeat;
+}
+
+.social-icon.blogger {
+ background: url(../img/social/blogger.png) no-repeat;
+}
+
+.social-icon.deviantart {
+ background: url(../img/social/deviantart.png) no-repeat;
+}
+
+.social-icon.dribbble {
+ background: url(../img/social/dribbble.png) no-repeat;
+}
+
+.social-icon.dropbox {
+ background: url(../img/social/dropbox.png) no-repeat;
+}
+
+.social-icon.evernote {
+ background: url(../img/social/evernote.png) no-repeat;
+}
+
+.social-icon.facebook {
+ background: url(../img/social/facebook.png) no-repeat;
+}
+
+.social-icon.forrst {
+ background: url(../img/social/forrst.png) no-repeat;
+}
+
+.social-icon.github {
+ background: url(../img/social/github.png) no-repeat;
+}
+
+.social-icon.googleplus {
+ background: url(../img/social/googleplus.png) no-repeat;
+}
+
+.social-icon.jolicloud {
+ background: url(../img/social/jolicloud.png) no-repeat;
+}
+
+.social-icon.last-fm {
+ background: url(../img/social/last-fm.png) no-repeat;
+}
+
+.social-icon.linkedin {
+ background: url(../img/social/linkedin.png) no-repeat;
+}
+
+.social-icon.picasa {
+ background: url(../img/social/picasa.png) no-repeat;
+}
+
+.social-icon.pintrest {
+ background: url(../img/social/pintrest.png) no-repeat;
+}
+
+.social-icon.rss {
+ background: url(../img/social/rss.png) no-repeat;
+}
+
+.social-icon.skype {
+ background: url(../img/social/skype.png) no-repeat;
+}
+
+.social-icon.spotify {
+ background: url(../img/social/spotify.png) no-repeat;
+}
+
+.social-icon.stumbleupon {
+ background: url(../img/social/stumbleupon.png) no-repeat;
+}
+
+.social-icon.tumblr {
+ background: url(../img/social/tumblr.png) no-repeat;
+}
+
+.social-icon.twitter {
+ background: url(../img/social/twitter.png) no-repeat;
+}
+
+.social-icon.vimeo {
+ background: url(../img/social/vimeo.png) no-repeat;
+}
+
+.social-icon.wordpress {
+ background: url(../img/social/wordpress.png) no-repeat;
+}
+
+.social-icon.xing {
+ background: url(../img/social/xing.png) no-repeat;
+}
+
+.social-icon.yahoo {
+ background: url(../img/social/yahoo.png) no-repeat;
+}
+
+.social-icon.youtube {
+ background: url(../img/social/youtube.png) no-repeat;
+}
+
+.social-icon.vk {
+ background: url(../img/social/vk.png) no-repeat;
+}
+
+.social-icon.instagram {
+ background: url(../img/social/instagram.png) no-repeat;
+}
+
+.social-icon.reddit {
+ background: url(../img/social/reddit.png) no-repeat;
+}
+
+.social-icon.aboutme {
+ background: url(../img/social/aboutme.png) no-repeat;
+}
+
+.social-icon.flickr {
+ background: url(../img/social/flickr.png) no-repeat;
+}
+
+.social-icon.foursquare {
+ background: url(../img/social/foursquare.png) no-repeat;
+}
+
+.social-icon.gravatar {
+ background: url(../img/social/gravatar.png) no-repeat;
+}
+
+.social-icon.klout {
+ background: url(../img/social/klout.png) no-repeat;
+}
+
+.social-icon.myspace {
+ background: url(../img/social/myspace.png) no-repeat;
+}
+
+.social-icon.quora {
+ background: url(../img/social/quora.png) no-repeat;
+}
+
+.social-icon:hover {
+ background-position: 0 -38px;
+}
+
+.social-icon-color {
+ opacity: 0.7;
+ background-position: 0 -38px !important;
+}
+
+.social-icon-color:hover {
+ opacity: 1;
+}
+
+/***
+Customized Bootstrap Tables
+***/
+/***
+Default table
+***/
+.table.table-bordered thead > tr > th {
+ border-bottom: 0;
+}
+
+.table tr.heading > th {
+ background-color: #eee !important;
+}
+
+.table td .img-responsive {
+ width: 100%;
+}
+
+/* Contextual table row variants */
+.table > thead > tr > td.active,
+.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th,
+.table > tbody > tr > td.active,
+.table > tbody > tr > th.active,
+.table > tbody > tr.active > td,
+.table > tbody > tr.active > th,
+.table > tfoot > tr > td.active,
+.table > tfoot > tr > th.active,
+.table > tfoot > tr.active > td,
+.table > tfoot > tr.active > th {
+ background: #a6c8e6;
+ color: #132339;
+}
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {
+ background: #92bce0;
+}
+
+.table > thead > tr > td.success,
+.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th,
+.table > tbody > tr > td.success,
+.table > tbody > tr > th.success,
+.table > tbody > tr.success > td,
+.table > tbody > tr.success > th,
+.table > tfoot > tr > td.success,
+.table > tfoot > tr > th.success,
+.table > tfoot > tr.success > td,
+.table > tfoot > tr.success > th {
+ background: #dff0d8;
+ color: #3c763d;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+ background: #d0e9c6;
+}
+
+.table > thead > tr > td.info,
+.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th,
+.table > tbody > tr > td.info,
+.table > tbody > tr > th.info,
+.table > tbody > tr.info > td,
+.table > tbody > tr.info > th,
+.table > tfoot > tr > td.info,
+.table > tfoot > tr > th.info,
+.table > tfoot > tr.info > td,
+.table > tfoot > tr.info > th {
+ background: #d9edf7;
+ color: #31708f;
+}
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {
+ background: #c4e3f3;
+}
+
+.table > thead > tr > td.warning,
+.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th,
+.table > tbody > tr > td.warning,
+.table > tbody > tr > th.warning,
+.table > tbody > tr.warning > td,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr > td.warning,
+.table > tfoot > tr > th.warning,
+.table > tfoot > tr.warning > td,
+.table > tfoot > tr.warning > th {
+ background: #fcf8e3;
+ color: #8a6d3b;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+ background: #faf2cc;
+}
+
+.table > thead > tr > td.danger,
+.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th,
+.table > tbody > tr > td.danger,
+.table > tbody > tr > th.danger,
+.table > tbody > tr.danger > td,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr > td.danger,
+.table > tfoot > tr > th.danger,
+.table > tfoot > tr.danger > td,
+.table > tfoot > tr.danger > th {
+ background: #f2dede;
+ color: #a94442;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+ background: #ebcccc;
+}
+
+/***
+Responsive & Scrollable Tables
+***/
+.table-scrollable {
+ width: 100%;
+ overflow-x: auto;
+ overflow-y: hidden;
+ border: 1px solid #dddddd;
+ margin: 10px 0 !important;
+}
+
+.table-scrollable.table-scrollable-borderless {
+ border: 0;
+}
+
+.table-scrollable > .table {
+ width: 100% !important;
+ margin: 0 !important;
+ margin-bottom: 0;
+ background-color: #fff;
+}
+
+.table-scrollable > .table > thead > tr > th,
+.table-scrollable > .table > tbody > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > td {
+ white-space: nowrap;
+}
+
+.table-scrollable > .table-bordered {
+ border: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:first-child,
+.table-scrollable > .table-bordered > tbody > tr > th:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:first-child,
+.table-scrollable > .table-bordered > thead > tr > td:first-child,
+.table-scrollable > .table-bordered > tbody > tr > td:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:last-child,
+.table-scrollable > .table-bordered > tbody > tr > th:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:last-child,
+.table-scrollable > .table-bordered > thead > tr > td:last-child,
+.table-scrollable > .table-bordered > tbody > tr > td:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr:last-child > th,
+.table-scrollable > .table-bordered > tbody > tr:last-child > th,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > th,
+.table-scrollable > .table-bordered > thead > tr:last-child > td,
+.table-scrollable > .table-bordered > tbody > tr:last-child > td,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+}
+
+/***
+Responsive Flip Scroll Tables
+***/
+.flip-scroll table {
+ width: 100%;
+}
+
+@media only screen and (max-width: 768px) {
+ /* 768px */
+ .flip-scroll .flip-content:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+
+ .flip-scroll * html .flip-content {
+ zoom: 1;
+ }
+
+ .flip-scroll *:first-child + html .flip-content {
+ zoom: 1;
+ }
+
+ .flip-scroll table {
+ width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+ }
+
+ .flip-scroll th,
+ .flip-scroll td {
+ margin: 0;
+ vertical-align: top;
+ }
+
+ .flip-scroll th {
+ text-align: left;
+ border: 0 !important;
+ border-bottom: 1px solid #ddd !important;
+ border-right: 1px solid #ddd !important;
+ font-size: 13px !important;
+ padding: 5px;
+ width: auto !important;
+ }
+
+ .flip-scroll table {
+ display: block;
+ position: relative;
+ width: 100%;
+ }
+
+ .flip-scroll thead {
+ display: block;
+ float: left;
+ }
+
+ .flip-scroll tbody {
+ display: block;
+ width: auto;
+ position: relative;
+ overflow-x: auto;
+ white-space: nowrap;
+ }
+
+ .flip-scroll thead tr {
+ display: block;
+ }
+
+ .flip-scroll th {
+ display: block;
+ text-align: right;
+ }
+
+ .flip-scroll tbody tr {
+ display: inline-block;
+ vertical-align: top;
+ margin-left: -5px;
+ }
+
+ .flip-scroll td {
+ display: block;
+ min-height: 1.25em;
+ text-align: left;
+ border-top: 0 !important;
+ border-left: 0 !important;
+ border-right: 0 !important;
+ }
+
+ /* sort out borders */
+ .flip-scroll th {
+ border-bottom: 0;
+ border-left: 0;
+ }
+
+ .flip-scroll td {
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+ }
+
+ .flip-scroll tbody tr {
+ border-left: 1px solid #ddd;
+ }
+
+ .flip-scroll th:last-child,
+ .flip-scroll td:last-child {
+ border-bottom: 1px solid #ddd;
+ }
+}
+
+/***
+Custom tables
+***/
+.table-toolbar {
+ margin-bottom: 15px;
+}
+
+.table-toolbar:before, .table-toolbar:after {
+ content: " ";
+ display: table;
+}
+
+.table-toolbar:after {
+ clear: both;
+}
+
+.table.table-full-width {
+ width: 100% !important;
+}
+
+.table .btn {
+ margin-top: 0px;
+ margin-left: 0px;
+ margin-right: 5px;
+}
+
+.table thead tr th {
+ font-size: 14px;
+ font-weight: 600;
+}
+
+.table-advance {
+ margin-bottom: 10px !important;
+}
+
+.table-advance thead {
+ color: #999;
+}
+
+.table-advance thead tr th {
+ background-color: #DDD;
+ font-size: 14px;
+ font-weight: 400;
+ color: #666;
+}
+
+.table-advance div.success,
+.table-advance div.info,
+.table-advance div.important,
+.table-advance div.warning,
+.table-advance div.danger {
+ position: absolute;
+ margin-top: -5px;
+ float: left;
+ width: 2px;
+ height: 30px;
+ margin-right: 20px !important;
+}
+
+.table-advance tr td {
+ border-left-width: 0px;
+}
+
+.table-advance tr td:first-child {
+ border-left-width: 1px !important;
+}
+
+.table-advance tr td.highlight:first-child a {
+ margin-left: 15px;
+}
+
+.table-advance td.highlight div.primary {
+ border-left: 2px solid #428bca;
+}
+
+.table-advance td.highlight div.success {
+ border-left: 2px solid #45B6AF;
+}
+
+.table-advance td.highlight div.info {
+ border-left: 2px solid #89C4F4;
+}
+
+.table-advance td.highlight div.warning {
+ border-left: 2px solid #dfba49;
+}
+
+.table-advance td.highlight div.danger {
+ border-left: 2px solid #F3565D;
+}
+
+@media (max-width: 767px) {
+ /* 767px */
+ .table-advance tr > td.highlight:first-child a {
+ margin-left: 8px;
+ }
+}
+
+/***
+Light Table
+***/
+.table.table-light {
+ border: 0 !important;
+}
+
+.table.table-light > thead > tr:hover > th {
+ background: none;
+}
+
+.table.table-light > thead > tr.uppercase {
+ text-transform: uppercase;
+}
+
+.table.table-light > thead > tr > th {
+ font-weight: 600;
+ font-size: 13px;
+ color: #a7b3b9;
+ font-family: "Open Sans", sans-serif;
+ border: 0;
+ border-bottom: 1px solid #F2F5F8;
+}
+
+.table.table-light > tbody > tr:last-child > td {
+ border: 0;
+}
+
+.table.table-light > tbody > tr > td {
+ border: 0;
+ border-bottom: 1px solid #F2F5F8;
+ color: #9ca8b0;
+ vertical-align: middle;
+}
+
+.table.table-light > tbody > tr > td.fit {
+ width: 1px;
+ padding-right: 3px;
+}
+
+.table.table-light > tbody > tr > td .user-pic {
+ display: inline-block;
+ vertical-align: middle;
+ height: 30px;
+ -webkit-border-radius: 100%;
+ -moz-border-radius: 100%;
+ -ms-border-radius: 100%;
+ -o-border-radius: 100%;
+ border-radius: 100%;
+}
+
+.table.table-light.table-hover > tbody > tr > td:hover,
+.table.table-light.table-hover > tbody > tr > th:hover, .table.table-light.table-hover > tbody > tr:hover > td, .table.table-light.table-hover > tbody > tr:hover > th {
+ background: #f9fafb;
+}
+
+/***
+Customized Bootstrap Tabs
+***/
+/* Tabs and pills */
+.nav-tabs,
+.nav-pills {
+ margin-bottom: 10px;
+}
+
+.nav-tabs > li > a,
+.nav-pills > li > a {
+ font-size: 14px;
+}
+
+.nav-tabs > li > a > .badge,
+.nav-pills > li > a > .badge {
+ margin-top: -3px;
+}
+
+.nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after,
+.nav-pills > li .dropdown-menu:before,
+.nav-pills > li .dropdown-menu:after {
+ display: none;
+}
+
+.nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a,
+.nav-pills.nav-tabs-sm > li > a,
+.nav-pills.nav-pills-sm > li > a {
+ font-size: 13px;
+}
+
+.nav-tabs .dropdown.open > .dropdown-toggle,
+.nav-pills .dropdown.open > .dropdown-toggle {
+ background: #eee;
+ color: #0d638f;
+ border-color: transparent;
+}
+
+/* Left and right tabs */
+.tabs-right.nav-tabs,
+.tabs-left.nav-tabs {
+ border-bottom: 0;
+}
+
+.tabs-right.nav-tabs > li,
+.tabs-left.nav-tabs > li {
+ float: none;
+}
+
+.tabs-right.nav-tabs > li > a,
+.tabs-left.nav-tabs > li > a {
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+
+/* Left tabs */
+.tabs-left.nav-tabs {
+ border-right: 1px solid #ddd;
+}
+
+.tabs-left.nav-tabs > li > a {
+ display: block;
+ margin-right: -1px;
+}
+
+.tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left.nav-tabs > li.active > a,
+.tabs-left.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ -ms-border-radius: 4px 0 0 4px;
+ -o-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+
+/* Right tabs */
+.tabs-right.nav-tabs {
+ border-left: 1px solid #ddd;
+}
+
+.tabs-right.nav-tabs > li > a {
+ display: block;
+ margin-left: -1px;
+}
+
+.tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right.nav-tabs > li.active > a,
+.tabs-right.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ -ms-border-radius: 0 4px 4px 0;
+ -o-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+
+/* Below tabs */
+.tabs-below > .nav-tabs,
+.tabs-below > .nav-pills {
+ border-bottom: 0;
+ margin-bottom: 0px;
+ margin-top: 10px;
+}
+
+.tabs-below > .nav-tabs {
+ border-top: 1px solid #ddd;
+ margin-bottom: 0;
+ margin-top: 10px;
+}
+
+.tabs-below > .nav-tabs > li > a {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+
+.tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus {
+ border-top-color: #ddd;
+ border-bottom-color: transparent;
+}
+
+.tabs-below > .nav-tabs > li > a .dropdown-menu {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -ms-border-radius: 4px;
+ -o-border-radius: 4px;
+ border-radius: 4px;
+}
+
+.tabs-below > .nav-tabs .active a,
+.tabs-below > .nav-tabs .active a:hover
+.active a:focus {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+ border-color: transparent #ddd #ddd #ddd;
+}
+
+/***
+Custom tabs
+***/
+/* In BS3.0.0 tabbable class was removed. We had to added it back */
+.tabbable:before, .tabbable:after {
+ content: " ";
+ display: table;
+}
+
+.tabbable:after {
+ clear: both;
+}
+
+.tabbable-custom {
+ margin-bottom: 15px;
+ padding: 0px;
+ overflow: hidden;
+ /* justified tabs */
+ /* boxless tabs */
+ /* below justified tabs */
+ /* full width tabs */
+ /* below tabs */
+}
+
+.tabbable-custom > .nav-tabs {
+ border: none;
+ margin: 0px;
+}
+
+.tabbable-custom > .nav-tabs > li {
+ margin-right: 2px;
+ border-top: 2px solid transparent;
+}
+
+.tabbable-custom > .nav-tabs > li > a {
+ margin-right: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+}
+
+.tabbable-custom > .nav-tabs > li > a:hover {
+ background: none;
+ border-color: transparent;
+}
+
+.tabbable-custom > .nav-tabs > li.active {
+ border-top: 3px solid #F3565D;
+ margin-top: 0;
+ position: relative;
+}
+
+.tabbable-custom > .nav-tabs > li.active > a {
+ border-top: none;
+ font-weight: 400;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+}
+
+.tabbable-custom > .nav-tabs > li.active > a:hover {
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ border-top: none;
+ background: #fff;
+ border-color: #d4d4d4 #d4d4d4 transparent;
+}
+
+.tabbable-custom > .tab-content {
+ background-color: #fff;
+ border: 1px solid #ddd;
+ padding: 10px;
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ -ms-border-radius: 0 0 4px 4px;
+ -o-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.tabbable-custom.nav-justified > .tab-content {
+ margin-top: -1px;
+}
+
+.tabbable-custom.boxless > .tab-content {
+ padding: 15px 0;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below.nav-justified .tab-content {
+ margin-top: 0px;
+ margin-bottom: -2px;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ -ms-border-radius: 4px 4px 0 0;
+ -o-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.tabbable-custom.tabbable-full-width > .nav-tabs > li > a {
+ color: #424242;
+ font-size: 15px;
+ padding: 9px 15px;
+}
+
+.tabbable-custom.tabbable-full-width > .tab-content {
+ padding: 15px 0;
+ border-left: none;
+ border-right: none;
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li > a {
+ border-top: none;
+ border-bottom: 2px solid transparent;
+ margin-top: -1px;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active {
+ border-top: none;
+ border-bottom: 3px solid #d12610;
+ margin-bottom: 0;
+ position: relative;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active > a {
+ border-bottom: none;
+}
+
+.tabbable-custom.tabs-below .nav-tabs > li.active > a:hover {
+ background: #fff;
+ border-color: #d4d4d4 #d4d4d4 transparent;
+}
+
+.tabbable-custom.tabbable-noborder > .nav-tabs > li > a {
+ border: 0;
+}
+
+.tabbable-custom.tabbable-noborder .tab-content {
+ border: 0;
+}
+
+.tabbable-line > .nav-tabs {
+ border: none;
+ margin: 0px;
+}
+
+.tabbable-line > .nav-tabs > li {
+ margin-right: 2px;
+}
+
+.tabbable-line > .nav-tabs > li > a {
+ border: 0;
+ margin-right: 0;
+ color: #737373;
+}
+
+.tabbable-line > .nav-tabs > li > a > i {
+ color: #a6a6a6;
+}
+
+.tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover {
+ border-bottom: 4px solid #fbcdcf;
+}
+
+.tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a {
+ border: 0;
+ background: none !important;
+ color: #333;
+}
+
+.tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i {
+ color: #a6a6a6;
+}
+
+.tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu {
+ margin-top: 0px;
+}
+
+.tabbable-line > .nav-tabs > li.active {
+ border-bottom: 4px solid #F3565D;
+ position: relative;
+}
+
+.tabbable-line > .nav-tabs > li.active > a {
+ border: 0;
+ color: #333;
+}
+
+.tabbable-line > .nav-tabs > li.active > a > i {
+ color: #404040;
+}
+
+.tabbable-line > .tab-content {
+ margin-top: -3px;
+ background-color: #fff;
+ border: 0;
+ border-top: 1px solid #eee;
+ padding: 15px 0;
+}
+
+.portlet .tabbable-line > .tab-content {
+ padding-bottom: 0;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li {
+ border-top: 4px solid transparent;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li > a {
+ margin-top: 0;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li:hover {
+ border-bottom: 0;
+ border-top: 4px solid #fbcdcf;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li.active {
+ margin-bottom: -2px;
+ border-bottom: 0;
+ border-top: 4px solid #F3565D;
+}
+
+.tabbable-line.tabs-below > .tab-content {
+ margin-top: -10px;
+ border-top: 0;
+ border-bottom: 1px solid #eee;
+ padding-bottom: 15px;
+}
+
+/***
+Tiles(new in v1.1.1)
+***/
+.tiles {
+ margin-right: -10px;
+}
+
+.tiles:before, .tiles:after {
+ display: table;
+ content: " ";
+}
+
+.tiles:after {
+ clear: both;
+}
+
+.tiles .tile {
+ display: block;
+ letter-spacing: 0.02em;
+ float: left;
+ height: 135px;
+ width: 135px !important;
+ cursor: pointer;
+ text-decoration: none;
+ color: #ffffff;
+ position: relative;
+ font-weight: 300;
+ font-size: 12px;
+ letter-spacing: 0.02em;
+ line-height: 20px;
+ overflow: hidden;
+ border: 4px solid transparent;
+ margin: 0 10px 10px 0;
+}
+
+.tiles .tile:after, .tiles .tile:before {
+ content: "";
+ float: left;
+}
+
+.tiles .tile.double {
+ width: 280px !important;
+}
+
+.tiles .tile.double-down {
+ height: 280px !important;
+}
+
+.tiles .tile.double-down i {
+ margin-top: 95px;
+}
+
+.tiles .tile:hover {
+ border-color: #aaa !important;
+}
+
+.tiles .tile:active, .tiles .tile.selected {
+ border-color: #ccc !important;
+}
+
+.tiles .tile.selected .corner:after {
+ content: "";
+ display: inline-block;
+ border-left: 40px solid transparent;
+ border-bottom: 40px solid transparent;
+ border-right: 40px solid #ccc;
+ position: absolute;
+ top: -3px;
+ right: -3px;
+}
+
+.tiles .tile.selected .check:after {
+ content: "";
+ font-family: FontAwesome;
+ font-size: 13px;
+ content: "\f00c";
+ display: inline-block;
+ position: absolute;
+ top: 2px;
+ right: 2px;
+}
+
+.tiles .tile.icon {
+ padding: 0;
+}
+
+.tiles .tile.image .tile-body {
+ padding: 0 !important;
+}
+
+.tiles .tile.image .tile-body > img {
+ width: 100%;
+ height: auto;
+ min-height: 100%;
+ max-width: 100%;
+}
+
+.tiles .tile.image .tile-body h3 {
+ display: inline-block;
+}
+
+.tiles .tile .tile-body {
+ height: 100%;
+ vertical-align: top;
+ padding: 10px 10px;
+ overflow: hidden;
+ position: relative;
+ font-weight: 400;
+ font-size: 12px;
+ color: #000000;
+ color: #ffffff;
+ margin-bottom: 10px;
+}
+
+.tiles .tile .tile-body p {
+ font-weight: 400;
+ font-size: 13px;
+ color: #000000;
+ color: #ffffff;
+ line-height: 20px;
+ overflow: hidden;
+}
+
+.tiles .tile .tile-body p:hover {
+ color: rgba(0, 0, 0, 0.8);
+}
+
+.tiles .tile .tile-body p:active {
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.tiles .tile .tile-body p:hover {
+ color: #ffffff;
+}
+
+.tiles .tile .tile-body img {
+ float: left;
+ margin-right: 10px;
+}
+
+.tiles .tile .tile-body img.pull-right {
+ float: right !important;
+ margin-left: 10px;
+ margin-right: 0px;
+}
+
+.tiles .tile .tile-body > .content {
+ display: inline-block;
+}
+
+.tiles .tile .tile-body > i {
+ margin-top: 17px;
+ display: block;
+ font-size: 56px;
+ line-height: 56px;
+ text-align: center;
+}
+
+.tiles .tile .tile-body h1,
+.tiles .tile .tile-body h2,
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4,
+.tiles .tile .tile-body h5,
+.tiles .tile .tile-body h6,
+.tiles .tile .tile-body p {
+ padding: 0;
+ margin: 0;
+ line-height: 14px;
+}
+
+.tiles .tile .tile-body h1:hover,
+.tiles .tile .tile-body h2:hover,
+.tiles .tile .tile-body h3:hover,
+.tiles .tile .tile-body h4:hover,
+.tiles .tile .tile-body h5:hover,
+.tiles .tile .tile-body h6:hover,
+.tiles .tile .tile-body p:hover {
+ color: #ffffff;
+}
+
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4 {
+ margin-bottom: 5px;
+}
+
+.tiles .tile .tile-object {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ min-height: 30px;
+ background-color: transparent;
+ *zoom: 1;
+}
+
+.tiles .tile .tile-object:before, .tiles .tile .tile-object:after {
+ display: table;
+ content: "";
+}
+
+.tiles .tile .tile-object:after {
+ clear: both;
+}
+
+.tiles .tile .tile-object > .name {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ margin-bottom: 5px;
+ margin-left: 10px;
+ margin-right: 15px;
+ font-weight: 400;
+ font-size: 13px;
+ color: #ffffff;
+}
+
+.tiles .tile .tile-object > .name > i {
+ vertical-align: middle;
+ display: block;
+ font-size: 24px;
+ height: 18px;
+ width: 24px;
+}
+
+.tiles .tile .tile-object > .number {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ margin-bottom: 0;
+ color: #ffffff;
+ text-align: center;
+ font-weight: 600;
+ font-size: 14px;
+ letter-spacing: 0.01em;
+ line-height: 14px;
+ margin-bottom: 8px;
+ margin-right: 10px;
+}
+
+/***
+Custimized Bootstrap Wells
+***/
+.well {
+ background-color: #eee;
+ border: 0;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+/***
+AngularJS Basic Animations
+***/
+@-webkit-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -webkit-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -webkit-transform: translateY(0);
+ }
+}
+
+@-moz-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -moz-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -moz-transform: translateY(0);
+ }
+}
+
+@-o-keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ -o-transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ -o-transform: translateY(0);
+ }
+}
+
+@keyframes fadeInUp {
+ 0% {
+ opacity: 0;
+ transform: translateY(15px);
+ }
+ 100% {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.fade-in-up {
+ -webkit-animation: fadeInUp .5s;
+ animation: fadeInUp .5s;
+}
+
+@-webkit-keyframes bounceDelay {
+ 0%, 80%, 100% {
+ -webkit-transform: scale(0);
+ }
+ 40% {
+ -webkit-transform: scale(1);
+ }
+}
+
+@keyframes bounceDelay {
+ 0%, 80%, 100% {
+ transform: scale(0);
+ -webkit-transform: scale(0);
+ }
+ 40% {
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ }
+}
+
+/* Button */
+.btn.default {
+ color: #333333;
+ background-color: #E5E5E5;
+ border-color: "";
+}
+
+.btn.default:hover, .btn.default:focus, .btn.default:active, .btn.default.active {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.open .btn.default.dropdown-toggle {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.btn.default:active, .btn.default.active {
+ background-image: none;
+ background-color: #c6c6c6;
+}
+
+.btn.default:active:hover, .btn.default.active:hover {
+ background-color: #cccccc;
+}
+
+.open .btn.default.dropdown-toggle {
+ background-image: none;
+}
+
+.btn.default.disabled, .btn.default.disabled:hover, .btn.default.disabled:focus, .btn.default.disabled:active, .btn.default.disabled.active, .btn.default[disabled], .btn.default[disabled]:hover, .btn.default[disabled]:focus, .btn.default[disabled]:active, .btn.default[disabled].active, fieldset[disabled] .btn.default, fieldset[disabled] .btn.default:hover, fieldset[disabled] .btn.default:focus, fieldset[disabled] .btn.default:active, fieldset[disabled] .btn.default.active {
+ background-color: #E5E5E5;
+}
+
+.btn.default .badge {
+ color: #E5E5E5;
+ background-color: #333333;
+}
+
+/**********
+Blue Colors
+***********/
+/***
+Blue Default
+***/
+/* Button */
+.blue.btn {
+ color: #FFFFFF;
+ background-color: #4B8DF8;
+ border-color: "";
+}
+
+.blue.btn:hover, .blue.btn:focus, .blue.btn:active, .blue.btn.active {
+ color: #FFFFFF;
+ background-color: #2977f7;
+}
+
+.open .blue.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #2977f7;
+}
+
+.blue.btn:active, .blue.btn.active {
+ background-image: none;
+ background-color: #1068f6;
+}
+
+.blue.btn:active:hover, .blue.btn.active:hover {
+ background-color: #1a6ef6;
+}
+
+.open .blue.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue.btn.disabled, .blue.btn.disabled:hover, .blue.btn.disabled:focus, .blue.btn.disabled:active, .blue.btn.disabled.active, .blue.btn[disabled], .blue.btn[disabled]:hover, .blue.btn[disabled]:focus, .blue.btn[disabled]:active, .blue.btn[disabled].active, fieldset[disabled] .blue.btn, fieldset[disabled] .blue.btn:hover, fieldset[disabled] .blue.btn:focus, fieldset[disabled] .blue.btn:active, fieldset[disabled] .blue.btn.active {
+ background-color: #4B8DF8;
+}
+
+.blue.btn .badge {
+ color: #4B8DF8;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-stripe {
+ border-left: 3px solid #4B8DF8;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue,
+.portlet.blue {
+ background-color: #4B8DF8;
+}
+
+.portlet.solid.blue > .portlet-title,
+.portlet.solid.blue > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue {
+ border: 1px solid #7cacfa;
+ border-top: 0;
+}
+
+.portlet.box.blue > .portlet-title {
+ background-color: #4B8DF8;
+}
+
+.portlet.box.blue > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b7d1fc;
+ color: #d0e1fd;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default > i {
+ color: #deeafe;
+}
+
+.portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #e8f0fe;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue {
+ background-color: #4B8DF8;
+}
+
+.dashboard-stat.blue.dashboard-stat-light:hover {
+ background-color: #3781f7;
+}
+
+.dashboard-stat.blue .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue .more {
+ color: #FFFFFF;
+ background-color: #3781f7;
+}
+
+/* General Element */
+.bg-blue {
+ border-color: #4B8DF8 !important;
+ background-image: none !important;
+ background-color: #4B8DF8 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue {
+ color: #4B8DF8 !important;
+}
+
+/***
+Blue Madison
+***/
+/* Button */
+.blue-madison.btn {
+ color: #FFFFFF;
+ background-color: #578ebe;
+ border-color: "";
+}
+
+.blue-madison.btn:hover, .blue-madison.btn:focus, .blue-madison.btn:active, .blue-madison.btn.active {
+ color: #FFFFFF;
+ background-color: #437cae;
+}
+
+.open .blue-madison.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #437cae;
+}
+
+.blue-madison.btn:active, .blue-madison.btn.active {
+ background-image: none;
+ background-color: #3c6f9c;
+}
+
+.blue-madison.btn:active:hover, .blue-madison.btn.active:hover {
+ background-color: #3f74a3;
+}
+
+.open .blue-madison.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-madison.btn.disabled, .blue-madison.btn.disabled:hover, .blue-madison.btn.disabled:focus, .blue-madison.btn.disabled:active, .blue-madison.btn.disabled.active, .blue-madison.btn[disabled], .blue-madison.btn[disabled]:hover, .blue-madison.btn[disabled]:focus, .blue-madison.btn[disabled]:active, .blue-madison.btn[disabled].active, fieldset[disabled] .blue-madison.btn, fieldset[disabled] .blue-madison.btn:hover, fieldset[disabled] .blue-madison.btn:focus, fieldset[disabled] .blue-madison.btn:active, fieldset[disabled] .blue-madison.btn.active {
+ background-color: #578ebe;
+}
+
+.blue-madison.btn .badge {
+ color: #578ebe;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-madison-stripe {
+ border-left: 3px solid #578ebe;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-madison,
+.portlet.blue-madison {
+ background-color: #578ebe;
+}
+
+.portlet.solid.blue-madison > .portlet-title,
+.portlet.solid.blue-madison > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-madison > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-madison {
+ border: 1px solid #7ca7cc;
+ border-top: 0;
+}
+
+.portlet.box.blue-madison > .portlet-title {
+ background-color: #578ebe;
+}
+
+.portlet.box.blue-madison > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-madison > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #a8c4dd;
+ color: #bad1e4;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default > i {
+ color: #c5d8e9;
+}
+
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cdddec;
+ color: #dfeaf3;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-madison {
+ background-color: #578ebe;
+}
+
+.dashboard-stat.blue-madison.dashboard-stat-light:hover {
+ background-color: #4884b8;
+}
+
+.dashboard-stat.blue-madison .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-madison .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-madison .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-madison .more {
+ color: #FFFFFF;
+ background-color: #4884b8;
+}
+
+/* General Element */
+.bg-blue-madison {
+ border-color: #578ebe !important;
+ background-image: none !important;
+ background-color: #578ebe !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-madison {
+ color: #578ebe !important;
+}
+
+/***
+Blue Chambray
+***/
+/* Button */
+.blue-chambray.btn {
+ color: #FFFFFF;
+ background-color: #2C3E50;
+ border-color: "";
+}
+
+.blue-chambray.btn:hover, .blue-chambray.btn:focus, .blue-chambray.btn:active, .blue-chambray.btn.active {
+ color: #FFFFFF;
+ background-color: #1f2c39;
+}
+
+.open .blue-chambray.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #1f2c39;
+}
+
+.blue-chambray.btn:active, .blue-chambray.btn.active {
+ background-image: none;
+ background-color: #161f29;
+}
+
+.blue-chambray.btn:active:hover, .blue-chambray.btn.active:hover {
+ background-color: #1a242f;
+}
+
+.open .blue-chambray.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-chambray.btn.disabled, .blue-chambray.btn.disabled:hover, .blue-chambray.btn.disabled:focus, .blue-chambray.btn.disabled:active, .blue-chambray.btn.disabled.active, .blue-chambray.btn[disabled], .blue-chambray.btn[disabled]:hover, .blue-chambray.btn[disabled]:focus, .blue-chambray.btn[disabled]:active, .blue-chambray.btn[disabled].active, fieldset[disabled] .blue-chambray.btn, fieldset[disabled] .blue-chambray.btn:hover, fieldset[disabled] .blue-chambray.btn:focus, fieldset[disabled] .blue-chambray.btn:active, fieldset[disabled] .blue-chambray.btn.active {
+ background-color: #2C3E50;
+}
+
+.blue-chambray.btn .badge {
+ color: #2C3E50;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-chambray-stripe {
+ border-left: 3px solid #2C3E50;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-chambray,
+.portlet.blue-chambray {
+ background-color: #2C3E50;
+}
+
+.portlet.solid.blue-chambray > .portlet-title,
+.portlet.solid.blue-chambray > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-chambray {
+ border: 1px solid #3e5771;
+ border-top: 0;
+}
+
+.portlet.box.blue-chambray > .portlet-title {
+ background-color: #2C3E50;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #547698;
+ color: #5f83a7;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i {
+ color: #698aac;
+}
+
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #6f90b0;
+ color: #809cb9;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-chambray {
+ background-color: #2C3E50;
+}
+
+.dashboard-stat.blue-chambray.dashboard-stat-light:hover {
+ background-color: #253443;
+}
+
+.dashboard-stat.blue-chambray .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-chambray .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-chambray .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-chambray .more {
+ color: #FFFFFF;
+ background-color: #253443;
+}
+
+/* General Element */
+.bg-blue-chambray {
+ border-color: #2C3E50 !important;
+ background-image: none !important;
+ background-color: #2C3E50 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-chambray {
+ color: #2C3E50 !important;
+}
+
+/***
+Blue Ebonyclay
+***/
+/* Button */
+.blue-ebonyclay.btn {
+ color: #FFFFFF;
+ background-color: #22313F;
+ border-color: "";
+}
+
+.blue-ebonyclay.btn:hover, .blue-ebonyclay.btn:focus, .blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+ color: #FFFFFF;
+ background-color: #151f28;
+}
+
+.open .blue-ebonyclay.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #151f28;
+}
+
+.blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+ background-image: none;
+ background-color: #0d1217;
+}
+
+.blue-ebonyclay.btn:active:hover, .blue-ebonyclay.btn.active:hover {
+ background-color: #10171e;
+}
+
+.open .blue-ebonyclay.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-ebonyclay.btn.disabled, .blue-ebonyclay.btn.disabled:hover, .blue-ebonyclay.btn.disabled:focus, .blue-ebonyclay.btn.disabled:active, .blue-ebonyclay.btn.disabled.active, .blue-ebonyclay.btn[disabled], .blue-ebonyclay.btn[disabled]:hover, .blue-ebonyclay.btn[disabled]:focus, .blue-ebonyclay.btn[disabled]:active, .blue-ebonyclay.btn[disabled].active, fieldset[disabled] .blue-ebonyclay.btn, fieldset[disabled] .blue-ebonyclay.btn:hover, fieldset[disabled] .blue-ebonyclay.btn:focus, fieldset[disabled] .blue-ebonyclay.btn:active, fieldset[disabled] .blue-ebonyclay.btn.active {
+ background-color: #22313F;
+}
+
+.blue-ebonyclay.btn .badge {
+ color: #22313F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-ebonyclay-stripe {
+ border-left: 3px solid #22313F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-ebonyclay,
+.portlet.blue-ebonyclay {
+ background-color: #22313F;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title,
+.portlet.solid.blue-ebonyclay > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-ebonyclay {
+ border: 1px solid #344b60;
+ border-top: 0;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title {
+ background-color: #22313F;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #496a88;
+ color: #527798;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i {
+ color: #587ea2;
+}
+
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #5d83a7;
+ color: #6d90b0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-ebonyclay {
+ background-color: #22313F;
+}
+
+.dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover {
+ background-color: #1b2732;
+}
+
+.dashboard-stat.blue-ebonyclay .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-ebonyclay .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-ebonyclay .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-ebonyclay .more {
+ color: #FFFFFF;
+ background-color: #1b2732;
+}
+
+/* General Element */
+.bg-blue-ebonyclay {
+ border-color: #22313F !important;
+ background-image: none !important;
+ background-color: #22313F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-ebonyclay {
+ color: #22313F !important;
+}
+
+/***
+Blue Hoki
+***/
+/* Button */
+.blue-hoki.btn {
+ color: #FFFFFF;
+ background-color: #67809F;
+ border-color: "";
+}
+
+.blue-hoki.btn:hover, .blue-hoki.btn:focus, .blue-hoki.btn:active, .blue-hoki.btn.active {
+ color: #FFFFFF;
+ background-color: #586e8b;
+}
+
+.open .blue-hoki.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #586e8b;
+}
+
+.blue-hoki.btn:active, .blue-hoki.btn.active {
+ background-image: none;
+ background-color: #4e627b;
+}
+
+.blue-hoki.btn:active:hover, .blue-hoki.btn.active:hover {
+ background-color: #526781;
+}
+
+.open .blue-hoki.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-hoki.btn.disabled, .blue-hoki.btn.disabled:hover, .blue-hoki.btn.disabled:focus, .blue-hoki.btn.disabled:active, .blue-hoki.btn.disabled.active, .blue-hoki.btn[disabled], .blue-hoki.btn[disabled]:hover, .blue-hoki.btn[disabled]:focus, .blue-hoki.btn[disabled]:active, .blue-hoki.btn[disabled].active, fieldset[disabled] .blue-hoki.btn, fieldset[disabled] .blue-hoki.btn:hover, fieldset[disabled] .blue-hoki.btn:focus, fieldset[disabled] .blue-hoki.btn:active, fieldset[disabled] .blue-hoki.btn.active {
+ background-color: #67809F;
+}
+
+.blue-hoki.btn .badge {
+ color: #67809F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-hoki-stripe {
+ border-left: 3px solid #67809F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-hoki,
+.portlet.blue-hoki {
+ background-color: #67809F;
+}
+
+.portlet.solid.blue-hoki > .portlet-title,
+.portlet.solid.blue-hoki > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-hoki {
+ border: 1px solid #869ab3;
+ border-top: 0;
+}
+
+.portlet.box.blue-hoki > .portlet-title {
+ background-color: #67809F;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #acb9ca;
+ color: #bbc7d4;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i {
+ color: #c5ceda;
+}
+
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cbd4de;
+ color: #dbe1e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-hoki {
+ background-color: #67809F;
+}
+
+.dashboard-stat.blue-hoki.dashboard-stat-light:hover {
+ background-color: #5e7694;
+}
+
+.dashboard-stat.blue-hoki .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-hoki .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-hoki .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-hoki .more {
+ color: #FFFFFF;
+ background-color: #5e7694;
+}
+
+/* General Element */
+.bg-blue-hoki {
+ border-color: #67809F !important;
+ background-image: none !important;
+ background-color: #67809F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-hoki {
+ color: #67809F !important;
+}
+
+/***
+Blue Stell
+***/
+/* Button */
+.blue-steel.btn {
+ color: #FFFFFF;
+ background-color: #4B77BE;
+ border-color: "";
+}
+
+.blue-steel.btn:hover, .blue-steel.btn:focus, .blue-steel.btn:active, .blue-steel.btn.active {
+ color: #FFFFFF;
+ background-color: #3d66a8;
+}
+
+.open .blue-steel.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3d66a8;
+}
+
+.blue-steel.btn:active, .blue-steel.btn.active {
+ background-image: none;
+ background-color: #365b96;
+}
+
+.blue-steel.btn:active:hover, .blue-steel.btn.active:hover {
+ background-color: #395f9d;
+}
+
+.open .blue-steel.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-steel.btn.disabled, .blue-steel.btn.disabled:hover, .blue-steel.btn.disabled:focus, .blue-steel.btn.disabled:active, .blue-steel.btn.disabled.active, .blue-steel.btn[disabled], .blue-steel.btn[disabled]:hover, .blue-steel.btn[disabled]:focus, .blue-steel.btn[disabled]:active, .blue-steel.btn[disabled].active, fieldset[disabled] .blue-steel.btn, fieldset[disabled] .blue-steel.btn:hover, fieldset[disabled] .blue-steel.btn:focus, fieldset[disabled] .blue-steel.btn:active, fieldset[disabled] .blue-steel.btn.active {
+ background-color: #4B77BE;
+}
+
+.blue-steel.btn .badge {
+ color: #4B77BE;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-steel-stripe {
+ border-left: 3px solid #4B77BE;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-steel,
+.portlet.blue-steel {
+ background-color: #4B77BE;
+}
+
+.portlet.solid.blue-steel > .portlet-title,
+.portlet.solid.blue-steel > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-steel > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-steel {
+ border: 1px solid #7093cc;
+ border-top: 0;
+}
+
+.portlet.box.blue-steel > .portlet-title {
+ background-color: #4B77BE;
+}
+
+.portlet.box.blue-steel > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-steel > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9db5dc;
+ color: #b0c3e3;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default > i {
+ color: #bbcce7;
+}
+
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #c3d2e9;
+ color: #d6e0f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-steel {
+ background-color: #4B77BE;
+}
+
+.dashboard-stat.blue-steel.dashboard-stat-light:hover {
+ background-color: #416db4;
+}
+
+.dashboard-stat.blue-steel .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-steel .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-steel .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-steel .more {
+ color: #FFFFFF;
+ background-color: #416db4;
+}
+
+/* General Element */
+.bg-blue-steel {
+ border-color: #4B77BE !important;
+ background-image: none !important;
+ background-color: #4B77BE !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-steel {
+ color: #4B77BE !important;
+}
+
+/***
+Blue Soft
+***/
+/* Button */
+.blue-soft.btn {
+ color: #FFFFFF;
+ background-color: #4c87b9;
+ border-color: "";
+}
+
+.blue-soft.btn:hover, .blue-soft.btn:focus, .blue-soft.btn:active, .blue-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #3f75a2;
+}
+
+.open .blue-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3f75a2;
+}
+
+.blue-soft.btn:active, .blue-soft.btn.active {
+ background-image: none;
+ background-color: #386890;
+}
+
+.blue-soft.btn:active:hover, .blue-soft.btn.active:hover {
+ background-color: #3b6d97;
+}
+
+.open .blue-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-soft.btn.disabled, .blue-soft.btn.disabled:hover, .blue-soft.btn.disabled:focus, .blue-soft.btn.disabled:active, .blue-soft.btn.disabled.active, .blue-soft.btn[disabled], .blue-soft.btn[disabled]:hover, .blue-soft.btn[disabled]:focus, .blue-soft.btn[disabled]:active, .blue-soft.btn[disabled].active, fieldset[disabled] .blue-soft.btn, fieldset[disabled] .blue-soft.btn:hover, fieldset[disabled] .blue-soft.btn:focus, fieldset[disabled] .blue-soft.btn:active, fieldset[disabled] .blue-soft.btn.active {
+ background-color: #4c87b9;
+}
+
+.blue-soft.btn .badge {
+ color: #4c87b9;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-soft-stripe {
+ border-left: 3px solid #4c87b9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-soft,
+.portlet.blue-soft {
+ background-color: #4c87b9;
+}
+
+.portlet.solid.blue-soft > .portlet-title,
+.portlet.solid.blue-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-soft {
+ border: 1px solid #71a0c7;
+ border-top: 0;
+}
+
+.portlet.box.blue-soft > .portlet-title {
+ background-color: #4c87b9;
+}
+
+.portlet.box.blue-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9dbdd9;
+ color: #afc9e0;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default > i {
+ color: #bad1e4;
+}
+
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #c1d6e7;
+ color: #d4e2ee;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-soft {
+ background-color: #4c87b9;
+}
+
+.dashboard-stat.blue-soft.dashboard-stat-light:hover {
+ background-color: #447dad;
+}
+
+.dashboard-stat.blue-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-soft .more {
+ color: #FFFFFF;
+ background-color: #447dad;
+}
+
+/* General Element */
+.bg-blue-soft {
+ border-color: #4c87b9 !important;
+ background-image: none !important;
+ background-color: #4c87b9 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-soft {
+ color: #4c87b9 !important;
+}
+
+/***
+Blue Dark
+***/
+/* Button */
+.blue-dark.btn {
+ color: #FFFFFF;
+ background-color: #5e738b;
+ border-color: "";
+}
+
+.blue-dark.btn:hover, .blue-dark.btn:focus, .blue-dark.btn:active, .blue-dark.btn.active {
+ color: #FFFFFF;
+ background-color: #506176;
+}
+
+.open .blue-dark.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #506176;
+}
+
+.blue-dark.btn:active, .blue-dark.btn.active {
+ background-image: none;
+ background-color: #455566;
+}
+
+.blue-dark.btn:active:hover, .blue-dark.btn.active:hover {
+ background-color: #495a6d;
+}
+
+.open .blue-dark.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-dark.btn.disabled, .blue-dark.btn.disabled:hover, .blue-dark.btn.disabled:focus, .blue-dark.btn.disabled:active, .blue-dark.btn.disabled.active, .blue-dark.btn[disabled], .blue-dark.btn[disabled]:hover, .blue-dark.btn[disabled]:focus, .blue-dark.btn[disabled]:active, .blue-dark.btn[disabled].active, fieldset[disabled] .blue-dark.btn, fieldset[disabled] .blue-dark.btn:hover, fieldset[disabled] .blue-dark.btn:focus, fieldset[disabled] .blue-dark.btn:active, fieldset[disabled] .blue-dark.btn.active {
+ background-color: #5e738b;
+}
+
+.blue-dark.btn .badge {
+ color: #5e738b;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-dark-stripe {
+ border-left: 3px solid #5e738b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-dark,
+.portlet.blue-dark {
+ background-color: #5e738b;
+}
+
+.portlet.solid.blue-dark > .portlet-title,
+.portlet.solid.blue-dark > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-dark > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-dark {
+ border: 1px solid #788da4;
+ border-top: 0;
+}
+
+.portlet.box.blue-dark > .portlet-title {
+ background-color: #5e738b;
+}
+
+.portlet.box.blue-dark > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-dark > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9dacbd;
+ color: #acb8c7;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default > i {
+ color: #b5c0cd;
+}
+
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bbc5d1;
+ color: #cad2db;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-dark {
+ background-color: #5e738b;
+}
+
+.dashboard-stat.blue-dark.dashboard-stat-light:hover {
+ background-color: #56697f;
+}
+
+.dashboard-stat.blue-dark .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-dark .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-dark .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-dark .more {
+ color: #FFFFFF;
+ background-color: #56697f;
+}
+
+/* General Element */
+.bg-blue-dark {
+ border-color: #5e738b !important;
+ background-image: none !important;
+ background-color: #5e738b !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-dark {
+ color: #5e738b !important;
+}
+
+/***
+Blue Sharp
+***/
+/* Button */
+.blue-sharp.btn {
+ color: #FFFFFF;
+ background-color: #5C9BD1;
+ border-color: "";
+}
+
+.blue-sharp.btn:hover, .blue-sharp.btn:focus, .blue-sharp.btn:active, .blue-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #408ac9;
+}
+
+.open .blue-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #408ac9;
+}
+
+.blue-sharp.btn:active, .blue-sharp.btn.active {
+ background-image: none;
+ background-color: #357dbb;
+}
+
+.blue-sharp.btn:active:hover, .blue-sharp.btn.active:hover {
+ background-color: #3782c3;
+}
+
+.open .blue-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.blue-sharp.btn.disabled, .blue-sharp.btn.disabled:hover, .blue-sharp.btn.disabled:focus, .blue-sharp.btn.disabled:active, .blue-sharp.btn.disabled.active, .blue-sharp.btn[disabled], .blue-sharp.btn[disabled]:hover, .blue-sharp.btn[disabled]:focus, .blue-sharp.btn[disabled]:active, .blue-sharp.btn[disabled].active, fieldset[disabled] .blue-sharp.btn, fieldset[disabled] .blue-sharp.btn:hover, fieldset[disabled] .blue-sharp.btn:focus, fieldset[disabled] .blue-sharp.btn:active, fieldset[disabled] .blue-sharp.btn.active {
+ background-color: #5C9BD1;
+}
+
+.blue-sharp.btn .badge {
+ color: #5C9BD1;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-sharp-stripe {
+ border-left: 3px solid #5C9BD1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-sharp,
+.portlet.blue-sharp {
+ background-color: #5C9BD1;
+}
+
+.portlet.solid.blue-sharp > .portlet-title,
+.portlet.solid.blue-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.blue-sharp {
+ border: 1px solid #84b3dc;
+ border-top: 0;
+}
+
+.portlet.box.blue-sharp > .portlet-title {
+ background-color: #5C9BD1;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b4d1ea;
+ color: #c7ddef;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i {
+ color: #d3e4f3;
+}
+
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dbe9f5;
+ color: #eff5fb;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-sharp {
+ background-color: #5C9BD1;
+}
+
+.dashboard-stat.blue-sharp.dashboard-stat-light:hover {
+ background-color: #4c91cd;
+}
+
+.dashboard-stat.blue-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.blue-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.blue-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.blue-sharp .more {
+ color: #FFFFFF;
+ background-color: #4c91cd;
+}
+
+/* General Element */
+.bg-blue-sharp {
+ border-color: #5C9BD1 !important;
+ background-image: none !important;
+ background-color: #5C9BD1 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-sharp {
+ color: #5C9BD1 !important;
+}
+
+/***********
+Green Colors
+************/
+/***
+Green Default
+***/
+/* Button */
+.green.btn {
+ color: #FFFFFF;
+ background-color: #35aa47;
+ border-color: "";
+}
+
+.green.btn:hover, .green.btn:focus, .green.btn:active, .green.btn.active {
+ color: #FFFFFF;
+ background-color: #2d8f3c;
+}
+
+.open .green.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #2d8f3c;
+}
+
+.green.btn:active, .green.btn.active {
+ background-image: none;
+ background-color: #267b34;
+}
+
+.green.btn:active:hover, .green.btn.active:hover {
+ background-color: #298337;
+}
+
+.open .green.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green.btn.disabled, .green.btn.disabled:hover, .green.btn.disabled:focus, .green.btn.disabled:active, .green.btn.disabled.active, .green.btn[disabled], .green.btn[disabled]:hover, .green.btn[disabled]:focus, .green.btn[disabled]:active, .green.btn[disabled].active, fieldset[disabled] .green.btn, fieldset[disabled] .green.btn:hover, fieldset[disabled] .green.btn:focus, fieldset[disabled] .green.btn:active, fieldset[disabled] .green.btn.active {
+ background-color: #35aa47;
+}
+
+.green.btn .badge {
+ color: #35aa47;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-stripe {
+ border-left: 3px solid #35aa47;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green,
+.portlet.green {
+ background-color: #35aa47;
+}
+
+.portlet.solid.green > .portlet-title,
+.portlet.solid.green > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green {
+ border: 1px solid #4bc75e;
+ border-top: 0;
+}
+
+.portlet.box.green > .portlet-title {
+ background-color: #35aa47;
+}
+
+.portlet.box.green > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #7ad588;
+ color: #8ddc99;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default > i {
+ color: #99dfa4;
+}
+
+.portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #a1e2ab;
+ color: #b4e8bc;
+}
+
+/* Statistic Block */
+.dashboard-stat.green {
+ background-color: #35aa47;
+}
+
+.dashboard-stat.green.dashboard-stat-light:hover {
+ background-color: #309a41;
+}
+
+.dashboard-stat.green .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green .more {
+ color: #FFFFFF;
+ background-color: #309a41;
+}
+
+/* General Element */
+.bg-green {
+ border-color: #35aa47 !important;
+ background-image: none !important;
+ background-color: #35aa47 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green {
+ color: #35aa47 !important;
+}
+
+/***
+Green Meadow
+***/
+/* Button */
+.green-meadow.btn {
+ color: #FFFFFF;
+ background-color: #1BBC9B;
+ border-color: "";
+}
+
+.green-meadow.btn:hover, .green-meadow.btn:focus, .green-meadow.btn:active, .green-meadow.btn.active {
+ color: #FFFFFF;
+ background-color: #179d81;
+}
+
+.open .green-meadow.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #179d81;
+}
+
+.green-meadow.btn:active, .green-meadow.btn.active {
+ background-image: none;
+ background-color: #13866f;
+}
+
+.green-meadow.btn:active:hover, .green-meadow.btn.active:hover {
+ background-color: #158f76;
+}
+
+.open .green-meadow.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-meadow.btn.disabled, .green-meadow.btn.disabled:hover, .green-meadow.btn.disabled:focus, .green-meadow.btn.disabled:active, .green-meadow.btn.disabled.active, .green-meadow.btn[disabled], .green-meadow.btn[disabled]:hover, .green-meadow.btn[disabled]:focus, .green-meadow.btn[disabled]:active, .green-meadow.btn[disabled].active, fieldset[disabled] .green-meadow.btn, fieldset[disabled] .green-meadow.btn:hover, fieldset[disabled] .green-meadow.btn:focus, fieldset[disabled] .green-meadow.btn:active, fieldset[disabled] .green-meadow.btn.active {
+ background-color: #1BBC9B;
+}
+
+.green-meadow.btn .badge {
+ color: #1BBC9B;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-meadow-stripe {
+ border-left: 3px solid #1BBC9B;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-meadow,
+.portlet.green-meadow {
+ background-color: #1BBC9B;
+}
+
+.portlet.solid.green-meadow > .portlet-title,
+.portlet.solid.green-meadow > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-meadow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-meadow {
+ border: 1px solid #2ae0bb;
+ border-top: 0;
+}
+
+.portlet.box.green-meadow > .portlet-title {
+ background-color: #1BBC9B;
+}
+
+.portlet.box.green-meadow > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-meadow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #5fe8cc;
+ color: #75ebd3;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default > i {
+ color: #83edd7;
+}
+
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #8ceeda;
+ color: #a2f2e1;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-meadow {
+ background-color: #1BBC9B;
+}
+
+.dashboard-stat.green-meadow.dashboard-stat-light:hover {
+ background-color: #18aa8c;
+}
+
+.dashboard-stat.green-meadow .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-meadow .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-meadow .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-meadow .more {
+ color: #FFFFFF;
+ background-color: #18aa8c;
+}
+
+/* General Element */
+.bg-green-meadow {
+ border-color: #1BBC9B !important;
+ background-image: none !important;
+ background-color: #1BBC9B !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-meadow {
+ color: #1BBC9B !important;
+}
+
+/***
+Green Seagreen
+***/
+/* Button */
+.green-seagreen.btn {
+ color: #FFFFFF;
+ background-color: #1BA39C;
+ border-color: "";
+}
+
+.green-seagreen.btn:hover, .green-seagreen.btn:focus, .green-seagreen.btn:active, .green-seagreen.btn.active {
+ color: #FFFFFF;
+ background-color: #16847f;
+}
+
+.open .green-seagreen.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #16847f;
+}
+
+.green-seagreen.btn:active, .green-seagreen.btn.active {
+ background-image: none;
+ background-color: #126e6a;
+}
+
+.green-seagreen.btn:active:hover, .green-seagreen.btn.active:hover {
+ background-color: #147772;
+}
+
+.open .green-seagreen.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-seagreen.btn.disabled, .green-seagreen.btn.disabled:hover, .green-seagreen.btn.disabled:focus, .green-seagreen.btn.disabled:active, .green-seagreen.btn.disabled.active, .green-seagreen.btn[disabled], .green-seagreen.btn[disabled]:hover, .green-seagreen.btn[disabled]:focus, .green-seagreen.btn[disabled]:active, .green-seagreen.btn[disabled].active, fieldset[disabled] .green-seagreen.btn, fieldset[disabled] .green-seagreen.btn:hover, fieldset[disabled] .green-seagreen.btn:focus, fieldset[disabled] .green-seagreen.btn:active, fieldset[disabled] .green-seagreen.btn.active {
+ background-color: #1BA39C;
+}
+
+.green-seagreen.btn .badge {
+ color: #1BA39C;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-seagreen-stripe {
+ border-left: 3px solid #1BA39C;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-seagreen,
+.portlet.green-seagreen {
+ background-color: #1BA39C;
+}
+
+.portlet.solid.green-seagreen > .portlet-title,
+.portlet.solid.green-seagreen > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-seagreen {
+ border: 1px solid #22cfc6;
+ border-top: 0;
+}
+
+.portlet.box.green-seagreen > .portlet-title {
+ background-color: #1BA39C;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #4de1da;
+ color: #63e5de;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i {
+ color: #70e7e1;
+}
+
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #78e9e3;
+ color: #8eece8;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-seagreen {
+ background-color: #1BA39C;
+}
+
+.dashboard-stat.green-seagreen.dashboard-stat-light:hover {
+ background-color: #18918b;
+}
+
+.dashboard-stat.green-seagreen .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-seagreen .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-seagreen .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-seagreen .more {
+ color: #FFFFFF;
+ background-color: #18918b;
+}
+
+/* General Element */
+.bg-green-seagreen {
+ border-color: #1BA39C !important;
+ background-image: none !important;
+ background-color: #1BA39C !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-seagreen {
+ color: #1BA39C !important;
+}
+
+/***
+Green Turquoise
+***/
+/* Button */
+.green-turquoise.btn {
+ color: #FFFFFF;
+ background-color: #36D7B7;
+ border-color: "";
+}
+
+.green-turquoise.btn:hover, .green-turquoise.btn:focus, .green-turquoise.btn:active, .green-turquoise.btn.active {
+ color: #FFFFFF;
+ background-color: #27c3a4;
+}
+
+.open .green-turquoise.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #27c3a4;
+}
+
+.green-turquoise.btn:active, .green-turquoise.btn.active {
+ background-image: none;
+ background-color: #22ad92;
+}
+
+.green-turquoise.btn:active:hover, .green-turquoise.btn.active:hover {
+ background-color: #24b699;
+}
+
+.open .green-turquoise.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-turquoise.btn.disabled, .green-turquoise.btn.disabled:hover, .green-turquoise.btn.disabled:focus, .green-turquoise.btn.disabled:active, .green-turquoise.btn.disabled.active, .green-turquoise.btn[disabled], .green-turquoise.btn[disabled]:hover, .green-turquoise.btn[disabled]:focus, .green-turquoise.btn[disabled]:active, .green-turquoise.btn[disabled].active, fieldset[disabled] .green-turquoise.btn, fieldset[disabled] .green-turquoise.btn:hover, fieldset[disabled] .green-turquoise.btn:focus, fieldset[disabled] .green-turquoise.btn:active, fieldset[disabled] .green-turquoise.btn.active {
+ background-color: #36D7B7;
+}
+
+.green-turquoise.btn .badge {
+ color: #36D7B7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-turquoise-stripe {
+ border-left: 3px solid #36D7B7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-turquoise,
+.portlet.green-turquoise {
+ background-color: #36D7B7;
+}
+
+.portlet.solid.green-turquoise > .portlet-title,
+.portlet.solid.green-turquoise > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-turquoise {
+ border: 1px solid #61dfc6;
+ border-top: 0;
+}
+
+.portlet.box.green-turquoise > .portlet-title {
+ background-color: #36D7B7;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #94ead9;
+ color: #a9eee0;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i {
+ color: #b6f0e5;
+}
+
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bef2e8;
+ color: #d3f6ef;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-turquoise {
+ background-color: #36D7B7;
+}
+
+.dashboard-stat.green-turquoise.dashboard-stat-light:hover {
+ background-color: #29cfae;
+}
+
+.dashboard-stat.green-turquoise .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-turquoise .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-turquoise .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-turquoise .more {
+ color: #FFFFFF;
+ background-color: #29cfae;
+}
+
+/* General Element */
+.bg-green-turquoise {
+ border-color: #36D7B7 !important;
+ background-image: none !important;
+ background-color: #36D7B7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-turquoise {
+ color: #36D7B7 !important;
+}
+
+/***
+Green Haze
+***/
+/* Button */
+.green-haze.btn {
+ color: #FFFFFF;
+ background-color: #44b6ae;
+ border-color: "";
+}
+
+.green-haze.btn:hover, .green-haze.btn:focus, .green-haze.btn:active, .green-haze.btn.active {
+ color: #FFFFFF;
+ background-color: #3a9c95;
+}
+
+.open .green-haze.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #3a9c95;
+}
+
+.green-haze.btn:active, .green-haze.btn.active {
+ background-image: none;
+ background-color: #338983;
+}
+
+.green-haze.btn:active:hover, .green-haze.btn.active:hover {
+ background-color: #36918b;
+}
+
+.open .green-haze.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-haze.btn.disabled, .green-haze.btn.disabled:hover, .green-haze.btn.disabled:focus, .green-haze.btn.disabled:active, .green-haze.btn.disabled.active, .green-haze.btn[disabled], .green-haze.btn[disabled]:hover, .green-haze.btn[disabled]:focus, .green-haze.btn[disabled]:active, .green-haze.btn[disabled].active, fieldset[disabled] .green-haze.btn, fieldset[disabled] .green-haze.btn:hover, fieldset[disabled] .green-haze.btn:focus, fieldset[disabled] .green-haze.btn:active, fieldset[disabled] .green-haze.btn.active {
+ background-color: #44b6ae;
+}
+
+.green-haze.btn .badge {
+ color: #44b6ae;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-haze-stripe {
+ border-left: 3px solid #44b6ae;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-haze,
+.portlet.green-haze {
+ background-color: #44b6ae;
+}
+
+.portlet.solid.green-haze > .portlet-title,
+.portlet.solid.green-haze > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-haze > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-haze {
+ border: 1px solid #67c6bf;
+ border-top: 0;
+}
+
+.portlet.box.green-haze > .portlet-title {
+ background-color: #44b6ae;
+}
+
+.portlet.box.green-haze > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-haze > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #93d7d2;
+ color: #a6deda;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default > i {
+ color: #b1e2de;
+}
+
+.portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #b9e5e2;
+ color: #cbece9;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-haze {
+ background-color: #44b6ae;
+}
+
+.dashboard-stat.green-haze.dashboard-stat-light:hover {
+ background-color: #3ea7a0;
+}
+
+.dashboard-stat.green-haze .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-haze .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-haze .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-haze .more {
+ color: #FFFFFF;
+ background-color: #3ea7a0;
+}
+
+/* General Element */
+.bg-green-haze {
+ border-color: #44b6ae !important;
+ background-image: none !important;
+ background-color: #44b6ae !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-haze {
+ color: #44b6ae !important;
+}
+
+/***
+Green Jungle
+***/
+/* Button */
+.green-jungle.btn {
+ color: #FFFFFF;
+ background-color: #26C281;
+ border-color: "";
+}
+
+.green-jungle.btn:hover, .green-jungle.btn:focus, .green-jungle.btn:active, .green-jungle.btn.active {
+ color: #FFFFFF;
+ background-color: #20a46d;
+}
+
+.open .green-jungle.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #20a46d;
+}
+
+.green-jungle.btn:active, .green-jungle.btn.active {
+ background-image: none;
+ background-color: #1c8f5f;
+}
+
+.green-jungle.btn:active:hover, .green-jungle.btn.active:hover {
+ background-color: #1e9765;
+}
+
+.open .green-jungle.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-jungle.btn.disabled, .green-jungle.btn.disabled:hover, .green-jungle.btn.disabled:focus, .green-jungle.btn.disabled:active, .green-jungle.btn.disabled.active, .green-jungle.btn[disabled], .green-jungle.btn[disabled]:hover, .green-jungle.btn[disabled]:focus, .green-jungle.btn[disabled]:active, .green-jungle.btn[disabled].active, fieldset[disabled] .green-jungle.btn, fieldset[disabled] .green-jungle.btn:hover, fieldset[disabled] .green-jungle.btn:focus, fieldset[disabled] .green-jungle.btn:active, fieldset[disabled] .green-jungle.btn.active {
+ background-color: #26C281;
+}
+
+.green-jungle.btn .badge {
+ color: #26C281;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-jungle-stripe {
+ border-left: 3px solid #26C281;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-jungle,
+.portlet.green-jungle {
+ background-color: #26C281;
+}
+
+.portlet.solid.green-jungle > .portlet-title,
+.portlet.solid.green-jungle > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-jungle > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-jungle {
+ border: 1px solid #41da9a;
+ border-top: 0;
+}
+
+.portlet.box.green-jungle > .portlet-title {
+ background-color: #26C281;
+}
+
+.portlet.box.green-jungle > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-jungle > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #74e4b5;
+ color: #8ae8c1;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default > i {
+ color: #96ebc8;
+}
+
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #9feccc;
+ color: #b4f0d7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-jungle {
+ background-color: #26C281;
+}
+
+.dashboard-stat.green-jungle.dashboard-stat-light:hover {
+ background-color: #23b176;
+}
+
+.dashboard-stat.green-jungle .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-jungle .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-jungle .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-jungle .more {
+ color: #FFFFFF;
+ background-color: #23b176;
+}
+
+/* General Element */
+.bg-green-jungle {
+ border-color: #26C281 !important;
+ background-image: none !important;
+ background-color: #26C281 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-jungle {
+ color: #26C281 !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-sharp.btn {
+ color: #FFFFFF;
+ background-color: #4DB3A2;
+ border-color: "";
+}
+
+.green-sharp.btn:hover, .green-sharp.btn:focus, .green-sharp.btn:active, .green-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #429a8c;
+}
+
+.open .green-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #429a8c;
+}
+
+.green-sharp.btn:active, .green-sharp.btn.active {
+ background-image: none;
+ background-color: #3a897b;
+}
+
+.green-sharp.btn:active:hover, .green-sharp.btn.active:hover {
+ background-color: #3d9082;
+}
+
+.open .green-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-sharp.btn.disabled, .green-sharp.btn.disabled:hover, .green-sharp.btn.disabled:focus, .green-sharp.btn.disabled:active, .green-sharp.btn.disabled.active, .green-sharp.btn[disabled], .green-sharp.btn[disabled]:hover, .green-sharp.btn[disabled]:focus, .green-sharp.btn[disabled]:active, .green-sharp.btn[disabled].active, fieldset[disabled] .green-sharp.btn, fieldset[disabled] .green-sharp.btn:hover, fieldset[disabled] .green-sharp.btn:focus, fieldset[disabled] .green-sharp.btn:active, fieldset[disabled] .green-sharp.btn.active {
+ background-color: #4DB3A2;
+}
+
+.green-sharp.btn .badge {
+ color: #4DB3A2;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-sharp-stripe {
+ border-left: 3px solid #4DB3A2;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-sharp,
+.portlet.green-sharp {
+ background-color: #4DB3A2;
+}
+
+.portlet.solid.green-sharp > .portlet-title,
+.portlet.solid.green-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-sharp {
+ border: 1px solid #71c2b5;
+ border-top: 0;
+}
+
+.portlet.box.green-sharp > .portlet-title {
+ background-color: #4DB3A2;
+}
+
+.portlet.box.green-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #9cd5cb;
+ color: #addcd4;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default > i {
+ color: #b8e1da;
+}
+
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #bfe4de;
+ color: #d1ebe7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-sharp {
+ background-color: #4DB3A2;
+}
+
+.dashboard-stat.green-sharp.dashboard-stat-light:hover {
+ background-color: #46a595;
+}
+
+.dashboard-stat.green-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-sharp .more {
+ color: #FFFFFF;
+ background-color: #46a595;
+}
+
+/* General Element */
+.bg-green-sharp {
+ border-color: #4DB3A2 !important;
+ background-image: none !important;
+ background-color: #4DB3A2 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-sharp {
+ color: #4DB3A2 !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-soft.btn {
+ color: #FFFFFF;
+ background-color: #3faba4;
+ border-color: "";
+}
+
+.green-soft.btn:hover, .green-soft.btn:focus, .green-soft.btn:active, .green-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #35918b;
+}
+
+.open .green-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #35918b;
+}
+
+.green-soft.btn:active, .green-soft.btn.active {
+ background-image: none;
+ background-color: #2f7e79;
+}
+
+.green-soft.btn:active:hover, .green-soft.btn.active:hover {
+ background-color: #318680;
+}
+
+.open .green-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.green-soft.btn.disabled, .green-soft.btn.disabled:hover, .green-soft.btn.disabled:focus, .green-soft.btn.disabled:active, .green-soft.btn.disabled.active, .green-soft.btn[disabled], .green-soft.btn[disabled]:hover, .green-soft.btn[disabled]:focus, .green-soft.btn[disabled]:active, .green-soft.btn[disabled].active, fieldset[disabled] .green-soft.btn, fieldset[disabled] .green-soft.btn:hover, fieldset[disabled] .green-soft.btn:focus, fieldset[disabled] .green-soft.btn:active, fieldset[disabled] .green-soft.btn.active {
+ background-color: #3faba4;
+}
+
+.green-soft.btn .badge {
+ color: #3faba4;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-soft-stripe {
+ border-left: 3px solid #3faba4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-soft,
+.portlet.green-soft {
+ background-color: #3faba4;
+}
+
+.portlet.solid.green-soft > .portlet-title,
+.portlet.solid.green-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.green-soft {
+ border: 1px solid #5bc2bc;
+ border-top: 0;
+}
+
+.portlet.box.green-soft > .portlet-title {
+ background-color: #3faba4;
+}
+
+.portlet.box.green-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #87d3ce;
+ color: #9adad6;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default > i {
+ color: #a5deda;
+}
+
+.portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ade1dd;
+ color: #bfe7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-soft {
+ background-color: #3faba4;
+}
+
+.dashboard-stat.green-soft.dashboard-stat-light:hover {
+ background-color: #3a9c96;
+}
+
+.dashboard-stat.green-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.green-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.green-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.green-soft .more {
+ color: #FFFFFF;
+ background-color: #3a9c96;
+}
+
+/* General Element */
+.bg-green-soft {
+ border-color: #3faba4 !important;
+ background-image: none !important;
+ background-color: #3faba4 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-soft {
+ color: #3faba4 !important;
+}
+
+/***********
+Grey Colors
+************/
+/***
+Grey Default
+***/
+/* Button */
+.grey.btn {
+ color: #333333;
+ background-color: #E5E5E5;
+ border-color: "";
+}
+
+.grey.btn:hover, .grey.btn:focus, .grey.btn:active, .grey.btn.active {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.open .grey.btn.dropdown-toggle {
+ color: #333333;
+ background-color: lightgray;
+}
+
+.grey.btn:active, .grey.btn.active {
+ background-image: none;
+ background-color: #c6c6c6;
+}
+
+.grey.btn:active:hover, .grey.btn.active:hover {
+ background-color: #cccccc;
+}
+
+.open .grey.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey.btn.disabled, .grey.btn.disabled:hover, .grey.btn.disabled:focus, .grey.btn.disabled:active, .grey.btn.disabled.active, .grey.btn[disabled], .grey.btn[disabled]:hover, .grey.btn[disabled]:focus, .grey.btn[disabled]:active, .grey.btn[disabled].active, fieldset[disabled] .grey.btn, fieldset[disabled] .grey.btn:hover, fieldset[disabled] .grey.btn:focus, fieldset[disabled] .grey.btn:active, fieldset[disabled] .grey.btn.active {
+ background-color: #E5E5E5;
+}
+
+.grey.btn .badge {
+ color: #E5E5E5;
+ background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-stripe {
+ border-left: 3px solid #E5E5E5;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey,
+.portlet.grey {
+ background-color: #E5E5E5;
+}
+
+.portlet.solid.grey > .portlet-title,
+.portlet.solid.grey > .portlet-body {
+ border: 0;
+ color: #333333;
+}
+
+.portlet.solid.grey > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey > .portlet-title {
+ background-color: #E5E5E5;
+}
+
+.portlet.box.grey > .portlet-title > .caption {
+ color: #333333;
+}
+
+.portlet.box.grey > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey {
+ background-color: #E5E5E5;
+}
+
+.dashboard-stat.grey.dashboard-stat-light:hover {
+ background-color: #dbdbdb;
+}
+
+.dashboard-stat.grey .visual > i {
+ color: #333333;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey .details .number {
+ color: #333333;
+}
+
+.dashboard-stat.grey .details .desc {
+ color: #333333;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey .more {
+ color: #333333;
+ background-color: #dbdbdb;
+}
+
+/* General Element */
+.bg-grey {
+ border-color: #E5E5E5 !important;
+ background-image: none !important;
+ background-color: #E5E5E5 !important;
+ color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey {
+ color: #E5E5E5 !important;
+}
+
+/***
+Grey Steel
+***/
+/* Button */
+.grey-steel.btn {
+ color: #80898e;
+ background-color: #e9edef;
+ border-color: "";
+}
+
+.grey-steel.btn:hover, .grey-steel.btn:focus, .grey-steel.btn:active, .grey-steel.btn.active {
+ color: #80898e;
+ background-color: #d4dce0;
+}
+
+.open .grey-steel.btn.dropdown-toggle {
+ color: #80898e;
+ background-color: #d4dce0;
+}
+
+.grey-steel.btn:active, .grey-steel.btn.active {
+ background-image: none;
+ background-color: #c6d0d5;
+}
+
+.grey-steel.btn:active:hover, .grey-steel.btn.active:hover {
+ background-color: #cbd5da;
+}
+
+.open .grey-steel.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-steel.btn.disabled, .grey-steel.btn.disabled:hover, .grey-steel.btn.disabled:focus, .grey-steel.btn.disabled:active, .grey-steel.btn.disabled.active, .grey-steel.btn[disabled], .grey-steel.btn[disabled]:hover, .grey-steel.btn[disabled]:focus, .grey-steel.btn[disabled]:active, .grey-steel.btn[disabled].active, fieldset[disabled] .grey-steel.btn, fieldset[disabled] .grey-steel.btn:hover, fieldset[disabled] .grey-steel.btn:focus, fieldset[disabled] .grey-steel.btn:active, fieldset[disabled] .grey-steel.btn.active {
+ background-color: #e9edef;
+}
+
+.grey-steel.btn .badge {
+ color: #e9edef;
+ background-color: #80898e;
+}
+
+/* Button Strip */
+.btn.grey-steel-stripe {
+ border-left: 3px solid #e9edef;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-steel,
+.portlet.grey-steel {
+ background-color: #e9edef;
+}
+
+.portlet.solid.grey-steel > .portlet-title,
+.portlet.solid.grey-steel > .portlet-body {
+ border: 0;
+ color: #80898e;
+}
+
+.portlet.solid.grey-steel > .portlet-title > .caption > i {
+ color: #80898e;
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-steel {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey-steel > .portlet-title {
+ background-color: #e9edef;
+}
+
+.portlet.box.grey-steel > .portlet-title > .caption {
+ color: #80898e;
+}
+
+.portlet.box.grey-steel > .portlet-title > .caption > i {
+ color: #80898e;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-steel {
+ background-color: #e9edef;
+}
+
+.dashboard-stat.grey-steel.dashboard-stat-light:hover {
+ background-color: #dde3e6;
+}
+
+.dashboard-stat.grey-steel .visual > i {
+ color: #80898e;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-steel .details .number {
+ color: #80898e;
+}
+
+.dashboard-stat.grey-steel .details .desc {
+ color: #80898e;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-steel .more {
+ color: #80898e;
+ background-color: #dde3e6;
+}
+
+/* General Element */
+.bg-grey-steel {
+ border-color: #e9edef !important;
+ background-image: none !important;
+ background-color: #e9edef !important;
+ color: #80898e !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-steel {
+ color: #e9edef !important;
+}
+
+/***
+Grey Cararra
+***/
+/* Button */
+.grey-cararra.btn {
+ color: #333333;
+ background-color: #fafafa;
+ border-color: "";
+}
+
+.grey-cararra.btn:hover, .grey-cararra.btn:focus, .grey-cararra.btn:active, .grey-cararra.btn.active {
+ color: #333333;
+ background-color: #e8e8e8;
+}
+
+.open .grey-cararra.btn.dropdown-toggle {
+ color: #333333;
+ background-color: #e8e8e8;
+}
+
+.grey-cararra.btn:active, .grey-cararra.btn.active {
+ background-image: none;
+ background-color: #dbdbdb;
+}
+
+.grey-cararra.btn:active:hover, .grey-cararra.btn.active:hover {
+ background-color: #e1e1e1;
+}
+
+.open .grey-cararra.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-cararra.btn.disabled, .grey-cararra.btn.disabled:hover, .grey-cararra.btn.disabled:focus, .grey-cararra.btn.disabled:active, .grey-cararra.btn.disabled.active, .grey-cararra.btn[disabled], .grey-cararra.btn[disabled]:hover, .grey-cararra.btn[disabled]:focus, .grey-cararra.btn[disabled]:active, .grey-cararra.btn[disabled].active, fieldset[disabled] .grey-cararra.btn, fieldset[disabled] .grey-cararra.btn:hover, fieldset[disabled] .grey-cararra.btn:focus, fieldset[disabled] .grey-cararra.btn:active, fieldset[disabled] .grey-cararra.btn.active {
+ background-color: #fafafa;
+}
+
+.grey-cararra.btn .badge {
+ color: #fafafa;
+ background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-cararra-stripe {
+ border-left: 3px solid #fafafa;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cararra,
+.portlet.grey-cararra {
+ background-color: #fafafa;
+}
+
+.portlet.solid.grey-cararra > .portlet-title,
+.portlet.solid.grey-cararra > .portlet-body {
+ border: 0;
+ color: #333333;
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-cararra {
+ border: 1px solid white;
+ border-top: 0;
+}
+
+.portlet.box.grey-cararra > .portlet-title {
+ background-color: #fafafa;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .caption {
+ color: #333333;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .caption > i {
+ color: #333333;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cararra {
+ background-color: #fafafa;
+}
+
+.dashboard-stat.grey-cararra.dashboard-stat-light:hover {
+ background-color: #f0f0f0;
+}
+
+.dashboard-stat.grey-cararra .visual > i {
+ color: #333333;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-cararra .details .number {
+ color: #333333;
+}
+
+.dashboard-stat.grey-cararra .details .desc {
+ color: #333333;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-cararra .more {
+ color: #333333;
+ background-color: #f0f0f0;
+}
+
+/* General Element */
+.bg-grey-cararra {
+ border-color: #fafafa !important;
+ background-image: none !important;
+ background-color: #fafafa !important;
+ color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cararra {
+ color: #fafafa !important;
+}
+
+/***
+Grey Gallery
+***/
+/* Button */
+.grey-gallery.btn {
+ color: #ffffff;
+ background-color: #555555;
+ border-color: "";
+}
+
+.grey-gallery.btn:hover, .grey-gallery.btn:focus, .grey-gallery.btn:active, .grey-gallery.btn.active {
+ color: #ffffff;
+ background-color: #434343;
+}
+
+.open .grey-gallery.btn.dropdown-toggle {
+ color: #ffffff;
+ background-color: #434343;
+}
+
+.grey-gallery.btn:active, .grey-gallery.btn.active {
+ background-image: none;
+ background-color: #363636;
+}
+
+.grey-gallery.btn:active:hover, .grey-gallery.btn.active:hover {
+ background-color: #3b3b3b;
+}
+
+.open .grey-gallery.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-gallery.btn.disabled, .grey-gallery.btn.disabled:hover, .grey-gallery.btn.disabled:focus, .grey-gallery.btn.disabled:active, .grey-gallery.btn.disabled.active, .grey-gallery.btn[disabled], .grey-gallery.btn[disabled]:hover, .grey-gallery.btn[disabled]:focus, .grey-gallery.btn[disabled]:active, .grey-gallery.btn[disabled].active, fieldset[disabled] .grey-gallery.btn, fieldset[disabled] .grey-gallery.btn:hover, fieldset[disabled] .grey-gallery.btn:focus, fieldset[disabled] .grey-gallery.btn:active, fieldset[disabled] .grey-gallery.btn.active {
+ background-color: #555555;
+}
+
+.grey-gallery.btn .badge {
+ color: #555555;
+ background-color: #ffffff;
+}
+
+/* Button Strip */
+.btn.grey-gallery-stripe {
+ border-left: 3px solid #555555;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-gallery,
+.portlet.grey-gallery {
+ background-color: #555555;
+}
+
+.portlet.solid.grey-gallery > .portlet-title,
+.portlet.solid.grey-gallery > .portlet-body {
+ border: 0;
+ color: #ffffff;
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .caption > i {
+ color: #ffffff;
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-gallery {
+ border: 1px solid #6e6e6e;
+ border-top: 0;
+}
+
+.portlet.box.grey-gallery > .portlet-title {
+ background-color: #555555;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .caption {
+ color: #ffffff;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .caption > i {
+ color: #ffffff;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #8d8d8d;
+ color: #9a9a9a;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i {
+ color: #a2a2a2;
+}
+
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #a7a7a7;
+ color: #b3b3b3;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-gallery {
+ background-color: #555555;
+}
+
+.dashboard-stat.grey-gallery.dashboard-stat-light:hover {
+ background-color: #4b4b4b;
+}
+
+.dashboard-stat.grey-gallery .visual > i {
+ color: #ffffff;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-gallery .details .number {
+ color: #ffffff;
+}
+
+.dashboard-stat.grey-gallery .details .desc {
+ color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-gallery .more {
+ color: #ffffff;
+ background-color: #4b4b4b;
+}
+
+/* General Element */
+.bg-grey-gallery {
+ border-color: #555555 !important;
+ background-image: none !important;
+ background-color: #555555 !important;
+ color: #ffffff !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-gallery {
+ color: #555555 !important;
+}
+
+/***
+Grey Cascade
+***/
+/* Button */
+.grey-cascade.btn {
+ color: #FFFFFF;
+ background-color: #95A5A6;
+ border-color: "";
+}
+
+.grey-cascade.btn:hover, .grey-cascade.btn:focus, .grey-cascade.btn:active, .grey-cascade.btn.active {
+ color: #FFFFFF;
+ background-color: #829596;
+}
+
+.open .grey-cascade.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #829596;
+}
+
+.grey-cascade.btn:active, .grey-cascade.btn.active {
+ background-image: none;
+ background-color: #74898a;
+}
+
+.grey-cascade.btn:active:hover, .grey-cascade.btn.active:hover {
+ background-color: #798d8f;
+}
+
+.open .grey-cascade.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-cascade.btn.disabled, .grey-cascade.btn.disabled:hover, .grey-cascade.btn.disabled:focus, .grey-cascade.btn.disabled:active, .grey-cascade.btn.disabled.active, .grey-cascade.btn[disabled], .grey-cascade.btn[disabled]:hover, .grey-cascade.btn[disabled]:focus, .grey-cascade.btn[disabled]:active, .grey-cascade.btn[disabled].active, fieldset[disabled] .grey-cascade.btn, fieldset[disabled] .grey-cascade.btn:hover, fieldset[disabled] .grey-cascade.btn:focus, fieldset[disabled] .grey-cascade.btn:active, fieldset[disabled] .grey-cascade.btn.active {
+ background-color: #95A5A6;
+}
+
+.grey-cascade.btn .badge {
+ color: #95A5A6;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.grey-cascade-stripe {
+ border-left: 3px solid #95A5A6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cascade,
+.portlet.grey-cascade {
+ background-color: #95A5A6;
+}
+
+.portlet.solid.grey-cascade > .portlet-title,
+.portlet.solid.grey-cascade > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-cascade {
+ border: 1px solid #b1bdbd;
+ border-top: 0;
+}
+
+.portlet.box.grey-cascade > .portlet-title {
+ background-color: #95A5A6;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #d2d9d9;
+ color: #e0e5e5;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i {
+ color: #e8ecec;
+}
+
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #eef0f0;
+ color: #fcfcfc;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cascade {
+ background-color: #95A5A6;
+}
+
+.dashboard-stat.grey-cascade.dashboard-stat-light:hover {
+ background-color: #8a9c9d;
+}
+
+.dashboard-stat.grey-cascade .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-cascade .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.grey-cascade .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-cascade .more {
+ color: #FFFFFF;
+ background-color: #8a9c9d;
+}
+
+/* General Element */
+.bg-grey-cascade {
+ border-color: #95A5A6 !important;
+ background-image: none !important;
+ background-color: #95A5A6 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cascade {
+ color: #95A5A6 !important;
+}
+
+/***
+Grey Silver
+***/
+/* Button */
+.grey-silver.btn {
+ color: #FAFCFB;
+ background-color: #BFBFBF;
+ border-color: "";
+}
+
+.grey-silver.btn:hover, .grey-silver.btn:focus, .grey-silver.btn:active, .grey-silver.btn.active {
+ color: #FAFCFB;
+ background-color: #adadad;
+}
+
+.open .grey-silver.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #adadad;
+}
+
+.grey-silver.btn:active, .grey-silver.btn.active {
+ background-image: none;
+ background-color: #a0a0a0;
+}
+
+.grey-silver.btn:active:hover, .grey-silver.btn.active:hover {
+ background-color: #a6a6a6;
+}
+
+.open .grey-silver.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-silver.btn.disabled, .grey-silver.btn.disabled:hover, .grey-silver.btn.disabled:focus, .grey-silver.btn.disabled:active, .grey-silver.btn.disabled.active, .grey-silver.btn[disabled], .grey-silver.btn[disabled]:hover, .grey-silver.btn[disabled]:focus, .grey-silver.btn[disabled]:active, .grey-silver.btn[disabled].active, fieldset[disabled] .grey-silver.btn, fieldset[disabled] .grey-silver.btn:hover, fieldset[disabled] .grey-silver.btn:focus, fieldset[disabled] .grey-silver.btn:active, fieldset[disabled] .grey-silver.btn.active {
+ background-color: #BFBFBF;
+}
+
+.grey-silver.btn .badge {
+ color: #BFBFBF;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-silver-stripe {
+ border-left: 3px solid #BFBFBF;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-silver,
+.portlet.grey-silver {
+ background-color: #BFBFBF;
+}
+
+.portlet.solid.grey-silver > .portlet-title,
+.portlet.solid.grey-silver > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-silver > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-silver {
+ border: 1px solid #d9d9d9;
+ border-top: 0;
+}
+
+.portlet.box.grey-silver > .portlet-title {
+ background-color: #BFBFBF;
+}
+
+.portlet.box.grey-silver > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-silver > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f7f7f7;
+ color: white;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-silver {
+ background-color: #BFBFBF;
+}
+
+.dashboard-stat.grey-silver.dashboard-stat-light:hover {
+ background-color: #b5b5b5;
+}
+
+.dashboard-stat.grey-silver .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-silver .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-silver .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-silver .more {
+ color: #FAFCFB;
+ background-color: #b5b5b5;
+}
+
+/* General Element */
+.bg-grey-silver {
+ border-color: #BFBFBF !important;
+ background-image: none !important;
+ background-color: #BFBFBF !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-silver {
+ color: #BFBFBF !important;
+}
+
+/***
+Grey Salsa
+***/
+/* Button */
+.grey-salsa.btn {
+ color: #FAFCFB;
+ background-color: #ACB5C3;
+ border-color: "";
+}
+
+.grey-salsa.btn:hover, .grey-salsa.btn:focus, .grey-salsa.btn:active, .grey-salsa.btn.active {
+ color: #FAFCFB;
+ background-color: #97a3b4;
+}
+
+.open .grey-salsa.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #97a3b4;
+}
+
+.grey-salsa.btn:active, .grey-salsa.btn.active {
+ background-image: none;
+ background-color: #8895a9;
+}
+
+.grey-salsa.btn:active:hover, .grey-salsa.btn.active:hover {
+ background-color: #8e9bae;
+}
+
+.open .grey-salsa.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-salsa.btn.disabled, .grey-salsa.btn.disabled:hover, .grey-salsa.btn.disabled:focus, .grey-salsa.btn.disabled:active, .grey-salsa.btn.disabled.active, .grey-salsa.btn[disabled], .grey-salsa.btn[disabled]:hover, .grey-salsa.btn[disabled]:focus, .grey-salsa.btn[disabled]:active, .grey-salsa.btn[disabled].active, fieldset[disabled] .grey-salsa.btn, fieldset[disabled] .grey-salsa.btn:hover, fieldset[disabled] .grey-salsa.btn:focus, fieldset[disabled] .grey-salsa.btn:active, fieldset[disabled] .grey-salsa.btn.active {
+ background-color: #ACB5C3;
+}
+
+.grey-salsa.btn .badge {
+ color: #ACB5C3;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salsa-stripe {
+ border-left: 3px solid #ACB5C3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salsa,
+.portlet.grey-salsa {
+ background-color: #ACB5C3;
+}
+
+.portlet.solid.grey-salsa > .portlet-title,
+.portlet.solid.grey-salsa > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-salsa {
+ border: 1px solid #cacfd8;
+ border-top: 0;
+}
+
+.portlet.box.grey-salsa > .portlet-title {
+ background-color: #ACB5C3;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #edeff2;
+ color: #fcfcfd;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salsa {
+ background-color: #ACB5C3;
+}
+
+.dashboard-stat.grey-salsa.dashboard-stat-light:hover {
+ background-color: #a0aaba;
+}
+
+.dashboard-stat.grey-salsa .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-salsa .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-salsa .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-salsa .more {
+ color: #FAFCFB;
+ background-color: #a0aaba;
+}
+
+/* General Element */
+.bg-grey-salsa {
+ border-color: #ACB5C3 !important;
+ background-image: none !important;
+ background-color: #ACB5C3 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salsa {
+ color: #ACB5C3 !important;
+}
+
+/***
+Grey Salt
+***/
+/* Button */
+.grey-salt.btn {
+ color: #FAFCFB;
+ background-color: #bfcad1;
+ border-color: "";
+}
+
+.grey-salt.btn:hover, .grey-salt.btn:focus, .grey-salt.btn:active, .grey-salt.btn.active {
+ color: #FAFCFB;
+ background-color: #aab9c2;
+}
+
+.open .grey-salt.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #aab9c2;
+}
+
+.grey-salt.btn:active, .grey-salt.btn.active {
+ background-image: none;
+ background-color: #9badb7;
+}
+
+.grey-salt.btn:active:hover, .grey-salt.btn.active:hover {
+ background-color: #a1b1bc;
+}
+
+.open .grey-salt.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-salt.btn.disabled, .grey-salt.btn.disabled:hover, .grey-salt.btn.disabled:focus, .grey-salt.btn.disabled:active, .grey-salt.btn.disabled.active, .grey-salt.btn[disabled], .grey-salt.btn[disabled]:hover, .grey-salt.btn[disabled]:focus, .grey-salt.btn[disabled]:active, .grey-salt.btn[disabled].active, fieldset[disabled] .grey-salt.btn, fieldset[disabled] .grey-salt.btn:hover, fieldset[disabled] .grey-salt.btn:focus, fieldset[disabled] .grey-salt.btn:active, fieldset[disabled] .grey-salt.btn.active {
+ background-color: #bfcad1;
+}
+
+.grey-salt.btn .badge {
+ color: #bfcad1;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salt-stripe {
+ border-left: 3px solid #bfcad1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salt,
+.portlet.grey-salt {
+ background-color: #bfcad1;
+}
+
+.portlet.solid.grey-salt > .portlet-title,
+.portlet.solid.grey-salt > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salt > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-salt {
+ border: 1px solid #dde3e6;
+ border-top: 0;
+}
+
+.portlet.box.grey-salt > .portlet-title {
+ background-color: #bfcad1;
+}
+
+.portlet.box.grey-salt > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salt > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid white;
+ color: white;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default > i {
+ color: white;
+}
+
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salt {
+ background-color: #bfcad1;
+}
+
+.dashboard-stat.grey-salt.dashboard-stat-light:hover {
+ background-color: #b3c0c8;
+}
+
+.dashboard-stat.grey-salt .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-salt .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-salt .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-salt .more {
+ color: #FAFCFB;
+ background-color: #b3c0c8;
+}
+
+/* General Element */
+.bg-grey-salt {
+ border-color: #bfcad1 !important;
+ background-image: none !important;
+ background-color: #bfcad1 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salt {
+ color: #bfcad1 !important;
+}
+
+/***
+Grey Mint
+***/
+/* Button */
+.grey-mint.btn {
+ color: #FAFCFB;
+ background-color: #9eacb4;
+ border-color: "";
+}
+
+.grey-mint.btn:hover, .grey-mint.btn:focus, .grey-mint.btn:active, .grey-mint.btn.active {
+ color: #FAFCFB;
+ background-color: #8a9ba4;
+}
+
+.open .grey-mint.btn.dropdown-toggle {
+ color: #FAFCFB;
+ background-color: #8a9ba4;
+}
+
+.grey-mint.btn:active, .grey-mint.btn.active {
+ background-image: none;
+ background-color: #7b8e99;
+}
+
+.grey-mint.btn:active:hover, .grey-mint.btn.active:hover {
+ background-color: #81939e;
+}
+
+.open .grey-mint.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.grey-mint.btn.disabled, .grey-mint.btn.disabled:hover, .grey-mint.btn.disabled:focus, .grey-mint.btn.disabled:active, .grey-mint.btn.disabled.active, .grey-mint.btn[disabled], .grey-mint.btn[disabled]:hover, .grey-mint.btn[disabled]:focus, .grey-mint.btn[disabled]:active, .grey-mint.btn[disabled].active, fieldset[disabled] .grey-mint.btn, fieldset[disabled] .grey-mint.btn:hover, fieldset[disabled] .grey-mint.btn:focus, fieldset[disabled] .grey-mint.btn:active, fieldset[disabled] .grey-mint.btn.active {
+ background-color: #9eacb4;
+}
+
+.grey-mint.btn .badge {
+ color: #9eacb4;
+ background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-mint-stripe {
+ border-left: 3px solid #9eacb4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-mint,
+.portlet.grey-mint {
+ background-color: #9eacb4;
+}
+
+.portlet.solid.grey-mint > .portlet-title,
+.portlet.solid.grey-mint > .portlet-body {
+ border: 0;
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-mint > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.grey-mint {
+ border: 1px solid #bbc5ca;
+ border-top: 0;
+}
+
+.portlet.box.grey-mint > .portlet-title {
+ background-color: #9eacb4;
+}
+
+.portlet.box.grey-mint > .portlet-title > .caption {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-mint > .portlet-title > .caption > i {
+ color: #FAFCFB;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #dde2e5;
+ color: #eceef0;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default > i {
+ color: #f4f6f7;
+}
+
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fafbfb;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-mint {
+ background-color: #9eacb4;
+}
+
+.dashboard-stat.grey-mint.dashboard-stat-light:hover {
+ background-color: #92a2ab;
+}
+
+.dashboard-stat.grey-mint .visual > i {
+ color: #FAFCFB;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.grey-mint .details .number {
+ color: #FAFCFB;
+}
+
+.dashboard-stat.grey-mint .details .desc {
+ color: #FAFCFB;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.grey-mint .more {
+ color: #FAFCFB;
+ background-color: #92a2ab;
+}
+
+/* General Element */
+.bg-grey-mint {
+ border-color: #9eacb4 !important;
+ background-image: none !important;
+ background-color: #9eacb4 !important;
+ color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-mint {
+ color: #9eacb4 !important;
+}
+
+/***********
+Red Colors
+************/
+/***
+Red Default
+***/
+/* Button */
+.red.btn {
+ color: #FFFFFF;
+ background-color: #d84a38;
+ border-color: "";
+}
+
+.red.btn:hover, .red.btn:focus, .red.btn:active, .red.btn.active {
+ color: #FFFFFF;
+ background-color: #c63927;
+}
+
+.open .red.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c63927;
+}
+
+.red.btn:active, .red.btn.active {
+ background-image: none;
+ background-color: #b03223;
+}
+
+.red.btn:active:hover, .red.btn.active:hover {
+ background-color: #b93524;
+}
+
+.open .red.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red.btn.disabled, .red.btn.disabled:hover, .red.btn.disabled:focus, .red.btn.disabled:active, .red.btn.disabled.active, .red.btn[disabled], .red.btn[disabled]:hover, .red.btn[disabled]:focus, .red.btn[disabled]:active, .red.btn[disabled].active, fieldset[disabled] .red.btn, fieldset[disabled] .red.btn:hover, fieldset[disabled] .red.btn:focus, fieldset[disabled] .red.btn:active, fieldset[disabled] .red.btn.active {
+ background-color: #d84a38;
+}
+
+.red.btn .badge {
+ color: #d84a38;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-stripe {
+ border-left: 3px solid #d84a38;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red,
+.portlet.red {
+ background-color: #d84a38;
+}
+
+.portlet.solid.red > .portlet-title,
+.portlet.solid.red > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red {
+ border: 1px solid #e07163;
+ border-top: 0;
+}
+
+.portlet.box.red > .portlet-title {
+ background-color: #d84a38;
+}
+
+.portlet.box.red > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ea9f96;
+ color: #efb3ab;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default > i {
+ color: #f1beb8;
+}
+
+.portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f3c6c0;
+ color: #f7dad6;
+}
+
+/* Statistic Block */
+.dashboard-stat.red {
+ background-color: #d84a38;
+}
+
+.dashboard-stat.red.dashboard-stat-light:hover {
+ background-color: #d23c29;
+}
+
+.dashboard-stat.red .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red .more {
+ color: #FFFFFF;
+ background-color: #d23c29;
+}
+
+/* General Element */
+.bg-red {
+ border-color: #d84a38 !important;
+ background-image: none !important;
+ background-color: #d84a38 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red {
+ color: #d84a38 !important;
+}
+
+/***
+Red Pink
+***/
+/* Button */
+.red-pink.btn {
+ color: #FFFFFF;
+ background-color: #E08283;
+ border-color: "";
+}
+
+.red-pink.btn:hover, .red-pink.btn:focus, .red-pink.btn:active, .red-pink.btn.active {
+ color: #FFFFFF;
+ background-color: #d96567;
+}
+
+.open .red-pink.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #d96567;
+}
+
+.red-pink.btn:active, .red-pink.btn.active {
+ background-image: none;
+ background-color: #d45152;
+}
+
+.red-pink.btn:active:hover, .red-pink.btn.active:hover {
+ background-color: #d6595a;
+}
+
+.open .red-pink.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-pink.btn.disabled, .red-pink.btn.disabled:hover, .red-pink.btn.disabled:focus, .red-pink.btn.disabled:active, .red-pink.btn.disabled.active, .red-pink.btn[disabled], .red-pink.btn[disabled]:hover, .red-pink.btn[disabled]:focus, .red-pink.btn[disabled]:active, .red-pink.btn[disabled].active, fieldset[disabled] .red-pink.btn, fieldset[disabled] .red-pink.btn:hover, fieldset[disabled] .red-pink.btn:focus, fieldset[disabled] .red-pink.btn:active, fieldset[disabled] .red-pink.btn.active {
+ background-color: #E08283;
+}
+
+.red-pink.btn .badge {
+ color: #E08283;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-pink-stripe {
+ border-left: 3px solid #E08283;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-pink,
+.portlet.red-pink {
+ background-color: #E08283;
+}
+
+.portlet.solid.red-pink > .portlet-title,
+.portlet.solid.red-pink > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-pink > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-pink {
+ border: 1px solid #eaabac;
+ border-top: 0;
+}
+
+.portlet.box.red-pink > .portlet-title {
+ background-color: #E08283;
+}
+
+.portlet.box.red-pink > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-pink > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f6dcdc;
+ color: #fbf0f0;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default > i {
+ color: #fefdfd;
+}
+
+.portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active {
+ border: 1px solid white;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-pink {
+ background-color: #E08283;
+}
+
+.dashboard-stat.red-pink.dashboard-stat-light:hover {
+ background-color: #dc7273;
+}
+
+.dashboard-stat.red-pink .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-pink .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-pink .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-pink .more {
+ color: #FFFFFF;
+ background-color: #dc7273;
+}
+
+/* General Element */
+.bg-red-pink {
+ border-color: #E08283 !important;
+ background-image: none !important;
+ background-color: #E08283 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-pink {
+ color: #E08283 !important;
+}
+
+/***
+Red Sunglo
+***/
+/* Button */
+.red-sunglo.btn {
+ color: #FFFFFF;
+ background-color: #E26A6A;
+ border-color: "";
+}
+
+.red-sunglo.btn:hover, .red-sunglo.btn:focus, .red-sunglo.btn:active, .red-sunglo.btn.active {
+ color: #FFFFFF;
+ background-color: #dc4c4c;
+}
+
+.open .red-sunglo.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #dc4c4c;
+}
+
+.red-sunglo.btn:active, .red-sunglo.btn.active {
+ background-image: none;
+ background-color: #d83737;
+}
+
+.red-sunglo.btn:active:hover, .red-sunglo.btn.active:hover {
+ background-color: #da3f3f;
+}
+
+.open .red-sunglo.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-sunglo.btn.disabled, .red-sunglo.btn.disabled:hover, .red-sunglo.btn.disabled:focus, .red-sunglo.btn.disabled:active, .red-sunglo.btn.disabled.active, .red-sunglo.btn[disabled], .red-sunglo.btn[disabled]:hover, .red-sunglo.btn[disabled]:focus, .red-sunglo.btn[disabled]:active, .red-sunglo.btn[disabled].active, fieldset[disabled] .red-sunglo.btn, fieldset[disabled] .red-sunglo.btn:hover, fieldset[disabled] .red-sunglo.btn:focus, fieldset[disabled] .red-sunglo.btn:active, fieldset[disabled] .red-sunglo.btn.active {
+ background-color: #E26A6A;
+}
+
+.red-sunglo.btn .badge {
+ color: #E26A6A;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-sunglo-stripe {
+ border-left: 3px solid #E26A6A;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-sunglo,
+.portlet.red-sunglo {
+ background-color: #E26A6A;
+}
+
+.portlet.solid.red-sunglo > .portlet-title,
+.portlet.solid.red-sunglo > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-sunglo {
+ border: 1px solid #ea9595;
+ border-top: 0;
+}
+
+.portlet.box.red-sunglo > .portlet-title {
+ background-color: #E26A6A;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f4c8c8;
+ color: #f8dddd;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i {
+ color: #fbeaea;
+}
+
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdf3f3;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-sunglo {
+ background-color: #E26A6A;
+}
+
+.dashboard-stat.red-sunglo.dashboard-stat-light:hover {
+ background-color: #df5959;
+}
+
+.dashboard-stat.red-sunglo .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-sunglo .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-sunglo .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-sunglo .more {
+ color: #FFFFFF;
+ background-color: #df5959;
+}
+
+/* General Element */
+.bg-red-sunglo {
+ border-color: #E26A6A !important;
+ background-image: none !important;
+ background-color: #E26A6A !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-sunglo {
+ color: #E26A6A !important;
+}
+
+/***
+Red Intense
+***/
+/* Button */
+.red-intense.btn {
+ color: #FFFFFF;
+ background-color: #e35b5a;
+ border-color: "";
+}
+
+.red-intense.btn:hover, .red-intense.btn:focus, .red-intense.btn:active, .red-intense.btn.active {
+ color: #FFFFFF;
+ background-color: #de3d3b;
+}
+
+.open .red-intense.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #de3d3b;
+}
+
+.red-intense.btn:active, .red-intense.btn.active {
+ background-image: none;
+ background-color: #da2726;
+}
+
+.red-intense.btn:active:hover, .red-intense.btn.active:hover {
+ background-color: #dc302e;
+}
+
+.open .red-intense.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-intense.btn.disabled, .red-intense.btn.disabled:hover, .red-intense.btn.disabled:focus, .red-intense.btn.disabled:active, .red-intense.btn.disabled.active, .red-intense.btn[disabled], .red-intense.btn[disabled]:hover, .red-intense.btn[disabled]:focus, .red-intense.btn[disabled]:active, .red-intense.btn[disabled].active, fieldset[disabled] .red-intense.btn, fieldset[disabled] .red-intense.btn:hover, fieldset[disabled] .red-intense.btn:focus, fieldset[disabled] .red-intense.btn:active, fieldset[disabled] .red-intense.btn.active {
+ background-color: #e35b5a;
+}
+
+.red-intense.btn .badge {
+ color: #e35b5a;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-intense-stripe {
+ border-left: 3px solid #e35b5a;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-intense,
+.portlet.red-intense {
+ background-color: #e35b5a;
+}
+
+.portlet.solid.red-intense > .portlet-title,
+.portlet.solid.red-intense > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-intense {
+ border: 1px solid #ea8686;
+ border-top: 0;
+}
+
+.portlet.box.red-intense > .portlet-title {
+ background-color: #e35b5a;
+}
+
+.portlet.box.red-intense > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f3baba;
+ color: #f7d0d0;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default > i {
+ color: #f9dddd;
+}
+
+.portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fbe6e6;
+ color: #fefbfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-intense {
+ background-color: #e35b5a;
+}
+
+.dashboard-stat.red-intense.dashboard-stat-light:hover {
+ background-color: #e04a49;
+}
+
+.dashboard-stat.red-intense .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-intense .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-intense .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-intense .more {
+ color: #FFFFFF;
+ background-color: #e04a49;
+}
+
+/* General Element */
+.bg-red-intense {
+ border-color: #e35b5a !important;
+ background-image: none !important;
+ background-color: #e35b5a !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-intense {
+ color: #e35b5a !important;
+}
+
+/***
+Red Thunderbird
+***/
+/* Button */
+.red-thunderbird.btn {
+ color: #FFFFFF;
+ background-color: #D91E18;
+ border-color: "";
+}
+
+.red-thunderbird.btn:hover, .red-thunderbird.btn:focus, .red-thunderbird.btn:active, .red-thunderbird.btn.active {
+ color: #FFFFFF;
+ background-color: #b91a14;
+}
+
+.open .red-thunderbird.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #b91a14;
+}
+
+.red-thunderbird.btn:active, .red-thunderbird.btn.active {
+ background-image: none;
+ background-color: #a21612;
+}
+
+.red-thunderbird.btn:active:hover, .red-thunderbird.btn.active:hover {
+ background-color: #ab1813;
+}
+
+.open .red-thunderbird.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-thunderbird.btn.disabled, .red-thunderbird.btn.disabled:hover, .red-thunderbird.btn.disabled:focus, .red-thunderbird.btn.disabled:active, .red-thunderbird.btn.disabled.active, .red-thunderbird.btn[disabled], .red-thunderbird.btn[disabled]:hover, .red-thunderbird.btn[disabled]:focus, .red-thunderbird.btn[disabled]:active, .red-thunderbird.btn[disabled].active, fieldset[disabled] .red-thunderbird.btn, fieldset[disabled] .red-thunderbird.btn:hover, fieldset[disabled] .red-thunderbird.btn:focus, fieldset[disabled] .red-thunderbird.btn:active, fieldset[disabled] .red-thunderbird.btn.active {
+ background-color: #D91E18;
+}
+
+.red-thunderbird.btn .badge {
+ color: #D91E18;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-thunderbird-stripe {
+ border-left: 3px solid #D91E18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-thunderbird,
+.portlet.red-thunderbird {
+ background-color: #D91E18;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title,
+.portlet.solid.red-thunderbird > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-thunderbird {
+ border: 1px solid #e9403b;
+ border-top: 0;
+}
+
+.portlet.box.red-thunderbird > .portlet-title {
+ background-color: #D91E18;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ef7672;
+ color: #f28c89;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i {
+ color: #f39997;
+}
+
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f4a2a0;
+ color: #f7b9b7;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-thunderbird {
+ background-color: #D91E18;
+}
+
+.dashboard-stat.red-thunderbird.dashboard-stat-light:hover {
+ background-color: #c71b16;
+}
+
+.dashboard-stat.red-thunderbird .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-thunderbird .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-thunderbird .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-thunderbird .more {
+ color: #FFFFFF;
+ background-color: #c71b16;
+}
+
+/* General Element */
+.bg-red-thunderbird {
+ border-color: #D91E18 !important;
+ background-image: none !important;
+ background-color: #D91E18 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-thunderbird {
+ color: #D91E18 !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-flamingo.btn {
+ color: #FFFFFF;
+ background-color: #EF4836;
+ border-color: "";
+}
+
+.red-flamingo.btn:hover, .red-flamingo.btn:focus, .red-flamingo.btn:active, .red-flamingo.btn.active {
+ color: #FFFFFF;
+ background-color: #ec2a15;
+}
+
+.open .red-flamingo.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #ec2a15;
+}
+
+.red-flamingo.btn:active, .red-flamingo.btn.active {
+ background-image: none;
+ background-color: #d72411;
+}
+
+.red-flamingo.btn:active:hover, .red-flamingo.btn.active:hover {
+ background-color: #e02612;
+}
+
+.open .red-flamingo.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-flamingo.btn.disabled, .red-flamingo.btn.disabled:hover, .red-flamingo.btn.disabled:focus, .red-flamingo.btn.disabled:active, .red-flamingo.btn.disabled.active, .red-flamingo.btn[disabled], .red-flamingo.btn[disabled]:hover, .red-flamingo.btn[disabled]:focus, .red-flamingo.btn[disabled]:active, .red-flamingo.btn[disabled].active, fieldset[disabled] .red-flamingo.btn, fieldset[disabled] .red-flamingo.btn:hover, fieldset[disabled] .red-flamingo.btn:focus, fieldset[disabled] .red-flamingo.btn:active, fieldset[disabled] .red-flamingo.btn.active {
+ background-color: #EF4836;
+}
+
+.red-flamingo.btn .badge {
+ color: #EF4836;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-flamingo-stripe {
+ border-left: 3px solid #EF4836;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-flamingo,
+.portlet.red-flamingo {
+ background-color: #EF4836;
+}
+
+.portlet.solid.red-flamingo > .portlet-title,
+.portlet.solid.red-flamingo > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-flamingo {
+ border: 1px solid #f37365;
+ border-top: 0;
+}
+
+.portlet.box.red-flamingo > .portlet-title {
+ background-color: #EF4836;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #f7a79e;
+ color: #f9bcb6;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i {
+ color: #fac9c4;
+}
+
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fbd2cd;
+ color: #fde7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-flamingo {
+ background-color: #EF4836;
+}
+
+.dashboard-stat.red-flamingo.dashboard-stat-light:hover {
+ background-color: #ed3723;
+}
+
+.dashboard-stat.red-flamingo .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-flamingo .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-flamingo .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-flamingo .more {
+ color: #FFFFFF;
+ background-color: #ed3723;
+}
+
+/* General Element */
+.bg-red-flamingo {
+ border-color: #EF4836 !important;
+ background-image: none !important;
+ background-color: #EF4836 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-flamingo {
+ color: #EF4836 !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-soft.btn {
+ color: #FFFFFF;
+ background-color: #d05454;
+ border-color: "";
+}
+
+.red-soft.btn:hover, .red-soft.btn:focus, .red-soft.btn:active, .red-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #c83838;
+}
+
+.open .red-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c83838;
+}
+
+.red-soft.btn:active, .red-soft.btn.active {
+ background-image: none;
+ background-color: #b53232;
+}
+
+.red-soft.btn:active:hover, .red-soft.btn.active:hover {
+ background-color: #bd3434;
+}
+
+.open .red-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.red-soft.btn.disabled, .red-soft.btn.disabled:hover, .red-soft.btn.disabled:focus, .red-soft.btn.disabled:active, .red-soft.btn.disabled.active, .red-soft.btn[disabled], .red-soft.btn[disabled]:hover, .red-soft.btn[disabled]:focus, .red-soft.btn[disabled]:active, .red-soft.btn[disabled].active, fieldset[disabled] .red-soft.btn, fieldset[disabled] .red-soft.btn:hover, fieldset[disabled] .red-soft.btn:focus, fieldset[disabled] .red-soft.btn:active, fieldset[disabled] .red-soft.btn.active {
+ background-color: #d05454;
+}
+
+.red-soft.btn .badge {
+ color: #d05454;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-soft-stripe {
+ border-left: 3px solid #d05454;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-soft,
+.portlet.red-soft {
+ background-color: #d05454;
+}
+
+.portlet.solid.red-soft > .portlet-title,
+.portlet.solid.red-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.red-soft {
+ border: 1px solid #db7c7c;
+ border-top: 0;
+}
+
+.portlet.box.red-soft > .portlet-title {
+ background-color: #d05454;
+}
+
+.portlet.box.red-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #e8acac;
+ color: #eec0c0;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default > i {
+ color: #f1cccc;
+}
+
+.portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f3d4d4;
+ color: #f9e8e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-soft {
+ background-color: #d05454;
+}
+
+.dashboard-stat.red-soft.dashboard-stat-light:hover {
+ background-color: #cc4444;
+}
+
+.dashboard-stat.red-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.red-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.red-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.red-soft .more {
+ color: #FFFFFF;
+ background-color: #cc4444;
+}
+
+/* General Element */
+.bg-red-soft {
+ border-color: #d05454 !important;
+ background-image: none !important;
+ background-color: #d05454 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-soft {
+ color: #d05454 !important;
+}
+
+/***********
+Yellow Colors
+************/
+/***
+Yellow Default
+***/
+/* Button */
+.yellow.btn {
+ color: #FFFFFF;
+ background-color: #FFB848;
+ border-color: "";
+}
+
+.yellow.btn:hover, .yellow.btn:focus, .yellow.btn:active, .yellow.btn.active {
+ color: #FFFFFF;
+ background-color: #ffaa24;
+}
+
+.open .yellow.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #ffaa24;
+}
+
+.yellow.btn:active, .yellow.btn.active {
+ background-image: none;
+ background-color: #ffa00b;
+}
+
+.yellow.btn:active:hover, .yellow.btn.active:hover {
+ background-color: #ffa415;
+}
+
+.open .yellow.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow.btn.disabled, .yellow.btn.disabled:hover, .yellow.btn.disabled:focus, .yellow.btn.disabled:active, .yellow.btn.disabled.active, .yellow.btn[disabled], .yellow.btn[disabled]:hover, .yellow.btn[disabled]:focus, .yellow.btn[disabled]:active, .yellow.btn[disabled].active, fieldset[disabled] .yellow.btn, fieldset[disabled] .yellow.btn:hover, fieldset[disabled] .yellow.btn:focus, fieldset[disabled] .yellow.btn:active, fieldset[disabled] .yellow.btn.active {
+ background-color: #FFB848;
+}
+
+.yellow.btn .badge {
+ color: #FFB848;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-stripe {
+ border-left: 3px solid #FFB848;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow,
+.portlet.yellow {
+ background-color: #FFB848;
+}
+
+.portlet.solid.yellow > .portlet-title,
+.portlet.solid.yellow > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow {
+ border: 1px solid #ffcc7b;
+ border-top: 0;
+}
+
+.portlet.box.yellow > .portlet-title {
+ background-color: #FFB848;
+}
+
+.portlet.box.yellow > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ffe4b8;
+ color: #ffedd2;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default > i {
+ color: #fff3e1;
+}
+
+.portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fff7eb;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow {
+ background-color: #FFB848;
+}
+
+.dashboard-stat.yellow.dashboard-stat-light:hover {
+ background-color: #ffb034;
+}
+
+.dashboard-stat.yellow .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow .more {
+ color: #FFFFFF;
+ background-color: #ffb034;
+}
+
+/* General Element */
+.bg-yellow {
+ border-color: #FFB848 !important;
+ background-image: none !important;
+ background-color: #FFB848 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow {
+ color: #FFB848 !important;
+}
+
+/***
+Yellow Gold
+***/
+/* Button */
+.yellow-gold.btn {
+ color: #FFFFFF;
+ background-color: #E87E04;
+ border-color: "";
+}
+
+.yellow-gold.btn:hover, .yellow-gold.btn:focus, .yellow-gold.btn:active, .yellow-gold.btn.active {
+ color: #FFFFFF;
+ background-color: #c56b03;
+}
+
+.open .yellow-gold.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #c56b03;
+}
+
+.yellow-gold.btn:active, .yellow-gold.btn.active {
+ background-image: none;
+ background-color: #ac5d03;
+}
+
+.yellow-gold.btn:active:hover, .yellow-gold.btn.active:hover {
+ background-color: #b66303;
+}
+
+.open .yellow-gold.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-gold.btn.disabled, .yellow-gold.btn.disabled:hover, .yellow-gold.btn.disabled:focus, .yellow-gold.btn.disabled:active, .yellow-gold.btn.disabled.active, .yellow-gold.btn[disabled], .yellow-gold.btn[disabled]:hover, .yellow-gold.btn[disabled]:focus, .yellow-gold.btn[disabled]:active, .yellow-gold.btn[disabled].active, fieldset[disabled] .yellow-gold.btn, fieldset[disabled] .yellow-gold.btn:hover, fieldset[disabled] .yellow-gold.btn:focus, fieldset[disabled] .yellow-gold.btn:active, fieldset[disabled] .yellow-gold.btn.active {
+ background-color: #E87E04;
+}
+
+.yellow-gold.btn .badge {
+ color: #E87E04;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-gold-stripe {
+ border-left: 3px solid #E87E04;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-gold,
+.portlet.yellow-gold {
+ background-color: #E87E04;
+}
+
+.portlet.solid.yellow-gold > .portlet-title,
+.portlet.solid.yellow-gold > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-gold {
+ border: 1px solid #fb9724;
+ border-top: 0;
+}
+
+.portlet.box.yellow-gold > .portlet-title {
+ background-color: #E87E04;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fcb460;
+ color: #fdbf79;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i {
+ color: #fdc788;
+}
+
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdcb92;
+ color: #fed7ab;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-gold {
+ background-color: #E87E04;
+}
+
+.dashboard-stat.yellow-gold.dashboard-stat-light:hover {
+ background-color: #d47304;
+}
+
+.dashboard-stat.yellow-gold .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-gold .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-gold .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-gold .more {
+ color: #FFFFFF;
+ background-color: #d47304;
+}
+
+/* General Element */
+.bg-yellow-gold {
+ border-color: #E87E04 !important;
+ background-image: none !important;
+ background-color: #E87E04 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-gold {
+ color: #E87E04 !important;
+}
+
+/***
+Yellow Casablanca
+***/
+/* Button */
+.yellow-casablanca.btn {
+ color: #FFFFFF;
+ background-color: #f2784b;
+ border-color: "";
+}
+
+.yellow-casablanca.btn:hover, .yellow-casablanca.btn:focus, .yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+ color: #FFFFFF;
+ background-color: #f05f2a;
+}
+
+.open .yellow-casablanca.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #f05f2a;
+}
+
+.yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+ background-image: none;
+ background-color: #ee4d12;
+}
+
+.yellow-casablanca.btn:active:hover, .yellow-casablanca.btn.active:hover {
+ background-color: #ef541b;
+}
+
+.open .yellow-casablanca.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-casablanca.btn.disabled, .yellow-casablanca.btn.disabled:hover, .yellow-casablanca.btn.disabled:focus, .yellow-casablanca.btn.disabled:active, .yellow-casablanca.btn.disabled.active, .yellow-casablanca.btn[disabled], .yellow-casablanca.btn[disabled]:hover, .yellow-casablanca.btn[disabled]:focus, .yellow-casablanca.btn[disabled]:active, .yellow-casablanca.btn[disabled].active, fieldset[disabled] .yellow-casablanca.btn, fieldset[disabled] .yellow-casablanca.btn:hover, fieldset[disabled] .yellow-casablanca.btn:focus, fieldset[disabled] .yellow-casablanca.btn:active, fieldset[disabled] .yellow-casablanca.btn.active {
+ background-color: #f2784b;
+}
+
+.yellow-casablanca.btn .badge {
+ color: #f2784b;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-casablanca-stripe {
+ border-left: 3px solid #f2784b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-casablanca,
+.portlet.yellow-casablanca {
+ background-color: #f2784b;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title,
+.portlet.solid.yellow-casablanca > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-casablanca {
+ border: 1px solid #f59c7b;
+ border-top: 0;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title {
+ background-color: #f2784b;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fac6b4;
+ color: #fbd8cb;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i {
+ color: #fce3da;
+}
+
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdeae3;
+ color: #fffcfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-casablanca {
+ background-color: #f2784b;
+}
+
+.dashboard-stat.yellow-casablanca.dashboard-stat-light:hover {
+ background-color: #f16a38;
+}
+
+.dashboard-stat.yellow-casablanca .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-casablanca .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-casablanca .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-casablanca .more {
+ color: #FFFFFF;
+ background-color: #f16a38;
+}
+
+/* General Element */
+.bg-yellow-casablanca {
+ border-color: #f2784b !important;
+ background-image: none !important;
+ background-color: #f2784b !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-casablanca {
+ color: #f2784b !important;
+}
+
+/***
+Yellow Crusta
+***/
+/* Button */
+.yellow-crusta.btn {
+ color: #FFFFFF;
+ background-color: #f3c200;
+ border-color: "";
+}
+
+.yellow-crusta.btn:hover, .yellow-crusta.btn:focus, .yellow-crusta.btn:active, .yellow-crusta.btn.active {
+ color: #FFFFFF;
+ background-color: #cfa500;
+}
+
+.open .yellow-crusta.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #cfa500;
+}
+
+.yellow-crusta.btn:active, .yellow-crusta.btn.active {
+ background-image: none;
+ background-color: #b69100;
+}
+
+.yellow-crusta.btn:active:hover, .yellow-crusta.btn.active:hover {
+ background-color: #c09900;
+}
+
+.open .yellow-crusta.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-crusta.btn.disabled, .yellow-crusta.btn.disabled:hover, .yellow-crusta.btn.disabled:focus, .yellow-crusta.btn.disabled:active, .yellow-crusta.btn.disabled.active, .yellow-crusta.btn[disabled], .yellow-crusta.btn[disabled]:hover, .yellow-crusta.btn[disabled]:focus, .yellow-crusta.btn[disabled]:active, .yellow-crusta.btn[disabled].active, fieldset[disabled] .yellow-crusta.btn, fieldset[disabled] .yellow-crusta.btn:hover, fieldset[disabled] .yellow-crusta.btn:focus, fieldset[disabled] .yellow-crusta.btn:active, fieldset[disabled] .yellow-crusta.btn.active {
+ background-color: #f3c200;
+}
+
+.yellow-crusta.btn .badge {
+ color: #f3c200;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-crusta-stripe {
+ border-left: 3px solid #f3c200;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-crusta,
+.portlet.yellow-crusta {
+ background-color: #f3c200;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title,
+.portlet.solid.yellow-crusta > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-crusta {
+ border: 1px solid #ffd327;
+ border-top: 0;
+}
+
+.portlet.box.yellow-crusta > .portlet-title {
+ background-color: #f3c200;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #ffe064;
+ color: #ffe57e;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i {
+ color: #ffe88d;
+}
+
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ffea97;
+ color: #ffefb1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-crusta {
+ background-color: #f3c200;
+}
+
+.dashboard-stat.yellow-crusta.dashboard-stat-light:hover {
+ background-color: #dfb200;
+}
+
+.dashboard-stat.yellow-crusta .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-crusta .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-crusta .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-crusta .more {
+ color: #FFFFFF;
+ background-color: #dfb200;
+}
+
+/* General Element */
+.bg-yellow-crusta {
+ border-color: #f3c200 !important;
+ background-image: none !important;
+ background-color: #f3c200 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-crusta {
+ color: #f3c200 !important;
+}
+
+/***
+Yellow Lemon
+***/
+/* Button */
+.yellow-lemon.btn {
+ color: #FFFFFF;
+ background-color: #F7CA18;
+ border-color: "";
+}
+
+.yellow-lemon.btn:hover, .yellow-lemon.btn:focus, .yellow-lemon.btn:active, .yellow-lemon.btn.active {
+ color: #FFFFFF;
+ background-color: #e3b708;
+}
+
+.open .yellow-lemon.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #e3b708;
+}
+
+.yellow-lemon.btn:active, .yellow-lemon.btn.active {
+ background-image: none;
+ background-color: #cba307;
+}
+
+.yellow-lemon.btn:active:hover, .yellow-lemon.btn.active:hover {
+ background-color: #d5ab07;
+}
+
+.open .yellow-lemon.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-lemon.btn.disabled, .yellow-lemon.btn.disabled:hover, .yellow-lemon.btn.disabled:focus, .yellow-lemon.btn.disabled:active, .yellow-lemon.btn.disabled.active, .yellow-lemon.btn[disabled], .yellow-lemon.btn[disabled]:hover, .yellow-lemon.btn[disabled]:focus, .yellow-lemon.btn[disabled]:active, .yellow-lemon.btn[disabled].active, fieldset[disabled] .yellow-lemon.btn, fieldset[disabled] .yellow-lemon.btn:hover, fieldset[disabled] .yellow-lemon.btn:focus, fieldset[disabled] .yellow-lemon.btn:active, fieldset[disabled] .yellow-lemon.btn.active {
+ background-color: #F7CA18;
+}
+
+.yellow-lemon.btn .badge {
+ color: #F7CA18;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-lemon-stripe {
+ border-left: 3px solid #F7CA18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-lemon,
+.portlet.yellow-lemon {
+ background-color: #F7CA18;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title,
+.portlet.solid.yellow-lemon > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-lemon {
+ border: 1px solid #f9d549;
+ border-top: 0;
+}
+
+.portlet.box.yellow-lemon > .portlet-title {
+ background-color: #F7CA18;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #fbe384;
+ color: #fce99d;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i {
+ color: #fcecac;
+}
+
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fceeb6;
+ color: #fdf4ce;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-lemon {
+ background-color: #F7CA18;
+}
+
+.dashboard-stat.yellow-lemon.dashboard-stat-light:hover {
+ background-color: #f2c308;
+}
+
+.dashboard-stat.yellow-lemon .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-lemon .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-lemon .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-lemon .more {
+ color: #FFFFFF;
+ background-color: #f2c308;
+}
+
+/* General Element */
+.bg-yellow-lemon {
+ border-color: #F7CA18 !important;
+ background-image: none !important;
+ background-color: #F7CA18 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-lemon {
+ color: #F7CA18 !important;
+}
+
+/***
+Yellow Saffron
+***/
+/* Button */
+.yellow-saffron.btn {
+ color: #FFFFFF;
+ background-color: #F4D03F;
+ border-color: "";
+}
+
+.yellow-saffron.btn:hover, .yellow-saffron.btn:focus, .yellow-saffron.btn:active, .yellow-saffron.btn.active {
+ color: #FFFFFF;
+ background-color: #f2c81d;
+}
+
+.open .yellow-saffron.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #f2c81d;
+}
+
+.yellow-saffron.btn:active, .yellow-saffron.btn.active {
+ background-image: none;
+ background-color: #e8bd0d;
+}
+
+.yellow-saffron.btn:active:hover, .yellow-saffron.btn.active:hover {
+ background-color: #f1c40f;
+}
+
+.open .yellow-saffron.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.yellow-saffron.btn.disabled, .yellow-saffron.btn.disabled:hover, .yellow-saffron.btn.disabled:focus, .yellow-saffron.btn.disabled:active, .yellow-saffron.btn.disabled.active, .yellow-saffron.btn[disabled], .yellow-saffron.btn[disabled]:hover, .yellow-saffron.btn[disabled]:focus, .yellow-saffron.btn[disabled]:active, .yellow-saffron.btn[disabled].active, fieldset[disabled] .yellow-saffron.btn, fieldset[disabled] .yellow-saffron.btn:hover, fieldset[disabled] .yellow-saffron.btn:focus, fieldset[disabled] .yellow-saffron.btn:active, fieldset[disabled] .yellow-saffron.btn.active {
+ background-color: #F4D03F;
+}
+
+.yellow-saffron.btn .badge {
+ color: #F4D03F;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-saffron-stripe {
+ border-left: 3px solid #F4D03F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-saffron,
+.portlet.yellow-saffron {
+ background-color: #F4D03F;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title,
+.portlet.solid.yellow-saffron > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.yellow-saffron {
+ border: 1px solid #f7dc6f;
+ border-top: 0;
+}
+
+.portlet.box.yellow-saffron > .portlet-title {
+ background-color: #F4D03F;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #faeaa9;
+ color: #fbf0c1;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i {
+ color: #fcf3d0;
+}
+
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #fdf6d9;
+ color: #fefcf1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-saffron {
+ background-color: #F4D03F;
+}
+
+.dashboard-stat.yellow-saffron.dashboard-stat-light:hover {
+ background-color: #f3cb2c;
+}
+
+.dashboard-stat.yellow-saffron .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.yellow-saffron .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.yellow-saffron .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.yellow-saffron .more {
+ color: #FFFFFF;
+ background-color: #f3cb2c;
+}
+
+/* General Element */
+.bg-yellow-saffron {
+ border-color: #F4D03F !important;
+ background-image: none !important;
+ background-color: #F4D03F !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-saffron {
+ color: #F4D03F !important;
+}
+
+/***********
+Purple Colors
+************/
+/***
+Purple Default
+***/
+/* Button */
+.purple.btn {
+ color: #FFFFFF;
+ background-color: #8E44AD;
+ border-color: "";
+}
+
+.purple.btn:hover, .purple.btn:focus, .purple.btn:active, .purple.btn.active {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.open .purple.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.purple.btn:active, .purple.btn.active {
+ background-image: none;
+ background-color: #6a3381;
+}
+
+.purple.btn:active:hover, .purple.btn.active:hover {
+ background-color: #703688;
+}
+
+.open .purple.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple.btn.disabled, .purple.btn.disabled:hover, .purple.btn.disabled:focus, .purple.btn.disabled:active, .purple.btn.disabled.active, .purple.btn[disabled], .purple.btn[disabled]:hover, .purple.btn[disabled]:focus, .purple.btn[disabled]:active, .purple.btn[disabled].active, fieldset[disabled] .purple.btn, fieldset[disabled] .purple.btn:hover, fieldset[disabled] .purple.btn:focus, fieldset[disabled] .purple.btn:active, fieldset[disabled] .purple.btn.active {
+ background-color: #8E44AD;
+}
+
+.purple.btn .badge {
+ color: #8E44AD;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-stripe {
+ border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple,
+.portlet.purple {
+ background-color: #8E44AD;
+}
+
+.portlet.solid.purple > .portlet-title,
+.portlet.solid.purple > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple {
+ border: 1px solid #a563c1;
+ border-top: 0;
+}
+
+.portlet.box.purple > .portlet-title {
+ background-color: #8E44AD;
+}
+
+.portlet.box.purple > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #bf8ed3;
+ color: #c9a1da;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default > i {
+ color: #cfacde;
+}
+
+.portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #d4b3e1;
+ color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple {
+ background-color: #8E44AD;
+}
+
+.dashboard-stat.purple.dashboard-stat-light:hover {
+ background-color: #823e9e;
+}
+
+.dashboard-stat.purple .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple .more {
+ color: #FFFFFF;
+ background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple {
+ border-color: #8E44AD !important;
+ background-image: none !important;
+ background-color: #8E44AD !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple {
+ color: #8E44AD !important;
+}
+
+/***
+Purple Plum
+***/
+/* Button */
+.purple-plum.btn {
+ color: #FFFFFF;
+ background-color: #8775a7;
+ border-color: "";
+}
+
+.purple-plum.btn:hover, .purple-plum.btn:focus, .purple-plum.btn:active, .purple-plum.btn.active {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.open .purple-plum.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.purple-plum.btn:active, .purple-plum.btn.active {
+ background-image: none;
+ background-color: #685788;
+}
+
+.purple-plum.btn:active:hover, .purple-plum.btn.active:hover {
+ background-color: #6d5b8e;
+}
+
+.open .purple-plum.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-plum.btn.disabled, .purple-plum.btn.disabled:hover, .purple-plum.btn.disabled:focus, .purple-plum.btn.disabled:active, .purple-plum.btn.disabled.active, .purple-plum.btn[disabled], .purple-plum.btn[disabled]:hover, .purple-plum.btn[disabled]:focus, .purple-plum.btn[disabled]:active, .purple-plum.btn[disabled].active, fieldset[disabled] .purple-plum.btn, fieldset[disabled] .purple-plum.btn:hover, fieldset[disabled] .purple-plum.btn:focus, fieldset[disabled] .purple-plum.btn:active, fieldset[disabled] .purple-plum.btn.active {
+ background-color: #8775a7;
+}
+
+.purple-plum.btn .badge {
+ color: #8775a7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-plum-stripe {
+ border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-plum,
+.portlet.purple-plum {
+ background-color: #8775a7;
+}
+
+.portlet.solid.purple-plum > .portlet-title,
+.portlet.solid.purple-plum > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-plum > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-plum {
+ border: 1px solid #a294bb;
+ border-top: 0;
+}
+
+.portlet.box.purple-plum > .portlet-title {
+ background-color: #8775a7;
+}
+
+.portlet.box.purple-plum > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-plum > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c3bad3;
+ color: #d0c9dd;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default > i {
+ color: #d8d2e3;
+}
+
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ded9e7;
+ color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-plum {
+ background-color: #8775a7;
+}
+
+.dashboard-stat.purple-plum.dashboard-stat-light:hover {
+ background-color: #7c699f;
+}
+
+.dashboard-stat.purple-plum .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-plum .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-plum .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-plum .more {
+ color: #FFFFFF;
+ background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-plum {
+ border-color: #8775a7 !important;
+ background-image: none !important;
+ background-color: #8775a7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-plum {
+ color: #8775a7 !important;
+}
+
+/***
+Purple Medium
+***/
+/* Button */
+.purple-medium.btn {
+ color: #FFFFFF;
+ background-color: #BF55EC;
+ border-color: "";
+}
+
+.purple-medium.btn:hover, .purple-medium.btn:focus, .purple-medium.btn:active, .purple-medium.btn.active {
+ color: #FFFFFF;
+ background-color: #b335e8;
+}
+
+.open .purple-medium.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #b335e8;
+}
+
+.purple-medium.btn:active, .purple-medium.btn.active {
+ background-image: none;
+ background-color: #aa1ee6;
+}
+
+.purple-medium.btn:active:hover, .purple-medium.btn.active:hover {
+ background-color: #ae27e7;
+}
+
+.open .purple-medium.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-medium.btn.disabled, .purple-medium.btn.disabled:hover, .purple-medium.btn.disabled:focus, .purple-medium.btn.disabled:active, .purple-medium.btn.disabled.active, .purple-medium.btn[disabled], .purple-medium.btn[disabled]:hover, .purple-medium.btn[disabled]:focus, .purple-medium.btn[disabled]:active, .purple-medium.btn[disabled].active, fieldset[disabled] .purple-medium.btn, fieldset[disabled] .purple-medium.btn:hover, fieldset[disabled] .purple-medium.btn:focus, fieldset[disabled] .purple-medium.btn:active, fieldset[disabled] .purple-medium.btn.active {
+ background-color: #BF55EC;
+}
+
+.purple-medium.btn .badge {
+ color: #BF55EC;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-medium-stripe {
+ border-left: 3px solid #BF55EC;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-medium,
+.portlet.purple-medium {
+ background-color: #BF55EC;
+}
+
+.portlet.solid.purple-medium > .portlet-title,
+.portlet.solid.purple-medium > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-medium > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-medium {
+ border: 1px solid #d083f1;
+ border-top: 0;
+}
+
+.portlet.box.purple-medium > .portlet-title {
+ background-color: #BF55EC;
+}
+
+.portlet.box.purple-medium > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-medium > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #e5baf7;
+ color: #eed1fa;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default > i {
+ color: #f3dffb;
+}
+
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #f6e8fc;
+ color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-medium {
+ background-color: #BF55EC;
+}
+
+.dashboard-stat.purple-medium.dashboard-stat-light:hover {
+ background-color: #b843ea;
+}
+
+.dashboard-stat.purple-medium .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-medium .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-medium .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-medium .more {
+ color: #FFFFFF;
+ background-color: #b843ea;
+}
+
+/* General Element */
+.bg-purple-medium {
+ border-color: #BF55EC !important;
+ background-image: none !important;
+ background-color: #BF55EC !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-medium {
+ color: #BF55EC !important;
+}
+
+/***
+Purple Studio
+***/
+/* Button */
+.purple-studio.btn {
+ color: #FFFFFF;
+ background-color: #8E44AD;
+ border-color: "";
+}
+
+.purple-studio.btn:hover, .purple-studio.btn:focus, .purple-studio.btn:active, .purple-studio.btn.active {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.open .purple-studio.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #793a93;
+}
+
+.purple-studio.btn:active, .purple-studio.btn.active {
+ background-image: none;
+ background-color: #6a3381;
+}
+
+.purple-studio.btn:active:hover, .purple-studio.btn.active:hover {
+ background-color: #703688;
+}
+
+.open .purple-studio.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-studio.btn.disabled, .purple-studio.btn.disabled:hover, .purple-studio.btn.disabled:focus, .purple-studio.btn.disabled:active, .purple-studio.btn.disabled.active, .purple-studio.btn[disabled], .purple-studio.btn[disabled]:hover, .purple-studio.btn[disabled]:focus, .purple-studio.btn[disabled]:active, .purple-studio.btn[disabled].active, fieldset[disabled] .purple-studio.btn, fieldset[disabled] .purple-studio.btn:hover, fieldset[disabled] .purple-studio.btn:focus, fieldset[disabled] .purple-studio.btn:active, fieldset[disabled] .purple-studio.btn.active {
+ background-color: #8E44AD;
+}
+
+.purple-studio.btn .badge {
+ color: #8E44AD;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-studio-stripe {
+ border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-studio,
+.portlet.purple-studio {
+ background-color: #8E44AD;
+}
+
+.portlet.solid.purple-studio > .portlet-title,
+.portlet.solid.purple-studio > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-studio > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-studio {
+ border: 1px solid #a563c1;
+ border-top: 0;
+}
+
+.portlet.box.purple-studio > .portlet-title {
+ background-color: #8E44AD;
+}
+
+.portlet.box.purple-studio > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-studio > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #bf8ed3;
+ color: #c9a1da;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default > i {
+ color: #cfacde;
+}
+
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #d4b3e1;
+ color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-studio {
+ background-color: #8E44AD;
+}
+
+.dashboard-stat.purple-studio.dashboard-stat-light:hover {
+ background-color: #823e9e;
+}
+
+.dashboard-stat.purple-studio .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-studio .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-studio .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-studio .more {
+ color: #FFFFFF;
+ background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple-studio {
+ border-color: #8E44AD !important;
+ background-image: none !important;
+ background-color: #8E44AD !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-studio {
+ color: #8E44AD !important;
+}
+
+/***
+Purple Wisteria
+***/
+/* Button */
+.purple-wisteria.btn {
+ color: #FFFFFF;
+ background-color: #9B59B6;
+ border-color: "";
+}
+
+.purple-wisteria.btn:hover, .purple-wisteria.btn:focus, .purple-wisteria.btn:active, .purple-wisteria.btn.active {
+ color: #FFFFFF;
+ background-color: #8948a3;
+}
+
+.open .purple-wisteria.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #8948a3;
+}
+
+.purple-wisteria.btn:active, .purple-wisteria.btn.active {
+ background-image: none;
+ background-color: #7a4092;
+}
+
+.purple-wisteria.btn:active:hover, .purple-wisteria.btn.active:hover {
+ background-color: #804399;
+}
+
+.open .purple-wisteria.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-wisteria.btn.disabled, .purple-wisteria.btn.disabled:hover, .purple-wisteria.btn.disabled:focus, .purple-wisteria.btn.disabled:active, .purple-wisteria.btn.disabled.active, .purple-wisteria.btn[disabled], .purple-wisteria.btn[disabled]:hover, .purple-wisteria.btn[disabled]:focus, .purple-wisteria.btn[disabled]:active, .purple-wisteria.btn[disabled].active, fieldset[disabled] .purple-wisteria.btn, fieldset[disabled] .purple-wisteria.btn:hover, fieldset[disabled] .purple-wisteria.btn:focus, fieldset[disabled] .purple-wisteria.btn:active, fieldset[disabled] .purple-wisteria.btn.active {
+ background-color: #9B59B6;
+}
+
+.purple-wisteria.btn .badge {
+ color: #9B59B6;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-wisteria-stripe {
+ border-left: 3px solid #9B59B6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-wisteria,
+.portlet.purple-wisteria {
+ background-color: #9B59B6;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title,
+.portlet.solid.purple-wisteria > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-wisteria {
+ border: 1px solid #b07cc6;
+ border-top: 0;
+}
+
+.portlet.box.purple-wisteria > .portlet-title {
+ background-color: #9B59B6;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #caa7d8;
+ color: #d5b9e0;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i {
+ color: #dbc3e5;
+}
+
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dfcae8;
+ color: #eadcf0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-wisteria {
+ background-color: #9B59B6;
+}
+
+.dashboard-stat.purple-wisteria.dashboard-stat-light:hover {
+ background-color: #924dae;
+}
+
+.dashboard-stat.purple-wisteria .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-wisteria .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-wisteria .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-wisteria .more {
+ color: #FFFFFF;
+ background-color: #924dae;
+}
+
+/* General Element */
+.bg-purple-wisteria {
+ border-color: #9B59B6 !important;
+ background-image: none !important;
+ background-color: #9B59B6 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-wisteria {
+ color: #9B59B6 !important;
+}
+
+/***
+Purple Seance
+***/
+/* Button */
+.purple-seance.btn {
+ color: #FFFFFF;
+ background-color: #9A12B3;
+ border-color: "";
+}
+
+.purple-seance.btn:hover, .purple-seance.btn:focus, .purple-seance.btn:active, .purple-seance.btn.active {
+ color: #FFFFFF;
+ background-color: #7e0f93;
+}
+
+.open .purple-seance.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #7e0f93;
+}
+
+.purple-seance.btn:active, .purple-seance.btn.active {
+ background-image: none;
+ background-color: #6a0c7b;
+}
+
+.purple-seance.btn:active:hover, .purple-seance.btn.active:hover {
+ background-color: #720d85;
+}
+
+.open .purple-seance.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-seance.btn.disabled, .purple-seance.btn.disabled:hover, .purple-seance.btn.disabled:focus, .purple-seance.btn.disabled:active, .purple-seance.btn.disabled.active, .purple-seance.btn[disabled], .purple-seance.btn[disabled]:hover, .purple-seance.btn[disabled]:focus, .purple-seance.btn[disabled]:active, .purple-seance.btn[disabled].active, fieldset[disabled] .purple-seance.btn, fieldset[disabled] .purple-seance.btn:hover, fieldset[disabled] .purple-seance.btn:focus, fieldset[disabled] .purple-seance.btn:active, fieldset[disabled] .purple-seance.btn.active {
+ background-color: #9A12B3;
+}
+
+.purple-seance.btn .badge {
+ color: #9A12B3;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-seance-stripe {
+ border-left: 3px solid #9A12B3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-seance,
+.portlet.purple-seance {
+ background-color: #9A12B3;
+}
+
+.portlet.solid.purple-seance > .portlet-title,
+.portlet.solid.purple-seance > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-seance > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-seance {
+ border: 1px solid #c217e1;
+ border-top: 0;
+}
+
+.portlet.box.purple-seance > .portlet-title {
+ background-color: #9A12B3;
+}
+
+.portlet.box.purple-seance > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-seance > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #d349ed;
+ color: #d960ef;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default > i {
+ color: #dc6ef0;
+}
+
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #de77f1;
+ color: #e48ef4;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-seance {
+ background-color: #9A12B3;
+}
+
+.dashboard-stat.purple-seance.dashboard-stat-light:hover {
+ background-color: #8a10a0;
+}
+
+.dashboard-stat.purple-seance .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-seance .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-seance .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-seance .more {
+ color: #FFFFFF;
+ background-color: #8a10a0;
+}
+
+/* General Element */
+.bg-purple-seance {
+ border-color: #9A12B3 !important;
+ background-image: none !important;
+ background-color: #9A12B3 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-seance {
+ color: #9A12B3 !important;
+}
+
+/***
+Purple Intense
+***/
+/* Button */
+.purple-intense.btn {
+ color: #FFFFFF;
+ background-color: #8775a7;
+ border-color: "";
+}
+
+.purple-intense.btn:hover, .purple-intense.btn:focus, .purple-intense.btn:active, .purple-intense.btn.active {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.open .purple-intense.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #746198;
+}
+
+.purple-intense.btn:active, .purple-intense.btn.active {
+ background-image: none;
+ background-color: #685788;
+}
+
+.purple-intense.btn:active:hover, .purple-intense.btn.active:hover {
+ background-color: #6d5b8e;
+}
+
+.open .purple-intense.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-intense.btn.disabled, .purple-intense.btn.disabled:hover, .purple-intense.btn.disabled:focus, .purple-intense.btn.disabled:active, .purple-intense.btn.disabled.active, .purple-intense.btn[disabled], .purple-intense.btn[disabled]:hover, .purple-intense.btn[disabled]:focus, .purple-intense.btn[disabled]:active, .purple-intense.btn[disabled].active, fieldset[disabled] .purple-intense.btn, fieldset[disabled] .purple-intense.btn:hover, fieldset[disabled] .purple-intense.btn:focus, fieldset[disabled] .purple-intense.btn:active, fieldset[disabled] .purple-intense.btn.active {
+ background-color: #8775a7;
+}
+
+.purple-intense.btn .badge {
+ color: #8775a7;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-intense-stripe {
+ border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-intense,
+.portlet.purple-intense {
+ background-color: #8775a7;
+}
+
+.portlet.solid.purple-intense > .portlet-title,
+.portlet.solid.purple-intense > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-intense {
+ border: 1px solid #a294bb;
+ border-top: 0;
+}
+
+.portlet.box.purple-intense > .portlet-title {
+ background-color: #8775a7;
+}
+
+.portlet.box.purple-intense > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-intense > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c3bad3;
+ color: #d0c9dd;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default > i {
+ color: #d8d2e3;
+}
+
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #ded9e7;
+ color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-intense {
+ background-color: #8775a7;
+}
+
+.dashboard-stat.purple-intense.dashboard-stat-light:hover {
+ background-color: #7c699f;
+}
+
+.dashboard-stat.purple-intense .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-intense .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-intense .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-intense .more {
+ color: #FFFFFF;
+ background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-intense {
+ border-color: #8775a7 !important;
+ background-image: none !important;
+ background-color: #8775a7 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-intense {
+ color: #8775a7 !important;
+}
+
+/***
+Purple Sharp
+***/
+/* Button */
+.purple-sharp.btn {
+ color: #FFFFFF;
+ background-color: #796799;
+ border-color: "";
+}
+
+.purple-sharp.btn:hover, .purple-sharp.btn:focus, .purple-sharp.btn:active, .purple-sharp.btn.active {
+ color: #FFFFFF;
+ background-color: #685884;
+}
+
+.open .purple-sharp.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #685884;
+}
+
+.purple-sharp.btn:active, .purple-sharp.btn.active {
+ background-image: none;
+ background-color: #5c4e75;
+}
+
+.purple-sharp.btn:active:hover, .purple-sharp.btn.active:hover {
+ background-color: #61527b;
+}
+
+.open .purple-sharp.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-sharp.btn.disabled, .purple-sharp.btn.disabled:hover, .purple-sharp.btn.disabled:focus, .purple-sharp.btn.disabled:active, .purple-sharp.btn.disabled.active, .purple-sharp.btn[disabled], .purple-sharp.btn[disabled]:hover, .purple-sharp.btn[disabled]:focus, .purple-sharp.btn[disabled]:active, .purple-sharp.btn[disabled].active, fieldset[disabled] .purple-sharp.btn, fieldset[disabled] .purple-sharp.btn:hover, fieldset[disabled] .purple-sharp.btn:focus, fieldset[disabled] .purple-sharp.btn:active, fieldset[disabled] .purple-sharp.btn.active {
+ background-color: #796799;
+}
+
+.purple-sharp.btn .badge {
+ color: #796799;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-sharp-stripe {
+ border-left: 3px solid #796799;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-sharp,
+.portlet.purple-sharp {
+ background-color: #796799;
+}
+
+.portlet.solid.purple-sharp > .portlet-title,
+.portlet.solid.purple-sharp > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-sharp {
+ border: 1px solid #9486ad;
+ border-top: 0;
+}
+
+.portlet.box.purple-sharp > .portlet-title {
+ background-color: #796799;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #b4aac6;
+ color: #c2b9d0;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i {
+ color: #cac3d6;
+}
+
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #cfc9db;
+ color: #ddd8e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-sharp {
+ background-color: #796799;
+}
+
+.dashboard-stat.purple-sharp.dashboard-stat-light:hover {
+ background-color: #6f5f8d;
+}
+
+.dashboard-stat.purple-sharp .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-sharp .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-sharp .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-sharp .more {
+ color: #FFFFFF;
+ background-color: #6f5f8d;
+}
+
+/* General Element */
+.bg-purple-sharp {
+ border-color: #796799 !important;
+ background-image: none !important;
+ background-color: #796799 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-sharp {
+ color: #796799 !important;
+}
+
+/***
+Purple Soft
+***/
+/* Button */
+.purple-soft.btn {
+ color: #FFFFFF;
+ background-color: #8877a9;
+ border-color: "";
+}
+
+.purple-soft.btn:hover, .purple-soft.btn:focus, .purple-soft.btn:active, .purple-soft.btn.active {
+ color: #FFFFFF;
+ background-color: #75629b;
+}
+
+.open .purple-soft.btn.dropdown-toggle {
+ color: #FFFFFF;
+ background-color: #75629b;
+}
+
+.purple-soft.btn:active, .purple-soft.btn.active {
+ background-image: none;
+ background-color: #69588b;
+}
+
+.purple-soft.btn:active:hover, .purple-soft.btn.active:hover {
+ background-color: #6e5c91;
+}
+
+.open .purple-soft.btn.dropdown-toggle {
+ background-image: none;
+}
+
+.purple-soft.btn.disabled, .purple-soft.btn.disabled:hover, .purple-soft.btn.disabled:focus, .purple-soft.btn.disabled:active, .purple-soft.btn.disabled.active, .purple-soft.btn[disabled], .purple-soft.btn[disabled]:hover, .purple-soft.btn[disabled]:focus, .purple-soft.btn[disabled]:active, .purple-soft.btn[disabled].active, fieldset[disabled] .purple-soft.btn, fieldset[disabled] .purple-soft.btn:hover, fieldset[disabled] .purple-soft.btn:focus, fieldset[disabled] .purple-soft.btn:active, fieldset[disabled] .purple-soft.btn.active {
+ background-color: #8877a9;
+}
+
+.purple-soft.btn .badge {
+ color: #8877a9;
+ background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-soft-stripe {
+ border-left: 3px solid #8877a9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-soft,
+.portlet.purple-soft {
+ background-color: #8877a9;
+}
+
+.portlet.solid.purple-soft > .portlet-title,
+.portlet.solid.purple-soft > .portlet-body {
+ border: 0;
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.remove {
+ background-image: url(../img/portlet-remove-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.config {
+ background-image: url(../img/portlet-config-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.reload {
+ background-image: url(../img/portlet-reload-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.expand {
+ background-image: url(../img/portlet-expand-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.collapse {
+ background-image: url(../img/portlet-collapse-icon-white.png);
+}
+
+.portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen {
+ color: #fdfdfd;
+}
+
+.portlet.box.purple-soft {
+ border: 1px solid #a396bd;
+ border-top: 0;
+}
+
+.portlet.box.purple-soft > .portlet-title {
+ background-color: #8877a9;
+}
+
+.portlet.box.purple-soft > .portlet-title > .caption {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-soft > .portlet-title > .caption > i {
+ color: #FFFFFF;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default {
+ background: transparent !important;
+ background-color: transparent !important;
+ border: 1px solid #c4bcd4;
+ color: #d2cbde;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default > i {
+ color: #dad5e4;
+}
+
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active {
+ border: 1px solid #dfdbe8;
+ color: #edebf2;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-soft {
+ background-color: #8877a9;
+}
+
+.dashboard-stat.purple-soft.dashboard-stat-light:hover {
+ background-color: #7d6ba1;
+}
+
+.dashboard-stat.purple-soft .visual > i {
+ color: #FFFFFF;
+ opacity: 0.1;
+ filter: alpha(opacity=10);
+}
+
+.dashboard-stat.purple-soft .details .number {
+ color: #FFFFFF;
+}
+
+.dashboard-stat.purple-soft .details .desc {
+ color: #FFFFFF;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+
+.dashboard-stat.purple-soft .more {
+ color: #FFFFFF;
+ background-color: #7d6ba1;
+}
+
+/* General Element */
+.bg-purple-soft {
+ border-color: #8877a9 !important;
+ background-image: none !important;
+ background-color: #8877a9 !important;
+ color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-soft {
+ color: #8877a9 !important;
+}
+
+/***
+Transparent Button
+***/
+.btn-transparent.btn {
+ background: transparent;
+ color: #888;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/facebox.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/facebox.css
new file mode 100644
index 00000000..a86199c8
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/facebox.css
@@ -0,0 +1,83 @@
+#facebox {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 100;
+ text-align: left;
+}
+
+#facebox .popup {
+ position: relative;
+ border: 3px solid rgba(0, 0, 0, 0);
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 0 18px rgba(0, 0, 0, 0.4);
+}
+
+#facebox .content {
+ /*display:table;*/
+ width: 580px;
+ height: 500px;
+ padding: 10px;
+ background: #fff;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+#facebox .content > p:first-child {
+ margin-top: 0;
+}
+
+#facebox .content > p:last-child {
+ margin-bottom: 0;
+}
+
+#facebox .close {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ padding: 2px;
+ background: #fff;
+}
+
+#facebox .close img {
+ opacity: 0.3;
+}
+
+#facebox .close:hover img {
+ opacity: 1.0;
+}
+
+#facebox .loading {
+ text-align: center;
+}
+
+#facebox .image {
+ text-align: center;
+}
+
+#facebox img {
+ border: 0;
+ margin: 0;
+}
+
+#facebox_overlay {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ height: 100%;
+ width: 100%;
+}
+
+.facebox_hide {
+ z-index: -100;
+}
+
+.facebox_overlayBG {
+ background-color: #000;
+ z-index: 99;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/ict-chart-dashboard.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/ict-chart-dashboard.css
new file mode 100644
index 00000000..1491ce76
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/ict-chart-dashboard.css
@@ -0,0 +1,155 @@
+.flot-placeholder {
+ margin-left: 0%;
+ margin-top: 1%;
+ margin-bottom: 2%;
+ width: 100%;
+ height: 90%;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-high {
+ margin-left: 2%;
+ margin-top: 2%;
+ margin-bottom: 2%;
+ width: 100%;
+ height: 93%;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-expand {
+ /*margin-left:2%;
+ margin-top:2%;*/
+ margin: 1%;
+ width: 98%;
+ height: 480px;
+ font-size: 14px;
+ line-height: 1.2em;
+ background: #fff;
+}
+
+.flot-placeholder-wrapper-portlet {
+ padding-top: 1%;
+ margin-left: 0%;
+ margin-top: 10%;
+ width: 98%;
+ height: 220px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-portlet-wide {
+ /*top: 32px;*/
+ padding-top: 0.5%;
+ margin-left: 0%;
+ margin-top: 2%;
+ width: 98%;
+ /*height:238px;*/
+ font-size: 14px;
+ line-height: 1.2em;
+ clear: both;
+ position: relative;
+}
+
+.flot-placeholder-wrapper {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 0px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-1 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 200px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-2 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 0px;
+ top: 400px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.flot-placeholder-wrapper-3 {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 300px;
+ top: 0px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.contentWrapper {
+ width: 100%;
+ height: 100%;
+ float: left;
+ /*overflow-y: hidden;*/
+ overflow: hidden;
+ /*padding-right: 10px;*/
+}
+
+.plotsWrapper {
+ /*position:fixed;*/
+ overflow-x: hidden;
+ overflow-y: auto;
+ margin-top: 0px;
+ /*margin-left: 182px;*/
+ margin-left: 158px;
+ margin-right: 0px;
+ /*padding-top:10px;
+ padding-left:10px;
+ padding-right: 20px;*/
+ height: 100%;
+}
+
+.stackControlButtons {
+ position: fixed;
+ margin-left: 2%;
+ margin-top: 2%;
+ left: 300px;
+ top: 200px;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.stackControlButtons-portlet {
+ margin-left: 2%;
+ margin-top: 2%;
+ width: 230px;
+ height: 180px;
+ font-size: 14px;
+ line-height: 1.2em;
+}
+
+.contentWide {
+ width: 980px !important;
+}
+
+.c3 svg {
+ overflow: visible !important;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/transition.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/transition.css
new file mode 100644
index 00000000..ba8243ff
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/css/transition.css
@@ -0,0 +1,64 @@
+#cf5 {
+ position: relative;
+ height: 32px;
+ width: 32px;
+ /* margin:5px;
+ margin-left: 15px;*/
+ margin-bottom: 0px;
+ cursor: pointer;
+ display: inline-block;
+}
+
+#cf5 img {
+ position: absolute;
+ left: 0;
+ -webkit-transition: all 1s ease-in-out;
+ -moz-transition: all 1s ease-in-out;
+ -o-transition: all 1s ease-in-out;
+ transition: all 1s ease-in-out;
+}
+
+#cf5 img.top {
+ -webkit-transform: scale(1, 0);
+ -moz-transform: scale(1, 0);
+ -o-transform: scale(1, 0);
+ transform: scale(1, 0);
+ filter: alpha(opacity=0);
+ opacity: 0;
+
+}
+
+/*
+#cf5:hover img.top, #cf5.hover_effect img.top {
+opacity:1;
+-webkit-transform:scale(1,1);
+-moz-transform:scale(1,1);
+-o-transform:scale(1,1);
+transform:scale(1,1);
+}
+*/
+#cf5 img.scale {
+ opacity: 1;
+ -webkit-transform: scale(1, 1);
+ -moz-transform: scale(1, 1);
+ -o-transform: scale(1, 1);
+ transform: scale(1, 1);
+}
+
+/*
+#cf5:hover img.bottom, #cf5.hover_effect img.bottom {
+filter: alpha(opacity=0);
+-webkit-transform:rotate(360deg) scale(0,0);
+-moz-transform:rotate(360deg) scale(0,0);
+-o-transform:rotate(360deg) scale(0,0);
+transform:rotate(360deg) scale(0,0);
+}
+*/
+#cf5 img.rotate {
+ filter: alpha(opacity=0);
+ -webkit-transform: rotate(360deg) scale(0, 0);
+ -moz-transform: rotate(360deg) scale(0, 0);
+ -o-transform: rotate(360deg) scale(0, 0);
+ transform: rotate(360deg) scale(0, 0);
+}
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js
new file mode 100644
index 00000000..2003df4e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js
@@ -0,0 +1,6194 @@
+/*
+ AngularJS v1.3.8
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+ */
+(function (M, Y, t) {
+ 'use strict';
+ function T(b) {
+ return function () {
+ var a = arguments[0], c;
+ c = "[" + (b ? b + ":" : "") + a + "] http://errors.angularjs.org/1.3.8/" + (b ? b + "/" : "") + a;
+ for (a = 1; a < arguments.length; a++) {
+ c = c + (1 == a ? "?" : "&") + "p" + (a - 1) + "=";
+ var d = encodeURIComponent, e;
+ e = arguments[a];
+ e = "function" == typeof e ? e.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof e ? "undefined" : "string" != typeof e ? JSON.stringify(e) : e;
+ c += d(e)
+ }
+ return Error(c)
+ }
+ }
+
+ function Ta(b) {
+ if (null == b || Ua(b))return !1;
+ var a = b.length;
+ return b.nodeType ===
+ na && a ? !0 : F(b) || x(b) || 0 === a || "number" === typeof a && 0 < a && a - 1 in b
+ }
+
+ function s(b, a, c) {
+ var d, e;
+ if (b)if (G(b))for (d in b)"prototype" == d || "length" == d || "name" == d || b.hasOwnProperty && !b.hasOwnProperty(d) || a.call(c, b[d], d, b); else if (x(b) || Ta(b)) {
+ var f = "object" !== typeof b;
+ d = 0;
+ for (e = b.length; d < e; d++)(f || d in b) && a.call(c, b[d], d, b)
+ } else if (b.forEach && b.forEach !== s)b.forEach(a, c, b); else for (d in b)b.hasOwnProperty(d) && a.call(c, b[d], d, b);
+ return b
+ }
+
+ function Ed(b, a, c) {
+ for (var d = Object.keys(b).sort(), e = 0; e < d.length; e++)a.call(c,
+ b[d[e]], d[e]);
+ return d
+ }
+
+ function kc(b) {
+ return function (a, c) {
+ b(c, a)
+ }
+ }
+
+ function Fd() {
+ return ++nb
+ }
+
+ function lc(b, a) {
+ a ? b.$$hashKey = a : delete b.$$hashKey
+ }
+
+ function z(b) {
+ for (var a = b.$$hashKey, c = 1, d = arguments.length; c < d; c++) {
+ var e = arguments[c];
+ if (e)for (var f = Object.keys(e), g = 0, h = f.length; g < h; g++) {
+ var l = f[g];
+ b[l] = e[l]
+ }
+ }
+ lc(b, a);
+ return b
+ }
+
+ function ba(b) {
+ return parseInt(b, 10)
+ }
+
+ function C() {
+ }
+
+ function oa(b) {
+ return b
+ }
+
+ function da(b) {
+ return function () {
+ return b
+ }
+ }
+
+ function D(b) {
+ return "undefined" === typeof b
+ }
+
+ function y(b) {
+ return "undefined" !== typeof b
+ }
+
+ function H(b) {
+ return null !== b && "object" === typeof b
+ }
+
+ function F(b) {
+ return "string" === typeof b
+ }
+
+ function V(b) {
+ return "number" === typeof b
+ }
+
+ function pa(b) {
+ return "[object Date]" === Da.call(b)
+ }
+
+ function G(b) {
+ return "function" === typeof b
+ }
+
+ function ob(b) {
+ return "[object RegExp]" === Da.call(b)
+ }
+
+ function Ua(b) {
+ return b && b.window === b
+ }
+
+ function Va(b) {
+ return b && b.$evalAsync && b.$watch
+ }
+
+ function Wa(b) {
+ return "boolean" === typeof b
+ }
+
+ function mc(b) {
+ return !(!b || !(b.nodeName || b.prop && b.attr && b.find))
+ }
+
+ function Gd(b) {
+ var a = {};
+ b = b.split(",");
+ var c;
+ for (c = 0; c < b.length; c++)a[b[c]] = !0;
+ return a
+ }
+
+ function ua(b) {
+ return Q(b.nodeName || b[0] && b[0].nodeName)
+ }
+
+ function Xa(b, a) {
+ var c = b.indexOf(a);
+ 0 <= c && b.splice(c, 1);
+ return a
+ }
+
+ function Ea(b, a, c, d) {
+ if (Ua(b) || Va(b))throw Ka("cpws");
+ if (a) {
+ if (b === a)throw Ka("cpi");
+ c = c || [];
+ d = d || [];
+ if (H(b)) {
+ var e = c.indexOf(b);
+ if (-1 !== e)return d[e];
+ c.push(b);
+ d.push(a)
+ }
+ if (x(b))for (var f = a.length = 0; f < b.length; f++)e = Ea(b[f], null, c, d), H(b[f]) && (c.push(b[f]), d.push(e)), a.push(e); else {
+ var g = a.$$hashKey;
+ x(a) ? a.length =
+ 0 : s(a, function (b, c) {
+ delete a[c]
+ });
+ for (f in b)b.hasOwnProperty(f) && (e = Ea(b[f], null, c, d), H(b[f]) && (c.push(b[f]), d.push(e)), a[f] = e);
+ lc(a, g)
+ }
+ } else if (a = b)x(b) ? a = Ea(b, [], c, d) : pa(b) ? a = new Date(b.getTime()) : ob(b) ? (a = new RegExp(b.source, b.toString().match(/[^\/]*$/)[0]), a.lastIndex = b.lastIndex) : H(b) && (e = Object.create(Object.getPrototypeOf(b)), a = Ea(b, e, c, d));
+ return a
+ }
+
+ function qa(b, a) {
+ if (x(b)) {
+ a = a || [];
+ for (var c = 0, d = b.length; c < d; c++)a[c] = b[c]
+ } else if (H(b))for (c in a = a || {}, b)if ("$" !== c.charAt(0) || "$" !== c.charAt(1))a[c] =
+ b[c];
+ return a || b
+ }
+
+ function fa(b, a) {
+ if (b === a)return !0;
+ if (null === b || null === a)return !1;
+ if (b !== b && a !== a)return !0;
+ var c = typeof b, d;
+ if (c == typeof a && "object" == c)if (x(b)) {
+ if (!x(a))return !1;
+ if ((c = b.length) == a.length) {
+ for (d = 0; d < c; d++)if (!fa(b[d], a[d]))return !1;
+ return !0
+ }
+ } else {
+ if (pa(b))return pa(a) ? fa(b.getTime(), a.getTime()) : !1;
+ if (ob(b) && ob(a))return b.toString() == a.toString();
+ if (Va(b) || Va(a) || Ua(b) || Ua(a) || x(a))return !1;
+ c = {};
+ for (d in b)if ("$" !== d.charAt(0) && !G(b[d])) {
+ if (!fa(b[d], a[d]))return !1;
+ c[d] = !0
+ }
+ for (d in a)if (!c.hasOwnProperty(d) &&
+ "$" !== d.charAt(0) && a[d] !== t && !G(a[d]))return !1;
+ return !0
+ }
+ return !1
+ }
+
+ function Ya(b, a, c) {
+ return b.concat(Za.call(a, c))
+ }
+
+ function nc(b, a) {
+ var c = 2 < arguments.length ? Za.call(arguments, 2) : [];
+ return !G(a) || a instanceof RegExp ? a : c.length ? function () {
+ return arguments.length ? a.apply(b, Ya(c, arguments, 0)) : a.apply(b, c)
+ } : function () {
+ return arguments.length ? a.apply(b, arguments) : a.call(b)
+ }
+ }
+
+ function Hd(b, a) {
+ var c = a;
+ "string" === typeof b && "$" === b.charAt(0) && "$" === b.charAt(1) ? c = t : Ua(a) ? c = "$WINDOW" : a && Y === a ? c = "$DOCUMENT" : Va(a) &&
+ (c = "$SCOPE");
+ return c
+ }
+
+ function $a(b, a) {
+ if ("undefined" === typeof b)return t;
+ V(a) || (a = a ? 2 : null);
+ return JSON.stringify(b, Hd, a)
+ }
+
+ function oc(b) {
+ return F(b) ? JSON.parse(b) : b
+ }
+
+ function va(b) {
+ b = B(b).clone();
+ try {
+ b.empty()
+ } catch (a) {
+ }
+ var c = B("<div>").append(b).html();
+ try {
+ return b[0].nodeType === pb ? Q(c) : c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function (a, b) {
+ return "<" + Q(b)
+ })
+ } catch (d) {
+ return Q(c)
+ }
+ }
+
+ function pc(b) {
+ try {
+ return decodeURIComponent(b)
+ } catch (a) {
+ }
+ }
+
+ function qc(b) {
+ var a = {}, c, d;
+ s((b || "").split("&"), function (b) {
+ b &&
+ (c = b.replace(/\+/g, "%20").split("="), d = pc(c[0]), y(d) && (b = y(c[1]) ? pc(c[1]) : !0, rc.call(a, d) ? x(a[d]) ? a[d].push(b) : a[d] = [a[d], b] : a[d] = b))
+ });
+ return a
+ }
+
+ function Nb(b) {
+ var a = [];
+ s(b, function (b, d) {
+ x(b) ? s(b, function (b) {
+ a.push(Fa(d, !0) + (!0 === b ? "" : "=" + Fa(b, !0)))
+ }) : a.push(Fa(d, !0) + (!0 === b ? "" : "=" + Fa(b, !0)))
+ });
+ return a.length ? a.join("&") : ""
+ }
+
+ function qb(b) {
+ return Fa(b, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
+ }
+
+ function Fa(b, a) {
+ return encodeURIComponent(b).replace(/%40/gi, "@").replace(/%3A/gi,
+ ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, a ? "%20" : "+")
+ }
+
+ function Id(b, a) {
+ var c, d, e = rb.length;
+ b = B(b);
+ for (d = 0; d < e; ++d)if (c = rb[d] + a, F(c = b.attr(c)))return c;
+ return null
+ }
+
+ function Jd(b, a) {
+ var c, d, e = {};
+ s(rb, function (a) {
+ a += "app";
+ !c && b.hasAttribute && b.hasAttribute(a) && (c = b, d = b.getAttribute(a))
+ });
+ s(rb, function (a) {
+ a += "app";
+ var e;
+ !c && (e = b.querySelector("[" + a.replace(":", "\\:") + "]")) && (c = e, d = e.getAttribute(a))
+ });
+ c && (e.strictDi = null !== Id(c, "strict-di"), a(c, d ? [d] : [], e))
+ }
+
+ function sc(b,
+ a, c) {
+ H(c) || (c = {});
+ c = z({strictDi: !1}, c);
+ var d = function () {
+ b = B(b);
+ if (b.injector()) {
+ var d = b[0] === Y ? "document" : va(b);
+ throw Ka("btstrpd", d.replace(/</, "&lt;").replace(/>/, "&gt;"));
+ }
+ a = a || [];
+ a.unshift(["$provide", function (a) {
+ a.value("$rootElement", b)
+ }]);
+ c.debugInfoEnabled && a.push(["$compileProvider", function (a) {
+ a.debugInfoEnabled(!0)
+ }]);
+ a.unshift("ng");
+ d = Ob(a, c.strictDi);
+ d.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function (a, b, c, d) {
+ a.$apply(function () {
+ b.data("$injector", d);
+ c(b)(a)
+ })
+ }]);
+ return d
+ },
+ e = /^NG_ENABLE_DEBUG_INFO!/, f = /^NG_DEFER_BOOTSTRAP!/;
+ M && e.test(M.name) && (c.debugInfoEnabled = !0, M.name = M.name.replace(e, ""));
+ if (M && !f.test(M.name))return d();
+ M.name = M.name.replace(f, "");
+ ga.resumeBootstrap = function (b) {
+ s(b, function (b) {
+ a.push(b)
+ });
+ d()
+ }
+ }
+
+ function Kd() {
+ M.name = "NG_ENABLE_DEBUG_INFO!" + M.name;
+ M.location.reload()
+ }
+
+ function Ld(b) {
+ b = ga.element(b).injector();
+ if (!b)throw Ka("test");
+ return b.get("$$testability")
+ }
+
+ function tc(b, a) {
+ a = a || "_";
+ return b.replace(Md, function (b, d) {
+ return (d ? a : "") + b.toLowerCase()
+ })
+ }
+
+ function Nd() {
+ var b;
+ uc || ((ra = M.jQuery) && ra.fn.on ? (B = ra, z(ra.fn, {
+ scope: La.scope,
+ isolateScope: La.isolateScope,
+ controller: La.controller,
+ injector: La.injector,
+ inheritedData: La.inheritedData
+ }), b = ra.cleanData, ra.cleanData = function (a) {
+ var c;
+ if (Pb)Pb = !1; else for (var d = 0, e; null != (e = a[d]); d++)(c = ra._data(e, "events")) && c.$destroy && ra(e).triggerHandler("$destroy");
+ b(a)
+ }) : B = R, ga.element = B, uc = !0)
+ }
+
+ function Qb(b, a, c) {
+ if (!b)throw Ka("areq", a || "?", c || "required");
+ return b
+ }
+
+ function sb(b, a, c) {
+ c && x(b) && (b = b[b.length - 1]);
+ Qb(G(b), a, "not a function, got " + (b && "object" === typeof b ? b.constructor.name || "Object" : typeof b));
+ return b
+ }
+
+ function Ma(b, a) {
+ if ("hasOwnProperty" === b)throw Ka("badname", a);
+ }
+
+ function vc(b, a, c) {
+ if (!a)return b;
+ a = a.split(".");
+ for (var d, e = b, f = a.length, g = 0; g < f; g++)d = a[g], b && (b = (e = b)[d]);
+ return !c && G(b) ? nc(e, b) : b
+ }
+
+ function tb(b) {
+ var a = b[0];
+ b = b[b.length - 1];
+ var c = [a];
+ do {
+ a = a.nextSibling;
+ if (!a)break;
+ c.push(a)
+ } while (a !== b);
+ return B(c)
+ }
+
+ function ha() {
+ return Object.create(null)
+ }
+
+ function Od(b) {
+ function a(a, b, c) {
+ return a[b] ||
+ (a[b] = c())
+ }
+
+ var c = T("$injector"), d = T("ng");
+ b = a(b, "angular", Object);
+ b.$$minErr = b.$$minErr || T;
+ return a(b, "module", function () {
+ var b = {};
+ return function (f, g, h) {
+ if ("hasOwnProperty" === f)throw d("badname", "module");
+ g && b.hasOwnProperty(f) && (b[f] = null);
+ return a(b, f, function () {
+ function a(c, d, e, f) {
+ f || (f = b);
+ return function () {
+ f[e || "push"]([c, d, arguments]);
+ return u
+ }
+ }
+
+ if (!g)throw c("nomod", f);
+ var b = [], d = [], e = [], q = a("$injector", "invoke", "push", d), u = {
+ _invokeQueue: b,
+ _configBlocks: d,
+ _runBlocks: e,
+ requires: g,
+ name: f,
+ provider: a("$provide",
+ "provider"),
+ factory: a("$provide", "factory"),
+ service: a("$provide", "service"),
+ value: a("$provide", "value"),
+ constant: a("$provide", "constant", "unshift"),
+ animation: a("$animateProvider", "register"),
+ filter: a("$filterProvider", "register"),
+ controller: a("$controllerProvider", "register"),
+ directive: a("$compileProvider", "directive"),
+ config: q,
+ run: function (a) {
+ e.push(a);
+ return this
+ }
+ };
+ h && q(h);
+ return u
+ })
+ }
+ })
+ }
+
+ function Pd(b) {
+ z(b, {
+ bootstrap: sc,
+ copy: Ea,
+ extend: z,
+ equals: fa,
+ element: B,
+ forEach: s,
+ injector: Ob,
+ noop: C,
+ bind: nc,
+ toJson: $a,
+ fromJson: oc,
+ identity: oa,
+ isUndefined: D,
+ isDefined: y,
+ isString: F,
+ isFunction: G,
+ isObject: H,
+ isNumber: V,
+ isElement: mc,
+ isArray: x,
+ version: Qd,
+ isDate: pa,
+ lowercase: Q,
+ uppercase: ub,
+ callbacks: {counter: 0},
+ getTestability: Ld,
+ $$minErr: T,
+ $$csp: ab,
+ reloadWithDebugInfo: Kd
+ });
+ bb = Od(M);
+ try {
+ bb("ngLocale")
+ } catch (a) {
+ bb("ngLocale", []).provider("$locale", Rd)
+ }
+ bb("ng", ["ngLocale"], ["$provide", function (a) {
+ a.provider({$$sanitizeUri: Sd});
+ a.provider("$compile", wc).directive({
+ a: Td,
+ input: xc,
+ textarea: xc,
+ form: Ud,
+ script: Vd,
+ select: Wd,
+ style: Xd,
+ option: Yd,
+ ngBind: Zd,
+ ngBindHtml: $d,
+ ngBindTemplate: ae,
+ ngClass: be,
+ ngClassEven: ce,
+ ngClassOdd: de,
+ ngCloak: ee,
+ ngController: fe,
+ ngForm: ge,
+ ngHide: he,
+ ngIf: ie,
+ ngInclude: je,
+ ngInit: ke,
+ ngNonBindable: le,
+ ngPluralize: me,
+ ngRepeat: ne,
+ ngShow: oe,
+ ngStyle: pe,
+ ngSwitch: qe,
+ ngSwitchWhen: re,
+ ngSwitchDefault: se,
+ ngOptions: te,
+ ngTransclude: ue,
+ ngModel: ve,
+ ngList: we,
+ ngChange: xe,
+ pattern: yc,
+ ngPattern: yc,
+ required: zc,
+ ngRequired: zc,
+ minlength: Ac,
+ ngMinlength: Ac,
+ maxlength: Bc,
+ ngMaxlength: Bc,
+ ngValue: ye,
+ ngModelOptions: ze
+ }).directive({ngInclude: Ae}).directive(vb).directive(Cc);
+ a.provider({
+ $anchorScroll: Be,
+ $animate: Ce,
+ $browser: De,
+ $cacheFactory: Ee,
+ $controller: Fe,
+ $document: Ge,
+ $exceptionHandler: He,
+ $filter: Dc,
+ $interpolate: Ie,
+ $interval: Je,
+ $http: Ke,
+ $httpBackend: Le,
+ $location: Me,
+ $log: Ne,
+ $parse: Oe,
+ $rootScope: Pe,
+ $q: Qe,
+ $$q: Re,
+ $sce: Se,
+ $sceDelegate: Te,
+ $sniffer: Ue,
+ $templateCache: Ve,
+ $templateRequest: We,
+ $$testability: Xe,
+ $timeout: Ye,
+ $window: Ze,
+ $$rAF: $e,
+ $$asyncCallback: af,
+ $$jqLite: bf
+ })
+ }])
+ }
+
+ function cb(b) {
+ return b.replace(cf, function (a, b, d, e) {
+ return e ? d.toUpperCase() : d
+ }).replace(df, "Moz$1")
+ }
+
+ function Ec(b) {
+ b = b.nodeType;
+ return b === na || !b || 9 === b
+ }
+
+ function Fc(b, a) {
+ var c, d, e = a.createDocumentFragment(), f = [];
+ if (Rb.test(b)) {
+ c = c || e.appendChild(a.createElement("div"));
+ d = (ef.exec(b) || ["", ""])[1].toLowerCase();
+ d = ia[d] || ia._default;
+ c.innerHTML = d[1] + b.replace(ff, "<$1></$2>") + d[2];
+ for (d = d[0]; d--;)c = c.lastChild;
+ f = Ya(f, c.childNodes);
+ c = e.firstChild;
+ c.textContent = ""
+ } else f.push(a.createTextNode(b));
+ e.textContent = "";
+ e.innerHTML = "";
+ s(f, function (a) {
+ e.appendChild(a)
+ });
+ return e
+ }
+
+ function R(b) {
+ if (b instanceof
+ R)return b;
+ var a;
+ F(b) && (b = U(b), a = !0);
+ if (!(this instanceof R)) {
+ if (a && "<" != b.charAt(0))throw Sb("nosel");
+ return new R(b)
+ }
+ if (a) {
+ a = Y;
+ var c;
+ b = (c = gf.exec(b)) ? [a.createElement(c[1])] : (c = Fc(b, a)) ? c.childNodes : []
+ }
+ Gc(this, b)
+ }
+
+ function Tb(b) {
+ return b.cloneNode(!0)
+ }
+
+ function wb(b, a) {
+ a || xb(b);
+ if (b.querySelectorAll)for (var c = b.querySelectorAll("*"), d = 0, e = c.length; d < e; d++)xb(c[d])
+ }
+
+ function Hc(b, a, c, d) {
+ if (y(d))throw Sb("offargs");
+ var e = (d = yb(b)) && d.events, f = d && d.handle;
+ if (f)if (a)s(a.split(" "), function (a) {
+ if (y(c)) {
+ var d =
+ e[a];
+ Xa(d || [], c);
+ if (d && 0 < d.length)return
+ }
+ b.removeEventListener(a, f, !1);
+ delete e[a]
+ }); else for (a in e)"$destroy" !== a && b.removeEventListener(a, f, !1), delete e[a]
+ }
+
+ function xb(b, a) {
+ var c = b.ng339, d = c && zb[c];
+ d && (a ? delete d.data[a] : (d.handle && (d.events.$destroy && d.handle({}, "$destroy"), Hc(b)), delete zb[c], b.ng339 = t))
+ }
+
+ function yb(b, a) {
+ var c = b.ng339, c = c && zb[c];
+ a && !c && (b.ng339 = c = ++hf, c = zb[c] = {events: {}, data: {}, handle: t});
+ return c
+ }
+
+ function Ub(b, a, c) {
+ if (Ec(b)) {
+ var d = y(c), e = !d && a && !H(a), f = !a;
+ b = (b = yb(b, !e)) && b.data;
+ if (d)b[a] = c; else {
+ if (f)return b;
+ if (e)return b && b[a];
+ z(b, a)
+ }
+ }
+ }
+
+ function Ab(b, a) {
+ return b.getAttribute ? -1 < (" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + a + " ") : !1
+ }
+
+ function Bb(b, a) {
+ a && b.setAttribute && s(a.split(" "), function (a) {
+ b.setAttribute("class", U((" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + U(a) + " ", " ")))
+ })
+ }
+
+ function Cb(b, a) {
+ if (a && b.setAttribute) {
+ var c = (" " + (b.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
+ s(a.split(" "), function (a) {
+ a =
+ U(a);
+ -1 === c.indexOf(" " + a + " ") && (c += a + " ")
+ });
+ b.setAttribute("class", U(c))
+ }
+ }
+
+ function Gc(b, a) {
+ if (a)if (a.nodeType)b[b.length++] = a; else {
+ var c = a.length;
+ if ("number" === typeof c && a.window !== a) {
+ if (c)for (var d = 0; d < c; d++)b[b.length++] = a[d]
+ } else b[b.length++] = a
+ }
+ }
+
+ function Ic(b, a) {
+ return Db(b, "$" + (a || "ngController") + "Controller")
+ }
+
+ function Db(b, a, c) {
+ 9 == b.nodeType && (b = b.documentElement);
+ for (a = x(a) ? a : [a]; b;) {
+ for (var d = 0, e = a.length; d < e; d++)if ((c = B.data(b, a[d])) !== t)return c;
+ b = b.parentNode || 11 === b.nodeType && b.host
+ }
+ }
+
+ function Jc(b) {
+ for (wb(b, !0); b.firstChild;)b.removeChild(b.firstChild)
+ }
+
+ function Kc(b, a) {
+ a || wb(b);
+ var c = b.parentNode;
+ c && c.removeChild(b)
+ }
+
+ function jf(b, a) {
+ a = a || M;
+ if ("complete" === a.document.readyState)a.setTimeout(b); else B(a).on("load", b)
+ }
+
+ function Lc(b, a) {
+ var c = Eb[a.toLowerCase()];
+ return c && Mc[ua(b)] && c
+ }
+
+ function kf(b, a) {
+ var c = b.nodeName;
+ return ("INPUT" === c || "TEXTAREA" === c) && Nc[a]
+ }
+
+ function lf(b, a) {
+ var c = function (c, e) {
+ c.isDefaultPrevented = function () {
+ return c.defaultPrevented
+ };
+ var f = a[e || c.type], g = f ? f.length :
+ 0;
+ if (g) {
+ if (D(c.immediatePropagationStopped)) {
+ var h = c.stopImmediatePropagation;
+ c.stopImmediatePropagation = function () {
+ c.immediatePropagationStopped = !0;
+ c.stopPropagation && c.stopPropagation();
+ h && h.call(c)
+ }
+ }
+ c.isImmediatePropagationStopped = function () {
+ return !0 === c.immediatePropagationStopped
+ };
+ 1 < g && (f = qa(f));
+ for (var l = 0; l < g; l++)c.isImmediatePropagationStopped() || f[l].call(b, c)
+ }
+ };
+ c.elem = b;
+ return c
+ }
+
+ function bf() {
+ this.$get = function () {
+ return z(R, {
+ hasClass: function (b, a) {
+ b.attr && (b = b[0]);
+ return Ab(b, a)
+ }, addClass: function (b,
+ a) {
+ b.attr && (b = b[0]);
+ return Cb(b, a)
+ }, removeClass: function (b, a) {
+ b.attr && (b = b[0]);
+ return Bb(b, a)
+ }
+ })
+ }
+ }
+
+ function Na(b, a) {
+ var c = b && b.$$hashKey;
+ if (c)return "function" === typeof c && (c = b.$$hashKey()), c;
+ c = typeof b;
+ return c = "function" == c || "object" == c && null !== b ? b.$$hashKey = c + ":" + (a || Fd)() : c + ":" + b
+ }
+
+ function db(b, a) {
+ if (a) {
+ var c = 0;
+ this.nextUid = function () {
+ return ++c
+ }
+ }
+ s(b, this.put, this)
+ }
+
+ function mf(b) {
+ return (b = b.toString().replace(Oc, "").match(Pc)) ? "function(" + (b[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn"
+ }
+
+ function Vb(b,
+ a, c) {
+ var d;
+ if ("function" === typeof b) {
+ if (!(d = b.$inject)) {
+ d = [];
+ if (b.length) {
+ if (a)throw F(c) && c || (c = b.name || mf(b)), Ga("strictdi", c);
+ a = b.toString().replace(Oc, "");
+ a = a.match(Pc);
+ s(a[1].split(nf), function (a) {
+ a.replace(of, function (a, b, c) {
+ d.push(c)
+ })
+ })
+ }
+ b.$inject = d
+ }
+ } else x(b) ? (a = b.length - 1, sb(b[a], "fn"), d = b.slice(0, a)) : sb(b, "fn", !0);
+ return d
+ }
+
+ function Ob(b, a) {
+ function c(a) {
+ return function (b, c) {
+ if (H(b))s(b, kc(a)); else return a(b, c)
+ }
+ }
+
+ function d(a, b) {
+ Ma(a, "service");
+ if (G(b) || x(b))b = q.instantiate(b);
+ if (!b.$get)throw Ga("pget",
+ a);
+ return p[a + "Provider"] = b
+ }
+
+ function e(a, b) {
+ return function () {
+ var c = r.invoke(b, this);
+ if (D(c))throw Ga("undef", a);
+ return c
+ }
+ }
+
+ function f(a, b, c) {
+ return d(a, {$get: !1 !== c ? e(a, b) : b})
+ }
+
+ function g(a) {
+ var b = [], c;
+ s(a, function (a) {
+ function d(a) {
+ var b, c;
+ b = 0;
+ for (c = a.length; b < c; b++) {
+ var e = a[b], f = q.get(e[0]);
+ f[e[1]].apply(f, e[2])
+ }
+ }
+
+ if (!m.get(a)) {
+ m.put(a, !0);
+ try {
+ F(a) ? (c = bb(a), b = b.concat(g(c.requires)).concat(c._runBlocks), d(c._invokeQueue), d(c._configBlocks)) : G(a) ? b.push(q.invoke(a)) : x(a) ? b.push(q.invoke(a)) : sb(a, "module")
+ } catch (e) {
+ throw x(a) &&
+ (a = a[a.length - 1]), e.message && e.stack && -1 == e.stack.indexOf(e.message) && (e = e.message + "\n" + e.stack), Ga("modulerr", a, e.stack || e.message || e);
+ }
+ }
+ });
+ return b
+ }
+
+ function h(b, c) {
+ function d(a, e) {
+ if (b.hasOwnProperty(a)) {
+ if (b[a] === l)throw Ga("cdep", a + " <- " + k.join(" <- "));
+ return b[a]
+ }
+ try {
+ return k.unshift(a), b[a] = l, b[a] = c(a, e)
+ } catch (f) {
+ throw b[a] === l && delete b[a], f;
+ } finally {
+ k.shift()
+ }
+ }
+
+ function e(b, c, f, g) {
+ "string" === typeof f && (g = f, f = null);
+ var h = [], k = Vb(b, a, g), l, q, p;
+ q = 0;
+ for (l = k.length; q < l; q++) {
+ p = k[q];
+ if ("string" !== typeof p)throw Ga("itkn", p);
+ h.push(f && f.hasOwnProperty(p) ? f[p] : d(p, g))
+ }
+ x(b) && (b = b[l]);
+ return b.apply(c, h)
+ }
+
+ return {
+ invoke: e, instantiate: function (a, b, c) {
+ var d = Object.create((x(a) ? a[a.length - 1] : a).prototype);
+ a = e(a, d, b, c);
+ return H(a) || G(a) ? a : d
+ }, get: d, annotate: Vb, has: function (a) {
+ return p.hasOwnProperty(a + "Provider") || b.hasOwnProperty(a)
+ }
+ }
+ }
+
+ a = !0 === a;
+ var l = {}, k = [], m = new db([], !0), p = {
+ $provide: {
+ provider: c(d), factory: c(f), service: c(function (a, b) {
+ return f(a, ["$injector", function (a) {
+ return a.instantiate(b)
+ }])
+ }),
+ value: c(function (a, b) {
+ return f(a, da(b), !1)
+ }), constant: c(function (a, b) {
+ Ma(a, "constant");
+ p[a] = b;
+ u[a] = b
+ }), decorator: function (a, b) {
+ var c = q.get(a + "Provider"), d = c.$get;
+ c.$get = function () {
+ var a = r.invoke(d, c);
+ return r.invoke(b, null, {$delegate: a})
+ }
+ }
+ }
+ }, q = p.$injector = h(p, function (a, b) {
+ ga.isString(b) && k.push(b);
+ throw Ga("unpr", k.join(" <- "));
+ }), u = {}, r = u.$injector = h(u, function (a, b) {
+ var c = q.get(a + "Provider", b);
+ return r.invoke(c.$get, c, t, a)
+ });
+ s(g(b), function (a) {
+ r.invoke(a || C)
+ });
+ return r
+ }
+
+ function Be() {
+ var b = !0;
+ this.disableAutoScrolling =
+ function () {
+ b = !1
+ };
+ this.$get = ["$window", "$location", "$rootScope", function (a, c, d) {
+ function e(a) {
+ var b = null;
+ Array.prototype.some.call(a, function (a) {
+ if ("a" === ua(a))return b = a, !0
+ });
+ return b
+ }
+
+ function f(b) {
+ if (b) {
+ b.scrollIntoView();
+ var c;
+ c = g.yOffset;
+ G(c) ? c = c() : mc(c) ? (c = c[0], c = "fixed" !== a.getComputedStyle(c).position ? 0 : c.getBoundingClientRect().bottom) : V(c) || (c = 0);
+ c && (b = b.getBoundingClientRect().top, a.scrollBy(0, b - c))
+ } else a.scrollTo(0, 0)
+ }
+
+ function g() {
+ var a = c.hash(), b;
+ a ? (b = h.getElementById(a)) ? f(b) : (b = e(h.getElementsByName(a))) ?
+ f(b) : "top" === a && f(null) : f(null)
+ }
+
+ var h = a.document;
+ b && d.$watch(function () {
+ return c.hash()
+ }, function (a, b) {
+ a === b && "" === a || jf(function () {
+ d.$evalAsync(g)
+ })
+ });
+ return g
+ }]
+ }
+
+ function af() {
+ this.$get = ["$$rAF", "$timeout", function (b, a) {
+ return b.supported ? function (a) {
+ return b(a)
+ } : function (b) {
+ return a(b, 0, !1)
+ }
+ }]
+ }
+
+ function pf(b, a, c, d) {
+ function e(a) {
+ try {
+ a.apply(null, Za.call(arguments, 1))
+ } finally {
+ if (v--, 0 === v)for (; w.length;)try {
+ w.pop()()
+ } catch (b) {
+ c.error(b)
+ }
+ }
+ }
+
+ function f(a, b) {
+ (function N() {
+ s(L, function (a) {
+ a()
+ });
+ J = b(N,
+ a)
+ })()
+ }
+
+ function g() {
+ h();
+ l()
+ }
+
+ function h() {
+ A = b.history.state;
+ A = D(A) ? null : A;
+ fa(A, I) && (A = I);
+ I = A
+ }
+
+ function l() {
+ if (E !== m.url() || P !== A)E = m.url(), P = A, s(W, function (a) {
+ a(m.url(), A)
+ })
+ }
+
+ function k(a) {
+ try {
+ return decodeURIComponent(a)
+ } catch (b) {
+ return a
+ }
+ }
+
+ var m = this, p = a[0], q = b.location, u = b.history, r = b.setTimeout, O = b.clearTimeout, n = {};
+ m.isMock = !1;
+ var v = 0, w = [];
+ m.$$completeOutstandingRequest = e;
+ m.$$incOutstandingRequestCount = function () {
+ v++
+ };
+ m.notifyWhenNoOutstandingRequests = function (a) {
+ s(L, function (a) {
+ a()
+ });
+ 0 === v ? a() :
+ w.push(a)
+ };
+ var L = [], J;
+ m.addPollFn = function (a) {
+ D(J) && f(100, r);
+ L.push(a);
+ return a
+ };
+ var A, P, E = q.href, S = a.find("base"), X = null;
+ h();
+ P = A;
+ m.url = function (a, c, e) {
+ D(e) && (e = null);
+ q !== b.location && (q = b.location);
+ u !== b.history && (u = b.history);
+ if (a) {
+ var f = P === e;
+ if (E === a && (!d.history || f))return m;
+ var g = E && Ha(E) === Ha(a);
+ E = a;
+ P = e;
+ !d.history || g && f ? (g || (X = a), c ? q.replace(a) : g ? (c = q, e = a.indexOf("#"), a = -1 === e ? "" : a.substr(e + 1), c.hash = a) : q.href = a) : (u[c ? "replaceState" : "pushState"](e, "", a), h(), P = A);
+ return m
+ }
+ return X || q.href.replace(/%27/g,
+ "'")
+ };
+ m.state = function () {
+ return A
+ };
+ var W = [], wa = !1, I = null;
+ m.onUrlChange = function (a) {
+ if (!wa) {
+ if (d.history)B(b).on("popstate", g);
+ B(b).on("hashchange", g);
+ wa = !0
+ }
+ W.push(a);
+ return a
+ };
+ m.$$checkUrlChange = l;
+ m.baseHref = function () {
+ var a = S.attr("href");
+ return a ? a.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
+ };
+ var ea = {}, y = "", ca = m.baseHref();
+ m.cookies = function (a, b) {
+ var d, e, f, g;
+ if (a)b === t ? p.cookie = encodeURIComponent(a) + "=;path=" + ca + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : F(b) && (d = (p.cookie = encodeURIComponent(a) + "=" + encodeURIComponent(b) +
+ ";path=" + ca).length + 1, 4096 < d && c.warn("Cookie '" + a + "' possibly not set or overflowed because it was too large (" + d + " > 4096 bytes)!")); else {
+ if (p.cookie !== y)for (y = p.cookie, d = y.split("; "), ea = {}, f = 0; f < d.length; f++)e = d[f], g = e.indexOf("="), 0 < g && (a = k(e.substring(0, g)), ea[a] === t && (ea[a] = k(e.substring(g + 1))));
+ return ea
+ }
+ };
+ m.defer = function (a, b) {
+ var c;
+ v++;
+ c = r(function () {
+ delete n[c];
+ e(a)
+ }, b || 0);
+ n[c] = !0;
+ return c
+ };
+ m.defer.cancel = function (a) {
+ return n[a] ? (delete n[a], O(a), e(C), !0) : !1
+ }
+ }
+
+ function De() {
+ this.$get = ["$window",
+ "$log", "$sniffer", "$document", function (b, a, c, d) {
+ return new pf(b, d, a, c)
+ }]
+ }
+
+ function Ee() {
+ this.$get = function () {
+ function b(b, d) {
+ function e(a) {
+ a != p && (q ? q == a && (q = a.n) : q = a, f(a.n, a.p), f(a, p), p = a, p.n = null)
+ }
+
+ function f(a, b) {
+ a != b && (a && (a.p = b), b && (b.n = a))
+ }
+
+ if (b in a)throw T("$cacheFactory")("iid", b);
+ var g = 0, h = z({}, d, {id: b}), l = {}, k = d && d.capacity || Number.MAX_VALUE, m = {}, p = null, q = null;
+ return a[b] = {
+ put: function (a, b) {
+ if (k < Number.MAX_VALUE) {
+ var c = m[a] || (m[a] = {key: a});
+ e(c)
+ }
+ if (!D(b))return a in l || g++, l[a] = b, g > k && this.remove(q.key),
+ b
+ }, get: function (a) {
+ if (k < Number.MAX_VALUE) {
+ var b = m[a];
+ if (!b)return;
+ e(b)
+ }
+ return l[a]
+ }, remove: function (a) {
+ if (k < Number.MAX_VALUE) {
+ var b = m[a];
+ if (!b)return;
+ b == p && (p = b.p);
+ b == q && (q = b.n);
+ f(b.n, b.p);
+ delete m[a]
+ }
+ delete l[a];
+ g--
+ }, removeAll: function () {
+ l = {};
+ g = 0;
+ m = {};
+ p = q = null
+ }, destroy: function () {
+ m = h = l = null;
+ delete a[b]
+ }, info: function () {
+ return z({}, h, {size: g})
+ }
+ }
+ }
+
+ var a = {};
+ b.info = function () {
+ var b = {};
+ s(a, function (a, e) {
+ b[e] = a.info()
+ });
+ return b
+ };
+ b.get = function (b) {
+ return a[b]
+ };
+ return b
+ }
+ }
+
+ function Ve() {
+ this.$get = ["$cacheFactory",
+ function (b) {
+ return b("templates")
+ }]
+ }
+
+ function wc(b, a) {
+ function c(a, b) {
+ var c = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/, d = {};
+ s(a, function (a, e) {
+ var f = a.match(c);
+ if (!f)throw ja("iscp", b, e, a);
+ d[e] = {mode: f[1][0], collection: "*" === f[2], optional: "?" === f[3], attrName: f[4] || e}
+ });
+ return d
+ }
+
+ var d = {}, e = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, f = /(([\w\-]+)(?:\:([^;]+))?;?)/, g = Gd("ngSrc,ngSrcset,src,srcset"), h = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/, l = /^(on[a-z]+|formaction)$/;
+ this.directive = function p(a, e) {
+ Ma(a, "directive");
+ F(a) ? (Qb(e,
+ "directiveFactory"), d.hasOwnProperty(a) || (d[a] = [], b.factory(a + "Directive", ["$injector", "$exceptionHandler", function (b, e) {
+ var f = [];
+ s(d[a], function (d, g) {
+ try {
+ var h = b.invoke(d);
+ G(h) ? h = {compile: da(h)} : !h.compile && h.link && (h.compile = da(h.link));
+ h.priority = h.priority || 0;
+ h.index = g;
+ h.name = h.name || a;
+ h.require = h.require || h.controller && h.name;
+ h.restrict = h.restrict || "EA";
+ H(h.scope) && (h.$$isolateBindings = c(h.scope, h.name));
+ f.push(h)
+ } catch (l) {
+ e(l)
+ }
+ });
+ return f
+ }])), d[a].push(e)) : s(a, kc(p));
+ return this
+ };
+ this.aHrefSanitizationWhitelist =
+ function (b) {
+ return y(b) ? (a.aHrefSanitizationWhitelist(b), this) : a.aHrefSanitizationWhitelist()
+ };
+ this.imgSrcSanitizationWhitelist = function (b) {
+ return y(b) ? (a.imgSrcSanitizationWhitelist(b), this) : a.imgSrcSanitizationWhitelist()
+ };
+ var k = !0;
+ this.debugInfoEnabled = function (a) {
+ return y(a) ? (k = a, this) : k
+ };
+ this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function (a, b, c, r, O, n, v, w, L, J, A) {
+ function P(a, b) {
+ try {
+ a.addClass(b)
+ } catch (c) {
+ }
+ }
+
+ function E(a, b, c, d, e) {
+ a instanceof B || (a = B(a));
+ s(a, function (b, c) {
+ b.nodeType == pb && b.nodeValue.match(/\S+/) && (a[c] = B(b).wrap("<span></span>").parent()[0])
+ });
+ var f = S(a, b, a, c, d, e);
+ E.$$addScopeClass(a);
+ var g = null;
+ return function (b, c, d) {
+ Qb(b, "scope");
+ d = d || {};
+ var e = d.parentBoundTranscludeFn, h = d.transcludeControllers;
+ d = d.futureParentElement;
+ e && e.$$boundTransclude && (e = e.$$boundTransclude);
+ g || (g = (d = d && d[0]) ? "foreignobject" !== ua(d) && d.toString().match(/SVG/) ? "svg" : "html" : "html");
+ d = "html" !== g ? B(Wb(g, B("<div>").append(a).html())) :
+ c ? La.clone.call(a) : a;
+ if (h)for (var l in h)d.data("$" + l + "Controller", h[l].instance);
+ E.$$addScopeInfo(d, b);
+ c && c(d, b);
+ f && f(b, d, d, e);
+ return d
+ }
+ }
+
+ function S(a, b, c, d, e, f) {
+ function g(a, c, d, e) {
+ var f, l, k, q, p, n, w;
+ if (r)for (w = Array(c.length), q = 0; q < h.length; q += 3)f = h[q], w[f] = c[f]; else w = c;
+ q = 0;
+ for (p = h.length; q < p;)l = w[h[q++]], c = h[q++], f = h[q++], c ? (c.scope ? (k = a.$new(), E.$$addScopeInfo(B(l), k)) : k = a, n = c.transcludeOnThisElement ? X(a, c.transclude, e, c.elementTranscludeOnThisElement) : !c.templateOnThisElement && e ? e : !e && b ? X(a,
+ b) : null, c(f, k, l, d, n)) : f && f(a, l.childNodes, t, e)
+ }
+
+ for (var h = [], l, k, q, p, r, n = 0; n < a.length; n++) {
+ l = new Xb;
+ k = W(a[n], [], l, 0 === n ? d : t, e);
+ (f = k.length ? ea(k, a[n], l, b, c, null, [], [], f) : null) && f.scope && E.$$addScopeClass(l.$$element);
+ l = f && f.terminal || !(q = a[n].childNodes) || !q.length ? null : S(q, f ? (f.transcludeOnThisElement || !f.templateOnThisElement) && f.transclude : b);
+ if (f || l)h.push(n, f, l), p = !0, r = r || f;
+ f = null
+ }
+ return p ? g : null
+ }
+
+ function X(a, b, c, d) {
+ return function (d, e, f, g, h) {
+ d || (d = a.$new(!1, h), d.$$transcluded = !0);
+ return b(d, e,
+ {parentBoundTranscludeFn: c, transcludeControllers: f, futureParentElement: g})
+ }
+ }
+
+ function W(a, b, c, d, g) {
+ var h = c.$attr, l;
+ switch (a.nodeType) {
+ case na:
+ ca(b, ya(ua(a)), "E", d, g);
+ for (var k, q, p, r = a.attributes, n = 0, w = r && r.length; n < w; n++) {
+ var O = !1, L = !1;
+ k = r[n];
+ l = k.name;
+ q = U(k.value);
+ k = ya(l);
+ if (p = fb.test(k))l = l.replace(Rc, "").substr(8).replace(/_(.)/g, function (a, b) {
+ return b.toUpperCase()
+ });
+ var u = k.replace(/(Start|End)$/, "");
+ D(u) && k === u + "Start" && (O = l, L = l.substr(0, l.length - 5) + "end", l = l.substr(0, l.length - 6));
+ k = ya(l.toLowerCase());
+ h[k] = l;
+ if (p || !c.hasOwnProperty(k))c[k] = q, Lc(a, k) && (c[k] = !0);
+ Pa(a, b, q, k, p);
+ ca(b, k, "A", d, g, O, L)
+ }
+ a = a.className;
+ if (F(a) && "" !== a)for (; l = f.exec(a);)k = ya(l[2]), ca(b, k, "C", d, g) && (c[k] = U(l[3])), a = a.substr(l.index + l[0].length);
+ break;
+ case pb:
+ M(b, a.nodeValue);
+ break;
+ case 8:
+ try {
+ if (l = e.exec(a.nodeValue))k = ya(l[1]), ca(b, k, "M", d, g) && (c[k] = U(l[2]))
+ } catch (v) {
+ }
+ }
+ b.sort(N);
+ return b
+ }
+
+ function wa(a, b, c) {
+ var d = [], e = 0;
+ if (b && a.hasAttribute && a.hasAttribute(b)) {
+ do {
+ if (!a)throw ja("uterdir", b, c);
+ a.nodeType == na && (a.hasAttribute(b) &&
+ e++, a.hasAttribute(c) && e--);
+ d.push(a);
+ a = a.nextSibling
+ } while (0 < e)
+ } else d.push(a);
+ return B(d)
+ }
+
+ function I(a, b, c) {
+ return function (d, e, f, g, h) {
+ e = wa(e[0], b, c);
+ return a(d, e, f, g, h)
+ }
+ }
+
+ function ea(a, d, e, f, g, l, k, p, r) {
+ function w(a, b, c, d) {
+ if (a) {
+ c && (a = I(a, c, d));
+ a.require = K.require;
+ a.directiveName = z;
+ if (S === K || K.$$isolateScope)a = Z(a, {isolateScope: !0});
+ k.push(a)
+ }
+ if (b) {
+ c && (b = I(b, c, d));
+ b.require = K.require;
+ b.directiveName = z;
+ if (S === K || K.$$isolateScope)b = Z(b, {isolateScope: !0});
+ p.push(b)
+ }
+ }
+
+ function L(a, b, c, d) {
+ var e, f = "data",
+ g = !1, l = c, k;
+ if (F(b)) {
+ k = b.match(h);
+ b = b.substring(k[0].length);
+ k[3] && (k[1] ? k[3] = null : k[1] = k[3]);
+ "^" === k[1] ? f = "inheritedData" : "^^" === k[1] && (f = "inheritedData", l = c.parent());
+ "?" === k[2] && (g = !0);
+ e = null;
+ d && "data" === f && (e = d[b]) && (e = e.instance);
+ e = e || l[f]("$" + b + "Controller");
+ if (!e && !g)throw ja("ctreq", b, a);
+ return e || null
+ }
+ x(b) && (e = [], s(b, function (b) {
+ e.push(L(a, b, c, d))
+ }));
+ return e
+ }
+
+ function v(a, c, f, g, h) {
+ function l(a, b, c) {
+ var d;
+ Va(a) || (c = b, b = a, a = t);
+ C && (d = P);
+ c || (c = C ? W.parent() : W);
+ return h(a, b, d, c, wa)
+ }
+
+ var r, w, u, A,
+ P, eb, W, I;
+ d === f ? (I = e, W = e.$$element) : (W = B(f), I = new Xb(W, e));
+ S && (A = c.$new(!0));
+ h && (eb = l, eb.$$boundTransclude = h);
+ J && (X = {}, P = {}, s(J, function (a) {
+ var b = {$scope: a === S || a.$$isolateScope ? A : c, $element: W, $attrs: I, $transclude: eb};
+ u = a.controller;
+ "@" == u && (u = I[a.name]);
+ b = n(u, b, !0, a.controllerAs);
+ P[a.name] = b;
+ C || W.data("$" + a.name + "Controller", b.instance);
+ X[a.name] = b
+ }));
+ if (S) {
+ E.$$addScopeInfo(W, A, !0, !(ka && (ka === S || ka === S.$$originalDirective)));
+ E.$$addScopeClass(W, !0);
+ g = X && X[S.name];
+ var xa = A;
+ g && g.identifier && !0 === S.bindToController &&
+ (xa = g.instance);
+ s(A.$$isolateBindings = S.$$isolateBindings, function (a, d) {
+ var e = a.attrName, f = a.optional, g, h, l, k;
+ switch (a.mode) {
+ case "@":
+ I.$observe(e, function (a) {
+ xa[d] = a
+ });
+ I.$$observers[e].$$scope = c;
+ I[e] && (xa[d] = b(I[e])(c));
+ break;
+ case "=":
+ if (f && !I[e])break;
+ h = O(I[e]);
+ k = h.literal ? fa : function (a, b) {
+ return a === b || a !== a && b !== b
+ };
+ l = h.assign || function () {
+ g = xa[d] = h(c);
+ throw ja("nonassign", I[e], S.name);
+ };
+ g = xa[d] = h(c);
+ f = function (a) {
+ k(a, xa[d]) || (k(a, g) ? l(c, a = xa[d]) : xa[d] = a);
+ return g = a
+ };
+ f.$stateful = !0;
+ f = a.collection ?
+ c.$watchCollection(I[e], f) : c.$watch(O(I[e], f), null, h.literal);
+ A.$on("$destroy", f);
+ break;
+ case "&":
+ h = O(I[e]), xa[d] = function (a) {
+ return h(c, a)
+ }
+ }
+ })
+ }
+ X && (s(X, function (a) {
+ a()
+ }), X = null);
+ g = 0;
+ for (r = k.length; g < r; g++)w = k[g], $(w, w.isolateScope ? A : c, W, I, w.require && L(w.directiveName, w.require, W, P), eb);
+ var wa = c;
+ S && (S.template || null === S.templateUrl) && (wa = A);
+ a && a(wa, f.childNodes, t, h);
+ for (g = p.length - 1; 0 <= g; g--)w = p[g], $(w, w.isolateScope ? A : c, W, I, w.require && L(w.directiveName, w.require, W, P), eb)
+ }
+
+ r = r || {};
+ for (var A = -Number.MAX_VALUE,
+ P, J = r.controllerDirectives, X, S = r.newIsolateScopeDirective, ka = r.templateDirective, ea = r.nonTlbTranscludeDirective, ca = !1, D = !1, C = r.hasElementTranscludeDirective, aa = e.$$element = B(d), K, z, N, Aa = f, Q, M = 0, R = a.length; M < R; M++) {
+ K = a[M];
+ var Pa = K.$$start, fb = K.$$end;
+ Pa && (aa = wa(d, Pa, fb));
+ N = t;
+ if (A > K.priority)break;
+ if (N = K.scope)K.templateUrl || (H(N) ? (Oa("new/isolated scope", S || P, K, aa), S = K) : Oa("new/isolated scope", S, K, aa)), P = P || K;
+ z = K.name;
+ !K.templateUrl && K.controller && (N = K.controller, J = J || {}, Oa("'" + z + "' controller", J[z],
+ K, aa), J[z] = K);
+ if (N = K.transclude)ca = !0, K.$$tlb || (Oa("transclusion", ea, K, aa), ea = K), "element" == N ? (C = !0, A = K.priority, N = aa, aa = e.$$element = B(Y.createComment(" " + z + ": " + e[z] + " ")), d = aa[0], V(g, Za.call(N, 0), d), Aa = E(N, f, A, l && l.name, {nonTlbTranscludeDirective: ea})) : (N = B(Tb(d)).contents(), aa.empty(), Aa = E(N, f));
+ if (K.template)if (D = !0, Oa("template", ka, K, aa), ka = K, N = G(K.template) ? K.template(aa, e) : K.template, N = Sc(N), K.replace) {
+ l = K;
+ N = Rb.test(N) ? Tc(Wb(K.templateNamespace, U(N))) : [];
+ d = N[0];
+ if (1 != N.length || d.nodeType !==
+ na)throw ja("tplrt", z, "");
+ V(g, aa, d);
+ R = {$attr: {}};
+ N = W(d, [], R);
+ var ba = a.splice(M + 1, a.length - (M + 1));
+ S && y(N);
+ a = a.concat(N).concat(ba);
+ Qc(e, R);
+ R = a.length
+ } else aa.html(N);
+ if (K.templateUrl)D = !0, Oa("template", ka, K, aa), ka = K, K.replace && (l = K), v = T(a.splice(M, a.length - M), aa, e, g, ca && Aa, k, p, {
+ controllerDirectives: J,
+ newIsolateScopeDirective: S,
+ templateDirective: ka,
+ nonTlbTranscludeDirective: ea
+ }), R = a.length; else if (K.compile)try {
+ Q = K.compile(aa, e, Aa), G(Q) ? w(null, Q, Pa, fb) : Q && w(Q.pre, Q.post, Pa, fb)
+ } catch (qf) {
+ c(qf, va(aa))
+ }
+ K.terminal &&
+ (v.terminal = !0, A = Math.max(A, K.priority))
+ }
+ v.scope = P && !0 === P.scope;
+ v.transcludeOnThisElement = ca;
+ v.elementTranscludeOnThisElement = C;
+ v.templateOnThisElement = D;
+ v.transclude = Aa;
+ r.hasElementTranscludeDirective = C;
+ return v
+ }
+
+ function y(a) {
+ for (var b = 0, c = a.length; b < c; b++) {
+ var d = b, e;
+ e = z(Object.create(a[b]), {$$isolateScope: !0});
+ a[d] = e
+ }
+ }
+
+ function ca(b, e, f, g, h, l, k) {
+ if (e === h)return null;
+ h = null;
+ if (d.hasOwnProperty(e)) {
+ var q;
+ e = a.get(e + "Directive");
+ for (var r = 0, n = e.length; r < n; r++)try {
+ if (q = e[r], (g === t || g > q.priority) && -1 !=
+ q.restrict.indexOf(f)) {
+ if (l) {
+ var w = {$$start: l, $$end: k};
+ q = z(Object.create(q), w)
+ }
+ b.push(q);
+ h = q
+ }
+ } catch (O) {
+ c(O)
+ }
+ }
+ return h
+ }
+
+ function D(b) {
+ if (d.hasOwnProperty(b))for (var c = a.get(b + "Directive"), e = 0, f = c.length; e < f; e++)if (b = c[e], b.multiElement)return !0;
+ return !1
+ }
+
+ function Qc(a, b) {
+ var c = b.$attr, d = a.$attr, e = a.$$element;
+ s(a, function (d, e) {
+ "$" != e.charAt(0) && (b[e] && b[e] !== d && (d += ("style" === e ? ";" : " ") + b[e]), a.$set(e, d, !0, c[e]))
+ });
+ s(b, function (b, f) {
+ "class" == f ? (P(e, b), a["class"] = (a["class"] ? a["class"] + " " : "") + b) : "style" ==
+ f ? (e.attr("style", e.attr("style") + ";" + b), a.style = (a.style ? a.style + ";" : "") + b) : "$" == f.charAt(0) || a.hasOwnProperty(f) || (a[f] = b, d[f] = c[f])
+ })
+ }
+
+ function T(a, b, c, d, e, f, g, h) {
+ var l = [], k, q, p = b[0], n = a.shift(), w = z({}, n, {
+ templateUrl: null,
+ transclude: null,
+ replace: null,
+ $$originalDirective: n
+ }), O = G(n.templateUrl) ? n.templateUrl(b, c) : n.templateUrl, u = n.templateNamespace;
+ b.empty();
+ r(L.getTrustedResourceUrl(O)).then(function (r) {
+ var L, v;
+ r = Sc(r);
+ if (n.replace) {
+ r = Rb.test(r) ? Tc(Wb(u, U(r))) : [];
+ L = r[0];
+ if (1 != r.length || L.nodeType !==
+ na)throw ja("tplrt", n.name, O);
+ r = {$attr: {}};
+ V(d, b, L);
+ var A = W(L, [], r);
+ H(n.scope) && y(A);
+ a = A.concat(a);
+ Qc(c, r)
+ } else L = p, b.html(r);
+ a.unshift(w);
+ k = ea(a, L, c, e, b, n, f, g, h);
+ s(d, function (a, c) {
+ a == L && (d[c] = b[0])
+ });
+ for (q = S(b[0].childNodes, e); l.length;) {
+ r = l.shift();
+ v = l.shift();
+ var J = l.shift(), E = l.shift(), A = b[0];
+ if (!r.$$destroyed) {
+ if (v !== p) {
+ var I = v.className;
+ h.hasElementTranscludeDirective && n.replace || (A = Tb(L));
+ V(J, B(v), A);
+ P(B(A), I)
+ }
+ v = k.transcludeOnThisElement ? X(r, k.transclude, E) : E;
+ k(q, r, A, d, v)
+ }
+ }
+ l = null
+ });
+ return function (a,
+ b, c, d, e) {
+ a = e;
+ b.$$destroyed || (l ? l.push(b, c, d, a) : (k.transcludeOnThisElement && (a = X(b, k.transclude, e)), k(q, b, c, d, a)))
+ }
+ }
+
+ function N(a, b) {
+ var c = b.priority - a.priority;
+ return 0 !== c ? c : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index
+ }
+
+ function Oa(a, b, c, d) {
+ if (b)throw ja("multidir", b.name, c.name, a, va(d));
+ }
+
+ function M(a, c) {
+ var d = b(c, !0);
+ d && a.push({
+ priority: 0, compile: function (a) {
+ a = a.parent();
+ var b = !!a.length;
+ b && E.$$addBindingClass(a);
+ return function (a, c) {
+ var e = c.parent();
+ b || E.$$addBindingClass(e);
+ E.$$addBindingInfo(e,
+ d.expressions);
+ a.$watch(d, function (a) {
+ c[0].nodeValue = a
+ })
+ }
+ }
+ })
+ }
+
+ function Wb(a, b) {
+ a = Q(a || "html");
+ switch (a) {
+ case "svg":
+ case "math":
+ var c = Y.createElement("div");
+ c.innerHTML = "<" + a + ">" + b + "</" + a + ">";
+ return c.childNodes[0].childNodes;
+ default:
+ return b
+ }
+ }
+
+ function R(a, b) {
+ if ("srcdoc" == b)return L.HTML;
+ var c = ua(a);
+ if ("xlinkHref" == b || "form" == c && "action" == b || "img" != c && ("src" == b || "ngSrc" == b))return L.RESOURCE_URL
+ }
+
+ function Pa(a, c, d, e, f) {
+ var h = R(a, e);
+ f = g[e] || f;
+ var k = b(d, !0, h, f);
+ if (k) {
+ if ("multiple" === e && "select" === ua(a))throw ja("selmulti",
+ va(a));
+ c.push({
+ priority: 100, compile: function () {
+ return {
+ pre: function (a, c, g) {
+ c = g.$$observers || (g.$$observers = {});
+ if (l.test(e))throw ja("nodomevents");
+ var p = g[e];
+ p !== d && (k = p && b(p, !0, h, f), d = p);
+ k && (g[e] = k(a), (c[e] || (c[e] = [])).$$inter = !0, (g.$$observers && g.$$observers[e].$$scope || a).$watch(k, function (a, b) {
+ "class" === e && a != b ? g.$updateClass(a, b) : g.$set(e, a)
+ }))
+ }
+ }
+ }
+ })
+ }
+ }
+
+ function V(a, b, c) {
+ var d = b[0], e = b.length, f = d.parentNode, g, h;
+ if (a)for (g = 0, h = a.length; g < h; g++)if (a[g] == d) {
+ a[g++] = c;
+ h = g + e - 1;
+ for (var l = a.length; g < l; g++,
+ h++)h < l ? a[g] = a[h] : delete a[g];
+ a.length -= e - 1;
+ a.context === d && (a.context = c);
+ break
+ }
+ f && f.replaceChild(c, d);
+ a = Y.createDocumentFragment();
+ a.appendChild(d);
+ B(c).data(B(d).data());
+ ra ? (Pb = !0, ra.cleanData([d])) : delete B.cache[d[B.expando]];
+ d = 1;
+ for (e = b.length; d < e; d++)f = b[d], B(f).remove(), a.appendChild(f), delete b[d];
+ b[0] = c;
+ b.length = 1
+ }
+
+ function Z(a, b) {
+ return z(function () {
+ return a.apply(null, arguments)
+ }, a, b)
+ }
+
+ function $(a, b, d, e, f, g) {
+ try {
+ a(b, d, e, f, g)
+ } catch (h) {
+ c(h, va(d))
+ }
+ }
+
+ var Xb = function (a, b) {
+ if (b) {
+ var c = Object.keys(b),
+ d, e, f;
+ d = 0;
+ for (e = c.length; d < e; d++)f = c[d], this[f] = b[f]
+ } else this.$attr = {};
+ this.$$element = a
+ };
+ Xb.prototype = {
+ $normalize: ya, $addClass: function (a) {
+ a && 0 < a.length && J.addClass(this.$$element, a)
+ }, $removeClass: function (a) {
+ a && 0 < a.length && J.removeClass(this.$$element, a)
+ }, $updateClass: function (a, b) {
+ var c = Uc(a, b);
+ c && c.length && J.addClass(this.$$element, c);
+ (c = Uc(b, a)) && c.length && J.removeClass(this.$$element, c)
+ }, $set: function (a, b, d, e) {
+ var f = this.$$element[0], g = Lc(f, a), h = kf(f, a), f = a;
+ g ? (this.$$element.prop(a, b), e = g) :
+ h && (this[h] = b, f = h);
+ this[a] = b;
+ e ? this.$attr[a] = e : (e = this.$attr[a]) || (this.$attr[a] = e = tc(a, "-"));
+ g = ua(this.$$element);
+ if ("a" === g && "href" === a || "img" === g && "src" === a)this[a] = b = A(b, "src" === a); else if ("img" === g && "srcset" === a) {
+ for (var g = "", h = U(b), l = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, l = /\s/.test(h) ? l : /(,)/, h = h.split(l), l = Math.floor(h.length / 2), k = 0; k < l; k++)var q = 2 * k, g = g + A(U(h[q]), !0), g = g + (" " + U(h[q + 1]));
+ h = U(h[2 * k]).split(/\s/);
+ g += A(U(h[0]), !0);
+ 2 === h.length && (g += " " + U(h[1]));
+ this[a] = b = g
+ }
+ !1 !== d && (null === b ||
+ b === t ? this.$$element.removeAttr(e) : this.$$element.attr(e, b));
+ (a = this.$$observers) && s(a[f], function (a) {
+ try {
+ a(b)
+ } catch (d) {
+ c(d)
+ }
+ })
+ }, $observe: function (a, b) {
+ var c = this, d = c.$$observers || (c.$$observers = ha()), e = d[a] || (d[a] = []);
+ e.push(b);
+ v.$evalAsync(function () {
+ !e.$$inter && c.hasOwnProperty(a) && b(c[a])
+ });
+ return function () {
+ Xa(e, b)
+ }
+ }
+ };
+ var Aa = b.startSymbol(), ka = b.endSymbol(), Sc = "{{" == Aa || "}}" == ka ? oa : function (a) {
+ return a.replace(/\{\{/g, Aa).replace(/}}/g, ka)
+ }, fb = /^ngAttr[A-Z]/;
+ E.$$addBindingInfo = k ? function (a, b) {
+ var c =
+ a.data("$binding") || [];
+ x(b) ? c = c.concat(b) : c.push(b);
+ a.data("$binding", c)
+ } : C;
+ E.$$addBindingClass = k ? function (a) {
+ P(a, "ng-binding")
+ } : C;
+ E.$$addScopeInfo = k ? function (a, b, c, d) {
+ a.data(c ? d ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope", b)
+ } : C;
+ E.$$addScopeClass = k ? function (a, b) {
+ P(a, b ? "ng-isolate-scope" : "ng-scope")
+ } : C;
+ return E
+ }]
+ }
+
+ function ya(b) {
+ return cb(b.replace(Rc, ""))
+ }
+
+ function Uc(b, a) {
+ var c = "", d = b.split(/\s+/), e = a.split(/\s+/), f = 0;
+ a:for (; f < d.length; f++) {
+ for (var g = d[f], h = 0; h < e.length; h++)if (g == e[h])continue a;
+ c += (0 < c.length ? " " : "") + g
+ }
+ return c
+ }
+
+ function Tc(b) {
+ b = B(b);
+ var a = b.length;
+ if (1 >= a)return b;
+ for (; a--;)8 === b[a].nodeType && rf.call(b, a, 1);
+ return b
+ }
+
+ function Fe() {
+ var b = {}, a = !1, c = /^(\S+)(\s+as\s+(\w+))?$/;
+ this.register = function (a, c) {
+ Ma(a, "controller");
+ H(a) ? z(b, a) : b[a] = c
+ };
+ this.allowGlobals = function () {
+ a = !0
+ };
+ this.$get = ["$injector", "$window", function (d, e) {
+ function f(a, b, c, d) {
+ if (!a || !H(a.$scope))throw T("$controller")("noscp", d, b);
+ a.$scope[b] = c
+ }
+
+ return function (g, h, l, k) {
+ var m, p, q;
+ l = !0 === l;
+ k && F(k) && (q = k);
+ F(g) &&
+ (k = g.match(c), p = k[1], q = q || k[3], g = b.hasOwnProperty(p) ? b[p] : vc(h.$scope, p, !0) || (a ? vc(e, p, !0) : t), sb(g, p, !0));
+ if (l)return l = (x(g) ? g[g.length - 1] : g).prototype, m = Object.create(l), q && f(h, q, m, p || g.name), z(function () {
+ d.invoke(g, m, h, p);
+ return m
+ }, {instance: m, identifier: q});
+ m = d.instantiate(g, h, p);
+ q && f(h, q, m, p || g.name);
+ return m
+ }
+ }]
+ }
+
+ function Ge() {
+ this.$get = ["$window", function (b) {
+ return B(b.document)
+ }]
+ }
+
+ function He() {
+ this.$get = ["$log", function (b) {
+ return function (a, c) {
+ b.error.apply(b, arguments)
+ }
+ }]
+ }
+
+ function Yb(b, a) {
+ if (F(b)) {
+ var c =
+ b.replace(sf, "").trim();
+ if (c) {
+ var d = a("Content-Type");
+ (d = d && 0 === d.indexOf(Vc)) || (d = (d = c.match(tf)) && uf[d[0]].test(c));
+ d && (b = oc(c))
+ }
+ }
+ return b
+ }
+
+ function Wc(b) {
+ var a = ha(), c, d, e;
+ if (!b)return a;
+ s(b.split("\n"), function (b) {
+ e = b.indexOf(":");
+ c = Q(U(b.substr(0, e)));
+ d = U(b.substr(e + 1));
+ c && (a[c] = a[c] ? a[c] + ", " + d : d)
+ });
+ return a
+ }
+
+ function Xc(b) {
+ var a = H(b) ? b : t;
+ return function (c) {
+ a || (a = Wc(b));
+ return c ? (c = a[Q(c)], void 0 === c && (c = null), c) : a
+ }
+ }
+
+ function Yc(b, a, c, d) {
+ if (G(d))return d(b, a, c);
+ s(d, function (d) {
+ b = d(b, a, c)
+ });
+ return b
+ }
+
+ function Ke() {
+ var b = this.defaults = {
+ transformResponse: [Yb],
+ transformRequest: [function (a) {
+ return H(a) && "[object File]" !== Da.call(a) && "[object Blob]" !== Da.call(a) && "[object FormData]" !== Da.call(a) ? $a(a) : a
+ }],
+ headers: {common: {Accept: "application/json, text/plain, */*"}, post: qa(Zb), put: qa(Zb), patch: qa(Zb)},
+ xsrfCookieName: "XSRF-TOKEN",
+ xsrfHeaderName: "X-XSRF-TOKEN"
+ }, a = !1;
+ this.useApplyAsync = function (b) {
+ return y(b) ? (a = !!b, this) : a
+ };
+ var c = this.interceptors = [];
+ this.$get = ["$httpBackend", "$browser", "$cacheFactory",
+ "$rootScope", "$q", "$injector", function (d, e, f, g, h, l) {
+ function k(a) {
+ function c(a) {
+ var b = z({}, a);
+ b.data = a.data ? Yc(a.data, a.headers, a.status, e.transformResponse) : a.data;
+ a = a.status;
+ return 200 <= a && 300 > a ? b : h.reject(b)
+ }
+
+ function d(a) {
+ var b, c = {};
+ s(a, function (a, d) {
+ G(a) ? (b = a(), null != b && (c[d] = b)) : c[d] = a
+ });
+ return c
+ }
+
+ if (!ga.isObject(a))throw T("$http")("badreq", a);
+ var e = z({
+ method: "get",
+ transformRequest: b.transformRequest,
+ transformResponse: b.transformResponse
+ }, a);
+ e.headers = function (a) {
+ var c = b.headers, e = z({}, a.headers),
+ f, g, c = z({}, c.common, c[Q(a.method)]);
+ a:for (f in c) {
+ a = Q(f);
+ for (g in e)if (Q(g) === a)continue a;
+ e[f] = c[f]
+ }
+ return d(e)
+ }(a);
+ e.method = ub(e.method);
+ var f = [function (a) {
+ var d = a.headers, e = Yc(a.data, Xc(d), t, a.transformRequest);
+ D(e) && s(d, function (a, b) {
+ "content-type" === Q(b) && delete d[b]
+ });
+ D(a.withCredentials) && !D(b.withCredentials) && (a.withCredentials = b.withCredentials);
+ return m(a, e).then(c, c)
+ }, t], g = h.when(e);
+ for (s(u, function (a) {
+ (a.request || a.requestError) && f.unshift(a.request, a.requestError);
+ (a.response || a.responseError) &&
+ f.push(a.response, a.responseError)
+ }); f.length;) {
+ a = f.shift();
+ var l = f.shift(), g = g.then(a, l)
+ }
+ g.success = function (a) {
+ g.then(function (b) {
+ a(b.data, b.status, b.headers, e)
+ });
+ return g
+ };
+ g.error = function (a) {
+ g.then(null, function (b) {
+ a(b.data, b.status, b.headers, e)
+ });
+ return g
+ };
+ return g
+ }
+
+ function m(c, f) {
+ function l(b, c, d, e) {
+ function f() {
+ m(c, b, d, e)
+ }
+
+ P && (200 <= b && 300 > b ? P.put(X, [b, c, Wc(d), e]) : P.remove(X));
+ a ? g.$applyAsync(f) : (f(), g.$$phase || g.$apply())
+ }
+
+ function m(a, b, d, e) {
+ b = Math.max(b, 0);
+ (200 <= b && 300 > b ? J.resolve : J.reject)({
+ data: a,
+ status: b, headers: Xc(d), config: c, statusText: e
+ })
+ }
+
+ function w(a) {
+ m(a.data, a.status, qa(a.headers()), a.statusText)
+ }
+
+ function u() {
+ var a = k.pendingRequests.indexOf(c);
+ -1 !== a && k.pendingRequests.splice(a, 1)
+ }
+
+ var J = h.defer(), A = J.promise, P, E, s = c.headers, X = p(c.url, c.params);
+ k.pendingRequests.push(c);
+ A.then(u, u);
+ !c.cache && !b.cache || !1 === c.cache || "GET" !== c.method && "JSONP" !== c.method || (P = H(c.cache) ? c.cache : H(b.cache) ? b.cache : q);
+ P && (E = P.get(X), y(E) ? E && G(E.then) ? E.then(w, w) : x(E) ? m(E[1], E[0], qa(E[2]), E[3]) : m(E, 200, {},
+ "OK") : P.put(X, A));
+ D(E) && ((E = Zc(c.url) ? e.cookies()[c.xsrfCookieName || b.xsrfCookieName] : t) && (s[c.xsrfHeaderName || b.xsrfHeaderName] = E), d(c.method, X, f, l, s, c.timeout, c.withCredentials, c.responseType));
+ return A
+ }
+
+ function p(a, b) {
+ if (!b)return a;
+ var c = [];
+ Ed(b, function (a, b) {
+ null === a || D(a) || (x(a) || (a = [a]), s(a, function (a) {
+ H(a) && (a = pa(a) ? a.toISOString() : $a(a));
+ c.push(Fa(b) + "=" + Fa(a))
+ }))
+ });
+ 0 < c.length && (a += (-1 == a.indexOf("?") ? "?" : "&") + c.join("&"));
+ return a
+ }
+
+ var q = f("$http"), u = [];
+ s(c, function (a) {
+ u.unshift(F(a) ? l.get(a) :
+ l.invoke(a))
+ });
+ k.pendingRequests = [];
+ (function (a) {
+ s(arguments, function (a) {
+ k[a] = function (b, c) {
+ return k(z(c || {}, {method: a, url: b}))
+ }
+ })
+ })("get", "delete", "head", "jsonp");
+ (function (a) {
+ s(arguments, function (a) {
+ k[a] = function (b, c, d) {
+ return k(z(d || {}, {method: a, url: b, data: c}))
+ }
+ })
+ })("post", "put", "patch");
+ k.defaults = b;
+ return k
+ }]
+ }
+
+ function vf() {
+ return new M.XMLHttpRequest
+ }
+
+ function Le() {
+ this.$get = ["$browser", "$window", "$document", function (b, a, c) {
+ return wf(b, vf, b.defer, a.angular.callbacks, c[0])
+ }]
+ }
+
+ function wf(b, a, c,
+ d, e) {
+ function f(a, b, c) {
+ var f = e.createElement("script"), m = null;
+ f.type = "text/javascript";
+ f.src = a;
+ f.async = !0;
+ m = function (a) {
+ f.removeEventListener("load", m, !1);
+ f.removeEventListener("error", m, !1);
+ e.body.removeChild(f);
+ f = null;
+ var g = -1, u = "unknown";
+ a && ("load" !== a.type || d[b].called || (a = {type: "error"}), u = a.type, g = "error" === a.type ? 404 : 200);
+ c && c(g, u)
+ };
+ f.addEventListener("load", m, !1);
+ f.addEventListener("error", m, !1);
+ e.body.appendChild(f);
+ return m
+ }
+
+ return function (e, h, l, k, m, p, q, u) {
+ function r() {
+ v && v();
+ w && w.abort()
+ }
+
+ function O(a, d, e, f, g) {
+ J !== t && c.cancel(J);
+ v = w = null;
+ a(d, e, f, g);
+ b.$$completeOutstandingRequest(C)
+ }
+
+ b.$$incOutstandingRequestCount();
+ h = h || b.url();
+ if ("jsonp" == Q(e)) {
+ var n = "_" + (d.counter++).toString(36);
+ d[n] = function (a) {
+ d[n].data = a;
+ d[n].called = !0
+ };
+ var v = f(h.replace("JSON_CALLBACK", "angular.callbacks." + n), n, function (a, b) {
+ O(k, a, d[n].data, "", b);
+ d[n] = C
+ })
+ } else {
+ var w = a();
+ w.open(e, h, !0);
+ s(m, function (a, b) {
+ y(a) && w.setRequestHeader(b, a)
+ });
+ w.onload = function () {
+ var a = w.statusText || "", b = "response"in w ? w.response : w.responseText,
+ c = 1223 === w.status ? 204 : w.status;
+ 0 === c && (c = b ? 200 : "file" == Ba(h).protocol ? 404 : 0);
+ O(k, c, b, w.getAllResponseHeaders(), a)
+ };
+ e = function () {
+ O(k, -1, null, null, "")
+ };
+ w.onerror = e;
+ w.onabort = e;
+ q && (w.withCredentials = !0);
+ if (u)try {
+ w.responseType = u
+ } catch (L) {
+ if ("json" !== u)throw L;
+ }
+ w.send(l || null)
+ }
+ if (0 < p)var J = c(r, p); else p && G(p.then) && p.then(r)
+ }
+ }
+
+ function Ie() {
+ var b = "{{", a = "}}";
+ this.startSymbol = function (a) {
+ return a ? (b = a, this) : b
+ };
+ this.endSymbol = function (b) {
+ return b ? (a = b, this) : a
+ };
+ this.$get = ["$parse", "$exceptionHandler", "$sce",
+ function (c, d, e) {
+ function f(a) {
+ return "\\\\\\" + a
+ }
+
+ function g(f, g, u, r) {
+ function O(c) {
+ return c.replace(k, b).replace(m, a)
+ }
+
+ function n(a) {
+ try {
+ var b = a;
+ a = u ? e.getTrusted(u, b) : e.valueOf(b);
+ var c;
+ if (r && !y(a))c = a; else if (null == a)c = ""; else {
+ switch (typeof a) {
+ case "string":
+ break;
+ case "number":
+ a = "" + a;
+ break;
+ default:
+ a = $a(a)
+ }
+ c = a
+ }
+ return c
+ } catch (g) {
+ c = $b("interr", f, g.toString()), d(c)
+ }
+ }
+
+ r = !!r;
+ for (var v, w, L = 0, J = [], A = [], P = f.length, E = [], s = []; L < P;)if (-1 != (v = f.indexOf(b, L)) && -1 != (w = f.indexOf(a, v + h)))L !== v && E.push(O(f.substring(L,
+ v))), L = f.substring(v + h, w), J.push(L), A.push(c(L, n)), L = w + l, s.push(E.length), E.push(""); else {
+ L !== P && E.push(O(f.substring(L)));
+ break
+ }
+ if (u && 1 < E.length)throw $b("noconcat", f);
+ if (!g || J.length) {
+ var X = function (a) {
+ for (var b = 0, c = J.length; b < c; b++) {
+ if (r && D(a[b]))return;
+ E[s[b]] = a[b]
+ }
+ return E.join("")
+ };
+ return z(function (a) {
+ var b = 0, c = J.length, e = Array(c);
+ try {
+ for (; b < c; b++)e[b] = A[b](a);
+ return X(e)
+ } catch (g) {
+ a = $b("interr", f, g.toString()), d(a)
+ }
+ }, {
+ exp: f, expressions: J, $$watchDelegate: function (a, b, c) {
+ var d;
+ return a.$watchGroup(A,
+ function (c, e) {
+ var f = X(c);
+ G(b) && b.call(this, f, c !== e ? d : f, a);
+ d = f
+ }, c)
+ }
+ })
+ }
+ }
+
+ var h = b.length, l = a.length, k = new RegExp(b.replace(/./g, f), "g"), m = new RegExp(a.replace(/./g, f), "g");
+ g.startSymbol = function () {
+ return b
+ };
+ g.endSymbol = function () {
+ return a
+ };
+ return g
+ }]
+ }
+
+ function Je() {
+ this.$get = ["$rootScope", "$window", "$q", "$$q", function (b, a, c, d) {
+ function e(e, h, l, k) {
+ var m = a.setInterval, p = a.clearInterval, q = 0, u = y(k) && !k, r = (u ? d : c).defer(), O = r.promise;
+ l = y(l) ? l : 0;
+ O.then(null, null, e);
+ O.$$intervalId = m(function () {
+ r.notify(q++);
+ 0 <
+ l && q >= l && (r.resolve(q), p(O.$$intervalId), delete f[O.$$intervalId]);
+ u || b.$apply()
+ }, h);
+ f[O.$$intervalId] = r;
+ return O
+ }
+
+ var f = {};
+ e.cancel = function (b) {
+ return b && b.$$intervalId in f ? (f[b.$$intervalId].reject("canceled"), a.clearInterval(b.$$intervalId), delete f[b.$$intervalId], !0) : !1
+ };
+ return e
+ }]
+ }
+
+ function Rd() {
+ this.$get = function () {
+ return {
+ id: "en-us", NUMBER_FORMATS: {
+ DECIMAL_SEP: ".",
+ GROUP_SEP: ",",
+ PATTERNS: [{
+ minInt: 1,
+ minFrac: 0,
+ maxFrac: 3,
+ posPre: "",
+ posSuf: "",
+ negPre: "-",
+ negSuf: "",
+ gSize: 3,
+ lgSize: 3
+ }, {
+ minInt: 1, minFrac: 2,
+ maxFrac: 2, posPre: "\u00a4", posSuf: "", negPre: "(\u00a4", negSuf: ")", gSize: 3, lgSize: 3
+ }],
+ CURRENCY_SYM: "$"
+ }, DATETIME_FORMATS: {
+ MONTH: "January February March April May June July August September October November December".split(" "),
+ SHORTMONTH: "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
+ DAY: "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
+ SHORTDAY: "Sun Mon Tue Wed Thu Fri Sat".split(" "),
+ AMPMS: ["AM", "PM"],
+ medium: "MMM d, y h:mm:ss a",
+ "short": "M/d/yy h:mm a",
+ fullDate: "EEEE, MMMM d, y",
+ longDate: "MMMM d, y",
+ mediumDate: "MMM d, y",
+ shortDate: "M/d/yy",
+ mediumTime: "h:mm:ss a",
+ shortTime: "h:mm a"
+ }, pluralCat: function (b) {
+ return 1 === b ? "one" : "other"
+ }
+ }
+ }
+ }
+
+ function ac(b) {
+ b = b.split("/");
+ for (var a = b.length; a--;)b[a] = qb(b[a]);
+ return b.join("/")
+ }
+
+ function $c(b, a) {
+ var c = Ba(b);
+ a.$$protocol = c.protocol;
+ a.$$host = c.hostname;
+ a.$$port = ba(c.port) || xf[c.protocol] || null
+ }
+
+ function ad(b, a) {
+ var c = "/" !== b.charAt(0);
+ c && (b = "/" + b);
+ var d = Ba(b);
+ a.$$path = decodeURIComponent(c && "/" === d.pathname.charAt(0) ? d.pathname.substring(1) :
+ d.pathname);
+ a.$$search = qc(d.search);
+ a.$$hash = decodeURIComponent(d.hash);
+ a.$$path && "/" != a.$$path.charAt(0) && (a.$$path = "/" + a.$$path)
+ }
+
+ function za(b, a) {
+ if (0 === a.indexOf(b))return a.substr(b.length)
+ }
+
+ function Ha(b) {
+ var a = b.indexOf("#");
+ return -1 == a ? b : b.substr(0, a)
+ }
+
+ function bd(b) {
+ return b.replace(/(#.+)|#$/, "$1")
+ }
+
+ function bc(b) {
+ return b.substr(0, Ha(b).lastIndexOf("/") + 1)
+ }
+
+ function cc(b, a) {
+ this.$$html5 = !0;
+ a = a || "";
+ var c = bc(b);
+ $c(b, this);
+ this.$$parse = function (a) {
+ var b = za(c, a);
+ if (!F(b))throw Fb("ipthprfx", a, c);
+ ad(b, this);
+ this.$$path || (this.$$path = "/");
+ this.$$compose()
+ };
+ this.$$compose = function () {
+ var a = Nb(this.$$search), b = this.$$hash ? "#" + qb(this.$$hash) : "";
+ this.$$url = ac(this.$$path) + (a ? "?" + a : "") + b;
+ this.$$absUrl = c + this.$$url.substr(1)
+ };
+ this.$$parseLinkUrl = function (d, e) {
+ if (e && "#" === e[0])return this.hash(e.slice(1)), !0;
+ var f, g;
+ (f = za(b, d)) !== t ? (g = f, g = (f = za(a, f)) !== t ? c + (za("/", f) || f) : b + g) : (f = za(c, d)) !== t ? g = c + f : c == d + "/" && (g = c);
+ g && this.$$parse(g);
+ return !!g
+ }
+ }
+
+ function dc(b, a) {
+ var c = bc(b);
+ $c(b, this);
+ this.$$parse = function (d) {
+ d =
+ za(b, d) || za(c, d);
+ var e;
+ "#" === d.charAt(0) ? (e = za(a, d), D(e) && (e = d)) : e = this.$$html5 ? d : "";
+ ad(e, this);
+ d = this.$$path;
+ var f = /^\/[A-Z]:(\/.*)/;
+ 0 === e.indexOf(b) && (e = e.replace(b, ""));
+ f.exec(e) || (d = (e = f.exec(d)) ? e[1] : d);
+ this.$$path = d;
+ this.$$compose()
+ };
+ this.$$compose = function () {
+ var c = Nb(this.$$search), e = this.$$hash ? "#" + qb(this.$$hash) : "";
+ this.$$url = ac(this.$$path) + (c ? "?" + c : "") + e;
+ this.$$absUrl = b + (this.$$url ? a + this.$$url : "")
+ };
+ this.$$parseLinkUrl = function (a, c) {
+ return Ha(b) == Ha(a) ? (this.$$parse(a), !0) : !1
+ }
+ }
+
+ function cd(b,
+ a) {
+ this.$$html5 = !0;
+ dc.apply(this, arguments);
+ var c = bc(b);
+ this.$$parseLinkUrl = function (d, e) {
+ if (e && "#" === e[0])return this.hash(e.slice(1)), !0;
+ var f, g;
+ b == Ha(d) ? f = d : (g = za(c, d)) ? f = b + a + g : c === d + "/" && (f = c);
+ f && this.$$parse(f);
+ return !!f
+ };
+ this.$$compose = function () {
+ var c = Nb(this.$$search), e = this.$$hash ? "#" + qb(this.$$hash) : "";
+ this.$$url = ac(this.$$path) + (c ? "?" + c : "") + e;
+ this.$$absUrl = b + a + this.$$url
+ }
+ }
+
+ function Gb(b) {
+ return function () {
+ return this[b]
+ }
+ }
+
+ function dd(b, a) {
+ return function (c) {
+ if (D(c))return this[b];
+ this[b] =
+ a(c);
+ this.$$compose();
+ return this
+ }
+ }
+
+ function Me() {
+ var b = "", a = {enabled: !1, requireBase: !0, rewriteLinks: !0};
+ this.hashPrefix = function (a) {
+ return y(a) ? (b = a, this) : b
+ };
+ this.html5Mode = function (b) {
+ return Wa(b) ? (a.enabled = b, this) : H(b) ? (Wa(b.enabled) && (a.enabled = b.enabled), Wa(b.requireBase) && (a.requireBase = b.requireBase), Wa(b.rewriteLinks) && (a.rewriteLinks = b.rewriteLinks), this) : a
+ };
+ this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function (c, d, e, f, g) {
+ function h(a, b, c) {
+ var e = k.url(), f = k.$$state;
+ try {
+ d.url(a, b, c), k.$$state = d.state()
+ } catch (g) {
+ throw k.url(e), k.$$state = f, g;
+ }
+ }
+
+ function l(a, b) {
+ c.$broadcast("$locationChangeSuccess", k.absUrl(), a, k.$$state, b)
+ }
+
+ var k, m;
+ m = d.baseHref();
+ var p = d.url(), q;
+ if (a.enabled) {
+ if (!m && a.requireBase)throw Fb("nobase");
+ q = p.substring(0, p.indexOf("/", p.indexOf("//") + 2)) + (m || "/");
+ m = e.history ? cc : cd
+ } else q = Ha(p), m = dc;
+ k = new m(q, "#" + b);
+ k.$$parseLinkUrl(p, p);
+ k.$$state = d.state();
+ var u = /^\s*(javascript|mailto):/i;
+ f.on("click", function (b) {
+ if (a.rewriteLinks && !b.ctrlKey && !b.metaKey &&
+ 2 != b.which) {
+ for (var e = B(b.target); "a" !== ua(e[0]);)if (e[0] === f[0] || !(e = e.parent())[0])return;
+ var h = e.prop("href"), l = e.attr("href") || e.attr("xlink:href");
+ H(h) && "[object SVGAnimatedString]" === h.toString() && (h = Ba(h.animVal).href);
+ u.test(h) || !h || e.attr("target") || b.isDefaultPrevented() || !k.$$parseLinkUrl(h, l) || (b.preventDefault(), k.absUrl() != d.url() && (c.$apply(), g.angular["ff-684208-preventDefault"] = !0))
+ }
+ });
+ k.absUrl() != p && d.url(k.absUrl(), !0);
+ var r = !0;
+ d.onUrlChange(function (a, b) {
+ c.$evalAsync(function () {
+ var d =
+ k.absUrl(), e = k.$$state, f;
+ k.$$parse(a);
+ k.$$state = b;
+ f = c.$broadcast("$locationChangeStart", a, d, b, e).defaultPrevented;
+ k.absUrl() === a && (f ? (k.$$parse(d), k.$$state = e, h(d, !1, e)) : (r = !1, l(d, e)))
+ });
+ c.$$phase || c.$digest()
+ });
+ c.$watch(function () {
+ var a = bd(d.url()), b = bd(k.absUrl()), f = d.state(), g = k.$$replace, q = a !== b || k.$$html5 && e.history && f !== k.$$state;
+ if (r || q)r = !1, c.$evalAsync(function () {
+ var b = k.absUrl(), d = c.$broadcast("$locationChangeStart", b, a, k.$$state, f).defaultPrevented;
+ k.absUrl() === b && (d ? (k.$$parse(a), k.$$state =
+ f) : (q && h(b, g, f === k.$$state ? null : k.$$state), l(a, f)))
+ });
+ k.$$replace = !1
+ });
+ return k
+ }]
+ }
+
+ function Ne() {
+ var b = !0, a = this;
+ this.debugEnabled = function (a) {
+ return y(a) ? (b = a, this) : b
+ };
+ this.$get = ["$window", function (c) {
+ function d(a) {
+ a instanceof Error && (a.stack ? a = a.message && -1 === a.stack.indexOf(a.message) ? "Error: " + a.message + "\n" + a.stack : a.stack : a.sourceURL && (a = a.message + "\n" + a.sourceURL + ":" + a.line));
+ return a
+ }
+
+ function e(a) {
+ var b = c.console || {}, e = b[a] || b.log || C;
+ a = !1;
+ try {
+ a = !!e.apply
+ } catch (l) {
+ }
+ return a ? function () {
+ var a =
+ [];
+ s(arguments, function (b) {
+ a.push(d(b))
+ });
+ return e.apply(b, a)
+ } : function (a, b) {
+ e(a, null == b ? "" : b)
+ }
+ }
+
+ return {
+ log: e("log"), info: e("info"), warn: e("warn"), error: e("error"), debug: function () {
+ var c = e("debug");
+ return function () {
+ b && c.apply(a, arguments)
+ }
+ }()
+ }
+ }]
+ }
+
+ function sa(b, a) {
+ if ("__defineGetter__" === b || "__defineSetter__" === b || "__lookupGetter__" === b || "__lookupSetter__" === b || "__proto__" === b)throw la("isecfld", a);
+ return b
+ }
+
+ function ta(b, a) {
+ if (b) {
+ if (b.constructor === b)throw la("isecfn", a);
+ if (b.window === b)throw la("isecwindow",
+ a);
+ if (b.children && (b.nodeName || b.prop && b.attr && b.find))throw la("isecdom", a);
+ if (b === Object)throw la("isecobj", a);
+ }
+ return b
+ }
+
+ function ec(b) {
+ return b.constant
+ }
+
+ function gb(b, a, c, d) {
+ ta(b, d);
+ a = a.split(".");
+ for (var e, f = 0; 1 < a.length; f++) {
+ e = sa(a.shift(), d);
+ var g = ta(b[e], d);
+ g || (g = {}, b[e] = g);
+ b = g
+ }
+ e = sa(a.shift(), d);
+ ta(b[e], d);
+ return b[e] = c
+ }
+
+ function Qa(b) {
+ return "constructor" == b
+ }
+
+ function ed(b, a, c, d, e, f, g) {
+ sa(b, f);
+ sa(a, f);
+ sa(c, f);
+ sa(d, f);
+ sa(e, f);
+ var h = function (a) {
+ return ta(a, f)
+ }, l = g || Qa(b) ? h : oa, k = g || Qa(a) ? h : oa, m =
+ g || Qa(c) ? h : oa, p = g || Qa(d) ? h : oa, q = g || Qa(e) ? h : oa;
+ return function (f, g) {
+ var h = g && g.hasOwnProperty(b) ? g : f;
+ if (null == h)return h;
+ h = l(h[b]);
+ if (!a)return h;
+ if (null == h)return t;
+ h = k(h[a]);
+ if (!c)return h;
+ if (null == h)return t;
+ h = m(h[c]);
+ if (!d)return h;
+ if (null == h)return t;
+ h = p(h[d]);
+ return e ? null == h ? t : h = q(h[e]) : h
+ }
+ }
+
+ function yf(b, a) {
+ return function (c, d) {
+ return b(c, d, ta, a)
+ }
+ }
+
+ function zf(b, a, c) {
+ var d = a.expensiveChecks, e = d ? Af : Bf, f = e[b];
+ if (f)return f;
+ var g = b.split("."), h = g.length;
+ if (a.csp)f = 6 > h ? ed(g[0], g[1], g[2], g[3], g[4],
+ c, d) : function (a, b) {
+ var e = 0, f;
+ do f = ed(g[e++], g[e++], g[e++], g[e++], g[e++], c, d)(a, b), b = t, a = f; while (e < h);
+ return f
+ }; else {
+ var l = "";
+ d && (l += "s = eso(s, fe);\nl = eso(l, fe);\n");
+ var k = d;
+ s(g, function (a, b) {
+ sa(a, c);
+ var e = (b ? "s" : '((l&&l.hasOwnProperty("' + a + '"))?l:s)') + "." + a;
+ if (d || Qa(a))e = "eso(" + e + ", fe)", k = !0;
+ l += "if(s == null) return undefined;\ns=" + e + ";\n"
+ });
+ l += "return s;";
+ a = new Function("s", "l", "eso", "fe", l);
+ a.toString = da(l);
+ k && (a = yf(a, c));
+ f = a
+ }
+ f.sharedGetter = !0;
+ f.assign = function (a, c) {
+ return gb(a, b, c, b)
+ };
+ return e[b] =
+ f
+ }
+
+ function fc(b) {
+ return G(b.valueOf) ? b.valueOf() : Cf.call(b)
+ }
+
+ function Oe() {
+ var b = ha(), a = ha();
+ this.$get = ["$filter", "$sniffer", function (c, d) {
+ function e(a) {
+ var b = a;
+ a.sharedGetter && (b = function (b, c) {
+ return a(b, c)
+ }, b.literal = a.literal, b.constant = a.constant, b.assign = a.assign);
+ return b
+ }
+
+ function f(a, b) {
+ for (var c = 0, d = a.length; c < d; c++) {
+ var e = a[c];
+ e.constant || (e.inputs ? f(e.inputs, b) : -1 === b.indexOf(e) && b.push(e))
+ }
+ return b
+ }
+
+ function g(a, b) {
+ return null == a || null == b ? a === b : "object" === typeof a && (a = fc(a), "object" === typeof a) ?
+ !1 : a === b || a !== a && b !== b
+ }
+
+ function h(a, b, c, d) {
+ var e = d.$$inputs || (d.$$inputs = f(d.inputs, [])), h;
+ if (1 === e.length) {
+ var l = g, e = e[0];
+ return a.$watch(function (a) {
+ var b = e(a);
+ g(b, l) || (h = d(a), l = b && fc(b));
+ return h
+ }, b, c)
+ }
+ for (var k = [], q = 0, p = e.length; q < p; q++)k[q] = g;
+ return a.$watch(function (a) {
+ for (var b = !1, c = 0, f = e.length; c < f; c++) {
+ var l = e[c](a);
+ if (b || (b = !g(l, k[c])))k[c] = l && fc(l)
+ }
+ b && (h = d(a));
+ return h
+ }, b, c)
+ }
+
+ function l(a, b, c, d) {
+ var e, f;
+ return e = a.$watch(function (a) {
+ return d(a)
+ }, function (a, c, d) {
+ f = a;
+ G(b) && b.apply(this, arguments);
+ y(a) && d.$$postDigest(function () {
+ y(f) && e()
+ })
+ }, c)
+ }
+
+ function k(a, b, c, d) {
+ function e(a) {
+ var b = !0;
+ s(a, function (a) {
+ y(a) || (b = !1)
+ });
+ return b
+ }
+
+ var f, g;
+ return f = a.$watch(function (a) {
+ return d(a)
+ }, function (a, c, d) {
+ g = a;
+ G(b) && b.call(this, a, c, d);
+ e(a) && d.$$postDigest(function () {
+ e(g) && f()
+ })
+ }, c)
+ }
+
+ function m(a, b, c, d) {
+ var e;
+ return e = a.$watch(function (a) {
+ return d(a)
+ }, function (a, c, d) {
+ G(b) && b.apply(this, arguments);
+ e()
+ }, c)
+ }
+
+ function p(a, b) {
+ if (!b)return a;
+ var c = a.$$watchDelegate, c = c !== k && c !== l ? function (c, d) {
+ var e = a(c, d);
+ return b(e,
+ c, d)
+ } : function (c, d) {
+ var e = a(c, d), f = b(e, c, d);
+ return y(e) ? f : e
+ };
+ a.$$watchDelegate && a.$$watchDelegate !== h ? c.$$watchDelegate = a.$$watchDelegate : b.$stateful || (c.$$watchDelegate = h, c.inputs = [a]);
+ return c
+ }
+
+ var q = {csp: d.csp, expensiveChecks: !1}, u = {csp: d.csp, expensiveChecks: !0};
+ return function (d, f, g) {
+ var v, w, L;
+ switch (typeof d) {
+ case "string":
+ L = d = d.trim();
+ var J = g ? a : b;
+ v = J[L];
+ v || (":" === d.charAt(0) && ":" === d.charAt(1) && (w = !0, d = d.substring(2)), g = g ? u : q, v = new gc(g), v = (new hb(v, c, g)).parse(d), v.constant ? v.$$watchDelegate =
+ m : w ? (v = e(v), v.$$watchDelegate = v.literal ? k : l) : v.inputs && (v.$$watchDelegate = h), J[L] = v);
+ return p(v, f);
+ case "function":
+ return p(d, f);
+ default:
+ return p(C, f)
+ }
+ }
+ }]
+ }
+
+ function Qe() {
+ this.$get = ["$rootScope", "$exceptionHandler", function (b, a) {
+ return fd(function (a) {
+ b.$evalAsync(a)
+ }, a)
+ }]
+ }
+
+ function Re() {
+ this.$get = ["$browser", "$exceptionHandler", function (b, a) {
+ return fd(function (a) {
+ b.defer(a)
+ }, a)
+ }]
+ }
+
+ function fd(b, a) {
+ function c(a, b, c) {
+ function d(b) {
+ return function (c) {
+ e || (e = !0, b.call(a, c))
+ }
+ }
+
+ var e = !1;
+ return [d(b), d(c)]
+ }
+
+ function d() {
+ this.$$state =
+ {status: 0}
+ }
+
+ function e(a, b) {
+ return function (c) {
+ b.call(a, c)
+ }
+ }
+
+ function f(c) {
+ !c.processScheduled && c.pending && (c.processScheduled = !0, b(function () {
+ var b, d, e;
+ e = c.pending;
+ c.processScheduled = !1;
+ c.pending = t;
+ for (var f = 0, g = e.length; f < g; ++f) {
+ d = e[f][0];
+ b = e[f][c.status];
+ try {
+ G(b) ? d.resolve(b(c.value)) : 1 === c.status ? d.resolve(c.value) : d.reject(c.value)
+ } catch (h) {
+ d.reject(h), a(h)
+ }
+ }
+ }))
+ }
+
+ function g() {
+ this.promise = new d;
+ this.resolve = e(this, this.resolve);
+ this.reject = e(this, this.reject);
+ this.notify = e(this, this.notify)
+ }
+
+ var h =
+ T("$q", TypeError);
+ d.prototype = {
+ then: function (a, b, c) {
+ var d = new g;
+ this.$$state.pending = this.$$state.pending || [];
+ this.$$state.pending.push([d, a, b, c]);
+ 0 < this.$$state.status && f(this.$$state);
+ return d.promise
+ }, "catch": function (a) {
+ return this.then(null, a)
+ }, "finally": function (a, b) {
+ return this.then(function (b) {
+ return k(b, !0, a)
+ }, function (b) {
+ return k(b, !1, a)
+ }, b)
+ }
+ };
+ g.prototype = {
+ resolve: function (a) {
+ this.promise.$$state.status || (a === this.promise ? this.$$reject(h("qcycle", a)) : this.$$resolve(a))
+ }, $$resolve: function (b) {
+ var d,
+ e;
+ e = c(this, this.$$resolve, this.$$reject);
+ try {
+ if (H(b) || G(b))d = b && b.then;
+ G(d) ? (this.promise.$$state.status = -1, d.call(b, e[0], e[1], this.notify)) : (this.promise.$$state.value = b, this.promise.$$state.status = 1, f(this.promise.$$state))
+ } catch (g) {
+ e[1](g), a(g)
+ }
+ }, reject: function (a) {
+ this.promise.$$state.status || this.$$reject(a)
+ }, $$reject: function (a) {
+ this.promise.$$state.value = a;
+ this.promise.$$state.status = 2;
+ f(this.promise.$$state)
+ }, notify: function (c) {
+ var d = this.promise.$$state.pending;
+ 0 >= this.promise.$$state.status &&
+ d && d.length && b(function () {
+ for (var b, e, f = 0, g = d.length; f < g; f++) {
+ e = d[f][0];
+ b = d[f][3];
+ try {
+ e.notify(G(b) ? b(c) : c)
+ } catch (h) {
+ a(h)
+ }
+ }
+ })
+ }
+ };
+ var l = function (a, b) {
+ var c = new g;
+ b ? c.resolve(a) : c.reject(a);
+ return c.promise
+ }, k = function (a, b, c) {
+ var d = null;
+ try {
+ G(c) && (d = c())
+ } catch (e) {
+ return l(e, !1)
+ }
+ return d && G(d.then) ? d.then(function () {
+ return l(a, b)
+ }, function (a) {
+ return l(a, !1)
+ }) : l(a, b)
+ }, m = function (a, b, c, d) {
+ var e = new g;
+ e.resolve(a);
+ return e.promise.then(b, c, d)
+ }, p = function u(a) {
+ if (!G(a))throw h("norslvr", a);
+ if (!(this instanceof
+ u))return new u(a);
+ var b = new g;
+ a(function (a) {
+ b.resolve(a)
+ }, function (a) {
+ b.reject(a)
+ });
+ return b.promise
+ };
+ p.defer = function () {
+ return new g
+ };
+ p.reject = function (a) {
+ var b = new g;
+ b.reject(a);
+ return b.promise
+ };
+ p.when = m;
+ p.all = function (a) {
+ var b = new g, c = 0, d = x(a) ? [] : {};
+ s(a, function (a, e) {
+ c++;
+ m(a).then(function (a) {
+ d.hasOwnProperty(e) || (d[e] = a, --c || b.resolve(d))
+ }, function (a) {
+ d.hasOwnProperty(e) || b.reject(a)
+ })
+ });
+ 0 === c && b.resolve(d);
+ return b.promise
+ };
+ return p
+ }
+
+ function $e() {
+ this.$get = ["$window", "$timeout", function (b,
+ a) {
+ var c = b.requestAnimationFrame || b.webkitRequestAnimationFrame, d = b.cancelAnimationFrame || b.webkitCancelAnimationFrame || b.webkitCancelRequestAnimationFrame, e = !!c, f = e ? function (a) {
+ var b = c(a);
+ return function () {
+ d(b)
+ }
+ } : function (b) {
+ var c = a(b, 16.66, !1);
+ return function () {
+ a.cancel(c)
+ }
+ };
+ f.supported = e;
+ return f
+ }]
+ }
+
+ function Pe() {
+ var b = 10, a = T("$rootScope"), c = null, d = null;
+ this.digestTtl = function (a) {
+ arguments.length && (b = a);
+ return b
+ };
+ this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function (e, f, g, h) {
+ function l() {
+ this.$id = ++nb;
+ this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null;
+ this.$root = this;
+ this.$$destroyed = !1;
+ this.$$listeners = {};
+ this.$$listenerCount = {};
+ this.$$isolateBindings = null
+ }
+
+ function k(b) {
+ if (r.$$phase)throw a("inprog", r.$$phase);
+ r.$$phase = b
+ }
+
+ function m(a, b, c) {
+ do a.$$listenerCount[c] -= b, 0 === a.$$listenerCount[c] && delete a.$$listenerCount[c]; while (a = a.$parent)
+ }
+
+ function p() {
+ }
+
+ function q() {
+ for (; v.length;)try {
+ v.shift()()
+ } catch (a) {
+ f(a)
+ }
+ d = null
+ }
+
+ function u() {
+ null ===
+ d && (d = h.defer(function () {
+ r.$apply(q)
+ }))
+ }
+
+ l.prototype = {
+ constructor: l, $new: function (a, b) {
+ function c() {
+ d.$$destroyed = !0
+ }
+
+ var d;
+ b = b || this;
+ a ? (d = new l, d.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = function () {
+ this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null;
+ this.$$listeners = {};
+ this.$$listenerCount = {};
+ this.$id = ++nb;
+ this.$$ChildScope = null
+ }, this.$$ChildScope.prototype = this), d = new this.$$ChildScope);
+ d.$parent = b;
+ d.$$prevSibling = b.$$childTail;
+ b.$$childHead ? (b.$$childTail.$$nextSibling =
+ d, b.$$childTail = d) : b.$$childHead = b.$$childTail = d;
+ (a || b != this) && d.$on("$destroy", c);
+ return d
+ }, $watch: function (a, b, d) {
+ var e = g(a);
+ if (e.$$watchDelegate)return e.$$watchDelegate(this, b, d, e);
+ var f = this.$$watchers, h = {fn: b, last: p, get: e, exp: a, eq: !!d};
+ c = null;
+ G(b) || (h.fn = C);
+ f || (f = this.$$watchers = []);
+ f.unshift(h);
+ return function () {
+ Xa(f, h);
+ c = null
+ }
+ }, $watchGroup: function (a, b) {
+ function c() {
+ h = !1;
+ l ? (l = !1, b(e, e, g)) : b(e, d, g)
+ }
+
+ var d = Array(a.length), e = Array(a.length), f = [], g = this, h = !1, l = !0;
+ if (!a.length) {
+ var k = !0;
+ g.$evalAsync(function () {
+ k &&
+ b(e, e, g)
+ });
+ return function () {
+ k = !1
+ }
+ }
+ if (1 === a.length)return this.$watch(a[0], function (a, c, f) {
+ e[0] = a;
+ d[0] = c;
+ b(e, a === c ? e : d, f)
+ });
+ s(a, function (a, b) {
+ var l = g.$watch(a, function (a, f) {
+ e[b] = a;
+ d[b] = f;
+ h || (h = !0, g.$evalAsync(c))
+ });
+ f.push(l)
+ });
+ return function () {
+ for (; f.length;)f.shift()()
+ }
+ }, $watchCollection: function (a, b) {
+ function c(a) {
+ e = a;
+ var b, d, g, h;
+ if (!D(e)) {
+ if (H(e))if (Ta(e))for (f !== q && (f = q, u = f.length = 0, k++), a = e.length, u !== a && (k++, f.length = u = a), b = 0; b < a; b++)h = f[b], g = e[b], d = h !== h && g !== g, d || h === g || (k++, f[b] = g); else {
+ f !==
+ m && (f = m = {}, u = 0, k++);
+ a = 0;
+ for (b in e)e.hasOwnProperty(b) && (a++, g = e[b], h = f[b], b in f ? (d = h !== h && g !== g, d || h === g || (k++, f[b] = g)) : (u++, f[b] = g, k++));
+ if (u > a)for (b in k++, f)e.hasOwnProperty(b) || (u--, delete f[b])
+ } else f !== e && (f = e, k++);
+ return k
+ }
+ }
+
+ c.$stateful = !0;
+ var d = this, e, f, h, l = 1 < b.length, k = 0, p = g(a, c), q = [], m = {}, n = !0, u = 0;
+ return this.$watch(p, function () {
+ n ? (n = !1, b(e, e, d)) : b(e, h, d);
+ if (l)if (H(e))if (Ta(e)) {
+ h = Array(e.length);
+ for (var a = 0; a < e.length; a++)h[a] = e[a]
+ } else for (a in h = {}, e)rc.call(e, a) && (h[a] = e[a]); else h =
+ e
+ })
+ }, $digest: function () {
+ var e, g, l, m, u, v, s = b, t, W = [], y, I;
+ k("$digest");
+ h.$$checkUrlChange();
+ this === r && null !== d && (h.defer.cancel(d), q());
+ c = null;
+ do {
+ v = !1;
+ for (t = this; O.length;) {
+ try {
+ I = O.shift(), I.scope.$eval(I.expression, I.locals)
+ } catch (B) {
+ f(B)
+ }
+ c = null
+ }
+ a:do {
+ if (m = t.$$watchers)for (u = m.length; u--;)try {
+ if (e = m[u])if ((g = e.get(t)) !== (l = e.last) && !(e.eq ? fa(g, l) : "number" === typeof g && "number" === typeof l && isNaN(g) && isNaN(l)))v = !0, c = e, e.last = e.eq ? Ea(g, null) : g, e.fn(g, l === p ? g : l, t), 5 > s && (y = 4 - s, W[y] || (W[y] = []), W[y].push({
+ msg: G(e.exp) ?
+ "fn: " + (e.exp.name || e.exp.toString()) : e.exp, newVal: g, oldVal: l
+ })); else if (e === c) {
+ v = !1;
+ break a
+ }
+ } catch (D) {
+ f(D)
+ }
+ if (!(m = t.$$childHead || t !== this && t.$$nextSibling))for (; t !== this && !(m = t.$$nextSibling);)t = t.$parent
+ } while (t = m);
+ if ((v || O.length) && !s--)throw r.$$phase = null, a("infdig", b, W);
+ } while (v || O.length);
+ for (r.$$phase = null; n.length;)try {
+ n.shift()()
+ } catch (ca) {
+ f(ca)
+ }
+ }, $destroy: function () {
+ if (!this.$$destroyed) {
+ var a = this.$parent;
+ this.$broadcast("$destroy");
+ this.$$destroyed = !0;
+ if (this !== r) {
+ for (var b in this.$$listenerCount)m(this,
+ this.$$listenerCount[b], b);
+ a.$$childHead == this && (a.$$childHead = this.$$nextSibling);
+ a.$$childTail == this && (a.$$childTail = this.$$prevSibling);
+ this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling);
+ this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling);
+ this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = C;
+ this.$on = this.$watch = this.$watchGroup = function () {
+ return C
+ };
+ this.$$listeners = {};
+ this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead =
+ this.$$childTail = this.$root = this.$$watchers = null
+ }
+ }
+ }, $eval: function (a, b) {
+ return g(a)(this, b)
+ }, $evalAsync: function (a, b) {
+ r.$$phase || O.length || h.defer(function () {
+ O.length && r.$digest()
+ });
+ O.push({scope: this, expression: a, locals: b})
+ }, $$postDigest: function (a) {
+ n.push(a)
+ }, $apply: function (a) {
+ try {
+ return k("$apply"), this.$eval(a)
+ } catch (b) {
+ f(b)
+ } finally {
+ r.$$phase = null;
+ try {
+ r.$digest()
+ } catch (c) {
+ throw f(c), c;
+ }
+ }
+ }, $applyAsync: function (a) {
+ function b() {
+ c.$eval(a)
+ }
+
+ var c = this;
+ a && v.push(b);
+ u()
+ }, $on: function (a, b) {
+ var c = this.$$listeners[a];
+ c || (this.$$listeners[a] = c = []);
+ c.push(b);
+ var d = this;
+ do d.$$listenerCount[a] || (d.$$listenerCount[a] = 0), d.$$listenerCount[a]++; while (d = d.$parent);
+ var e = this;
+ return function () {
+ var d = c.indexOf(b);
+ -1 !== d && (c[d] = null, m(e, 1, a))
+ }
+ }, $emit: function (a, b) {
+ var c = [], d, e = this, g = !1, h = {
+ name: a, targetScope: e, stopPropagation: function () {
+ g = !0
+ }, preventDefault: function () {
+ h.defaultPrevented = !0
+ }, defaultPrevented: !1
+ }, l = Ya([h], arguments, 1), k, p;
+ do {
+ d = e.$$listeners[a] || c;
+ h.currentScope = e;
+ k = 0;
+ for (p = d.length; k < p; k++)if (d[k])try {
+ d[k].apply(null,
+ l)
+ } catch (m) {
+ f(m)
+ } else d.splice(k, 1), k--, p--;
+ if (g)return h.currentScope = null, h;
+ e = e.$parent
+ } while (e);
+ h.currentScope = null;
+ return h
+ }, $broadcast: function (a, b) {
+ var c = this, d = this, e = {
+ name: a, targetScope: this, preventDefault: function () {
+ e.defaultPrevented = !0
+ }, defaultPrevented: !1
+ };
+ if (!this.$$listenerCount[a])return e;
+ for (var g = Ya([e], arguments, 1), h, l; c = d;) {
+ e.currentScope = c;
+ d = c.$$listeners[a] || [];
+ h = 0;
+ for (l = d.length; h < l; h++)if (d[h])try {
+ d[h].apply(null, g)
+ } catch (k) {
+ f(k)
+ } else d.splice(h, 1), h--, l--;
+ if (!(d = c.$$listenerCount[a] &&
+ c.$$childHead || c !== this && c.$$nextSibling))for (; c !== this && !(d = c.$$nextSibling);)c = c.$parent
+ }
+ e.currentScope = null;
+ return e
+ }
+ };
+ var r = new l, O = r.$$asyncQueue = [], n = r.$$postDigestQueue = [], v = r.$$applyAsyncQueue = [];
+ return r
+ }]
+ }
+
+ function Sd() {
+ var b = /^\s*(https?|ftp|mailto|tel|file):/, a = /^\s*((https?|ftp|file|blob):|data:image\/)/;
+ this.aHrefSanitizationWhitelist = function (a) {
+ return y(a) ? (b = a, this) : b
+ };
+ this.imgSrcSanitizationWhitelist = function (b) {
+ return y(b) ? (a = b, this) : a
+ };
+ this.$get = function () {
+ return function (c, d) {
+ var e =
+ d ? a : b, f;
+ f = Ba(c).href;
+ return "" === f || f.match(e) ? c : "unsafe:" + f
+ }
+ }
+ }
+
+ function Df(b) {
+ if ("self" === b)return b;
+ if (F(b)) {
+ if (-1 < b.indexOf("***"))throw Ca("iwcard", b);
+ b = gd(b).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*");
+ return new RegExp("^" + b + "$")
+ }
+ if (ob(b))return new RegExp("^" + b.source + "$");
+ throw Ca("imatcher");
+ }
+
+ function hd(b) {
+ var a = [];
+ y(b) && s(b, function (b) {
+ a.push(Df(b))
+ });
+ return a
+ }
+
+ function Te() {
+ this.SCE_CONTEXTS = ma;
+ var b = ["self"], a = [];
+ this.resourceUrlWhitelist = function (a) {
+ arguments.length && (b = hd(a));
+ return b
+ };
+ this.resourceUrlBlacklist = function (b) {
+ arguments.length && (a = hd(b));
+ return a
+ };
+ this.$get = ["$injector", function (c) {
+ function d(a, b) {
+ return "self" === a ? Zc(b) : !!a.exec(b.href)
+ }
+
+ function e(a) {
+ var b = function (a) {
+ this.$$unwrapTrustedValue = function () {
+ return a
+ }
+ };
+ a && (b.prototype = new a);
+ b.prototype.valueOf = function () {
+ return this.$$unwrapTrustedValue()
+ };
+ b.prototype.toString = function () {
+ return this.$$unwrapTrustedValue().toString()
+ };
+ return b
+ }
+
+ var f = function (a) {
+ throw Ca("unsafe");
+ };
+ c.has("$sanitize") && (f = c.get("$sanitize"));
+ var g = e(), h = {};
+ h[ma.HTML] = e(g);
+ h[ma.CSS] = e(g);
+ h[ma.URL] = e(g);
+ h[ma.JS] = e(g);
+ h[ma.RESOURCE_URL] = e(h[ma.URL]);
+ return {
+ trustAs: function (a, b) {
+ var c = h.hasOwnProperty(a) ? h[a] : null;
+ if (!c)throw Ca("icontext", a, b);
+ if (null === b || b === t || "" === b)return b;
+ if ("string" !== typeof b)throw Ca("itype", a);
+ return new c(b)
+ }, getTrusted: function (c, e) {
+ if (null === e || e === t || "" === e)return e;
+ var g = h.hasOwnProperty(c) ? h[c] : null;
+ if (g && e instanceof g)return e.$$unwrapTrustedValue();
+ if (c === ma.RESOURCE_URL) {
+ var g = Ba(e.toString()), p, q, u =
+ !1;
+ p = 0;
+ for (q = b.length; p < q; p++)if (d(b[p], g)) {
+ u = !0;
+ break
+ }
+ if (u)for (p = 0, q = a.length; p < q; p++)if (d(a[p], g)) {
+ u = !1;
+ break
+ }
+ if (u)return e;
+ throw Ca("insecurl", e.toString());
+ }
+ if (c === ma.HTML)return f(e);
+ throw Ca("unsafe");
+ }, valueOf: function (a) {
+ return a instanceof g ? a.$$unwrapTrustedValue() : a
+ }
+ }
+ }]
+ }
+
+ function Se() {
+ var b = !0;
+ this.enabled = function (a) {
+ arguments.length && (b = !!a);
+ return b
+ };
+ this.$get = ["$parse", "$sceDelegate", function (a, c) {
+ if (b && 8 > Ra)throw Ca("iequirks");
+ var d = qa(ma);
+ d.isEnabled = function () {
+ return b
+ };
+ d.trustAs =
+ c.trustAs;
+ d.getTrusted = c.getTrusted;
+ d.valueOf = c.valueOf;
+ b || (d.trustAs = d.getTrusted = function (a, b) {
+ return b
+ }, d.valueOf = oa);
+ d.parseAs = function (b, c) {
+ var e = a(c);
+ return e.literal && e.constant ? e : a(c, function (a) {
+ return d.getTrusted(b, a)
+ })
+ };
+ var e = d.parseAs, f = d.getTrusted, g = d.trustAs;
+ s(ma, function (a, b) {
+ var c = Q(b);
+ d[cb("parse_as_" + c)] = function (b) {
+ return e(a, b)
+ };
+ d[cb("get_trusted_" + c)] = function (b) {
+ return f(a, b)
+ };
+ d[cb("trust_as_" + c)] = function (b) {
+ return g(a, b)
+ }
+ });
+ return d
+ }]
+ }
+
+ function Ue() {
+ this.$get = ["$window", "$document",
+ function (b, a) {
+ var c = {}, d = ba((/android (\d+)/.exec(Q((b.navigator || {}).userAgent)) || [])[1]), e = /Boxee/i.test((b.navigator || {}).userAgent), f = a[0] || {}, g, h = /^(Moz|webkit|ms)(?=[A-Z])/, l = f.body && f.body.style, k = !1, m = !1;
+ if (l) {
+ for (var p in l)if (k = h.exec(p)) {
+ g = k[0];
+ g = g.substr(0, 1).toUpperCase() + g.substr(1);
+ break
+ }
+ g || (g = "WebkitOpacity"in l && "webkit");
+ k = !!("transition"in l || g + "Transition"in l);
+ m = !!("animation"in l || g + "Animation"in l);
+ !d || k && m || (k = F(f.body.style.webkitTransition), m = F(f.body.style.webkitAnimation))
+ }
+ return {
+ history: !(!b.history || !b.history.pushState || 4 > d || e), hasEvent: function (a) {
+ if ("input" === a && 11 >= Ra)return !1;
+ if (D(c[a])) {
+ var b = f.createElement("div");
+ c[a] = "on" + a in b
+ }
+ return c[a]
+ }, csp: ab(), vendorPrefix: g, transitions: k, animations: m, android: d
+ }
+ }]
+ }
+
+ function We() {
+ this.$get = ["$templateCache", "$http", "$q", function (b, a, c) {
+ function d(e, f) {
+ d.totalPendingRequests++;
+ var g = a.defaults && a.defaults.transformResponse;
+ x(g) ? g = g.filter(function (a) {
+ return a !== Yb
+ }) : g === Yb && (g = null);
+ return a.get(e, {cache: b, transformResponse: g}).then(function (a) {
+ d.totalPendingRequests--;
+ return a.data
+ }, function (a) {
+ d.totalPendingRequests--;
+ if (!f)throw ja("tpload", e);
+ return c.reject(a)
+ })
+ }
+
+ d.totalPendingRequests = 0;
+ return d
+ }]
+ }
+
+ function Xe() {
+ this.$get = ["$rootScope", "$browser", "$location", function (b, a, c) {
+ return {
+ findBindings: function (a, b, c) {
+ a = a.getElementsByClassName("ng-binding");
+ var g = [];
+ s(a, function (a) {
+ var d = ga.element(a).data("$binding");
+ d && s(d, function (d) {
+ c ? (new RegExp("(^|\\s)" + gd(b) + "(\\s|\\||$)")).test(d) && g.push(a) : -1 != d.indexOf(b) && g.push(a)
+ })
+ });
+ return g
+ }, findModels: function (a, b,
+ c) {
+ for (var g = ["ng-", "data-ng-", "ng\\:"], h = 0; h < g.length; ++h) {
+ var l = a.querySelectorAll("[" + g[h] + "model" + (c ? "=" : "*=") + '"' + b + '"]');
+ if (l.length)return l
+ }
+ }, getLocation: function () {
+ return c.url()
+ }, setLocation: function (a) {
+ a !== c.url() && (c.url(a), b.$digest())
+ }, whenStable: function (b) {
+ a.notifyWhenNoOutstandingRequests(b)
+ }
+ }
+ }]
+ }
+
+ function Ye() {
+ this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function (b, a, c, d, e) {
+ function f(f, l, k) {
+ var m = y(k) && !k, p = (m ? d : c).defer(), q = p.promise;
+ l = a.defer(function () {
+ try {
+ p.resolve(f())
+ } catch (a) {
+ p.reject(a),
+ e(a)
+ } finally {
+ delete g[q.$$timeoutId]
+ }
+ m || b.$apply()
+ }, l);
+ q.$$timeoutId = l;
+ g[l] = p;
+ return q
+ }
+
+ var g = {};
+ f.cancel = function (b) {
+ return b && b.$$timeoutId in g ? (g[b.$$timeoutId].reject("canceled"), delete g[b.$$timeoutId], a.defer.cancel(b.$$timeoutId)) : !1
+ };
+ return f
+ }]
+ }
+
+ function Ba(b) {
+ Ra && (Z.setAttribute("href", b), b = Z.href);
+ Z.setAttribute("href", b);
+ return {
+ href: Z.href,
+ protocol: Z.protocol ? Z.protocol.replace(/:$/, "") : "",
+ host: Z.host,
+ search: Z.search ? Z.search.replace(/^\?/, "") : "",
+ hash: Z.hash ? Z.hash.replace(/^#/, "") : "",
+ hostname: Z.hostname,
+ port: Z.port,
+ pathname: "/" === Z.pathname.charAt(0) ? Z.pathname : "/" + Z.pathname
+ }
+ }
+
+ function Zc(b) {
+ b = F(b) ? Ba(b) : b;
+ return b.protocol === id.protocol && b.host === id.host
+ }
+
+ function Ze() {
+ this.$get = da(M)
+ }
+
+ function Dc(b) {
+ function a(c, d) {
+ if (H(c)) {
+ var e = {};
+ s(c, function (b, c) {
+ e[c] = a(c, b)
+ });
+ return e
+ }
+ return b.factory(c + "Filter", d)
+ }
+
+ this.register = a;
+ this.$get = ["$injector", function (a) {
+ return function (b) {
+ return a.get(b + "Filter")
+ }
+ }];
+ a("currency", jd);
+ a("date", kd);
+ a("filter", Ef);
+ a("json", Ff);
+ a("limitTo", Gf);
+ a("lowercase", Hf);
+ a("number",
+ ld);
+ a("orderBy", md);
+ a("uppercase", If)
+ }
+
+ function Ef() {
+ return function (b, a, c) {
+ if (!x(b))return b;
+ var d;
+ switch (typeof a) {
+ case "function":
+ break;
+ case "boolean":
+ case "number":
+ case "string":
+ d = !0;
+ case "object":
+ a = Jf(a, c, d);
+ break;
+ default:
+ return b
+ }
+ return b.filter(a)
+ }
+ }
+
+ function Jf(b, a, c) {
+ var d = H(b) && "$"in b;
+ !0 === a ? a = fa : G(a) || (a = function (a, b) {
+ if (H(a) || H(b))return !1;
+ a = Q("" + a);
+ b = Q("" + b);
+ return -1 !== a.indexOf(b)
+ });
+ return function (e) {
+ return d && !H(e) ? Ia(e, b.$, a, !1) : Ia(e, b, a, c)
+ }
+ }
+
+ function Ia(b, a, c, d, e) {
+ var f = typeof b, g =
+ typeof a;
+ if ("string" === g && "!" === a.charAt(0))return !Ia(b, a.substring(1), c, d);
+ if ("array" === f)return b.some(function (b) {
+ return Ia(b, a, c, d)
+ });
+ switch (f) {
+ case "object":
+ var h;
+ if (d) {
+ for (h in b)if ("$" !== h.charAt(0) && Ia(b[h], a, c, !0))return !0;
+ return e ? !1 : Ia(b, a, c, !1)
+ }
+ if ("object" === g) {
+ for (h in a)if (e = a[h], !G(e) && (f = "$" === h, !Ia(f ? b : b[h], e, c, f, f)))return !1;
+ return !0
+ }
+ return c(b, a);
+ case "function":
+ return !1;
+ default:
+ return c(b, a)
+ }
+ }
+
+ function jd(b) {
+ var a = b.NUMBER_FORMATS;
+ return function (b, d, e) {
+ D(d) && (d = a.CURRENCY_SYM);
+ D(e) && (e = a.PATTERNS[1].maxFrac);
+ return null == b ? b : nd(b, a.PATTERNS[1], a.GROUP_SEP, a.DECIMAL_SEP, e).replace(/\u00A4/g, d)
+ }
+ }
+
+ function ld(b) {
+ var a = b.NUMBER_FORMATS;
+ return function (b, d) {
+ return null == b ? b : nd(b, a.PATTERNS[0], a.GROUP_SEP, a.DECIMAL_SEP, d)
+ }
+ }
+
+ function nd(b, a, c, d, e) {
+ if (!isFinite(b) || H(b))return "";
+ var f = 0 > b;
+ b = Math.abs(b);
+ var g = b + "", h = "", l = [], k = !1;
+ if (-1 !== g.indexOf("e")) {
+ var m = g.match(/([\d\.]+)e(-?)(\d+)/);
+ m && "-" == m[2] && m[3] > e + 1 ? b = 0 : (h = g, k = !0)
+ }
+ if (k)0 < e && 1 > b && (h = b.toFixed(e), b = parseFloat(h)); else {
+ g =
+ (g.split(od)[1] || "").length;
+ D(e) && (e = Math.min(Math.max(a.minFrac, g), a.maxFrac));
+ b = +(Math.round(+(b.toString() + "e" + e)).toString() + "e" + -e);
+ var g = ("" + b).split(od), k = g[0], g = g[1] || "", p = 0, q = a.lgSize, u = a.gSize;
+ if (k.length >= q + u)for (p = k.length - q, m = 0; m < p; m++)0 === (p - m) % u && 0 !== m && (h += c), h += k.charAt(m);
+ for (m = p; m < k.length; m++)0 === (k.length - m) % q && 0 !== m && (h += c), h += k.charAt(m);
+ for (; g.length < e;)g += "0";
+ e && "0" !== e && (h += d + g.substr(0, e))
+ }
+ 0 === b && (f = !1);
+ l.push(f ? a.negPre : a.posPre, h, f ? a.negSuf : a.posSuf);
+ return l.join("")
+ }
+
+ function Hb(b, a, c) {
+ var d = "";
+ 0 > b && (d = "-", b = -b);
+ for (b = "" + b; b.length < a;)b = "0" + b;
+ c && (b = b.substr(b.length - a));
+ return d + b
+ }
+
+ function $(b, a, c, d) {
+ c = c || 0;
+ return function (e) {
+ e = e["get" + b]();
+ if (0 < c || e > -c)e += c;
+ 0 === e && -12 == c && (e = 12);
+ return Hb(e, a, d)
+ }
+ }
+
+ function Ib(b, a) {
+ return function (c, d) {
+ var e = c["get" + b](), f = ub(a ? "SHORT" + b : b);
+ return d[f][e]
+ }
+ }
+
+ function pd(b) {
+ var a = (new Date(b, 0, 1)).getDay();
+ return new Date(b, 0, (4 >= a ? 5 : 12) - a)
+ }
+
+ function qd(b) {
+ return function (a) {
+ var c = pd(a.getFullYear());
+ a = +new Date(a.getFullYear(), a.getMonth(),
+ a.getDate() + (4 - a.getDay())) - +c;
+ a = 1 + Math.round(a / 6048E5);
+ return Hb(a, b)
+ }
+ }
+
+ function kd(b) {
+ function a(a) {
+ var b;
+ if (b = a.match(c)) {
+ a = new Date(0);
+ var f = 0, g = 0, h = b[8] ? a.setUTCFullYear : a.setFullYear, l = b[8] ? a.setUTCHours : a.setHours;
+ b[9] && (f = ba(b[9] + b[10]), g = ba(b[9] + b[11]));
+ h.call(a, ba(b[1]), ba(b[2]) - 1, ba(b[3]));
+ f = ba(b[4] || 0) - f;
+ g = ba(b[5] || 0) - g;
+ h = ba(b[6] || 0);
+ b = Math.round(1E3 * parseFloat("0." + (b[7] || 0)));
+ l.call(a, f, g, h, b)
+ }
+ return a
+ }
+
+ var c = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+ return function (c, e, f) {
+ var g = "", h = [], l, k;
+ e = e || "mediumDate";
+ e = b.DATETIME_FORMATS[e] || e;
+ F(c) && (c = Kf.test(c) ? ba(c) : a(c));
+ V(c) && (c = new Date(c));
+ if (!pa(c))return c;
+ for (; e;)(k = Lf.exec(e)) ? (h = Ya(h, k, 1), e = h.pop()) : (h.push(e), e = null);
+ f && "UTC" === f && (c = new Date(c.getTime()), c.setMinutes(c.getMinutes() + c.getTimezoneOffset()));
+ s(h, function (a) {
+ l = Mf[a];
+ g += l ? l(c, b.DATETIME_FORMATS) : a.replace(/(^'|'$)/g, "").replace(/''/g, "'")
+ });
+ return g
+ }
+ }
+
+ function Ff() {
+ return function (b, a) {
+ D(a) && (a = 2);
+ return $a(b, a)
+ }
+ }
+
+ function Gf() {
+ return function (b,
+ a) {
+ V(b) && (b = b.toString());
+ if (!x(b) && !F(b))return b;
+ a = Infinity === Math.abs(Number(a)) ? Number(a) : ba(a);
+ if (F(b))return a ? 0 <= a ? b.slice(0, a) : b.slice(a, b.length) : "";
+ var c, d;
+ a > b.length ? a = b.length : a < -b.length && (a = -b.length);
+ if (0 < a)c = 0, d = a; else {
+ if (!a)return [];
+ c = b.length + a;
+ d = b.length
+ }
+ return b.slice(c, d)
+ }
+ }
+
+ function md(b) {
+ return function (a, c, d) {
+ function e(a, b) {
+ return b ? function (b, c) {
+ return a(c, b)
+ } : a
+ }
+
+ function f(a) {
+ switch (typeof a) {
+ case "number":
+ case "boolean":
+ case "string":
+ return !0;
+ default:
+ return !1
+ }
+ }
+
+ function g(a) {
+ return null ===
+ a ? "null" : "function" === typeof a.valueOf && (a = a.valueOf(), f(a)) || "function" === typeof a.toString && (a = a.toString(), f(a)) ? a : ""
+ }
+
+ function h(a, b) {
+ var c = typeof a, d = typeof b;
+ c === d && "object" === c && (a = g(a), b = g(b));
+ return c === d ? ("string" === c && (a = a.toLowerCase(), b = b.toLowerCase()), a === b ? 0 : a < b ? -1 : 1) : c < d ? -1 : 1
+ }
+
+ if (!Ta(a))return a;
+ c = x(c) ? c : [c];
+ 0 === c.length && (c = ["+"]);
+ c = c.map(function (a) {
+ var c = !1, d = a || oa;
+ if (F(a)) {
+ if ("+" == a.charAt(0) || "-" == a.charAt(0))c = "-" == a.charAt(0), a = a.substring(1);
+ if ("" === a)return e(h, c);
+ d = b(a);
+ if (d.constant) {
+ var f =
+ d();
+ return e(function (a, b) {
+ return h(a[f], b[f])
+ }, c)
+ }
+ }
+ return e(function (a, b) {
+ return h(d(a), d(b))
+ }, c)
+ });
+ return Za.call(a).sort(e(function (a, b) {
+ for (var d = 0; d < c.length; d++) {
+ var e = c[d](a, b);
+ if (0 !== e)return e
+ }
+ return 0
+ }, d))
+ }
+ }
+
+ function Ja(b) {
+ G(b) && (b = {link: b});
+ b.restrict = b.restrict || "AC";
+ return da(b)
+ }
+
+ function rd(b, a, c, d, e) {
+ var f = this, g = [], h = f.$$parentForm = b.parent().controller("form") || Jb;
+ f.$error = {};
+ f.$$success = {};
+ f.$pending = t;
+ f.$name = e(a.name || a.ngForm || "")(c);
+ f.$dirty = !1;
+ f.$pristine = !0;
+ f.$valid = !0;
+ f.$invalid = !1;
+ f.$submitted = !1;
+ h.$addControl(f);
+ f.$rollbackViewValue = function () {
+ s(g, function (a) {
+ a.$rollbackViewValue()
+ })
+ };
+ f.$commitViewValue = function () {
+ s(g, function (a) {
+ a.$commitViewValue()
+ })
+ };
+ f.$addControl = function (a) {
+ Ma(a.$name, "input");
+ g.push(a);
+ a.$name && (f[a.$name] = a)
+ };
+ f.$$renameControl = function (a, b) {
+ var c = a.$name;
+ f[c] === a && delete f[c];
+ f[b] = a;
+ a.$name = b
+ };
+ f.$removeControl = function (a) {
+ a.$name && f[a.$name] === a && delete f[a.$name];
+ s(f.$pending, function (b, c) {
+ f.$setValidity(c, null, a)
+ });
+ s(f.$error, function (b, c) {
+ f.$setValidity(c,
+ null, a)
+ });
+ Xa(g, a)
+ };
+ sd({
+ ctrl: this, $element: b, set: function (a, b, c) {
+ var d = a[b];
+ d ? -1 === d.indexOf(c) && d.push(c) : a[b] = [c]
+ }, unset: function (a, b, c) {
+ var d = a[b];
+ d && (Xa(d, c), 0 === d.length && delete a[b])
+ }, parentForm: h, $animate: d
+ });
+ f.$setDirty = function () {
+ d.removeClass(b, Sa);
+ d.addClass(b, Kb);
+ f.$dirty = !0;
+ f.$pristine = !1;
+ h.$setDirty()
+ };
+ f.$setPristine = function () {
+ d.setClass(b, Sa, Kb + " ng-submitted");
+ f.$dirty = !1;
+ f.$pristine = !0;
+ f.$submitted = !1;
+ s(g, function (a) {
+ a.$setPristine()
+ })
+ };
+ f.$setUntouched = function () {
+ s(g, function (a) {
+ a.$setUntouched()
+ })
+ };
+ f.$setSubmitted = function () {
+ d.addClass(b, "ng-submitted");
+ f.$submitted = !0;
+ h.$setSubmitted()
+ }
+ }
+
+ function hc(b) {
+ b.$formatters.push(function (a) {
+ return b.$isEmpty(a) ? a : a.toString()
+ })
+ }
+
+ function ib(b, a, c, d, e, f) {
+ var g = Q(a[0].type);
+ if (!e.android) {
+ var h = !1;
+ a.on("compositionstart", function (a) {
+ h = !0
+ });
+ a.on("compositionend", function () {
+ h = !1;
+ l()
+ })
+ }
+ var l = function (b) {
+ k && (f.defer.cancel(k), k = null);
+ if (!h) {
+ var e = a.val();
+ b = b && b.type;
+ "password" === g || c.ngTrim && "false" === c.ngTrim || (e = U(e));
+ (d.$viewValue !== e || "" === e && d.$$hasNativeValidators) &&
+ d.$setViewValue(e, b)
+ }
+ };
+ if (e.hasEvent("input"))a.on("input", l); else {
+ var k, m = function (a, b, c) {
+ k || (k = f.defer(function () {
+ k = null;
+ b && b.value === c || l(a)
+ }))
+ };
+ a.on("keydown", function (a) {
+ var b = a.keyCode;
+ 91 === b || 15 < b && 19 > b || 37 <= b && 40 >= b || m(a, this, this.value)
+ });
+ if (e.hasEvent("paste"))a.on("paste cut", m)
+ }
+ a.on("change", l);
+ d.$render = function () {
+ a.val(d.$isEmpty(d.$viewValue) ? "" : d.$viewValue)
+ }
+ }
+
+ function Lb(b, a) {
+ return function (c, d) {
+ var e, f;
+ if (pa(c))return c;
+ if (F(c)) {
+ '"' == c.charAt(0) && '"' == c.charAt(c.length - 1) && (c = c.substring(1,
+ c.length - 1));
+ if (Nf.test(c))return new Date(c);
+ b.lastIndex = 0;
+ if (e = b.exec(c))return e.shift(), f = d ? {
+ yyyy: d.getFullYear(),
+ MM: d.getMonth() + 1,
+ dd: d.getDate(),
+ HH: d.getHours(),
+ mm: d.getMinutes(),
+ ss: d.getSeconds(),
+ sss: d.getMilliseconds() / 1E3
+ } : {yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0}, s(e, function (b, c) {
+ c < a.length && (f[a[c]] = +b)
+ }), new Date(f.yyyy, f.MM - 1, f.dd, f.HH, f.mm, f.ss || 0, 1E3 * f.sss || 0)
+ }
+ return NaN
+ }
+ }
+
+ function jb(b, a, c, d) {
+ return function (e, f, g, h, l, k, m) {
+ function p(a) {
+ return a && !(a.getTime && a.getTime() !== a.getTime())
+ }
+
+ function q(a) {
+ return y(a) ? pa(a) ? a : c(a) : t
+ }
+
+ td(e, f, g, h);
+ ib(e, f, g, h, l, k);
+ var u = h && h.$options && h.$options.timezone, r;
+ h.$$parserName = b;
+ h.$parsers.push(function (b) {
+ return h.$isEmpty(b) ? null : a.test(b) ? (b = c(b, r), "UTC" === u && b.setMinutes(b.getMinutes() - b.getTimezoneOffset()), b) : t
+ });
+ h.$formatters.push(function (a) {
+ if (a && !pa(a))throw Mb("datefmt", a);
+ if (p(a)) {
+ if ((r = a) && "UTC" === u) {
+ var b = 6E4 * r.getTimezoneOffset();
+ r = new Date(r.getTime() + b)
+ }
+ return m("date")(a, d, u)
+ }
+ r = null;
+ return ""
+ });
+ if (y(g.min) || g.ngMin) {
+ var s;
+ h.$validators.min =
+ function (a) {
+ return !p(a) || D(s) || c(a) >= s
+ };
+ g.$observe("min", function (a) {
+ s = q(a);
+ h.$validate()
+ })
+ }
+ if (y(g.max) || g.ngMax) {
+ var n;
+ h.$validators.max = function (a) {
+ return !p(a) || D(n) || c(a) <= n
+ };
+ g.$observe("max", function (a) {
+ n = q(a);
+ h.$validate()
+ })
+ }
+ }
+ }
+
+ function td(b, a, c, d) {
+ (d.$$hasNativeValidators = H(a[0].validity)) && d.$parsers.push(function (b) {
+ var c = a.prop("validity") || {};
+ return c.badInput && !c.typeMismatch ? t : b
+ })
+ }
+
+ function ud(b, a, c, d, e) {
+ if (y(d)) {
+ b = b(d);
+ if (!b.constant)throw T("ngModel")("constexpr", c, d);
+ return b(a)
+ }
+ return e
+ }
+
+ function sd(b) {
+ function a(a, b) {
+ b && !f[a] ? (k.addClass(e, a), f[a] = !0) : !b && f[a] && (k.removeClass(e, a), f[a] = !1)
+ }
+
+ function c(b, c) {
+ b = b ? "-" + tc(b, "-") : "";
+ a(kb + b, !0 === c);
+ a(vd + b, !1 === c)
+ }
+
+ var d = b.ctrl, e = b.$element, f = {}, g = b.set, h = b.unset, l = b.parentForm, k = b.$animate;
+ f[vd] = !(f[kb] = e.hasClass(kb));
+ d.$setValidity = function (b, e, f) {
+ e === t ? (d.$pending || (d.$pending = {}), g(d.$pending, b, f)) : (d.$pending && h(d.$pending, b, f), wd(d.$pending) && (d.$pending = t));
+ Wa(e) ? e ? (h(d.$error, b, f), g(d.$$success, b, f)) : (g(d.$error, b, f), h(d.$$success,
+ b, f)) : (h(d.$error, b, f), h(d.$$success, b, f));
+ d.$pending ? (a(xd, !0), d.$valid = d.$invalid = t, c("", null)) : (a(xd, !1), d.$valid = wd(d.$error), d.$invalid = !d.$valid, c("", d.$valid));
+ e = d.$pending && d.$pending[b] ? t : d.$error[b] ? !1 : d.$$success[b] ? !0 : null;
+ c(b, e);
+ l.$setValidity(b, e, d)
+ }
+ }
+
+ function wd(b) {
+ if (b)for (var a in b)return !1;
+ return !0
+ }
+
+ function ic(b, a) {
+ b = "ngClass" + b;
+ return ["$animate", function (c) {
+ function d(a, b) {
+ var c = [], d = 0;
+ a:for (; d < a.length; d++) {
+ for (var e = a[d], m = 0; m < b.length; m++)if (e == b[m])continue a;
+ c.push(e)
+ }
+ return c
+ }
+
+ function e(a) {
+ if (!x(a)) {
+ if (F(a))return a.split(" ");
+ if (H(a)) {
+ var b = [];
+ s(a, function (a, c) {
+ a && (b = b.concat(c.split(" ")))
+ });
+ return b
+ }
+ }
+ return a
+ }
+
+ return {
+ restrict: "AC", link: function (f, g, h) {
+ function l(a, b) {
+ var c = g.data("$classCounts") || {}, d = [];
+ s(a, function (a) {
+ if (0 < b || c[a])c[a] = (c[a] || 0) + b, c[a] === +(0 < b) && d.push(a)
+ });
+ g.data("$classCounts", c);
+ return d.join(" ")
+ }
+
+ function k(b) {
+ if (!0 === a || f.$index % 2 === a) {
+ var k = e(b || []);
+ if (!m) {
+ var u = l(k, 1);
+ h.$addClass(u)
+ } else if (!fa(b, m)) {
+ var r = e(m), u = d(k, r), k = d(r, k), u = l(u, 1), k =
+ l(k, -1);
+ u && u.length && c.addClass(g, u);
+ k && k.length && c.removeClass(g, k)
+ }
+ }
+ m = qa(b)
+ }
+
+ var m;
+ f.$watch(h[b], k, !0);
+ h.$observe("class", function (a) {
+ k(f.$eval(h[b]))
+ });
+ "ngClass" !== b && f.$watch("$index", function (c, d) {
+ var g = c & 1;
+ if (g !== (d & 1)) {
+ var k = e(f.$eval(h[b]));
+ g === a ? (g = l(k, 1), h.$addClass(g)) : (g = l(k, -1), h.$removeClass(g))
+ }
+ })
+ }
+ }
+ }]
+ }
+
+ var Of = /^\/(.+)\/([a-z]*)$/, Q = function (b) {
+ return F(b) ? b.toLowerCase() : b
+ }, rc = Object.prototype.hasOwnProperty, ub = function (b) {
+ return F(b) ? b.toUpperCase() : b
+ }, Ra, B, ra, Za = [].slice, rf = [].splice,
+ Pf = [].push, Da = Object.prototype.toString, Ka = T("ng"), ga = M.angular || (M.angular = {}), bb, nb = 0;
+ Ra = Y.documentMode;
+ C.$inject = [];
+ oa.$inject = [];
+ var x = Array.isArray, U = function (b) {
+ return F(b) ? b.trim() : b
+ }, gd = function (b) {
+ return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
+ }, ab = function () {
+ if (y(ab.isActive_))return ab.isActive_;
+ var b = !(!Y.querySelector("[ng-csp]") && !Y.querySelector("[data-ng-csp]"));
+ if (!b)try {
+ new Function("")
+ } catch (a) {
+ b = !0
+ }
+ return ab.isActive_ = b
+ }, rb = ["ng-", "data-ng-", "ng:",
+ "x-ng-"], Md = /[A-Z]/g, uc = !1, Pb, na = 1, pb = 3, Qd = {
+ full: "1.3.8",
+ major: 1,
+ minor: 3,
+ dot: 8,
+ codeName: "prophetic-narwhal"
+ };
+ R.expando = "ng339";
+ var zb = R.cache = {}, hf = 1;
+ R._data = function (b) {
+ return this.cache[b[this.expando]] || {}
+ };
+ var cf = /([\:\-\_]+(.))/g, df = /^moz([A-Z])/, Qf = {
+ mouseleave: "mouseout",
+ mouseenter: "mouseover"
+ }, Sb = T("jqLite"), gf = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, Rb = /<|&#?\w+;/, ef = /<([\w:]+)/, ff = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, ia = {
+ 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, "", ""]
+ };
+ ia.optgroup = ia.option;
+ ia.tbody = ia.tfoot = ia.colgroup = ia.caption = ia.thead;
+ ia.th = ia.td;
+ var La = R.prototype = {
+ ready: function (b) {
+ function a() {
+ c || (c = !0, b())
+ }
+
+ var c = !1;
+ "complete" === Y.readyState ? setTimeout(a) : (this.on("DOMContentLoaded", a), R(M).on("load", a))
+ }, toString: function () {
+ var b = [];
+ s(this, function (a) {
+ b.push("" +
+ a)
+ });
+ return "[" + b.join(", ") + "]"
+ }, eq: function (b) {
+ return 0 <= b ? B(this[b]) : B(this[this.length + b])
+ }, length: 0, push: Pf, sort: [].sort, splice: [].splice
+ }, Eb = {};
+ s("multiple selected checked disabled readOnly required open".split(" "), function (b) {
+ Eb[Q(b)] = b
+ });
+ var Mc = {};
+ s("input select option textarea button form details".split(" "), function (b) {
+ Mc[b] = !0
+ });
+ var Nc = {ngMinlength: "minlength", ngMaxlength: "maxlength", ngMin: "min", ngMax: "max", ngPattern: "pattern"};
+ s({data: Ub, removeData: xb}, function (b, a) {
+ R[a] = b
+ });
+ s({
+ data: Ub,
+ inheritedData: Db, scope: function (b) {
+ return B.data(b, "$scope") || Db(b.parentNode || b, ["$isolateScope", "$scope"])
+ }, isolateScope: function (b) {
+ return B.data(b, "$isolateScope") || B.data(b, "$isolateScopeNoTemplate")
+ }, controller: Ic, injector: function (b) {
+ return Db(b, "$injector")
+ }, removeAttr: function (b, a) {
+ b.removeAttribute(a)
+ }, hasClass: Ab, css: function (b, a, c) {
+ a = cb(a);
+ if (y(c))b.style[a] = c; else return b.style[a]
+ }, attr: function (b, a, c) {
+ var d = Q(a);
+ if (Eb[d])if (y(c))c ? (b[a] = !0, b.setAttribute(a, d)) : (b[a] = !1, b.removeAttribute(d));
+ else return b[a] || (b.attributes.getNamedItem(a) || C).specified ? d : t; else if (y(c))b.setAttribute(a, c); else if (b.getAttribute)return b = b.getAttribute(a, 2), null === b ? t : b
+ }, prop: function (b, a, c) {
+ if (y(c))b[a] = c; else return b[a]
+ }, text: function () {
+ function b(a, b) {
+ if (D(b)) {
+ var d = a.nodeType;
+ return d === na || d === pb ? a.textContent : ""
+ }
+ a.textContent = b
+ }
+
+ b.$dv = "";
+ return b
+ }(), val: function (b, a) {
+ if (D(a)) {
+ if (b.multiple && "select" === ua(b)) {
+ var c = [];
+ s(b.options, function (a) {
+ a.selected && c.push(a.value || a.text)
+ });
+ return 0 === c.length ?
+ null : c
+ }
+ return b.value
+ }
+ b.value = a
+ }, html: function (b, a) {
+ if (D(a))return b.innerHTML;
+ wb(b, !0);
+ b.innerHTML = a
+ }, empty: Jc
+ }, function (b, a) {
+ R.prototype[a] = function (a, d) {
+ var e, f, g = this.length;
+ if (b !== Jc && (2 == b.length && b !== Ab && b !== Ic ? a : d) === t) {
+ if (H(a)) {
+ for (e = 0; e < g; e++)if (b === Ub)b(this[e], a); else for (f in a)b(this[e], f, a[f]);
+ return this
+ }
+ e = b.$dv;
+ g = e === t ? Math.min(g, 1) : g;
+ for (f = 0; f < g; f++) {
+ var h = b(this[f], a, d);
+ e = e ? e + h : h
+ }
+ return e
+ }
+ for (e = 0; e < g; e++)b(this[e], a, d);
+ return this
+ }
+ });
+ s({
+ removeData: xb, on: function a(c, d, e, f) {
+ if (y(f))throw Sb("onargs");
+ if (Ec(c)) {
+ var g = yb(c, !0);
+ f = g.events;
+ var h = g.handle;
+ h || (h = g.handle = lf(c, f));
+ for (var g = 0 <= d.indexOf(" ") ? d.split(" ") : [d], l = g.length; l--;) {
+ d = g[l];
+ var k = f[d];
+ k || (f[d] = [], "mouseenter" === d || "mouseleave" === d ? a(c, Qf[d], function (a) {
+ var c = a.relatedTarget;
+ c && (c === this || this.contains(c)) || h(a, d)
+ }) : "$destroy" !== d && c.addEventListener(d, h, !1), k = f[d]);
+ k.push(e)
+ }
+ }
+ }, off: Hc, one: function (a, c, d) {
+ a = B(a);
+ a.on(c, function f() {
+ a.off(c, d);
+ a.off(c, f)
+ });
+ a.on(c, d)
+ }, replaceWith: function (a, c) {
+ var d, e = a.parentNode;
+ wb(a);
+ s(new R(c),
+ function (c) {
+ d ? e.insertBefore(c, d.nextSibling) : e.replaceChild(c, a);
+ d = c
+ })
+ }, children: function (a) {
+ var c = [];
+ s(a.childNodes, function (a) {
+ a.nodeType === na && c.push(a)
+ });
+ return c
+ }, contents: function (a) {
+ return a.contentDocument || a.childNodes || []
+ }, append: function (a, c) {
+ var d = a.nodeType;
+ if (d === na || 11 === d) {
+ c = new R(c);
+ for (var d = 0, e = c.length; d < e; d++)a.appendChild(c[d])
+ }
+ }, prepend: function (a, c) {
+ if (a.nodeType === na) {
+ var d = a.firstChild;
+ s(new R(c), function (c) {
+ a.insertBefore(c, d)
+ })
+ }
+ }, wrap: function (a, c) {
+ c = B(c).eq(0).clone()[0];
+ var d = a.parentNode;
+ d && d.replaceChild(c, a);
+ c.appendChild(a)
+ }, remove: Kc, detach: function (a) {
+ Kc(a, !0)
+ }, after: function (a, c) {
+ var d = a, e = a.parentNode;
+ c = new R(c);
+ for (var f = 0, g = c.length; f < g; f++) {
+ var h = c[f];
+ e.insertBefore(h, d.nextSibling);
+ d = h
+ }
+ }, addClass: Cb, removeClass: Bb, toggleClass: function (a, c, d) {
+ c && s(c.split(" "), function (c) {
+ var f = d;
+ D(f) && (f = !Ab(a, c));
+ (f ? Cb : Bb)(a, c)
+ })
+ }, parent: function (a) {
+ return (a = a.parentNode) && 11 !== a.nodeType ? a : null
+ }, next: function (a) {
+ return a.nextElementSibling
+ }, find: function (a, c) {
+ return a.getElementsByTagName ?
+ a.getElementsByTagName(c) : []
+ }, clone: Tb, triggerHandler: function (a, c, d) {
+ var e, f, g = c.type || c, h = yb(a);
+ if (h = (h = h && h.events) && h[g])e = {
+ preventDefault: function () {
+ this.defaultPrevented = !0
+ }, isDefaultPrevented: function () {
+ return !0 === this.defaultPrevented
+ }, stopImmediatePropagation: function () {
+ this.immediatePropagationStopped = !0
+ }, isImmediatePropagationStopped: function () {
+ return !0 === this.immediatePropagationStopped
+ }, stopPropagation: C, type: g, target: a
+ }, c.type && (e = z(e, c)), c = qa(h), f = d ? [e].concat(d) : [e], s(c, function (c) {
+ e.isImmediatePropagationStopped() ||
+ c.apply(a, f)
+ })
+ }
+ }, function (a, c) {
+ R.prototype[c] = function (c, e, f) {
+ for (var g, h = 0, l = this.length; h < l; h++)D(g) ? (g = a(this[h], c, e, f), y(g) && (g = B(g))) : Gc(g, a(this[h], c, e, f));
+ return y(g) ? g : this
+ };
+ R.prototype.bind = R.prototype.on;
+ R.prototype.unbind = R.prototype.off
+ });
+ db.prototype = {
+ put: function (a, c) {
+ this[Na(a, this.nextUid)] = c
+ }, get: function (a) {
+ return this[Na(a, this.nextUid)]
+ }, remove: function (a) {
+ var c = this[a = Na(a, this.nextUid)];
+ delete this[a];
+ return c
+ }
+ };
+ var Pc = /^function\s*[^\(]*\(\s*([^\)]*)\)/m, nf = /,/, of = /^\s*(_?)(\S+?)\1\s*$/,
+ Oc = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg, Ga = T("$injector");
+ Ob.$$annotate = Vb;
+ var Rf = T("$animate"), Ce = ["$provide", function (a) {
+ this.$$selectors = {};
+ this.register = function (c, d) {
+ var e = c + "-animation";
+ if (c && "." != c.charAt(0))throw Rf("notcsel", c);
+ this.$$selectors[c.substr(1)] = e;
+ a.factory(e, d)
+ };
+ this.classNameFilter = function (a) {
+ 1 === arguments.length && (this.$$classNameFilter = a instanceof RegExp ? a : null);
+ return this.$$classNameFilter
+ };
+ this.$get = ["$$q", "$$asyncCallback", "$rootScope", function (a, d, e) {
+ function f(d) {
+ var f,
+ g = a.defer();
+ g.promise.$$cancelFn = function () {
+ f && f()
+ };
+ e.$$postDigest(function () {
+ f = d(function () {
+ g.resolve()
+ })
+ });
+ return g.promise
+ }
+
+ function g(a, c) {
+ var d = [], e = [], f = ha();
+ s((a.attr("class") || "").split(/\s+/), function (a) {
+ f[a] = !0
+ });
+ s(c, function (a, c) {
+ var g = f[c];
+ !1 === a && g ? e.push(c) : !0 !== a || g || d.push(c)
+ });
+ return 0 < d.length + e.length && [d.length ? d : null, e.length ? e : null]
+ }
+
+ function h(a, c, d) {
+ for (var e = 0, f = c.length; e < f; ++e)a[c[e]] = d
+ }
+
+ function l() {
+ m || (m = a.defer(), d(function () {
+ m.resolve();
+ m = null
+ }));
+ return m.promise
+ }
+
+ function k(a,
+ c) {
+ if (ga.isObject(c)) {
+ var d = z(c.from || {}, c.to || {});
+ a.css(d)
+ }
+ }
+
+ var m;
+ return {
+ animate: function (a, c, d) {
+ k(a, {from: c, to: d});
+ return l()
+ }, enter: function (a, c, d, e) {
+ k(a, e);
+ d ? d.after(a) : c.prepend(a);
+ return l()
+ }, leave: function (a, c) {
+ a.remove();
+ return l()
+ }, move: function (a, c, d, e) {
+ return this.enter(a, c, d, e)
+ }, addClass: function (a, c, d) {
+ return this.setClass(a, c, [], d)
+ }, $$addClassImmediately: function (a, c, d) {
+ a = B(a);
+ c = F(c) ? c : x(c) ? c.join(" ") : "";
+ s(a, function (a) {
+ Cb(a, c)
+ });
+ k(a, d);
+ return l()
+ }, removeClass: function (a, c, d) {
+ return this.setClass(a,
+ [], c, d)
+ }, $$removeClassImmediately: function (a, c, d) {
+ a = B(a);
+ c = F(c) ? c : x(c) ? c.join(" ") : "";
+ s(a, function (a) {
+ Bb(a, c)
+ });
+ k(a, d);
+ return l()
+ }, setClass: function (a, c, d, e) {
+ var k = this, l = !1;
+ a = B(a);
+ var m = a.data("$$animateClasses");
+ m ? e && m.options && (m.options = ga.extend(m.options || {}, e)) : (m = {
+ classes: {},
+ options: e
+ }, l = !0);
+ e = m.classes;
+ c = x(c) ? c : c.split(" ");
+ d = x(d) ? d : d.split(" ");
+ h(e, c, !0);
+ h(e, d, !1);
+ l && (m.promise = f(function (c) {
+ var d = a.data("$$animateClasses");
+ a.removeData("$$animateClasses");
+ if (d) {
+ var e = g(a, d.classes);
+ e &&
+ k.$$setClassImmediately(a, e[0], e[1], d.options)
+ }
+ c()
+ }), a.data("$$animateClasses", m));
+ return m.promise
+ }, $$setClassImmediately: function (a, c, d, e) {
+ c && this.$$addClassImmediately(a, c);
+ d && this.$$removeClassImmediately(a, d);
+ k(a, e);
+ return l()
+ }, enabled: C, cancel: C
+ }
+ }]
+ }], ja = T("$compile");
+ wc.$inject = ["$provide", "$$sanitizeUriProvider"];
+ var Rc = /^((?:x|data)[\:\-_])/i, Vc = "application/json", Zb = {"Content-Type": Vc + ";charset=utf-8"}, tf = /^\[|^\{(?!\{)/, uf = {
+ "[": /]$/,
+ "{": /}$/
+ }, sf = /^\)\]\}',?\n/, $b = T("$interpolate"), Sf = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+ xf = {http: 80, https: 443, ftp: 21}, Fb = T("$location"), Tf = {
+ $$html5: !1, $$replace: !1, absUrl: Gb("$$absUrl"), url: function (a) {
+ if (D(a))return this.$$url;
+ var c = Sf.exec(a);
+ (c[1] || "" === a) && this.path(decodeURIComponent(c[1]));
+ (c[2] || c[1] || "" === a) && this.search(c[3] || "");
+ this.hash(c[5] || "");
+ return this
+ }, protocol: Gb("$$protocol"), host: Gb("$$host"), port: Gb("$$port"), path: dd("$$path", function (a) {
+ a = null !== a ? a.toString() : "";
+ return "/" == a.charAt(0) ? a : "/" + a
+ }), search: function (a, c) {
+ switch (arguments.length) {
+ case 0:
+ return this.$$search;
+ case 1:
+ if (F(a) || V(a))a = a.toString(), this.$$search = qc(a); else if (H(a))a = Ea(a, {}), s(a, function (c, e) {
+ null == c && delete a[e]
+ }), this.$$search = a; else throw Fb("isrcharg");
+ break;
+ default:
+ D(c) || null === c ? delete this.$$search[a] : this.$$search[a] = c
+ }
+ this.$$compose();
+ return this
+ }, hash: dd("$$hash", function (a) {
+ return null !== a ? a.toString() : ""
+ }), replace: function () {
+ this.$$replace = !0;
+ return this
+ }
+ };
+ s([cd, dc, cc], function (a) {
+ a.prototype = Object.create(Tf);
+ a.prototype.state = function (c) {
+ if (!arguments.length)return this.$$state;
+ if (a !== cc || !this.$$html5)throw Fb("nostate");
+ this.$$state = D(c) ? null : c;
+ return this
+ }
+ });
+ var la = T("$parse"), Uf = Function.prototype.call, Vf = Function.prototype.apply, Wf = Function.prototype.bind, lb = ha();
+ s({
+ "null": function () {
+ return null
+ }, "true": function () {
+ return !0
+ }, "false": function () {
+ return !1
+ }, undefined: function () {
+ }
+ }, function (a, c) {
+ a.constant = a.literal = a.sharedGetter = !0;
+ lb[c] = a
+ });
+ lb["this"] = function (a) {
+ return a
+ };
+ lb["this"].sharedGetter = !0;
+ var mb = z(ha(), {
+ "+": function (a, c, d, e) {
+ d = d(a, c);
+ e = e(a, c);
+ return y(d) ? y(e) ?
+ d + e : d : y(e) ? e : t
+ }, "-": function (a, c, d, e) {
+ d = d(a, c);
+ e = e(a, c);
+ return (y(d) ? d : 0) - (y(e) ? e : 0)
+ }, "*": function (a, c, d, e) {
+ return d(a, c) * e(a, c)
+ }, "/": function (a, c, d, e) {
+ return d(a, c) / e(a, c)
+ }, "%": function (a, c, d, e) {
+ return d(a, c) % e(a, c)
+ }, "===": function (a, c, d, e) {
+ return d(a, c) === e(a, c)
+ }, "!==": function (a, c, d, e) {
+ return d(a, c) !== e(a, c)
+ }, "==": function (a, c, d, e) {
+ return d(a, c) == e(a, c)
+ }, "!=": function (a, c, d, e) {
+ return d(a, c) != e(a, c)
+ }, "<": function (a, c, d, e) {
+ return d(a, c) < e(a, c)
+ }, ">": function (a, c, d, e) {
+ return d(a, c) > e(a, c)
+ }, "<=": function (a,
+ c, d, e) {
+ return d(a, c) <= e(a, c)
+ }, ">=": function (a, c, d, e) {
+ return d(a, c) >= e(a, c)
+ }, "&&": function (a, c, d, e) {
+ return d(a, c) && e(a, c)
+ }, "||": function (a, c, d, e) {
+ return d(a, c) || e(a, c)
+ }, "!": function (a, c, d) {
+ return !d(a, c)
+ }, "=": !0, "|": !0
+ }), Xf = {n: "\n", f: "\f", r: "\r", t: "\t", v: "\v", "'": "'", '"': '"'}, gc = function (a) {
+ this.options = a
+ };
+ gc.prototype = {
+ constructor: gc, lex: function (a) {
+ this.text = a;
+ this.index = 0;
+ for (this.tokens = []; this.index < this.text.length;)if (a = this.text.charAt(this.index), '"' === a || "'" === a)this.readString(a); else if (this.isNumber(a) ||
+ "." === a && this.isNumber(this.peek()))this.readNumber(); else if (this.isIdent(a))this.readIdent(); else if (this.is(a, "(){}[].,;:?"))this.tokens.push({
+ index: this.index,
+ text: a
+ }), this.index++; else if (this.isWhitespace(a))this.index++; else {
+ var c = a + this.peek(), d = c + this.peek(2), e = mb[c], f = mb[d];
+ mb[a] || e || f ? (a = f ? d : e ? c : a, this.tokens.push({
+ index: this.index,
+ text: a,
+ operator: !0
+ }), this.index += a.length) : this.throwError("Unexpected next character ", this.index, this.index + 1)
+ }
+ return this.tokens
+ }, is: function (a, c) {
+ return -1 !==
+ c.indexOf(a)
+ }, peek: function (a) {
+ a = a || 1;
+ return this.index + a < this.text.length ? this.text.charAt(this.index + a) : !1
+ }, isNumber: function (a) {
+ return "0" <= a && "9" >= a && "string" === typeof a
+ }, isWhitespace: function (a) {
+ return " " === a || "\r" === a || "\t" === a || "\n" === a || "\v" === a || "\u00a0" === a
+ }, isIdent: function (a) {
+ return "a" <= a && "z" >= a || "A" <= a && "Z" >= a || "_" === a || "$" === a
+ }, isExpOperator: function (a) {
+ return "-" === a || "+" === a || this.isNumber(a)
+ }, throwError: function (a, c, d) {
+ d = d || this.index;
+ c = y(c) ? "s " + c + "-" + this.index + " [" + this.text.substring(c,
+ d) + "]" : " " + d;
+ throw la("lexerr", a, c, this.text);
+ }, readNumber: function () {
+ for (var a = "", c = this.index; this.index < this.text.length;) {
+ var d = Q(this.text.charAt(this.index));
+ if ("." == d || this.isNumber(d))a += d; else {
+ var e = this.peek();
+ if ("e" == d && this.isExpOperator(e))a += d; else if (this.isExpOperator(d) && e && this.isNumber(e) && "e" == a.charAt(a.length - 1))a += d; else if (!this.isExpOperator(d) || e && this.isNumber(e) || "e" != a.charAt(a.length - 1))break; else this.throwError("Invalid exponent")
+ }
+ this.index++
+ }
+ this.tokens.push({
+ index: c,
+ text: a, constant: !0, value: Number(a)
+ })
+ }, readIdent: function () {
+ for (var a = this.index; this.index < this.text.length;) {
+ var c = this.text.charAt(this.index);
+ if (!this.isIdent(c) && !this.isNumber(c))break;
+ this.index++
+ }
+ this.tokens.push({index: a, text: this.text.slice(a, this.index), identifier: !0})
+ }, readString: function (a) {
+ var c = this.index;
+ this.index++;
+ for (var d = "", e = a, f = !1; this.index < this.text.length;) {
+ var g = this.text.charAt(this.index), e = e + g;
+ if (f)"u" === g ? (f = this.text.substring(this.index + 1, this.index + 5), f.match(/[\da-f]{4}/i) ||
+ this.throwError("Invalid unicode escape [\\u" + f + "]"), this.index += 4, d += String.fromCharCode(parseInt(f, 16))) : d += Xf[g] || g, f = !1; else if ("\\" === g)f = !0; else {
+ if (g === a) {
+ this.index++;
+ this.tokens.push({index: c, text: e, constant: !0, value: d});
+ return
+ }
+ d += g
+ }
+ this.index++
+ }
+ this.throwError("Unterminated quote", c)
+ }
+ };
+ var hb = function (a, c, d) {
+ this.lexer = a;
+ this.$filter = c;
+ this.options = d
+ };
+ hb.ZERO = z(function () {
+ return 0
+ }, {sharedGetter: !0, constant: !0});
+ hb.prototype = {
+ constructor: hb, parse: function (a) {
+ this.text = a;
+ this.tokens = this.lexer.lex(a);
+ a = this.statements();
+ 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]);
+ a.literal = !!a.literal;
+ a.constant = !!a.constant;
+ return a
+ }, primary: function () {
+ var a;
+ this.expect("(") ? (a = this.filterChain(), this.consume(")")) : this.expect("[") ? a = this.arrayDeclaration() : this.expect("{") ? a = this.object() : this.peek().identifier && this.peek().text in lb ? a = lb[this.consume().text] : this.peek().identifier ? a = this.identifier() : this.peek().constant ? a = this.constant() : this.throwError("not a primary expression",
+ this.peek());
+ for (var c, d; c = this.expect("(", "[", ".");)"(" === c.text ? (a = this.functionCall(a, d), d = null) : "[" === c.text ? (d = a, a = this.objectIndex(a)) : "." === c.text ? (d = a, a = this.fieldAccess(a)) : this.throwError("IMPOSSIBLE");
+ return a
+ }, throwError: function (a, c) {
+ throw la("syntax", c.text, a, c.index + 1, this.text, this.text.substring(c.index));
+ }, peekToken: function () {
+ if (0 === this.tokens.length)throw la("ueoe", this.text);
+ return this.tokens[0]
+ }, peek: function (a, c, d, e) {
+ return this.peekAhead(0, a, c, d, e)
+ }, peekAhead: function (a,
+ c, d, e, f) {
+ if (this.tokens.length > a) {
+ a = this.tokens[a];
+ var g = a.text;
+ if (g === c || g === d || g === e || g === f || !(c || d || e || f))return a
+ }
+ return !1
+ }, expect: function (a, c, d, e) {
+ return (a = this.peek(a, c, d, e)) ? (this.tokens.shift(), a) : !1
+ }, consume: function (a) {
+ if (0 === this.tokens.length)throw la("ueoe", this.text);
+ var c = this.expect(a);
+ c || this.throwError("is unexpected, expecting [" + a + "]", this.peek());
+ return c
+ }, unaryFn: function (a, c) {
+ var d = mb[a];
+ return z(function (a, f) {
+ return d(a, f, c)
+ }, {constant: c.constant, inputs: [c]})
+ }, binaryFn: function (a,
+ c, d, e) {
+ var f = mb[c];
+ return z(function (c, e) {
+ return f(c, e, a, d)
+ }, {constant: a.constant && d.constant, inputs: !e && [a, d]})
+ }, identifier: function () {
+ for (var a = this.consume().text; this.peek(".") && this.peekAhead(1).identifier && !this.peekAhead(2, "(");)a += this.consume().text + this.consume().text;
+ return zf(a, this.options, this.text)
+ }, constant: function () {
+ var a = this.consume().value;
+ return z(function () {
+ return a
+ }, {constant: !0, literal: !0})
+ }, statements: function () {
+ for (var a = []; ;)if (0 < this.tokens.length && !this.peek("}", ")",
+ ";", "]") && a.push(this.filterChain()), !this.expect(";"))return 1 === a.length ? a[0] : function (c, d) {
+ for (var e, f = 0, g = a.length; f < g; f++)e = a[f](c, d);
+ return e
+ }
+ }, filterChain: function () {
+ for (var a = this.expression(); this.expect("|");)a = this.filter(a);
+ return a
+ }, filter: function (a) {
+ var c = this.$filter(this.consume().text), d, e;
+ if (this.peek(":"))for (d = [], e = []; this.expect(":");)d.push(this.expression());
+ var f = [a].concat(d || []);
+ return z(function (f, h) {
+ var l = a(f, h);
+ if (e) {
+ e[0] = l;
+ for (l = d.length; l--;)e[l + 1] = d[l](f, h);
+ return c.apply(t,
+ e)
+ }
+ return c(l)
+ }, {constant: !c.$stateful && f.every(ec), inputs: !c.$stateful && f})
+ }, expression: function () {
+ return this.assignment()
+ }, assignment: function () {
+ var a = this.ternary(), c, d;
+ return (d = this.expect("=")) ? (a.assign || this.throwError("implies assignment but [" + this.text.substring(0, d.index) + "] can not be assigned to", d), c = this.ternary(), z(function (d, f) {
+ return a.assign(d, c(d, f), f)
+ }, {inputs: [a, c]})) : a
+ }, ternary: function () {
+ var a = this.logicalOR(), c;
+ if (this.expect("?") && (c = this.assignment(), this.consume(":"))) {
+ var d =
+ this.assignment();
+ return z(function (e, f) {
+ return a(e, f) ? c(e, f) : d(e, f)
+ }, {constant: a.constant && c.constant && d.constant})
+ }
+ return a
+ }, logicalOR: function () {
+ for (var a = this.logicalAND(), c; c = this.expect("||");)a = this.binaryFn(a, c.text, this.logicalAND(), !0);
+ return a
+ }, logicalAND: function () {
+ for (var a = this.equality(), c; c = this.expect("&&");)a = this.binaryFn(a, c.text, this.equality(), !0);
+ return a
+ }, equality: function () {
+ for (var a = this.relational(), c; c = this.expect("==", "!=", "===", "!==");)a = this.binaryFn(a, c.text, this.relational());
+ return a
+ }, relational: function () {
+ for (var a = this.additive(), c; c = this.expect("<", ">", "<=", ">=");)a = this.binaryFn(a, c.text, this.additive());
+ return a
+ }, additive: function () {
+ for (var a = this.multiplicative(), c; c = this.expect("+", "-");)a = this.binaryFn(a, c.text, this.multiplicative());
+ return a
+ }, multiplicative: function () {
+ for (var a = this.unary(), c; c = this.expect("*", "/", "%");)a = this.binaryFn(a, c.text, this.unary());
+ return a
+ }, unary: function () {
+ var a;
+ return this.expect("+") ? this.primary() : (a = this.expect("-")) ? this.binaryFn(hb.ZERO,
+ a.text, this.unary()) : (a = this.expect("!")) ? this.unaryFn(a.text, this.unary()) : this.primary()
+ }, fieldAccess: function (a) {
+ var c = this.identifier();
+ return z(function (d, e, f) {
+ d = f || a(d, e);
+ return null == d ? t : c(d)
+ }, {
+ assign: function (d, e, f) {
+ (f = a(d, f)) || a.assign(d, f = {});
+ return c.assign(f, e)
+ }
+ })
+ }, objectIndex: function (a) {
+ var c = this.text, d = this.expression();
+ this.consume("]");
+ return z(function (e, f) {
+ var g = a(e, f), h = d(e, f);
+ sa(h, c);
+ return g ? ta(g[h], c) : t
+ }, {
+ assign: function (e, f, g) {
+ var h = sa(d(e, g), c);
+ (g = ta(a(e, g), c)) || a.assign(e,
+ g = {});
+ return g[h] = f
+ }
+ })
+ }, functionCall: function (a, c) {
+ var d = [];
+ if (")" !== this.peekToken().text) {
+ do d.push(this.expression()); while (this.expect(","))
+ }
+ this.consume(")");
+ var e = this.text, f = d.length ? [] : null;
+ return function (g, h) {
+ var l = c ? c(g, h) : y(c) ? t : g, k = a(g, h, l) || C;
+ if (f)for (var m = d.length; m--;)f[m] = ta(d[m](g, h), e);
+ ta(l, e);
+ if (k) {
+ if (k.constructor === k)throw la("isecfn", e);
+ if (k === Uf || k === Vf || k === Wf)throw la("isecff", e);
+ }
+ l = k.apply ? k.apply(l, f) : k(f[0], f[1], f[2], f[3], f[4]);
+ return ta(l, e)
+ }
+ }, arrayDeclaration: function () {
+ var a =
+ [];
+ if ("]" !== this.peekToken().text) {
+ do {
+ if (this.peek("]"))break;
+ a.push(this.expression())
+ } while (this.expect(","))
+ }
+ this.consume("]");
+ return z(function (c, d) {
+ for (var e = [], f = 0, g = a.length; f < g; f++)e.push(a[f](c, d));
+ return e
+ }, {literal: !0, constant: a.every(ec), inputs: a})
+ }, object: function () {
+ var a = [], c = [];
+ if ("}" !== this.peekToken().text) {
+ do {
+ if (this.peek("}"))break;
+ var d = this.consume();
+ d.constant ? a.push(d.value) : d.identifier ? a.push(d.text) : this.throwError("invalid key", d);
+ this.consume(":");
+ c.push(this.expression())
+ } while (this.expect(","))
+ }
+ this.consume("}");
+ return z(function (d, f) {
+ for (var g = {}, h = 0, l = c.length; h < l; h++)g[a[h]] = c[h](d, f);
+ return g
+ }, {literal: !0, constant: c.every(ec), inputs: c})
+ }
+ };
+ var Bf = ha(), Af = ha(), Cf = Object.prototype.valueOf, Ca = T("$sce"), ma = {
+ HTML: "html",
+ CSS: "css",
+ URL: "url",
+ RESOURCE_URL: "resourceUrl",
+ JS: "js"
+ }, ja = T("$compile"), Z = Y.createElement("a"), id = Ba(M.location.href);
+ Dc.$inject = ["$provide"];
+ jd.$inject = ["$locale"];
+ ld.$inject = ["$locale"];
+ var od = ".", Mf = {
+ yyyy: $("FullYear", 4),
+ yy: $("FullYear", 2, 0, !0),
+ y: $("FullYear", 1),
+ MMMM: Ib("Month"),
+ MMM: Ib("Month", !0),
+ MM: $("Month", 2, 1),
+ M: $("Month", 1, 1),
+ dd: $("Date", 2),
+ d: $("Date", 1),
+ HH: $("Hours", 2),
+ H: $("Hours", 1),
+ hh: $("Hours", 2, -12),
+ h: $("Hours", 1, -12),
+ mm: $("Minutes", 2),
+ m: $("Minutes", 1),
+ ss: $("Seconds", 2),
+ s: $("Seconds", 1),
+ sss: $("Milliseconds", 3),
+ EEEE: Ib("Day"),
+ EEE: Ib("Day", !0),
+ a: function (a, c) {
+ return 12 > a.getHours() ? c.AMPMS[0] : c.AMPMS[1]
+ },
+ Z: function (a) {
+ a = -1 * a.getTimezoneOffset();
+ return a = (0 <= a ? "+" : "") + (Hb(Math[0 < a ? "floor" : "ceil"](a / 60), 2) + Hb(Math.abs(a % 60), 2))
+ },
+ ww: qd(2),
+ w: qd(1)
+ }, Lf = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
+ Kf = /^\-?\d+$/;
+ kd.$inject = ["$locale"];
+ var Hf = da(Q), If = da(ub);
+ md.$inject = ["$parse"];
+ var Td = da({
+ restrict: "E", compile: function (a, c) {
+ if (!c.href && !c.xlinkHref && !c.name)return function (a, c) {
+ var f = "[object SVGAnimatedString]" === Da.call(c.prop("href")) ? "xlink:href" : "href";
+ c.on("click", function (a) {
+ c.attr(f) || a.preventDefault()
+ })
+ }
+ }
+ }), vb = {};
+ s(Eb, function (a, c) {
+ if ("multiple" != a) {
+ var d = ya("ng-" + c);
+ vb[d] = function () {
+ return {
+ restrict: "A", priority: 100, link: function (a, f, g) {
+ a.$watch(g[d], function (a) {
+ g.$set(c, !!a)
+ })
+ }
+ }
+ }
+ }
+ });
+ s(Nc, function (a, c) {
+ vb[c] = function () {
+ return {
+ priority: 100, link: function (a, e, f) {
+ if ("ngPattern" === c && "/" == f.ngPattern.charAt(0) && (e = f.ngPattern.match(Of))) {
+ f.$set("ngPattern", new RegExp(e[1], e[2]));
+ return
+ }
+ a.$watch(f[c], function (a) {
+ f.$set(c, a)
+ })
+ }
+ }
+ }
+ });
+ s(["src", "srcset", "href"], function (a) {
+ var c = ya("ng-" + a);
+ vb[c] = function () {
+ return {
+ priority: 99, link: function (d, e, f) {
+ var g = a, h = a;
+ "href" === a && "[object SVGAnimatedString]" === Da.call(e.prop("href")) && (h = "xlinkHref", f.$attr[h] = "xlink:href", g = null);
+ f.$observe(c, function (c) {
+ c ?
+ (f.$set(h, c), Ra && g && e.prop(g, f[h])) : "href" === a && f.$set(h, null)
+ })
+ }
+ }
+ }
+ });
+ var Jb = {
+ $addControl: C, $$renameControl: function (a, c) {
+ a.$name = c
+ }, $removeControl: C, $setValidity: C, $setDirty: C, $setPristine: C, $setSubmitted: C
+ };
+ rd.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"];
+ var yd = function (a) {
+ return ["$timeout", function (c) {
+ return {
+ name: "form", restrict: a ? "EAC" : "E", controller: rd, compile: function (a) {
+ a.addClass(Sa).addClass(kb);
+ return {
+ pre: function (a, d, g, h) {
+ if (!("action"in g)) {
+ var l = function (c) {
+ a.$apply(function () {
+ h.$commitViewValue();
+ h.$setSubmitted()
+ });
+ c.preventDefault()
+ };
+ d[0].addEventListener("submit", l, !1);
+ d.on("$destroy", function () {
+ c(function () {
+ d[0].removeEventListener("submit", l, !1)
+ }, 0, !1)
+ })
+ }
+ var k = h.$$parentForm, m = h.$name;
+ m && (gb(a, m, h, m), g.$observe(g.name ? "name" : "ngForm", function (c) {
+ m !== c && (gb(a, m, t, m), m = c, gb(a, m, h, m), k.$$renameControl(h, m))
+ }));
+ d.on("$destroy", function () {
+ k.$removeControl(h);
+ m && gb(a, m, t, m);
+ z(h, Jb)
+ })
+ }
+ }
+ }
+ }
+ }]
+ }, Ud = yd(), ge = yd(!0), Nf = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/, Yf = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
+ Zf = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i, $f = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/, zd = /^(\d{4})-(\d{2})-(\d{2})$/, Ad = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, jc = /^(\d{4})-W(\d\d)$/, Bd = /^(\d{4})-(\d\d)$/, Cd = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/, ag = /(\s+|^)default(\s+|$)/, Mb = new T("ngModel"), Dd = {
+ text: function (a, c, d, e, f, g) {
+ ib(a, c, d, e, f, g);
+ hc(e)
+ },
+ date: jb("date", zd, Lb(zd, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"),
+ "datetime-local": jb("datetimelocal",
+ Ad, Lb(Ad, "yyyy MM dd HH mm ss sss".split(" ")), "yyyy-MM-ddTHH:mm:ss.sss"),
+ time: jb("time", Cd, Lb(Cd, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"),
+ week: jb("week", jc, function (a, c) {
+ if (pa(a))return a;
+ if (F(a)) {
+ jc.lastIndex = 0;
+ var d = jc.exec(a);
+ if (d) {
+ var e = +d[1], f = +d[2], g = d = 0, h = 0, l = 0, k = pd(e), f = 7 * (f - 1);
+ c && (d = c.getHours(), g = c.getMinutes(), h = c.getSeconds(), l = c.getMilliseconds());
+ return new Date(e, 0, k.getDate() + f, d, g, h, l)
+ }
+ }
+ return NaN
+ }, "yyyy-Www"),
+ month: jb("month", Bd, Lb(Bd, ["yyyy", "MM"]), "yyyy-MM"),
+ number: function (a,
+ c, d, e, f, g) {
+ td(a, c, d, e);
+ ib(a, c, d, e, f, g);
+ e.$$parserName = "number";
+ e.$parsers.push(function (a) {
+ return e.$isEmpty(a) ? null : $f.test(a) ? parseFloat(a) : t
+ });
+ e.$formatters.push(function (a) {
+ if (!e.$isEmpty(a)) {
+ if (!V(a))throw Mb("numfmt", a);
+ a = a.toString()
+ }
+ return a
+ });
+ if (d.min || d.ngMin) {
+ var h;
+ e.$validators.min = function (a) {
+ return e.$isEmpty(a) || D(h) || a >= h
+ };
+ d.$observe("min", function (a) {
+ y(a) && !V(a) && (a = parseFloat(a, 10));
+ h = V(a) && !isNaN(a) ? a : t;
+ e.$validate()
+ })
+ }
+ if (d.max || d.ngMax) {
+ var l;
+ e.$validators.max = function (a) {
+ return e.$isEmpty(a) ||
+ D(l) || a <= l
+ };
+ d.$observe("max", function (a) {
+ y(a) && !V(a) && (a = parseFloat(a, 10));
+ l = V(a) && !isNaN(a) ? a : t;
+ e.$validate()
+ })
+ }
+ },
+ url: function (a, c, d, e, f, g) {
+ ib(a, c, d, e, f, g);
+ hc(e);
+ e.$$parserName = "url";
+ e.$validators.url = function (a, c) {
+ var d = a || c;
+ return e.$isEmpty(d) || Yf.test(d)
+ }
+ },
+ email: function (a, c, d, e, f, g) {
+ ib(a, c, d, e, f, g);
+ hc(e);
+ e.$$parserName = "email";
+ e.$validators.email = function (a, c) {
+ var d = a || c;
+ return e.$isEmpty(d) || Zf.test(d)
+ }
+ },
+ radio: function (a, c, d, e) {
+ D(d.name) && c.attr("name", ++nb);
+ c.on("click", function (a) {
+ c[0].checked &&
+ e.$setViewValue(d.value, a && a.type)
+ });
+ e.$render = function () {
+ c[0].checked = d.value == e.$viewValue
+ };
+ d.$observe("value", e.$render)
+ },
+ checkbox: function (a, c, d, e, f, g, h, l) {
+ var k = ud(l, a, "ngTrueValue", d.ngTrueValue, !0), m = ud(l, a, "ngFalseValue", d.ngFalseValue, !1);
+ c.on("click", function (a) {
+ e.$setViewValue(c[0].checked, a && a.type)
+ });
+ e.$render = function () {
+ c[0].checked = e.$viewValue
+ };
+ e.$isEmpty = function (a) {
+ return !1 === a
+ };
+ e.$formatters.push(function (a) {
+ return fa(a, k)
+ });
+ e.$parsers.push(function (a) {
+ return a ? k : m
+ })
+ },
+ hidden: C,
+ button: C,
+ submit: C,
+ reset: C,
+ file: C
+ }, xc = ["$browser", "$sniffer", "$filter", "$parse", function (a, c, d, e) {
+ return {
+ restrict: "E", require: ["?ngModel"], link: {
+ pre: function (f, g, h, l) {
+ l[0] && (Dd[Q(h.type)] || Dd.text)(f, g, h, l[0], c, a, d, e)
+ }
+ }
+ }
+ }], kb = "ng-valid", vd = "ng-invalid", Sa = "ng-pristine", Kb = "ng-dirty", xd = "ng-pending", bg = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function (a, c, d, e, f, g, h, l, k, m) {
+ this.$modelValue = this.$viewValue = Number.NaN;
+ this.$$rawModelValue =
+ t;
+ this.$validators = {};
+ this.$asyncValidators = {};
+ this.$parsers = [];
+ this.$formatters = [];
+ this.$viewChangeListeners = [];
+ this.$untouched = !0;
+ this.$touched = !1;
+ this.$pristine = !0;
+ this.$dirty = !1;
+ this.$valid = !0;
+ this.$invalid = !1;
+ this.$error = {};
+ this.$$success = {};
+ this.$pending = t;
+ this.$name = m(d.name || "", !1)(a);
+ var p = f(d.ngModel), q = p.assign, u = p, r = q, O = null, n = this;
+ this.$$setOptions = function (a) {
+ if ((n.$options = a) && a.getterSetter) {
+ var c = f(d.ngModel + "()"), g = f(d.ngModel + "($$$p)");
+ u = function (a) {
+ var d = p(a);
+ G(d) && (d = c(a));
+ return d
+ };
+ r = function (a, c) {
+ G(p(a)) ? g(a, {$$$p: n.$modelValue}) : q(a, n.$modelValue)
+ }
+ } else if (!p.assign)throw Mb("nonassign", d.ngModel, va(e));
+ };
+ this.$render = C;
+ this.$isEmpty = function (a) {
+ return D(a) || "" === a || null === a || a !== a
+ };
+ var v = e.inheritedData("$formController") || Jb, w = 0;
+ sd({
+ ctrl: this, $element: e, set: function (a, c) {
+ a[c] = !0
+ }, unset: function (a, c) {
+ delete a[c]
+ }, parentForm: v, $animate: g
+ });
+ this.$setPristine = function () {
+ n.$dirty = !1;
+ n.$pristine = !0;
+ g.removeClass(e, Kb);
+ g.addClass(e, Sa)
+ };
+ this.$setDirty = function () {
+ n.$dirty = !0;
+ n.$pristine = !1;
+ g.removeClass(e, Sa);
+ g.addClass(e, Kb);
+ v.$setDirty()
+ };
+ this.$setUntouched = function () {
+ n.$touched = !1;
+ n.$untouched = !0;
+ g.setClass(e, "ng-untouched", "ng-touched")
+ };
+ this.$setTouched = function () {
+ n.$touched = !0;
+ n.$untouched = !1;
+ g.setClass(e, "ng-touched", "ng-untouched")
+ };
+ this.$rollbackViewValue = function () {
+ h.cancel(O);
+ n.$viewValue = n.$$lastCommittedViewValue;
+ n.$render()
+ };
+ this.$validate = function () {
+ if (!V(n.$modelValue) || !isNaN(n.$modelValue)) {
+ var a = n.$$rawModelValue, c = n.$valid, d = n.$modelValue, e = n.$options && n.$options.allowInvalid;
+ n.$$runValidators(n.$error[n.$$parserName || "parse"] ? !1 : t, a, n.$$lastCommittedViewValue, function (f) {
+ e || c === f || (n.$modelValue = f ? a : t, n.$modelValue !== d && n.$$writeModelToScope())
+ })
+ }
+ };
+ this.$$runValidators = function (a, c, d, e) {
+ function f() {
+ var a = !0;
+ s(n.$validators, function (e, f) {
+ var g = e(c, d);
+ a = a && g;
+ h(f, g)
+ });
+ return a ? !0 : (s(n.$asyncValidators, function (a, c) {
+ h(c, null)
+ }), !1)
+ }
+
+ function g() {
+ var a = [], e = !0;
+ s(n.$asyncValidators, function (f, g) {
+ var l = f(c, d);
+ if (!l || !G(l.then))throw Mb("$asyncValidators", l);
+ h(g, t);
+ a.push(l.then(function () {
+ h(g,
+ !0)
+ }, function (a) {
+ e = !1;
+ h(g, !1)
+ }))
+ });
+ a.length ? k.all(a).then(function () {
+ l(e)
+ }, C) : l(!0)
+ }
+
+ function h(a, c) {
+ m === w && n.$setValidity(a, c)
+ }
+
+ function l(a) {
+ m === w && e(a)
+ }
+
+ w++;
+ var m = w;
+ (function (a) {
+ var c = n.$$parserName || "parse";
+ if (a === t)h(c, null); else if (h(c, a), !a)return s(n.$validators, function (a, c) {
+ h(c, null)
+ }), s(n.$asyncValidators, function (a, c) {
+ h(c, null)
+ }), !1;
+ return !0
+ })(a) ? f() ? g() : l(!1) : l(!1)
+ };
+ this.$commitViewValue = function () {
+ var a = n.$viewValue;
+ h.cancel(O);
+ if (n.$$lastCommittedViewValue !== a || "" === a && n.$$hasNativeValidators)n.$$lastCommittedViewValue =
+ a, n.$pristine && this.$setDirty(), this.$$parseAndValidate()
+ };
+ this.$$parseAndValidate = function () {
+ var c = n.$$lastCommittedViewValue, d = D(c) ? t : !0;
+ if (d)for (var e = 0; e < n.$parsers.length; e++)if (c = n.$parsers[e](c), D(c)) {
+ d = !1;
+ break
+ }
+ V(n.$modelValue) && isNaN(n.$modelValue) && (n.$modelValue = u(a));
+ var f = n.$modelValue, g = n.$options && n.$options.allowInvalid;
+ n.$$rawModelValue = c;
+ g && (n.$modelValue = c, n.$modelValue !== f && n.$$writeModelToScope());
+ n.$$runValidators(d, c, n.$$lastCommittedViewValue, function (a) {
+ g || (n.$modelValue =
+ a ? c : t, n.$modelValue !== f && n.$$writeModelToScope())
+ })
+ };
+ this.$$writeModelToScope = function () {
+ r(a, n.$modelValue);
+ s(n.$viewChangeListeners, function (a) {
+ try {
+ a()
+ } catch (d) {
+ c(d)
+ }
+ })
+ };
+ this.$setViewValue = function (a, c) {
+ n.$viewValue = a;
+ n.$options && !n.$options.updateOnDefault || n.$$debounceViewValueCommit(c)
+ };
+ this.$$debounceViewValueCommit = function (c) {
+ var d = 0, e = n.$options;
+ e && y(e.debounce) && (e = e.debounce, V(e) ? d = e : V(e[c]) ? d = e[c] : V(e["default"]) && (d = e["default"]));
+ h.cancel(O);
+ d ? O = h(function () {
+ n.$commitViewValue()
+ }, d) :
+ l.$$phase ? n.$commitViewValue() : a.$apply(function () {
+ n.$commitViewValue()
+ })
+ };
+ a.$watch(function () {
+ var c = u(a);
+ if (c !== n.$modelValue) {
+ n.$modelValue = n.$$rawModelValue = c;
+ for (var d = n.$formatters, e = d.length, f = c; e--;)f = d[e](f);
+ n.$viewValue !== f && (n.$viewValue = n.$$lastCommittedViewValue = f, n.$render(), n.$$runValidators(t, c, f, C))
+ }
+ return c
+ })
+ }], ve = ["$rootScope", function (a) {
+ return {
+ restrict: "A",
+ require: ["ngModel", "^?form", "^?ngModelOptions"],
+ controller: bg,
+ priority: 1,
+ compile: function (c) {
+ c.addClass(Sa).addClass("ng-untouched").addClass(kb);
+ return {
+ pre: function (a, c, f, g) {
+ var h = g[0], l = g[1] || Jb;
+ h.$$setOptions(g[2] && g[2].$options);
+ l.$addControl(h);
+ f.$observe("name", function (a) {
+ h.$name !== a && l.$$renameControl(h, a)
+ });
+ a.$on("$destroy", function () {
+ l.$removeControl(h)
+ })
+ }, post: function (c, e, f, g) {
+ var h = g[0];
+ if (h.$options && h.$options.updateOn)e.on(h.$options.updateOn, function (a) {
+ h.$$debounceViewValueCommit(a && a.type)
+ });
+ e.on("blur", function (e) {
+ h.$touched || (a.$$phase ? c.$evalAsync(h.$setTouched) : c.$apply(h.$setTouched))
+ })
+ }
+ }
+ }
+ }
+ }], xe = da({
+ restrict: "A", require: "ngModel",
+ link: function (a, c, d, e) {
+ e.$viewChangeListeners.push(function () {
+ a.$eval(d.ngChange)
+ })
+ }
+ }), zc = function () {
+ return {
+ restrict: "A", require: "?ngModel", link: function (a, c, d, e) {
+ e && (d.required = !0, e.$validators.required = function (a, c) {
+ return !d.required || !e.$isEmpty(c)
+ }, d.$observe("required", function () {
+ e.$validate()
+ }))
+ }
+ }
+ }, yc = function () {
+ return {
+ restrict: "A", require: "?ngModel", link: function (a, c, d, e) {
+ if (e) {
+ var f, g = d.ngPattern || d.pattern;
+ d.$observe("pattern", function (a) {
+ F(a) && 0 < a.length && (a = new RegExp("^" + a + "$"));
+ if (a && !a.test)throw T("ngPattern")("noregexp", g, a, va(c));
+ f = a || t;
+ e.$validate()
+ });
+ e.$validators.pattern = function (a) {
+ return e.$isEmpty(a) || D(f) || f.test(a)
+ }
+ }
+ }
+ }
+ }, Bc = function () {
+ return {
+ restrict: "A", require: "?ngModel", link: function (a, c, d, e) {
+ if (e) {
+ var f = -1;
+ d.$observe("maxlength", function (a) {
+ a = ba(a);
+ f = isNaN(a) ? -1 : a;
+ e.$validate()
+ });
+ e.$validators.maxlength = function (a, c) {
+ return 0 > f || e.$isEmpty(a) || c.length <= f
+ }
+ }
+ }
+ }
+ }, Ac = function () {
+ return {
+ restrict: "A", require: "?ngModel", link: function (a, c, d, e) {
+ if (e) {
+ var f = 0;
+ d.$observe("minlength",
+ function (a) {
+ f = ba(a) || 0;
+ e.$validate()
+ });
+ e.$validators.minlength = function (a, c) {
+ return e.$isEmpty(c) || c.length >= f
+ }
+ }
+ }
+ }
+ }, we = function () {
+ return {
+ restrict: "A", priority: 100, require: "ngModel", link: function (a, c, d, e) {
+ var f = c.attr(d.$attr.ngList) || ", ", g = "false" !== d.ngTrim, h = g ? U(f) : f;
+ e.$parsers.push(function (a) {
+ if (!D(a)) {
+ var c = [];
+ a && s(a.split(h), function (a) {
+ a && c.push(g ? U(a) : a)
+ });
+ return c
+ }
+ });
+ e.$formatters.push(function (a) {
+ return x(a) ? a.join(f) : t
+ });
+ e.$isEmpty = function (a) {
+ return !a || !a.length
+ }
+ }
+ }
+ }, cg = /^(true|false|\d+)$/,
+ ye = function () {
+ return {
+ restrict: "A", priority: 100, compile: function (a, c) {
+ return cg.test(c.ngValue) ? function (a, c, f) {
+ f.$set("value", a.$eval(f.ngValue))
+ } : function (a, c, f) {
+ a.$watch(f.ngValue, function (a) {
+ f.$set("value", a)
+ })
+ }
+ }
+ }
+ }, ze = function () {
+ return {
+ restrict: "A", controller: ["$scope", "$attrs", function (a, c) {
+ var d = this;
+ this.$options = a.$eval(c.ngModelOptions);
+ this.$options.updateOn !== t ? (this.$options.updateOnDefault = !1, this.$options.updateOn = U(this.$options.updateOn.replace(ag, function () {
+ d.$options.updateOnDefault = !0;
+ return " "
+ }))) : this.$options.updateOnDefault = !0
+ }]
+ }
+ }, Zd = ["$compile", function (a) {
+ return {
+ restrict: "AC", compile: function (c) {
+ a.$$addBindingClass(c);
+ return function (c, e, f) {
+ a.$$addBindingInfo(e, f.ngBind);
+ e = e[0];
+ c.$watch(f.ngBind, function (a) {
+ e.textContent = a === t ? "" : a
+ })
+ }
+ }
+ }
+ }], ae = ["$interpolate", "$compile", function (a, c) {
+ return {
+ compile: function (d) {
+ c.$$addBindingClass(d);
+ return function (d, f, g) {
+ d = a(f.attr(g.$attr.ngBindTemplate));
+ c.$$addBindingInfo(f, d.expressions);
+ f = f[0];
+ g.$observe("ngBindTemplate", function (a) {
+ f.textContent =
+ a === t ? "" : a
+ })
+ }
+ }
+ }
+ }], $d = ["$sce", "$parse", "$compile", function (a, c, d) {
+ return {
+ restrict: "A", compile: function (e, f) {
+ var g = c(f.ngBindHtml), h = c(f.ngBindHtml, function (a) {
+ return (a || "").toString()
+ });
+ d.$$addBindingClass(e);
+ return function (c, e, f) {
+ d.$$addBindingInfo(e, f.ngBindHtml);
+ c.$watch(h, function () {
+ e.html(a.getTrustedHtml(g(c)) || "")
+ })
+ }
+ }
+ }
+ }], be = ic("", !0), de = ic("Odd", 0), ce = ic("Even", 1), ee = Ja({
+ compile: function (a, c) {
+ c.$set("ngCloak", t);
+ a.removeClass("ng-cloak")
+ }
+ }), fe = [function () {
+ return {
+ restrict: "A", scope: !0, controller: "@",
+ priority: 500
+ }
+ }], Cc = {}, dg = {blur: !0, focus: !0};
+ s("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function (a) {
+ var c = ya("ng-" + a);
+ Cc[c] = ["$parse", "$rootScope", function (d, e) {
+ return {
+ restrict: "A", compile: function (f, g) {
+ var h = d(g[c], null, !0);
+ return function (c, d) {
+ d.on(a, function (d) {
+ var f = function () {
+ h(c, {$event: d})
+ };
+ dg[a] && e.$$phase ? c.$evalAsync(f) : c.$apply(f)
+ })
+ }
+ }
+ }
+ }]
+ });
+ var ie = ["$animate", function (a) {
+ return {
+ multiElement: !0,
+ transclude: "element",
+ priority: 600,
+ terminal: !0,
+ restrict: "A",
+ $$tlb: !0,
+ link: function (c, d, e, f, g) {
+ var h, l, k;
+ c.$watch(e.ngIf, function (c) {
+ c ? l || g(function (c, f) {
+ l = f;
+ c[c.length++] = Y.createComment(" end ngIf: " + e.ngIf + " ");
+ h = {clone: c};
+ a.enter(c, d.parent(), d)
+ }) : (k && (k.remove(), k = null), l && (l.$destroy(), l = null), h && (k = tb(h.clone), a.leave(k).then(function () {
+ k = null
+ }), h = null))
+ })
+ }
+ }
+ }], je = ["$templateRequest", "$anchorScroll", "$animate", "$sce", function (a, c, d, e) {
+ return {
+ restrict: "ECA", priority: 400, terminal: !0, transclude: "element",
+ controller: ga.noop, compile: function (f, g) {
+ var h = g.ngInclude || g.src, l = g.onload || "", k = g.autoscroll;
+ return function (f, g, q, s, r) {
+ var t = 0, n, v, w, L = function () {
+ v && (v.remove(), v = null);
+ n && (n.$destroy(), n = null);
+ w && (d.leave(w).then(function () {
+ v = null
+ }), v = w, w = null)
+ };
+ f.$watch(e.parseAsResourceUrl(h), function (e) {
+ var h = function () {
+ !y(k) || k && !f.$eval(k) || c()
+ }, q = ++t;
+ e ? (a(e, !0).then(function (a) {
+ if (q === t) {
+ var c = f.$new();
+ s.template = a;
+ a = r(c, function (a) {
+ L();
+ d.enter(a, null, g).then(h)
+ });
+ n = c;
+ w = a;
+ n.$emit("$includeContentLoaded",
+ e);
+ f.$eval(l)
+ }
+ }, function () {
+ q === t && (L(), f.$emit("$includeContentError", e))
+ }), f.$emit("$includeContentRequested", e)) : (L(), s.template = null)
+ })
+ }
+ }
+ }
+ }], Ae = ["$compile", function (a) {
+ return {
+ restrict: "ECA", priority: -400, require: "ngInclude", link: function (c, d, e, f) {
+ /SVG/.test(d[0].toString()) ? (d.empty(), a(Fc(f.template, Y).childNodes)(c, function (a) {
+ d.append(a)
+ }, {futureParentElement: d})) : (d.html(f.template), a(d.contents())(c))
+ }
+ }
+ }], ke = Ja({
+ priority: 450, compile: function () {
+ return {
+ pre: function (a, c, d) {
+ a.$eval(d.ngInit)
+ }
+ }
+ }
+ }),
+ le = Ja({terminal: !0, priority: 1E3}), me = ["$locale", "$interpolate", function (a, c) {
+ var d = /{}/g, e = /^when(Minus)?(.+)$/;
+ return {
+ restrict: "EA", link: function (f, g, h) {
+ function l(a) {
+ g.text(a || "")
+ }
+
+ var k = h.count, m = h.$attr.when && g.attr(h.$attr.when), p = h.offset || 0, q = f.$eval(m) || {}, u = {}, m = c.startSymbol(), r = c.endSymbol(), t = m + k + "-" + p + r, n = ga.noop, v;
+ s(h, function (a, c) {
+ var d = e.exec(c);
+ d && (d = (d[1] ? "-" : "") + Q(d[2]), q[d] = g.attr(h.$attr[c]))
+ });
+ s(q, function (a, e) {
+ u[e] = c(a.replace(d, t))
+ });
+ f.$watch(k, function (c) {
+ c = parseFloat(c);
+ var d =
+ isNaN(c);
+ d || c in q || (c = a.pluralCat(c - p));
+ c === v || d && isNaN(v) || (n(), n = f.$watch(u[c], l), v = c)
+ })
+ }
+ }
+ }], ne = ["$parse", "$animate", function (a, c) {
+ var d = T("ngRepeat"), e = function (a, c, d, e, k, m, p) {
+ a[d] = e;
+ k && (a[k] = m);
+ a.$index = c;
+ a.$first = 0 === c;
+ a.$last = c === p - 1;
+ a.$middle = !(a.$first || a.$last);
+ a.$odd = !(a.$even = 0 === (c & 1))
+ };
+ return {
+ restrict: "A",
+ multiElement: !0,
+ transclude: "element",
+ priority: 1E3,
+ terminal: !0,
+ $$tlb: !0,
+ compile: function (f, g) {
+ var h = g.ngRepeat, l = Y.createComment(" end ngRepeat: " + h + " "), k = h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+ if (!k)throw d("iexp", h);
+ var m = k[1], p = k[2], q = k[3], u = k[4], k = m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
+ if (!k)throw d("iidexp", m);
+ var r = k[3] || k[1], y = k[2];
+ if (q && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent)$/.test(q)))throw d("badident", q);
+ var n, v, w, D, z = {$id: Na};
+ u ? n = a(u) : (w = function (a, c) {
+ return Na(c)
+ }, D = function (a) {
+ return a
+ });
+ return function (a, f, g, k, m) {
+ n && (v = function (c, d, e) {
+ y && (z[y] = c);
+ z[r] = d;
+ z.$index = e;
+ return n(a,
+ z)
+ });
+ var u = ha();
+ a.$watchCollection(p, function (g) {
+ var k, p, n = f[0], E, z = ha(), C, S, N, G, J, x, H;
+ q && (a[q] = g);
+ if (Ta(g))J = g, p = v || w; else {
+ p = v || D;
+ J = [];
+ for (H in g)g.hasOwnProperty(H) && "$" != H.charAt(0) && J.push(H);
+ J.sort()
+ }
+ C = J.length;
+ H = Array(C);
+ for (k = 0; k < C; k++)if (S = g === J ? k : J[k], N = g[S], G = p(S, N, k), u[G])x = u[G], delete u[G], z[G] = x, H[k] = x; else {
+ if (z[G])throw s(H, function (a) {
+ a && a.scope && (u[a.id] = a)
+ }), d("dupes", h, G, N);
+ H[k] = {id: G, scope: t, clone: t};
+ z[G] = !0
+ }
+ for (E in u) {
+ x = u[E];
+ G = tb(x.clone);
+ c.leave(G);
+ if (G[0].parentNode)for (k = 0,
+ p = G.length; k < p; k++)G[k].$$NG_REMOVED = !0;
+ x.scope.$destroy()
+ }
+ for (k = 0; k < C; k++)if (S = g === J ? k : J[k], N = g[S], x = H[k], x.scope) {
+ E = n;
+ do E = E.nextSibling; while (E && E.$$NG_REMOVED);
+ x.clone[0] != E && c.move(tb(x.clone), null, B(n));
+ n = x.clone[x.clone.length - 1];
+ e(x.scope, k, r, N, y, S, C)
+ } else m(function (a, d) {
+ x.scope = d;
+ var f = l.cloneNode(!1);
+ a[a.length++] = f;
+ c.enter(a, null, B(n));
+ n = f;
+ x.clone = a;
+ z[x.id] = x;
+ e(x.scope, k, r, N, y, S, C)
+ });
+ u = z
+ })
+ }
+ }
+ }
+ }], oe = ["$animate", function (a) {
+ return {
+ restrict: "A", multiElement: !0, link: function (c, d, e) {
+ c.$watch(e.ngShow,
+ function (c) {
+ a[c ? "removeClass" : "addClass"](d, "ng-hide", {tempClasses: "ng-hide-animate"})
+ })
+ }
+ }
+ }], he = ["$animate", function (a) {
+ return {
+ restrict: "A", multiElement: !0, link: function (c, d, e) {
+ c.$watch(e.ngHide, function (c) {
+ a[c ? "addClass" : "removeClass"](d, "ng-hide", {tempClasses: "ng-hide-animate"})
+ })
+ }
+ }
+ }], pe = Ja(function (a, c, d) {
+ a.$watch(d.ngStyle, function (a, d) {
+ d && a !== d && s(d, function (a, d) {
+ c.css(d, "")
+ });
+ a && c.css(a)
+ }, !0)
+ }), qe = ["$animate", function (a) {
+ return {
+ restrict: "EA", require: "ngSwitch", controller: ["$scope", function () {
+ this.cases =
+ {}
+ }], link: function (c, d, e, f) {
+ var g = [], h = [], l = [], k = [], m = function (a, c) {
+ return function () {
+ a.splice(c, 1)
+ }
+ };
+ c.$watch(e.ngSwitch || e.on, function (c) {
+ var d, e;
+ d = 0;
+ for (e = l.length; d < e; ++d)a.cancel(l[d]);
+ d = l.length = 0;
+ for (e = k.length; d < e; ++d) {
+ var r = tb(h[d].clone);
+ k[d].$destroy();
+ (l[d] = a.leave(r)).then(m(l, d))
+ }
+ h.length = 0;
+ k.length = 0;
+ (g = f.cases["!" + c] || f.cases["?"]) && s(g, function (c) {
+ c.transclude(function (d, e) {
+ k.push(e);
+ var f = c.element;
+ d[d.length++] = Y.createComment(" end ngSwitchWhen: ");
+ h.push({clone: d});
+ a.enter(d,
+ f.parent(), f)
+ })
+ })
+ })
+ }
+ }
+ }], re = Ja({
+ transclude: "element",
+ priority: 1200,
+ require: "^ngSwitch",
+ multiElement: !0,
+ link: function (a, c, d, e, f) {
+ e.cases["!" + d.ngSwitchWhen] = e.cases["!" + d.ngSwitchWhen] || [];
+ e.cases["!" + d.ngSwitchWhen].push({transclude: f, element: c})
+ }
+ }), se = Ja({
+ transclude: "element",
+ priority: 1200,
+ require: "^ngSwitch",
+ multiElement: !0,
+ link: function (a, c, d, e, f) {
+ e.cases["?"] = e.cases["?"] || [];
+ e.cases["?"].push({transclude: f, element: c})
+ }
+ }), ue = Ja({
+ restrict: "EAC", link: function (a, c, d, e, f) {
+ if (!f)throw T("ngTransclude")("orphan",
+ va(c));
+ f(function (a) {
+ c.empty();
+ c.append(a)
+ })
+ }
+ }), Vd = ["$templateCache", function (a) {
+ return {
+ restrict: "E", terminal: !0, compile: function (c, d) {
+ "text/ng-template" == d.type && a.put(d.id, c[0].text)
+ }
+ }
+ }], eg = T("ngOptions"), te = da({restrict: "A", terminal: !0}), Wd = ["$compile", "$parse", function (a, c) {
+ var d = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, e = {$setViewValue: C};
+ return {
+ restrict: "E",
+ require: ["select", "?ngModel"],
+ controller: ["$element", "$scope", "$attrs", function (a, c, d) {
+ var l = this, k = {}, m = e, p;
+ l.databound = d.ngModel;
+ l.init = function (a, c, d) {
+ m = a;
+ p = d
+ };
+ l.addOption = function (c, d) {
+ Ma(c, '"option value"');
+ k[c] = !0;
+ m.$viewValue == c && (a.val(c), p.parent() && p.remove());
+ d && d[0].hasAttribute("selected") && (d[0].selected = !0)
+ };
+ l.removeOption = function (a) {
+ this.hasOption(a) && (delete k[a], m.$viewValue === a && this.renderUnknownOption(a))
+ };
+ l.renderUnknownOption = function (c) {
+ c = "? " + Na(c) + " ?";
+ p.val(c);
+ a.prepend(p);
+ a.val(c);
+ p.prop("selected", !0)
+ };
+ l.hasOption = function (a) {
+ return k.hasOwnProperty(a)
+ };
+ c.$on("$destroy", function () {
+ l.renderUnknownOption = C
+ })
+ }],
+ link: function (e, g, h, l) {
+ function k(a, c, d, e) {
+ d.$render = function () {
+ var a = d.$viewValue;
+ e.hasOption(a) ? (C.parent() && C.remove(), c.val(a), "" === a && n.prop("selected", !0)) : D(a) && n ? c.val("") : e.renderUnknownOption(a)
+ };
+ c.on("change", function () {
+ a.$apply(function () {
+ C.parent() && C.remove();
+ d.$setViewValue(c.val())
+ })
+ })
+ }
+
+ function m(a, c, d) {
+ var e;
+ d.$render = function () {
+ var a =
+ new db(d.$viewValue);
+ s(c.find("option"), function (c) {
+ c.selected = y(a.get(c.value))
+ })
+ };
+ a.$watch(function () {
+ fa(e, d.$viewValue) || (e = qa(d.$viewValue), d.$render())
+ });
+ c.on("change", function () {
+ a.$apply(function () {
+ var a = [];
+ s(c.find("option"), function (c) {
+ c.selected && a.push(c.value)
+ });
+ d.$setViewValue(a)
+ })
+ })
+ }
+
+ function p(e, f, g) {
+ function h(a, c, d) {
+ T[A] = d;
+ H && (T[H] = c);
+ return a(e, T)
+ }
+
+ function k(a) {
+ var c;
+ if (u)if (M && x(a)) {
+ c = new db([]);
+ for (var d = 0; d < a.length; d++)c.put(h(M, null, a[d]), !0)
+ } else c = new db(a); else M && (a = h(M, null,
+ a));
+ return function (d, e) {
+ var f;
+ f = M ? M : B ? B : F;
+ return u ? y(c.remove(h(f, d, e))) : a === h(f, d, e)
+ }
+ }
+
+ function l() {
+ v || (e.$$postDigest(p), v = !0)
+ }
+
+ function m(a, c, d) {
+ a[c] = a[c] || 0;
+ a[c] += d ? 1 : -1
+ }
+
+ function p() {
+ v = !1;
+ var a = {"": []}, c = [""], d, l, n, r, t;
+ n = g.$viewValue;
+ r = P(e) || [];
+ var B = H ? Object.keys(r).sort() : r, x, A, D, F, N = {};
+ t = k(n);
+ var I = !1, U, V;
+ Q = {};
+ for (F = 0; D = B.length, F < D; F++) {
+ x = F;
+ if (H && (x = B[F], "$" === x.charAt(0)))continue;
+ A = r[x];
+ d = h(J, x, A) || "";
+ (l = a[d]) || (l = a[d] = [], c.push(d));
+ d = t(x, A);
+ I = I || d;
+ A = h(C, x, A);
+ A = y(A) ? A : "";
+ V = M ? M(e, T) : H ? B[F] :
+ F;
+ M && (Q[V] = x);
+ l.push({id: V, label: A, selected: d})
+ }
+ u || (z || null === n ? a[""].unshift({
+ id: "",
+ label: "",
+ selected: !I
+ }) : I || a[""].unshift({id: "?", label: "", selected: !0}));
+ x = 0;
+ for (B = c.length; x < B; x++) {
+ d = c[x];
+ l = a[d];
+ R.length <= x ? (n = {
+ element: G.clone().attr("label", d),
+ label: l.label
+ }, r = [n], R.push(r), f.append(n.element)) : (r = R[x], n = r[0], n.label != d && n.element.attr("label", n.label = d));
+ I = null;
+ F = 0;
+ for (D = l.length; F < D; F++)d = l[F], (t = r[F + 1]) ? (I = t.element, t.label !== d.label && (m(N, t.label, !1), m(N, d.label, !0), I.text(t.label = d.label),
+ I.prop("label", t.label)), t.id !== d.id && I.val(t.id = d.id), I[0].selected !== d.selected && (I.prop("selected", t.selected = d.selected), Ra && I.prop("selected", t.selected))) : ("" === d.id && z ? U = z : (U = w.clone()).val(d.id).prop("selected", d.selected).attr("selected", d.selected).prop("label", d.label).text(d.label), r.push(t = {
+ element: U,
+ label: d.label,
+ id: d.id,
+ selected: d.selected
+ }), m(N, d.label, !0), I ? I.after(U) : n.element.append(U), I = U);
+ for (F++; r.length > F;)d = r.pop(), m(N, d.label, !1), d.element.remove()
+ }
+ for (; R.length > x;) {
+ l = R.pop();
+ for (F = 1; F < l.length; ++F)m(N, l[F].label, !1);
+ l[0].element.remove()
+ }
+ s(N, function (a, c) {
+ 0 < a ? q.addOption(c) : 0 > a && q.removeOption(c)
+ })
+ }
+
+ var n;
+ if (!(n = r.match(d)))throw eg("iexp", r, va(f));
+ var C = c(n[2] || n[1]), A = n[4] || n[6], D = / as /.test(n[0]) && n[1], B = D ? c(D) : null, H = n[5], J = c(n[3] || ""), F = c(n[2] ? n[1] : A), P = c(n[7]), M = n[8] ? c(n[8]) : null, Q = {}, R = [[{
+ element: f,
+ label: ""
+ }]], T = {};
+ z && (a(z)(e), z.removeClass("ng-scope"), z.remove());
+ f.empty();
+ f.on("change", function () {
+ e.$apply(function () {
+ var a = P(e) || [], c;
+ if (u)c = [], s(f.val(), function (d) {
+ d =
+ M ? Q[d] : d;
+ c.push("?" === d ? t : "" === d ? null : h(B ? B : F, d, a[d]))
+ }); else {
+ var d = M ? Q[f.val()] : f.val();
+ c = "?" === d ? t : "" === d ? null : h(B ? B : F, d, a[d])
+ }
+ g.$setViewValue(c);
+ p()
+ })
+ });
+ g.$render = p;
+ e.$watchCollection(P, l);
+ e.$watchCollection(function () {
+ var a = P(e), c;
+ if (a && x(a)) {
+ c = Array(a.length);
+ for (var d = 0, f = a.length; d < f; d++)c[d] = h(C, d, a[d])
+ } else if (a)for (d in c = {}, a)a.hasOwnProperty(d) && (c[d] = h(C, d, a[d]));
+ return c
+ }, l);
+ u && e.$watchCollection(function () {
+ return g.$modelValue
+ }, l)
+ }
+
+ if (l[1]) {
+ var q = l[0];
+ l = l[1];
+ var u = h.multiple, r = h.ngOptions,
+ z = !1, n, v = !1, w = B(Y.createElement("option")), G = B(Y.createElement("optgroup")), C = w.clone();
+ h = 0;
+ for (var A = g.children(), H = A.length; h < H; h++)if ("" === A[h].value) {
+ n = z = A.eq(h);
+ break
+ }
+ q.init(l, z, C);
+ u && (l.$isEmpty = function (a) {
+ return !a || 0 === a.length
+ });
+ r ? p(e, g, l) : u ? m(e, g, l) : k(e, g, l, q)
+ }
+ }
+ }
+ }], Yd = ["$interpolate", function (a) {
+ var c = {addOption: C, removeOption: C};
+ return {
+ restrict: "E", priority: 100, compile: function (d, e) {
+ if (D(e.value)) {
+ var f = a(d.text(), !0);
+ f || e.$set("value", d.text())
+ }
+ return function (a, d, e) {
+ var k = d.parent(),
+ m = k.data("$selectController") || k.parent().data("$selectController");
+ m && m.databound || (m = c);
+ f ? a.$watch(f, function (a, c) {
+ e.$set("value", a);
+ c !== a && m.removeOption(c);
+ m.addOption(a, d)
+ }) : m.addOption(e.value, d);
+ d.on("$destroy", function () {
+ m.removeOption(e.value)
+ })
+ }
+ }
+ }
+ }], Xd = da({restrict: "E", terminal: !1});
+ M.angular.bootstrap ? console.log("WARNING: Tried to load angular more than once.") : (Nd(), Pd(ga), B(Y).ready(function () {
+ Jd(Y, sc)
+ }))
+})(window, document);
+!window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
+//# sourceMappingURL=angular.min.js.map
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js.map b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js.map
new file mode 100644
index 00000000..3bf91c7c
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/angular.min.js.map
@@ -0,0 +1,2369 @@
+{
+ "version": 3,
+ "file": "angular.min.js",
+ "lineCount": 249,
+ "mappings": "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",
+ "sources": ["angular.js"],
+ "names": [
+ "window",
+ "document",
+ "undefined",
+ "minErr",
+ "isArrayLike",
+ "obj",
+ "isWindow",
+ "length",
+ "nodeType",
+ "NODE_TYPE_ELEMENT",
+ "isString",
+ "isArray",
+ "forEach",
+ "iterator",
+ "context",
+ "key",
+ "isFunction",
+ "hasOwnProperty",
+ "call",
+ "isPrimitive",
+ "forEachSorted",
+ "keys",
+ "Object",
+ "sort",
+ "i",
+ "reverseParams",
+ "iteratorFn",
+ "value",
+ "nextUid",
+ "uid",
+ "setHashKey",
+ "h",
+ "$$hashKey",
+ "extend",
+ "dst",
+ "ii",
+ "arguments",
+ "j",
+ "jj",
+ "int",
+ "str",
+ "parseInt",
+ "noop",
+ "identity",
+ "$",
+ "valueFn",
+ "isUndefined",
+ "isDefined",
+ "isObject",
+ "isNumber",
+ "isDate",
+ "toString",
+ "isRegExp",
+ "isScope",
+ "$evalAsync",
+ "$watch",
+ "isBoolean",
+ "isElement",
+ "node",
+ "nodeName",
+ "prop",
+ "attr",
+ "find",
+ "makeMap",
+ "items",
+ "split",
+ "nodeName_",
+ "element",
+ "lowercase",
+ "arrayRemove",
+ "array",
+ "index",
+ "indexOf",
+ "splice",
+ "copy",
+ "source",
+ "destination",
+ "stackSource",
+ "stackDest",
+ "ngMinErr",
+ "push",
+ "result",
+ "Date",
+ "getTime",
+ "RegExp",
+ "match",
+ "lastIndex",
+ "emptyObject",
+ "create",
+ "getPrototypeOf",
+ "shallowCopy",
+ "src",
+ "charAt",
+ "equals",
+ "o1",
+ "o2",
+ "t1",
+ "t2",
+ "keySet",
+ "concat",
+ "array1",
+ "array2",
+ "slice",
+ "bind",
+ "self",
+ "fn",
+ "curryArgs",
+ "startIndex",
+ "apply",
+ "toJsonReplacer",
+ "val",
+ "toJson",
+ "pretty",
+ "JSON",
+ "stringify",
+ "fromJson",
+ "json",
+ "parse",
+ "startingTag",
+ "jqLite",
+ "clone",
+ "empty",
+ "e",
+ "elemHtml",
+ "append",
+ "html",
+ "NODE_TYPE_TEXT",
+ "replace",
+ "tryDecodeURIComponent",
+ "decodeURIComponent",
+ "parseKeyValue",
+ "keyValue",
+ "key_value",
+ "toKeyValue",
+ "parts",
+ "arrayValue",
+ "encodeUriQuery",
+ "join",
+ "encodeUriSegment",
+ "pctEncodeSpaces",
+ "encodeURIComponent",
+ "getNgAttribute",
+ "ngAttr",
+ "ngAttrPrefixes",
+ "angularInit",
+ "bootstrap",
+ "appElement",
+ "module",
+ "config",
+ "prefix",
+ "name",
+ "hasAttribute",
+ "getAttribute",
+ "candidate",
+ "querySelector",
+ "strictDi",
+ "modules",
+ "defaultConfig",
+ "doBootstrap",
+ "injector",
+ "tag",
+ "unshift",
+ "$provide",
+ "debugInfoEnabled",
+ "$compileProvider",
+ "createInjector",
+ "invoke",
+ "bootstrapApply",
+ "scope",
+ "compile",
+ "$apply",
+ "data",
+ "NG_ENABLE_DEBUG_INFO",
+ "NG_DEFER_BOOTSTRAP",
+ "test",
+ "angular",
+ "resumeBootstrap",
+ "angular.resumeBootstrap",
+ "extraModules",
+ "reloadWithDebugInfo",
+ "location",
+ "reload",
+ "getTestability",
+ "rootElement",
+ "get",
+ "snake_case",
+ "separator",
+ "SNAKE_CASE_REGEXP",
+ "letter",
+ "pos",
+ "toLowerCase",
+ "bindJQuery",
+ "originalCleanData",
+ "bindJQueryFired",
+ "jQuery",
+ "on",
+ "JQLitePrototype",
+ "isolateScope",
+ "controller",
+ "inheritedData",
+ "cleanData",
+ "jQuery.cleanData",
+ "elems",
+ "events",
+ "skipDestroyOnNextJQueryCleanData",
+ "elem",
+ "_data",
+ "$destroy",
+ "triggerHandler",
+ "JQLite",
+ "assertArg",
+ "arg",
+ "reason",
+ "assertArgFn",
+ "acceptArrayAnnotation",
+ "constructor",
+ "assertNotHasOwnProperty",
+ "getter",
+ "path",
+ "bindFnToScope",
+ "lastInstance",
+ "len",
+ "getBlockNodes",
+ "nodes",
+ "endNode",
+ "blockNodes",
+ "nextSibling",
+ "createMap",
+ "setupModuleLoader",
+ "ensure",
+ "factory",
+ "$injectorMinErr",
+ "$$minErr",
+ "requires",
+ "configFn",
+ "invokeLater",
+ "provider",
+ "method",
+ "insertMethod",
+ "queue",
+ "invokeQueue",
+ "moduleInstance",
+ "configBlocks",
+ "runBlocks",
+ "_invokeQueue",
+ "_configBlocks",
+ "_runBlocks",
+ "service",
+ "constant",
+ "animation",
+ "filter",
+ "directive",
+ "run",
+ "block",
+ "publishExternalAPI",
+ "version",
+ "uppercase",
+ "counter",
+ "csp",
+ "angularModule",
+ "$LocaleProvider",
+ "ngModule",
+ "$$sanitizeUri",
+ "$$SanitizeUriProvider",
+ "$CompileProvider",
+ "a",
+ "htmlAnchorDirective",
+ "input",
+ "inputDirective",
+ "textarea",
+ "form",
+ "formDirective",
+ "script",
+ "scriptDirective",
+ "select",
+ "selectDirective",
+ "style",
+ "styleDirective",
+ "option",
+ "optionDirective",
+ "ngBind",
+ "ngBindDirective",
+ "ngBindHtml",
+ "ngBindHtmlDirective",
+ "ngBindTemplate",
+ "ngBindTemplateDirective",
+ "ngClass",
+ "ngClassDirective",
+ "ngClassEven",
+ "ngClassEvenDirective",
+ "ngClassOdd",
+ "ngClassOddDirective",
+ "ngCloak",
+ "ngCloakDirective",
+ "ngController",
+ "ngControllerDirective",
+ "ngForm",
+ "ngFormDirective",
+ "ngHide",
+ "ngHideDirective",
+ "ngIf",
+ "ngIfDirective",
+ "ngInclude",
+ "ngIncludeDirective",
+ "ngInit",
+ "ngInitDirective",
+ "ngNonBindable",
+ "ngNonBindableDirective",
+ "ngPluralize",
+ "ngPluralizeDirective",
+ "ngRepeat",
+ "ngRepeatDirective",
+ "ngShow",
+ "ngShowDirective",
+ "ngStyle",
+ "ngStyleDirective",
+ "ngSwitch",
+ "ngSwitchDirective",
+ "ngSwitchWhen",
+ "ngSwitchWhenDirective",
+ "ngSwitchDefault",
+ "ngSwitchDefaultDirective",
+ "ngOptions",
+ "ngOptionsDirective",
+ "ngTransclude",
+ "ngTranscludeDirective",
+ "ngModel",
+ "ngModelDirective",
+ "ngList",
+ "ngListDirective",
+ "ngChange",
+ "ngChangeDirective",
+ "pattern",
+ "patternDirective",
+ "ngPattern",
+ "required",
+ "requiredDirective",
+ "ngRequired",
+ "minlength",
+ "minlengthDirective",
+ "ngMinlength",
+ "maxlength",
+ "maxlengthDirective",
+ "ngMaxlength",
+ "ngValue",
+ "ngValueDirective",
+ "ngModelOptions",
+ "ngModelOptionsDirective",
+ "ngIncludeFillContentDirective",
+ "ngAttributeAliasDirectives",
+ "ngEventDirectives",
+ "$anchorScroll",
+ "$AnchorScrollProvider",
+ "$animate",
+ "$AnimateProvider",
+ "$browser",
+ "$BrowserProvider",
+ "$cacheFactory",
+ "$CacheFactoryProvider",
+ "$controller",
+ "$ControllerProvider",
+ "$document",
+ "$DocumentProvider",
+ "$exceptionHandler",
+ "$ExceptionHandlerProvider",
+ "$filter",
+ "$FilterProvider",
+ "$interpolate",
+ "$InterpolateProvider",
+ "$interval",
+ "$IntervalProvider",
+ "$http",
+ "$HttpProvider",
+ "$httpBackend",
+ "$HttpBackendProvider",
+ "$location",
+ "$LocationProvider",
+ "$log",
+ "$LogProvider",
+ "$parse",
+ "$ParseProvider",
+ "$rootScope",
+ "$RootScopeProvider",
+ "$q",
+ "$QProvider",
+ "$$q",
+ "$$QProvider",
+ "$sce",
+ "$SceProvider",
+ "$sceDelegate",
+ "$SceDelegateProvider",
+ "$sniffer",
+ "$SnifferProvider",
+ "$templateCache",
+ "$TemplateCacheProvider",
+ "$templateRequest",
+ "$TemplateRequestProvider",
+ "$$testability",
+ "$$TestabilityProvider",
+ "$timeout",
+ "$TimeoutProvider",
+ "$window",
+ "$WindowProvider",
+ "$$rAF",
+ "$$RAFProvider",
+ "$$asyncCallback",
+ "$$AsyncCallbackProvider",
+ "$$jqLite",
+ "$$jqLiteProvider",
+ "camelCase",
+ "SPECIAL_CHARS_REGEXP",
+ "_",
+ "offset",
+ "toUpperCase",
+ "MOZ_HACK_REGEXP",
+ "jqLiteAcceptsData",
+ "NODE_TYPE_DOCUMENT",
+ "jqLiteBuildFragment",
+ "tmp",
+ "fragment",
+ "createDocumentFragment",
+ "HTML_REGEXP",
+ "appendChild",
+ "createElement",
+ "TAG_NAME_REGEXP",
+ "exec",
+ "wrap",
+ "wrapMap",
+ "_default",
+ "innerHTML",
+ "XHTML_TAG_REGEXP",
+ "lastChild",
+ "childNodes",
+ "firstChild",
+ "textContent",
+ "createTextNode",
+ "argIsString",
+ "trim",
+ "jqLiteMinErr",
+ "parsed",
+ "SINGLE_TAG_REGEXP",
+ "jqLiteAddNodes",
+ "jqLiteClone",
+ "cloneNode",
+ "jqLiteDealoc",
+ "onlyDescendants",
+ "jqLiteRemoveData",
+ "querySelectorAll",
+ "descendants",
+ "l",
+ "jqLiteOff",
+ "type",
+ "unsupported",
+ "expandoStore",
+ "jqLiteExpandoStore",
+ "handle",
+ "listenerFns",
+ "removeEventListener",
+ "expandoId",
+ "ng339",
+ "jqCache",
+ "createIfNecessary",
+ "jqId",
+ "jqLiteData",
+ "isSimpleSetter",
+ "isSimpleGetter",
+ "massGetter",
+ "jqLiteHasClass",
+ "selector",
+ "jqLiteRemoveClass",
+ "cssClasses",
+ "setAttribute",
+ "cssClass",
+ "jqLiteAddClass",
+ "existingClasses",
+ "root",
+ "elements",
+ "jqLiteController",
+ "jqLiteInheritedData",
+ "documentElement",
+ "names",
+ "parentNode",
+ "NODE_TYPE_DOCUMENT_FRAGMENT",
+ "host",
+ "jqLiteEmpty",
+ "removeChild",
+ "jqLiteRemove",
+ "keepData",
+ "parent",
+ "jqLiteDocumentLoaded",
+ "action",
+ "win",
+ "readyState",
+ "setTimeout",
+ "getBooleanAttrName",
+ "booleanAttr",
+ "BOOLEAN_ATTR",
+ "BOOLEAN_ELEMENTS",
+ "getAliasedAttrName",
+ "ALIASED_ATTR",
+ "createEventHandler",
+ "eventHandler",
+ "event",
+ "isDefaultPrevented",
+ "event.isDefaultPrevented",
+ "defaultPrevented",
+ "eventFns",
+ "eventFnsLength",
+ "immediatePropagationStopped",
+ "originalStopImmediatePropagation",
+ "stopImmediatePropagation",
+ "event.stopImmediatePropagation",
+ "stopPropagation",
+ "isImmediatePropagationStopped",
+ "event.isImmediatePropagationStopped",
+ "$get",
+ "this.$get",
+ "hasClass",
+ "classes",
+ "addClass",
+ "removeClass",
+ "hashKey",
+ "nextUidFn",
+ "objType",
+ "HashMap",
+ "isolatedUid",
+ "this.nextUid",
+ "put",
+ "anonFn",
+ "args",
+ "fnText",
+ "STRIP_COMMENTS",
+ "FN_ARGS",
+ "annotate",
+ "$inject",
+ "argDecl",
+ "FN_ARG_SPLIT",
+ "FN_ARG",
+ "all",
+ "underscore",
+ "last",
+ "modulesToLoad",
+ "supportObject",
+ "delegate",
+ "provider_",
+ "providerInjector",
+ "instantiate",
+ "providerCache",
+ "providerSuffix",
+ "enforceReturnValue",
+ "enforcedReturnValue",
+ "instanceInjector",
+ "factoryFn",
+ "enforce",
+ "loadModules",
+ "moduleFn",
+ "runInvokeQueue",
+ "invokeArgs",
+ "loadedModules",
+ "message",
+ "stack",
+ "createInternalInjector",
+ "cache",
+ "getService",
+ "serviceName",
+ "caller",
+ "INSTANTIATING",
+ "err",
+ "shift",
+ "locals",
+ "Type",
+ "instance",
+ "prototype",
+ "returnedValue",
+ "has",
+ "$injector",
+ "instanceCache",
+ "decorator",
+ "decorFn",
+ "origProvider",
+ "orig$get",
+ "origProvider.$get",
+ "origInstance",
+ "$delegate",
+ "autoScrollingEnabled",
+ "disableAutoScrolling",
+ "this.disableAutoScrolling",
+ "getFirstAnchor",
+ "list",
+ "Array",
+ "some",
+ "scrollTo",
+ "scrollIntoView",
+ "scroll",
+ "yOffset",
+ "getComputedStyle",
+ "position",
+ "getBoundingClientRect",
+ "bottom",
+ "elemTop",
+ "top",
+ "scrollBy",
+ "hash",
+ "elm",
+ "getElementById",
+ "getElementsByName",
+ "autoScrollWatch",
+ "autoScrollWatchAction",
+ "newVal",
+ "oldVal",
+ "supported",
+ "Browser",
+ "completeOutstandingRequest",
+ "outstandingRequestCount",
+ "outstandingRequestCallbacks",
+ "pop",
+ "error",
+ "startPoller",
+ "interval",
+ "check",
+ "pollFns",
+ "pollFn",
+ "pollTimeout",
+ "cacheStateAndFireUrlChange",
+ "cacheState",
+ "fireUrlChange",
+ "cachedState",
+ "history",
+ "state",
+ "lastCachedState",
+ "lastBrowserUrl",
+ "url",
+ "lastHistoryState",
+ "urlChangeListeners",
+ "listener",
+ "safeDecodeURIComponent",
+ "rawDocument",
+ "clearTimeout",
+ "pendingDeferIds",
+ "isMock",
+ "$$completeOutstandingRequest",
+ "$$incOutstandingRequestCount",
+ "self.$$incOutstandingRequestCount",
+ "notifyWhenNoOutstandingRequests",
+ "self.notifyWhenNoOutstandingRequests",
+ "callback",
+ "addPollFn",
+ "self.addPollFn",
+ "href",
+ "baseElement",
+ "reloadLocation",
+ "self.url",
+ "sameState",
+ "sameBase",
+ "stripHash",
+ "substr",
+ "self.state",
+ "urlChangeInit",
+ "onUrlChange",
+ "self.onUrlChange",
+ "$$checkUrlChange",
+ "baseHref",
+ "self.baseHref",
+ "lastCookies",
+ "lastCookieString",
+ "cookiePath",
+ "cookies",
+ "self.cookies",
+ "cookieLength",
+ "cookie",
+ "warn",
+ "cookieArray",
+ "substring",
+ "defer",
+ "self.defer",
+ "delay",
+ "timeoutId",
+ "cancel",
+ "self.defer.cancel",
+ "deferId",
+ "cacheFactory",
+ "cacheId",
+ "options",
+ "refresh",
+ "entry",
+ "freshEnd",
+ "staleEnd",
+ "n",
+ "link",
+ "p",
+ "nextEntry",
+ "prevEntry",
+ "caches",
+ "size",
+ "stats",
+ "id",
+ "capacity",
+ "Number",
+ "MAX_VALUE",
+ "lruHash",
+ "lruEntry",
+ "remove",
+ "removeAll",
+ "destroy",
+ "info",
+ "cacheFactory.info",
+ "cacheFactory.get",
+ "$$sanitizeUriProvider",
+ "parseIsolateBindings",
+ "directiveName",
+ "LOCAL_REGEXP",
+ "bindings",
+ "definition",
+ "scopeName",
+ "$compileMinErr",
+ "mode",
+ "collection",
+ "optional",
+ "attrName",
+ "hasDirectives",
+ "COMMENT_DIRECTIVE_REGEXP",
+ "CLASS_DIRECTIVE_REGEXP",
+ "ALL_OR_NOTHING_ATTRS",
+ "REQUIRE_PREFIX_REGEXP",
+ "EVENT_HANDLER_ATTR_REGEXP",
+ "this.directive",
+ "registerDirective",
+ "directiveFactory",
+ "Suffix",
+ "directives",
+ "priority",
+ "require",
+ "restrict",
+ "$$isolateBindings",
+ "aHrefSanitizationWhitelist",
+ "this.aHrefSanitizationWhitelist",
+ "regexp",
+ "imgSrcSanitizationWhitelist",
+ "this.imgSrcSanitizationWhitelist",
+ "this.debugInfoEnabled",
+ "enabled",
+ "safeAddClass",
+ "$element",
+ "className",
+ "$compileNodes",
+ "transcludeFn",
+ "maxPriority",
+ "ignoreDirective",
+ "previousCompileContext",
+ "nodeValue",
+ "compositeLinkFn",
+ "compileNodes",
+ "$$addScopeClass",
+ "namespace",
+ "publicLinkFn",
+ "cloneConnectFn",
+ "parentBoundTranscludeFn",
+ "transcludeControllers",
+ "futureParentElement",
+ "$$boundTransclude",
+ "$linkNode",
+ "wrapTemplate",
+ "controllerName",
+ "$$addScopeInfo",
+ "nodeList",
+ "$rootElement",
+ "childLinkFn",
+ "childScope",
+ "childBoundTranscludeFn",
+ "stableNodeList",
+ "nodeLinkFnFound",
+ "linkFns",
+ "idx",
+ "nodeLinkFn",
+ "$new",
+ "transcludeOnThisElement",
+ "createBoundTranscludeFn",
+ "transclude",
+ "elementTranscludeOnThisElement",
+ "templateOnThisElement",
+ "attrs",
+ "linkFnFound",
+ "Attributes",
+ "collectDirectives",
+ "applyDirectivesToNode",
+ "$$element",
+ "terminal",
+ "previousBoundTranscludeFn",
+ "elementTransclusion",
+ "boundTranscludeFn",
+ "transcludedScope",
+ "cloneFn",
+ "controllers",
+ "containingScope",
+ "$$transcluded",
+ "attrsMap",
+ "$attr",
+ "addDirective",
+ "directiveNormalize",
+ "isNgAttr",
+ "nAttrs",
+ "attributes",
+ "attrStartName",
+ "attrEndName",
+ "ngAttrName",
+ "NG_ATTR_BINDING",
+ "PREFIX_REGEXP",
+ "directiveNName",
+ "directiveIsMultiElement",
+ "nName",
+ "addAttrInterpolateDirective",
+ "addTextInterpolateDirective",
+ "NODE_TYPE_COMMENT",
+ "byPriority",
+ "groupScan",
+ "attrStart",
+ "attrEnd",
+ "depth",
+ "groupElementsLinkFnWrapper",
+ "linkFn",
+ "compileNode",
+ "templateAttrs",
+ "jqCollection",
+ "originalReplaceDirective",
+ "preLinkFns",
+ "postLinkFns",
+ "addLinkFns",
+ "pre",
+ "post",
+ "newIsolateScopeDirective",
+ "$$isolateScope",
+ "cloneAndAnnotateFn",
+ "getControllers",
+ "elementControllers",
+ "retrievalMethod",
+ "$searchElement",
+ "linkNode",
+ "controllersBoundTransclude",
+ "cloneAttachFn",
+ "hasElementTranscludeDirective",
+ "scopeToChild",
+ "controllerDirectives",
+ "$scope",
+ "$attrs",
+ "$transclude",
+ "controllerInstance",
+ "controllerAs",
+ "templateDirective",
+ "$$originalDirective",
+ "isolateScopeController",
+ "isolateBindingContext",
+ "identifier",
+ "bindToController",
+ "lastValue",
+ "parentGet",
+ "parentSet",
+ "compare",
+ "$observe",
+ "$$observers",
+ "$$scope",
+ "literal",
+ "b",
+ "assign",
+ "parentValueWatch",
+ "parentValue",
+ "$stateful",
+ "unwatch",
+ "$watchCollection",
+ "$on",
+ "invokeLinkFn",
+ "template",
+ "templateUrl",
+ "terminalPriority",
+ "newScopeDirective",
+ "nonTlbTranscludeDirective",
+ "hasTranscludeDirective",
+ "hasTemplate",
+ "$compileNode",
+ "$template",
+ "childTranscludeFn",
+ "$$start",
+ "$$end",
+ "directiveValue",
+ "assertNoDuplicate",
+ "$$tlb",
+ "createComment",
+ "replaceWith",
+ "replaceDirective",
+ "contents",
+ "denormalizeTemplate",
+ "removeComments",
+ "templateNamespace",
+ "newTemplateAttrs",
+ "templateDirectives",
+ "unprocessedDirectives",
+ "markDirectivesAsIsolate",
+ "mergeTemplateAttributes",
+ "compileTemplateUrl",
+ "Math",
+ "max",
+ "extra",
+ "tDirectives",
+ "startAttrName",
+ "endAttrName",
+ "multiElement",
+ "srcAttr",
+ "dstAttr",
+ "$set",
+ "tAttrs",
+ "linkQueue",
+ "afterTemplateNodeLinkFn",
+ "afterTemplateChildLinkFn",
+ "beforeTemplateCompileNode",
+ "origAsyncDirective",
+ "derivedSyncDirective",
+ "getTrustedResourceUrl",
+ "then",
+ "content",
+ "tempTemplateAttrs",
+ "beforeTemplateLinkNode",
+ "linkRootElement",
+ "$$destroyed",
+ "oldClasses",
+ "delayedNodeLinkFn",
+ "ignoreChildLinkFn",
+ "diff",
+ "what",
+ "previousDirective",
+ "text",
+ "interpolateFn",
+ "textInterpolateCompileFn",
+ "templateNode",
+ "templateNodeParent",
+ "hasCompileParent",
+ "$$addBindingClass",
+ "textInterpolateLinkFn",
+ "$$addBindingInfo",
+ "expressions",
+ "interpolateFnWatchAction",
+ "wrapper",
+ "getTrustedContext",
+ "attrNormalizedName",
+ "HTML",
+ "RESOURCE_URL",
+ "allOrNothing",
+ "trustedContext",
+ "attrInterpolatePreLinkFn",
+ "newValue",
+ "$$inter",
+ "oldValue",
+ "$updateClass",
+ "elementsToRemove",
+ "newNode",
+ "firstElementToRemove",
+ "removeCount",
+ "j2",
+ "replaceChild",
+ "expando",
+ "k",
+ "kk",
+ "annotation",
+ "attributesToCopy",
+ "$normalize",
+ "$addClass",
+ "classVal",
+ "$removeClass",
+ "newClasses",
+ "toAdd",
+ "tokenDifference",
+ "toRemove",
+ "writeAttr",
+ "booleanKey",
+ "aliasedKey",
+ "observer",
+ "trimmedSrcset",
+ "srcPattern",
+ "rawUris",
+ "nbrUrisWith2parts",
+ "floor",
+ "innerIdx",
+ "lastTuple",
+ "removeAttr",
+ "listeners",
+ "startSymbol",
+ "endSymbol",
+ "binding",
+ "isolated",
+ "noTemplate",
+ "dataName",
+ "str1",
+ "str2",
+ "values",
+ "tokens1",
+ "tokens2",
+ "token",
+ "jqNodes",
+ "globals",
+ "CNTRL_REG",
+ "register",
+ "this.register",
+ "allowGlobals",
+ "this.allowGlobals",
+ "addIdentifier",
+ "expression",
+ "later",
+ "ident",
+ "controllerPrototype",
+ "exception",
+ "cause",
+ "defaultHttpResponseTransform",
+ "headers",
+ "tempData",
+ "JSON_PROTECTION_PREFIX",
+ "contentType",
+ "jsonStart",
+ "JSON_START",
+ "JSON_ENDS",
+ "parseHeaders",
+ "line",
+ "headersGetter",
+ "headersObj",
+ "transformData",
+ "status",
+ "fns",
+ "defaults",
+ "transformResponse",
+ "transformRequest",
+ "d",
+ "common",
+ "CONTENT_TYPE_APPLICATION_JSON",
+ "patch",
+ "xsrfCookieName",
+ "xsrfHeaderName",
+ "useApplyAsync",
+ "this.useApplyAsync",
+ "interceptorFactories",
+ "interceptors",
+ "requestConfig",
+ "response",
+ "resp",
+ "reject",
+ "executeHeaderFns",
+ "headerContent",
+ "processedHeaders",
+ "headerFn",
+ "header",
+ "mergeHeaders",
+ "defHeaders",
+ "reqHeaders",
+ "defHeaderName",
+ "reqHeaderName",
+ "lowercaseDefHeaderName",
+ "chain",
+ "serverRequest",
+ "reqData",
+ "withCredentials",
+ "sendReq",
+ "promise",
+ "when",
+ "reversedInterceptors",
+ "interceptor",
+ "request",
+ "requestError",
+ "responseError",
+ "thenFn",
+ "rejectFn",
+ "success",
+ "promise.success",
+ "promise.error",
+ "done",
+ "headersString",
+ "statusText",
+ "resolveHttpPromise",
+ "resolvePromise",
+ "$applyAsync",
+ "$$phase",
+ "deferred",
+ "resolve",
+ "resolvePromiseWithResult",
+ "removePendingReq",
+ "pendingRequests",
+ "cachedResp",
+ "buildUrl",
+ "params",
+ "defaultCache",
+ "xsrfValue",
+ "urlIsSameOrigin",
+ "timeout",
+ "responseType",
+ "v",
+ "toISOString",
+ "interceptorFactory",
+ "createShortMethods",
+ "createShortMethodsWithData",
+ "createXhr",
+ "XMLHttpRequest",
+ "createHttpBackend",
+ "callbacks",
+ "$browserDefer",
+ "jsonpReq",
+ "callbackId",
+ "async",
+ "body",
+ "called",
+ "addEventListener",
+ "timeoutRequest",
+ "jsonpDone",
+ "xhr",
+ "abort",
+ "completeRequest",
+ "open",
+ "setRequestHeader",
+ "onload",
+ "xhr.onload",
+ "responseText",
+ "urlResolve",
+ "protocol",
+ "getAllResponseHeaders",
+ "onerror",
+ "onabort",
+ "send",
+ "this.startSymbol",
+ "this.endSymbol",
+ "escape",
+ "ch",
+ "mustHaveExpression",
+ "unescapeText",
+ "escapedStartRegexp",
+ "escapedEndRegexp",
+ "parseStringifyInterceptor",
+ "getTrusted",
+ "valueOf",
+ "newErr",
+ "$interpolateMinErr",
+ "endIndex",
+ "parseFns",
+ "textLength",
+ "expressionPositions",
+ "startSymbolLength",
+ "exp",
+ "endSymbolLength",
+ "compute",
+ "interpolationFn",
+ "$$watchDelegate",
+ "objectEquality",
+ "$watchGroup",
+ "interpolateFnWatcher",
+ "oldValues",
+ "currValue",
+ "$interpolate.startSymbol",
+ "$interpolate.endSymbol",
+ "count",
+ "invokeApply",
+ "setInterval",
+ "clearInterval",
+ "iteration",
+ "skipApply",
+ "$$intervalId",
+ "tick",
+ "notify",
+ "intervals",
+ "interval.cancel",
+ "NUMBER_FORMATS",
+ "DECIMAL_SEP",
+ "GROUP_SEP",
+ "PATTERNS",
+ "minInt",
+ "minFrac",
+ "maxFrac",
+ "posPre",
+ "posSuf",
+ "negPre",
+ "negSuf",
+ "gSize",
+ "lgSize",
+ "CURRENCY_SYM",
+ "DATETIME_FORMATS",
+ "MONTH",
+ "SHORTMONTH",
+ "DAY",
+ "SHORTDAY",
+ "AMPMS",
+ "medium",
+ "fullDate",
+ "longDate",
+ "mediumDate",
+ "shortDate",
+ "mediumTime",
+ "shortTime",
+ "pluralCat",
+ "num",
+ "encodePath",
+ "segments",
+ "parseAbsoluteUrl",
+ "absoluteUrl",
+ "locationObj",
+ "parsedUrl",
+ "$$protocol",
+ "$$host",
+ "hostname",
+ "$$port",
+ "port",
+ "DEFAULT_PORTS",
+ "parseAppUrl",
+ "relativeUrl",
+ "prefixed",
+ "$$path",
+ "pathname",
+ "$$search",
+ "search",
+ "$$hash",
+ "beginsWith",
+ "begin",
+ "whole",
+ "trimEmptyHash",
+ "stripFile",
+ "lastIndexOf",
+ "LocationHtml5Url",
+ "appBase",
+ "basePrefix",
+ "$$html5",
+ "appBaseNoFile",
+ "$$parse",
+ "this.$$parse",
+ "pathUrl",
+ "$locationMinErr",
+ "$$compose",
+ "this.$$compose",
+ "$$url",
+ "$$absUrl",
+ "$$parseLinkUrl",
+ "this.$$parseLinkUrl",
+ "relHref",
+ "appUrl",
+ "prevAppUrl",
+ "rewrittenUrl",
+ "LocationHashbangUrl",
+ "hashPrefix",
+ "withoutBaseUrl",
+ "withoutHashUrl",
+ "windowsFilePathExp",
+ "firstPathSegmentMatch",
+ "LocationHashbangInHtml5Url",
+ "locationGetter",
+ "property",
+ "locationGetterSetter",
+ "preprocess",
+ "html5Mode",
+ "requireBase",
+ "rewriteLinks",
+ "this.hashPrefix",
+ "this.html5Mode",
+ "setBrowserUrlWithFallback",
+ "oldUrl",
+ "oldState",
+ "$$state",
+ "afterLocationChange",
+ "$broadcast",
+ "absUrl",
+ "LocationMode",
+ "initialUrl",
+ "IGNORE_URI_REGEXP",
+ "ctrlKey",
+ "metaKey",
+ "which",
+ "target",
+ "absHref",
+ "animVal",
+ "preventDefault",
+ "initializing",
+ "newUrl",
+ "newState",
+ "$digest",
+ "$locationWatch",
+ "currentReplace",
+ "$$replace",
+ "urlOrStateChanged",
+ "debug",
+ "debugEnabled",
+ "this.debugEnabled",
+ "flag",
+ "formatError",
+ "Error",
+ "sourceURL",
+ "consoleLog",
+ "console",
+ "logFn",
+ "log",
+ "hasApply",
+ "arg1",
+ "arg2",
+ "ensureSafeMemberName",
+ "fullExpression",
+ "$parseMinErr",
+ "ensureSafeObject",
+ "children",
+ "isConstant",
+ "setter",
+ "setValue",
+ "fullExp",
+ "propertyObj",
+ "isPossiblyDangerousMemberName",
+ "cspSafeGetterFn",
+ "key0",
+ "key1",
+ "key2",
+ "key3",
+ "key4",
+ "expensiveChecks",
+ "eso",
+ "o",
+ "eso0",
+ "eso1",
+ "eso2",
+ "eso3",
+ "eso4",
+ "cspSafeGetter",
+ "pathVal",
+ "getterFnWithEnsureSafeObject",
+ "s",
+ "getterFn",
+ "getterFnCache",
+ "getterFnCacheExpensive",
+ "getterFnCacheDefault",
+ "pathKeys",
+ "pathKeysLength",
+ "code",
+ "needsEnsureSafeObject",
+ "lookupJs",
+ "evaledFnGetter",
+ "Function",
+ "sharedGetter",
+ "fn.assign",
+ "getValueOf",
+ "objectValueOf",
+ "cacheDefault",
+ "cacheExpensive",
+ "wrapSharedExpression",
+ "wrapped",
+ "collectExpressionInputs",
+ "inputs",
+ "expressionInputDirtyCheck",
+ "oldValueOfValue",
+ "inputsWatchDelegate",
+ "parsedExpression",
+ "inputExpressions",
+ "$$inputs",
+ "lastResult",
+ "oldInputValue",
+ "expressionInputWatch",
+ "newInputValue",
+ "oldInputValueOfValues",
+ "expressionInputsWatch",
+ "changed",
+ "oneTimeWatchDelegate",
+ "oneTimeWatch",
+ "oneTimeListener",
+ "old",
+ "$$postDigest",
+ "oneTimeLiteralWatchDelegate",
+ "isAllDefined",
+ "allDefined",
+ "constantWatchDelegate",
+ "constantWatch",
+ "constantListener",
+ "addInterceptor",
+ "interceptorFn",
+ "watchDelegate",
+ "regularInterceptedExpression",
+ "oneTimeInterceptedExpression",
+ "$parseOptions",
+ "$parseOptionsExpensive",
+ "oneTime",
+ "cacheKey",
+ "parseOptions",
+ "lexer",
+ "Lexer",
+ "parser",
+ "Parser",
+ "qFactory",
+ "nextTick",
+ "exceptionHandler",
+ "callOnce",
+ "resolveFn",
+ "Promise",
+ "simpleBind",
+ "scheduleProcessQueue",
+ "processScheduled",
+ "pending",
+ "Deferred",
+ "$qMinErr",
+ "TypeError",
+ "onFulfilled",
+ "onRejected",
+ "progressBack",
+ "catch",
+ "finally",
+ "handleCallback",
+ "$$reject",
+ "$$resolve",
+ "progress",
+ "makePromise",
+ "resolved",
+ "isResolved",
+ "callbackOutput",
+ "errback",
+ "$Q",
+ "Q",
+ "resolver",
+ "promises",
+ "results",
+ "requestAnimationFrame",
+ "webkitRequestAnimationFrame",
+ "cancelAnimationFrame",
+ "webkitCancelAnimationFrame",
+ "webkitCancelRequestAnimationFrame",
+ "rafSupported",
+ "raf",
+ "timer",
+ "TTL",
+ "$rootScopeMinErr",
+ "lastDirtyWatch",
+ "applyAsyncId",
+ "digestTtl",
+ "this.digestTtl",
+ "Scope",
+ "$id",
+ "$parent",
+ "$$watchers",
+ "$$nextSibling",
+ "$$prevSibling",
+ "$$childHead",
+ "$$childTail",
+ "$root",
+ "$$listeners",
+ "$$listenerCount",
+ "beginPhase",
+ "phase",
+ "decrementListenerCount",
+ "current",
+ "initWatchVal",
+ "flushApplyAsync",
+ "applyAsyncQueue",
+ "scheduleApplyAsync",
+ "isolate",
+ "destroyChild",
+ "child",
+ "$$ChildScope",
+ "this.$$ChildScope",
+ "watchExp",
+ "watcher",
+ "eq",
+ "deregisterWatch",
+ "watchExpressions",
+ "watchGroupAction",
+ "changeReactionScheduled",
+ "firstRun",
+ "newValues",
+ "deregisterFns",
+ "shouldCall",
+ "deregisterWatchGroup",
+ "expr",
+ "unwatchFn",
+ "watchGroupSubAction",
+ "$watchCollectionInterceptor",
+ "_value",
+ "bothNaN",
+ "newItem",
+ "oldItem",
+ "internalArray",
+ "oldLength",
+ "changeDetected",
+ "newLength",
+ "internalObject",
+ "veryOldValue",
+ "trackVeryOldValue",
+ "changeDetector",
+ "initRun",
+ "$watchCollectionAction",
+ "watch",
+ "watchers",
+ "dirty",
+ "ttl",
+ "watchLog",
+ "logIdx",
+ "asyncTask",
+ "asyncQueue",
+ "$eval",
+ "isNaN",
+ "msg",
+ "next",
+ "postDigestQueue",
+ "eventName",
+ "this.$watchGroup",
+ "$applyAsyncExpression",
+ "namedListeners",
+ "indexOfListener",
+ "$emit",
+ "targetScope",
+ "listenerArgs",
+ "currentScope",
+ "$$asyncQueue",
+ "$$postDigestQueue",
+ "$$applyAsyncQueue",
+ "sanitizeUri",
+ "uri",
+ "isImage",
+ "regex",
+ "normalizedVal",
+ "adjustMatcher",
+ "matcher",
+ "$sceMinErr",
+ "escapeForRegexp",
+ "adjustMatchers",
+ "matchers",
+ "adjustedMatchers",
+ "SCE_CONTEXTS",
+ "resourceUrlWhitelist",
+ "resourceUrlBlacklist",
+ "this.resourceUrlWhitelist",
+ "this.resourceUrlBlacklist",
+ "matchUrl",
+ "generateHolderType",
+ "Base",
+ "holderType",
+ "trustedValue",
+ "$$unwrapTrustedValue",
+ "this.$$unwrapTrustedValue",
+ "holderType.prototype.valueOf",
+ "holderType.prototype.toString",
+ "htmlSanitizer",
+ "trustedValueHolderBase",
+ "byType",
+ "CSS",
+ "URL",
+ "JS",
+ "trustAs",
+ "Constructor",
+ "maybeTrusted",
+ "allowed",
+ "this.enabled",
+ "msie",
+ "sce",
+ "isEnabled",
+ "sce.isEnabled",
+ "sce.getTrusted",
+ "parseAs",
+ "sce.parseAs",
+ "enumValue",
+ "lName",
+ "eventSupport",
+ "android",
+ "userAgent",
+ "navigator",
+ "boxee",
+ "vendorPrefix",
+ "vendorRegex",
+ "bodyStyle",
+ "transitions",
+ "animations",
+ "webkitTransition",
+ "webkitAnimation",
+ "pushState",
+ "hasEvent",
+ "divElm",
+ "handleRequestFn",
+ "tpl",
+ "ignoreRequestError",
+ "totalPendingRequests",
+ "transformer",
+ "httpOptions",
+ "handleError",
+ "testability",
+ "testability.findBindings",
+ "opt_exactMatch",
+ "getElementsByClassName",
+ "matches",
+ "dataBinding",
+ "bindingName",
+ "testability.findModels",
+ "prefixes",
+ "attributeEquals",
+ "testability.getLocation",
+ "testability.setLocation",
+ "testability.whenStable",
+ "deferreds",
+ "$$timeoutId",
+ "timeout.cancel",
+ "urlParsingNode",
+ "requestUrl",
+ "originUrl",
+ "filters",
+ "suffix",
+ "currencyFilter",
+ "dateFilter",
+ "filterFilter",
+ "jsonFilter",
+ "limitToFilter",
+ "lowercaseFilter",
+ "numberFilter",
+ "orderByFilter",
+ "uppercaseFilter",
+ "comparator",
+ "matchAgainstAnyProp",
+ "predicateFn",
+ "createPredicateFn",
+ "shouldMatchPrimitives",
+ "actual",
+ "expected",
+ "item",
+ "deepCompare",
+ "dontMatchWholeObject",
+ "actualType",
+ "expectedType",
+ "expectedVal",
+ "matchAnyProperty",
+ "actualVal",
+ "$locale",
+ "formats",
+ "amount",
+ "currencySymbol",
+ "fractionSize",
+ "formatNumber",
+ "number",
+ "groupSep",
+ "decimalSep",
+ "isFinite",
+ "isNegative",
+ "abs",
+ "numStr",
+ "formatedText",
+ "hasExponent",
+ "toFixed",
+ "parseFloat",
+ "fractionLen",
+ "min",
+ "round",
+ "fraction",
+ "lgroup",
+ "group",
+ "padNumber",
+ "digits",
+ "neg",
+ "dateGetter",
+ "date",
+ "dateStrGetter",
+ "shortForm",
+ "getFirstThursdayOfYear",
+ "year",
+ "dayOfWeekOnFirst",
+ "getDay",
+ "weekGetter",
+ "firstThurs",
+ "getFullYear",
+ "thisThurs",
+ "getMonth",
+ "getDate",
+ "jsonStringToDate",
+ "string",
+ "R_ISO8601_STR",
+ "tzHour",
+ "tzMin",
+ "dateSetter",
+ "setUTCFullYear",
+ "setFullYear",
+ "timeSetter",
+ "setUTCHours",
+ "setHours",
+ "m",
+ "ms",
+ "format",
+ "timezone",
+ "NUMBER_STRING",
+ "DATE_FORMATS_SPLIT",
+ "setMinutes",
+ "getMinutes",
+ "getTimezoneOffset",
+ "DATE_FORMATS",
+ "object",
+ "spacing",
+ "limit",
+ "Infinity",
+ "sortPredicate",
+ "reverseOrder",
+ "reverseComparator",
+ "comp",
+ "descending",
+ "objectToString",
+ "v1",
+ "v2",
+ "map",
+ "predicate",
+ "ngDirective",
+ "FormController",
+ "controls",
+ "parentForm",
+ "$$parentForm",
+ "nullFormCtrl",
+ "$error",
+ "$$success",
+ "$pending",
+ "$name",
+ "$dirty",
+ "$pristine",
+ "$valid",
+ "$invalid",
+ "$submitted",
+ "$addControl",
+ "$rollbackViewValue",
+ "form.$rollbackViewValue",
+ "control",
+ "$commitViewValue",
+ "form.$commitViewValue",
+ "form.$addControl",
+ "$$renameControl",
+ "form.$$renameControl",
+ "newName",
+ "oldName",
+ "$removeControl",
+ "form.$removeControl",
+ "$setValidity",
+ "addSetValidityMethod",
+ "ctrl",
+ "set",
+ "unset",
+ "$setDirty",
+ "form.$setDirty",
+ "PRISTINE_CLASS",
+ "DIRTY_CLASS",
+ "$setPristine",
+ "form.$setPristine",
+ "setClass",
+ "SUBMITTED_CLASS",
+ "$setUntouched",
+ "form.$setUntouched",
+ "$setSubmitted",
+ "form.$setSubmitted",
+ "stringBasedInputType",
+ "$formatters",
+ "$isEmpty",
+ "baseInputType",
+ "composing",
+ "ev",
+ "ngTrim",
+ "$viewValue",
+ "$$hasNativeValidators",
+ "$setViewValue",
+ "deferListener",
+ "origValue",
+ "keyCode",
+ "$render",
+ "ctrl.$render",
+ "createDateParser",
+ "mapping",
+ "iso",
+ "ISO_DATE_REGEXP",
+ "yyyy",
+ "MM",
+ "dd",
+ "HH",
+ "getHours",
+ "mm",
+ "ss",
+ "getSeconds",
+ "sss",
+ "getMilliseconds",
+ "part",
+ "NaN",
+ "createDateInputType",
+ "parseDate",
+ "dynamicDateInputType",
+ "isValidDate",
+ "parseObservedDateValue",
+ "badInputChecker",
+ "$options",
+ "previousDate",
+ "$$parserName",
+ "$parsers",
+ "parsedDate",
+ "$ngModelMinErr",
+ "timezoneOffset",
+ "ngMin",
+ "minVal",
+ "$validators",
+ "ctrl.$validators.min",
+ "$validate",
+ "ngMax",
+ "maxVal",
+ "ctrl.$validators.max",
+ "validity",
+ "VALIDITY_STATE_PROPERTY",
+ "badInput",
+ "typeMismatch",
+ "parseConstantExpr",
+ "fallback",
+ "parseFn",
+ "cachedToggleClass",
+ "switchValue",
+ "classCache",
+ "toggleValidationCss",
+ "validationErrorKey",
+ "isValid",
+ "VALID_CLASS",
+ "INVALID_CLASS",
+ "setValidity",
+ "isObjectEmpty",
+ "PENDING_CLASS",
+ "combinedState",
+ "classDirective",
+ "arrayDifference",
+ "arrayClasses",
+ "digestClassCounts",
+ "classCounts",
+ "classesToUpdate",
+ "ngClassWatchAction",
+ "$index",
+ "old$index",
+ "mod",
+ "REGEX_STRING_REGEXP",
+ "documentMode",
+ "isActive_",
+ "active",
+ "full",
+ "major",
+ "minor",
+ "dot",
+ "codeName",
+ "JQLite._data",
+ "MOUSE_EVENT_MAP",
+ "mouseleave",
+ "mouseenter",
+ "optgroup",
+ "tbody",
+ "tfoot",
+ "colgroup",
+ "caption",
+ "thead",
+ "th",
+ "td",
+ "ready",
+ "trigger",
+ "fired",
+ "removeData",
+ "removeAttribute",
+ "css",
+ "lowercasedName",
+ "specified",
+ "getNamedItem",
+ "ret",
+ "getText",
+ "$dv",
+ "multiple",
+ "selected",
+ "nodeCount",
+ "jqLiteOn",
+ "types",
+ "related",
+ "relatedTarget",
+ "contains",
+ "off",
+ "one",
+ "onFn",
+ "replaceNode",
+ "insertBefore",
+ "contentDocument",
+ "prepend",
+ "wrapNode",
+ "detach",
+ "after",
+ "newElement",
+ "toggleClass",
+ "condition",
+ "classCondition",
+ "nextElementSibling",
+ "getElementsByTagName",
+ "extraParameters",
+ "dummyEvent",
+ "handlerArgs",
+ "eventFnsCopy",
+ "arg3",
+ "unbind",
+ "$$annotate",
+ "$animateMinErr",
+ "$$selectors",
+ "classNameFilter",
+ "this.classNameFilter",
+ "$$classNameFilter",
+ "runAnimationPostDigest",
+ "cancelFn",
+ "$$cancelFn",
+ "defer.promise.$$cancelFn",
+ "ngAnimatePostDigest",
+ "ngAnimateNotifyComplete",
+ "resolveElementClasses",
+ "hasClasses",
+ "cachedClassManipulation",
+ "op",
+ "asyncPromise",
+ "currentDefer",
+ "applyStyles",
+ "styles",
+ "from",
+ "to",
+ "animate",
+ "enter",
+ "leave",
+ "move",
+ "$$addClassImmediately",
+ "$$removeClassImmediately",
+ "add",
+ "createdCache",
+ "STORAGE_KEY",
+ "$$setClassImmediately",
+ "APPLICATION_JSON",
+ "PATH_MATCH",
+ "locationPrototype",
+ "paramValue",
+ "Location",
+ "Location.prototype.state",
+ "CALL",
+ "APPLY",
+ "BIND",
+ "CONSTANTS",
+ "null",
+ "true",
+ "false",
+ "constantGetter",
+ "OPERATORS",
+ "+",
+ "-",
+ "*",
+ "/",
+ "%",
+ "===",
+ "!==",
+ "==",
+ "!=",
+ "<",
+ ">",
+ "<=",
+ ">=",
+ "&&",
+ "||",
+ "!",
+ "ESCAPE",
+ "lex",
+ "tokens",
+ "readString",
+ "peek",
+ "readNumber",
+ "isIdent",
+ "readIdent",
+ "is",
+ "isWhitespace",
+ "ch2",
+ "ch3",
+ "op2",
+ "op3",
+ "op1",
+ "operator",
+ "throwError",
+ "chars",
+ "isExpOperator",
+ "start",
+ "end",
+ "colStr",
+ "peekCh",
+ "quote",
+ "rawString",
+ "hex",
+ "String",
+ "fromCharCode",
+ "rep",
+ "ZERO",
+ "statements",
+ "primary",
+ "expect",
+ "filterChain",
+ "consume",
+ "arrayDeclaration",
+ "functionCall",
+ "objectIndex",
+ "fieldAccess",
+ "peekToken",
+ "e1",
+ "e2",
+ "e3",
+ "e4",
+ "peekAhead",
+ "t",
+ "unaryFn",
+ "right",
+ "$parseUnaryFn",
+ "binaryFn",
+ "left",
+ "isBranching",
+ "$parseBinaryFn",
+ "$parseConstant",
+ "$parseStatements",
+ "inputFn",
+ "argsFn",
+ "$parseFilter",
+ "every",
+ "assignment",
+ "ternary",
+ "$parseAssignment",
+ "logicalOR",
+ "middle",
+ "$parseTernary",
+ "logicalAND",
+ "equality",
+ "relational",
+ "additive",
+ "multiplicative",
+ "unary",
+ "$parseFieldAccess",
+ "indexFn",
+ "$parseObjectIndex",
+ "fnGetter",
+ "contextGetter",
+ "expressionText",
+ "$parseFunctionCall",
+ "elementFns",
+ "$parseArrayLiteral",
+ "valueFns",
+ "$parseObjectLiteral",
+ "yy",
+ "y",
+ "MMMM",
+ "MMM",
+ "M",
+ "H",
+ "hh",
+ "EEEE",
+ "EEE",
+ "ampmGetter",
+ "Z",
+ "timeZoneGetter",
+ "zone",
+ "paddedZone",
+ "ww",
+ "w",
+ "xlinkHref",
+ "propName",
+ "normalized",
+ "ngBooleanAttrWatchAction",
+ "htmlAttr",
+ "ngAttrAliasWatchAction",
+ "nullFormRenameControl",
+ "formDirectiveFactory",
+ "isNgForm",
+ "ngFormCompile",
+ "formElement",
+ "ngFormPreLink",
+ "handleFormSubmission",
+ "parentFormCtrl",
+ "alias",
+ "URL_REGEXP",
+ "EMAIL_REGEXP",
+ "NUMBER_REGEXP",
+ "DATE_REGEXP",
+ "DATETIMELOCAL_REGEXP",
+ "WEEK_REGEXP",
+ "MONTH_REGEXP",
+ "TIME_REGEXP",
+ "DEFAULT_REGEXP",
+ "inputType",
+ "textInputType",
+ "weekParser",
+ "isoWeek",
+ "existingDate",
+ "week",
+ "minutes",
+ "hours",
+ "seconds",
+ "milliseconds",
+ "addDays",
+ "numberInputType",
+ "urlInputType",
+ "ctrl.$validators.url",
+ "modelValue",
+ "viewValue",
+ "emailInputType",
+ "email",
+ "ctrl.$validators.email",
+ "radioInputType",
+ "checked",
+ "checkboxInputType",
+ "trueValue",
+ "ngTrueValue",
+ "falseValue",
+ "ngFalseValue",
+ "ctrl.$isEmpty",
+ "ctrls",
+ "NgModelController",
+ "$modelValue",
+ "$$rawModelValue",
+ "$asyncValidators",
+ "$viewChangeListeners",
+ "$untouched",
+ "$touched",
+ "parsedNgModel",
+ "parsedNgModelAssign",
+ "ngModelGet",
+ "ngModelSet",
+ "pendingDebounce",
+ "$$setOptions",
+ "this.$$setOptions",
+ "getterSetter",
+ "invokeModelGetter",
+ "invokeModelSetter",
+ "$$$p",
+ "this.$isEmpty",
+ "currentValidationRunId",
+ "this.$setPristine",
+ "this.$setDirty",
+ "this.$setUntouched",
+ "UNTOUCHED_CLASS",
+ "TOUCHED_CLASS",
+ "$setTouched",
+ "this.$setTouched",
+ "this.$rollbackViewValue",
+ "$$lastCommittedViewValue",
+ "this.$validate",
+ "prevValid",
+ "prevModelValue",
+ "allowInvalid",
+ "$$runValidators",
+ "parserValid",
+ "allValid",
+ "$$writeModelToScope",
+ "this.$$runValidators",
+ "parseValid",
+ "doneCallback",
+ "processSyncValidators",
+ "syncValidatorsValid",
+ "validator",
+ "processAsyncValidators",
+ "validatorPromises",
+ "validationDone",
+ "localValidationRunId",
+ "processParseErrors",
+ "errorKey",
+ "this.$commitViewValue",
+ "$$parseAndValidate",
+ "this.$$parseAndValidate",
+ "this.$$writeModelToScope",
+ "this.$setViewValue",
+ "updateOnDefault",
+ "$$debounceViewValueCommit",
+ "this.$$debounceViewValueCommit",
+ "debounceDelay",
+ "debounce",
+ "ngModelWatch",
+ "formatters",
+ "ngModelCompile",
+ "ngModelPreLink",
+ "modelCtrl",
+ "formCtrl",
+ "ngModelPostLink",
+ "updateOn",
+ "ctrl.$validators.required",
+ "patternExp",
+ "ctrl.$validators.pattern",
+ "intVal",
+ "ctrl.$validators.maxlength",
+ "ctrl.$validators.minlength",
+ "trimValues",
+ "CONSTANT_VALUE_REGEXP",
+ "tplAttr",
+ "ngValueConstantLink",
+ "ngValueLink",
+ "valueWatchAction",
+ "that",
+ "$compile",
+ "ngBindCompile",
+ "templateElement",
+ "ngBindLink",
+ "ngBindWatchAction",
+ "ngBindTemplateCompile",
+ "ngBindTemplateLink",
+ "ngBindHtmlCompile",
+ "tElement",
+ "ngBindHtmlGetter",
+ "ngBindHtmlWatch",
+ "getStringValue",
+ "ngBindHtmlLink",
+ "ngBindHtmlWatchAction",
+ "getTrustedHtml",
+ "forceAsyncEvents",
+ "ngEventHandler",
+ "$event",
+ "previousElements",
+ "ngIfWatchAction",
+ "newScope",
+ "srcExp",
+ "onloadExp",
+ "autoScrollExp",
+ "autoscroll",
+ "changeCounter",
+ "previousElement",
+ "currentElement",
+ "cleanupLastIncludeContent",
+ "parseAsResourceUrl",
+ "ngIncludeWatchAction",
+ "afterAnimation",
+ "thisChangeId",
+ "namespaceAdaptedClone",
+ "BRACE",
+ "IS_WHEN",
+ "updateElementText",
+ "newText",
+ "numberExp",
+ "whenExp",
+ "whens",
+ "whensExpFns",
+ "braceReplacement",
+ "watchRemover",
+ "lastCount",
+ "attributeName",
+ "tmpMatch",
+ "whenKey",
+ "ngPluralizeWatchAction",
+ "countIsNaN",
+ "ngRepeatMinErr",
+ "updateScope",
+ "valueIdentifier",
+ "keyIdentifier",
+ "arrayLength",
+ "$first",
+ "$last",
+ "$middle",
+ "$odd",
+ "$even",
+ "ngRepeatCompile",
+ "ngRepeatEndComment",
+ "lhs",
+ "rhs",
+ "aliasAs",
+ "trackByExp",
+ "trackByExpGetter",
+ "trackByIdExpFn",
+ "trackByIdArrayFn",
+ "trackByIdObjFn",
+ "hashFnLocals",
+ "ngRepeatLink",
+ "lastBlockMap",
+ "ngRepeatAction",
+ "previousNode",
+ "nextNode",
+ "nextBlockMap",
+ "collectionLength",
+ "trackById",
+ "collectionKeys",
+ "nextBlockOrder",
+ "trackByIdFn",
+ "itemKey",
+ "blockKey",
+ "ngRepeatTransclude",
+ "ngShowWatchAction",
+ "NG_HIDE_CLASS",
+ "tempClasses",
+ "NG_HIDE_IN_PROGRESS_CLASS",
+ "ngHideWatchAction",
+ "ngStyleWatchAction",
+ "newStyles",
+ "oldStyles",
+ "ngSwitchController",
+ "cases",
+ "selectedTranscludes",
+ "selectedElements",
+ "previousLeaveAnimations",
+ "selectedScopes",
+ "spliceFactory",
+ "ngSwitchWatchAction",
+ "selectedTransclude",
+ "caseElement",
+ "selectedScope",
+ "anchor",
+ "ngOptionsMinErr",
+ "NG_OPTIONS_REGEXP",
+ "nullModelCtrl",
+ "optionsMap",
+ "ngModelCtrl",
+ "unknownOption",
+ "databound",
+ "init",
+ "self.init",
+ "ngModelCtrl_",
+ "nullOption_",
+ "unknownOption_",
+ "addOption",
+ "self.addOption",
+ "removeOption",
+ "self.removeOption",
+ "hasOption",
+ "renderUnknownOption",
+ "self.renderUnknownOption",
+ "unknownVal",
+ "self.hasOption",
+ "setupAsSingle",
+ "selectElement",
+ "selectCtrl",
+ "ngModelCtrl.$render",
+ "emptyOption",
+ "setupAsMultiple",
+ "lastView",
+ "selectMultipleWatch",
+ "setupAsOptions",
+ "callExpression",
+ "exprFn",
+ "valueName",
+ "keyName",
+ "createIsSelectedFn",
+ "selectedSet",
+ "trackFn",
+ "trackIndex",
+ "isSelected",
+ "compareValueFn",
+ "selectAsFn",
+ "scheduleRendering",
+ "renderScheduled",
+ "render",
+ "updateLabelMap",
+ "labelMap",
+ "label",
+ "added",
+ "optionGroups",
+ "optionGroupNames",
+ "optionGroupName",
+ "optionGroup",
+ "existingParent",
+ "existingOptions",
+ "existingOption",
+ "valuesFn",
+ "anySelected",
+ "optionId",
+ "trackKeysCache",
+ "groupByFn",
+ "displayFn",
+ "nullOption",
+ "groupIndex",
+ "groupLength",
+ "optionGroupsCache",
+ "optGroupTemplate",
+ "lastElement",
+ "optionTemplate",
+ "optionsExp",
+ "selectAs",
+ "track",
+ "selectionChanged",
+ "selectedKey",
+ "viewValueFn",
+ "getLabels",
+ "toDisplay",
+ "ngModelCtrl.$isEmpty",
+ "nullSelectCtrl",
+ "selectCtrlName",
+ "interpolateWatchAction",
+ "$$csp"
+ ]
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.js
new file mode 100644
index 00000000..6f2fd359
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.js
@@ -0,0 +1,544 @@
+/*! c3-angular - v0.1.0 - 2015-01-01
+ * https://github.com/jettro/c3-angular-sample
+ * Copyright (c) 2015 ; Licensed */
+angular.module('gridshore.c3js.chart', [])
+ .controller('ChartController', ['$scope', function ($scope) {
+ $scope.chart = null;
+ $scope.columns = [];
+ $scope.types = {};
+ $scope.axis = {};
+ $scope.axes = {};
+ $scope.xValues = null;
+ $scope.xTick = null;
+ $scope.names = null;
+ $scope.colors = null;
+ $scope.grid = null;
+ $scope.legend = null;
+ $scope.tooltip = null;
+ $scope.chartSize = null;
+ $scope.colors = null;
+ $scope.jsonKeys = null;
+
+ this.showGraph = function () {
+ var config = {};
+ config.bindto = "#" + $scope.bindto;
+ config.data = {};
+
+ if ($scope.xValues) {
+ config.data.x = $scope.xValues;
+ }
+ if ($scope.columns) {
+ config.data.columns = $scope.columns;
+ }
+ config.data.types = $scope.types;
+ config.data.axes = $scope.axes;
+ if ($scope.names) {
+ config.data.names = $scope.names;
+ }
+ if ($scope.colors) {
+ config.data.colors = $scope.colors;
+ }
+ if ($scope.showLabels && $scope.showLabels === "true") {
+ config.data.labels = true;
+ }
+ if ($scope.showSubchart && $scope.showSubchart === "true") {
+ config.subchart = {"show": true};
+ }
+ if ($scope.enableZoom && $scope.enableZoom === "true") {
+ config.zoom = {"enabled": true};
+ }
+ config.axis = $scope.axis;
+ if ($scope.xTick) {
+ config.axis.x.tick = $scope.xTick;
+ }
+ if ($scope.grid != null) {
+ config.grid = $scope.grid;
+ }
+ if ($scope.legend != null) {
+ config.legend = $scope.legend;
+ }
+ if ($scope.tooltip != null) {
+ config.tooltip = $scope.tooltip;
+ }
+ if ($scope.chartSize != null) {
+ config.size = $scope.chartSize;
+ }
+ if ($scope.colors != null) {
+ config.color = {"pattern": $scope.colors};
+ }
+
+ $scope.config = config;
+
+ if ($scope.chartData && $scope.chartColumns) {
+ $scope.$watchCollection('chartData', function () {
+ loadChartData();
+ });
+ } else {
+ $scope.chart = c3.generate($scope.config);
+ }
+ };
+
+ this.addColumn = function (column, columnType, columnName, columnColor) {
+ $scope.columns.push(column);
+ addColumnProperties(column[0], columnType, columnName, columnColor);
+ };
+
+ this.addYAxis = function (yAxis) {
+ $scope.axes = yAxis;
+ if (!$scope.axis.y2) {
+ $scope.axis.y2 = {"show": true};
+ }
+ };
+
+ this.addXAxisValues = function (xValues) {
+ $scope.xValues = xValues;
+ };
+
+ this.addAxisProperties = function (id, axis) {
+ $scope.axis[id] = axis;
+ };
+
+ this.addXTick = function (tick) {
+ $scope.xTick = tick;
+ };
+
+ this.rotateAxis = function () {
+ $scope.axis.rotated = true;
+ };
+
+ this.addGrid = function (axis) {
+ if ($scope.grid == null) {
+ $scope.grid = {};
+ }
+ if ($scope.grid[axis] == null) {
+ $scope.grid[axis] = {};
+ }
+ $scope.grid[axis].show = true;
+ };
+
+ this.addGridLine = function (axis, value, text) {
+ if ($scope.grid == null) {
+ $scope.grid = {};
+ }
+ if (axis === "x") {
+ if ($scope.grid.x === undefined) {
+ $scope.grid.x = {};
+ }
+ if ($scope.grid.x.lines === undefined) {
+ $scope.grid.x.lines = [];
+ }
+ } else {
+ if ($scope.grid.y === undefined) {
+ $scope.grid.y = {};
+ }
+ if ($scope.grid.y.lines === undefined) {
+ $scope.grid.y.lines = [];
+ }
+
+ }
+ if (axis === "y2") {
+ $scope.grid.y.lines.push({"value": value, "text": text, "axis": "y2"});
+ } else {
+ $scope.grid[axis].lines.push({"value": value, "text": text});
+ }
+ };
+
+ this.addLegend = function (legend) {
+ $scope.legend = legend;
+ };
+
+ this.addTooltip = function (tooltip) {
+ $scope.tooltip = tooltip;
+ };
+
+ this.addSize = function (chartSize) {
+ $scope.chartSize = chartSize;
+ };
+
+ this.addColors = function (colors) {
+ $scope.colors = colors;
+ };
+
+ function addColumnProperties(id, columnType, columnName, columnColor) {
+ if (columnType !== undefined) {
+ $scope.types[id] = columnType;
+ }
+ if (columnName !== undefined) {
+ if ($scope.names === null) {
+ $scope.names = {};
+ }
+ $scope.names[id] = columnName;
+ }
+ if (columnColor !== undefined) {
+ if ($scope.colors === null) {
+ $scope.colors = {};
+ }
+ $scope.colors[id] = columnColor;
+ }
+ }
+
+ function loadChartData() {
+ $scope.jsonKeys = {};
+ $scope.jsonKeys.value = [];
+ angular.forEach($scope.chartColumns, function (column) {
+ $scope.jsonKeys.value.push(column.id);
+ addColumnProperties(column.id, column.type, column.name, column.color);
+ });
+ if ($scope.chartX) {
+ $scope.jsonKeys.x = $scope.chartX.id;
+ }
+ if ($scope.names) {
+ $scope.config.data.names = $scope.names;
+ }
+ if ($scope.colors) {
+ $scope.config.data.colors = $scope.colors;
+ }
+
+ $scope.config.data.keys = $scope.jsonKeys;
+ $scope.config.data.json = $scope.chartData;
+
+ $scope.chart = c3.generate($scope.config);
+
+ // $scope.chart.load(data);
+ }
+ }])
+ .directive('c3chart', ['$timeout', function ($timeout) {
+ var chartLinker = function (scope, element, attrs, chartCtrl) {
+ // Trick to wait for all rendering of the DOM to be finished.
+ $timeout(function () {
+ chartCtrl.showGraph();
+ });
+ };
+
+ return {
+ "restrict": "E",
+ "controller": "ChartController",
+ "scope": {
+ "bindto": "@bindtoId",
+ "showLabels": "@showLabels",
+ "showSubchart": "@showSubchart",
+ "enableZoom": "@enableZoom",
+ "chartData": "=chartData",
+ "chartColumns": "=chartColumns",
+ "chartX": "=chartX"
+ },
+ "template": "<div><div id='{{bindto}}'></div><div ng-transclude></div></div>",
+ "replace": true,
+ "transclude": true,
+ "link": chartLinker
+ };
+ }])
+ .directive('chartColumn', function () {
+ var columnLinker = function (scope, element, attrs, chartCtrl) {
+ var column = attrs.columnValues.split(",");
+ column.unshift(attrs.columnId);
+ chartCtrl.addColumn(column, attrs.columnType, attrs.columnName, attrs.columnColor);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": columnLinker
+ };
+ })
+ .directive('chartAxes', function () {
+ var axesLinker = function (scope, element, attrs, chartCtrl) {
+ var x = attrs.valuesX;
+ if (x) {
+ chartCtrl.addXAxisValues(x);
+ }
+
+ var y = attrs.y;
+ var y2 = attrs.y2;
+ var yAxis = {};
+ if (y2) {
+ var items = y2.split(",");
+ for (var item in items) {
+ yAxis[items[item]] = "y2";
+ }
+ if (y) {
+ var yItems = y.split(",");
+ for (var yItem in yItems) {
+ yAxis[yItems[yItem]] = "y";
+ }
+ }
+ chartCtrl.addYAxis(yAxis);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": axesLinker
+ };
+ })
+ .directive('chartAxis', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var rotate = attrs.axisRotate;
+ if (rotate) {
+ chartCtrl.rotateAxis();
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "transclude": true,
+ "template": "<div ng-transclude></div>",
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartAxisX', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var position = attrs.axisPosition;
+ var label = attrs.axisLabel;
+
+ var axis = {"label": {"text": label, "position": position}};
+
+ var type = attrs.axisType;
+ if (type) {
+ axis.type = type;
+ }
+ // TODO has a strange effect on the graph, need to evaluate
+ var height = attrs.axisHeight;
+ if (height) {
+ axis.height = height;
+ }
+ chartCtrl.addAxisProperties('x', axis);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "transclude": true,
+ "template": "<div ng-transclude></div>",
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartAxisY', function () {
+ var axisLinker = function (scope, element, attrs, chartCtrl) {
+ var id = attrs.axisId;
+ var position = attrs.axisPosition;
+ var label = attrs.axisLabel;
+
+ var axis = {"label": {"text": label, "position": position}};
+ if (id === 'y2') {
+ axis.show = true;
+ }
+ var paddingTop = attrs.paddingTop;
+ var paddingBottom = attrs.paddingBottom;
+ if (paddingTop || paddingBottom) {
+ paddingTop = (paddingTop) ? paddingTop : 0;
+ paddingBottom = (paddingBottom) ? paddingBottom : 0;
+ axis.padding = {"top": parseInt(paddingTop), "bottom": parseInt(paddingBottom)};
+ }
+ var rangeMax = attrs.rangeMax;
+ var rangeMin = attrs.rangeMin;
+ if (rangeMax) {
+ axis.max = parseInt(rangeMax);
+ }
+ if (rangeMin) {
+ axis.min = parseInt(rangeMin);
+ }
+
+ chartCtrl.addAxisProperties(id, axis);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": axisLinker
+ };
+ })
+ .directive('chartGrid', function () {
+ var gridLinker = function (scope, element, attrs, chartCtrl) {
+ var showX = attrs.showX;
+ if (showX && showX === "true") {
+ chartCtrl.addGrid("x");
+ }
+ var showY = attrs.showY;
+ if (showY && showY === "true") {
+ chartCtrl.addGrid("y");
+ }
+ var showY2 = attrs.showY2;
+ if (showY2 && showY2 === "true") {
+ chartCtrl.addGrid("y2");
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": gridLinker,
+ "transclude": true,
+ "template": "<div ng-transclude></div>"
+ };
+ })
+ .directive('chartGridOptional', function () {
+ var gridLinker = function (scope, element, attrs, chartCtrl) {
+ var axisId = attrs.axisId;
+ var value = attrs.gridValue;
+ var text = attrs.gridText;
+
+ chartCtrl.addGridLine(axisId, value, text);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": gridLinker
+ };
+ })
+ .directive('chartAxisXTick', function () {
+ var tickLinker = function (scope, element, attrs, chartCtrl) {
+ var tick = {};
+
+ var count = attrs.tickCount;
+ if (count) {
+ tick.count = count;
+ }
+
+ // TODO, dit lijkt nog niet echt iets te doen
+ var format = attrs.tickFormat;
+ if (format) {
+ tick.format = format;
+ }
+
+ var culling = attrs.tickCulling;
+ if (culling) {
+ tick.culling = culling;
+ }
+
+ var rotate = attrs.tickRotate;
+ if (rotate) {
+ tick.rotate = rotate;
+ }
+
+ var fit = attrs.tickFit;
+ if (fit) {
+ tick.fit = fit;
+ }
+
+ chartCtrl.addXTick(tick);
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": tickLinker
+ };
+
+ })
+ .directive('chartLegend', function () {
+ var legendLinker = function (scope, element, attrs, chartCtrl) {
+ var legend = null;
+ var show = attrs.showLegend;
+ if (show && show === "false") {
+ legend = {"show": false};
+ } else {
+ var position = attrs.legendPosition;
+ if (position) {
+ legend = {"position": position};
+ }
+ }
+
+ if (legend != null) {
+ chartCtrl.addLegend(legend);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": legendLinker
+ };
+
+ })
+ .directive('chartTooltip', function () {
+ var tooltipLinker = function (scope, element, attrs, chartCtrl) {
+ var tooltip = null;
+ var show = attrs.showTooltip;
+ if (show && show === "false") {
+ tooltip = {"show": false};
+ } else {
+ var grouped = attrs.groupTooltip;
+ if (grouped && grouped === "false") {
+ tooltip = {"grouped": false};
+ }
+ }
+
+ if (tooltip != null) {
+ chartCtrl.addTooltip(tooltip);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": tooltipLinker
+ };
+
+ })
+ .directive('chartSize', function () {
+ var sizeLinker = function (scope, element, attrs, chartCtrl) {
+ var chartSize = null;
+ var width = attrs.chartWidth;
+ var height = attrs.chartHeight;
+ if (width || height) {
+ chartSize = {};
+ if (width) {
+ chartSize.width = parseInt(width);
+ }
+ if (height) {
+ chartSize.height = parseInt(height);
+ }
+ chartCtrl.addSize(chartSize);
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": sizeLinker
+ };
+
+ })
+ .directive('chartColors', function () {
+ var colorsLinker = function (scope, element, attrs, chartCtrl) {
+ var pattern = attrs.colorPattern;
+ if (pattern) {
+ chartCtrl.addColors(pattern.split(","));
+ }
+ };
+
+ return {
+ "require": "^c3chart",
+ "restrict": "E",
+ "scope": {},
+ "replace": true,
+ "link": colorsLinker
+ };
+
+ }); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js
new file mode 100644
index 00000000..19e7d3ef
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js
@@ -0,0 +1,206 @@
+/*! c3-angular - v0.1.0 - 2015-01-01
+ * https://github.com/jettro/c3-angular-sample
+ * Copyright (c) 2015 ; Licensed */
+
+angular.module("gridshore.c3js.chart", []).controller("ChartController", ["$scope", function (a) {
+ function b(b, c, d, e) {
+ void 0 !== c && (a.types[b] = c), void 0 !== d && (null === a.names && (a.names = {}), a.names[b] = d), void 0 !== e && (null === a.colors && (a.colors = {}), a.colors[b] = e)
+ }
+
+ function c() {
+ a.jsonKeys = {}, a.jsonKeys.value = [], angular.forEach(a.chartColumns, function (c) {
+ a.jsonKeys.value.push(c.id), b(c.id, c.type, c.name, c.color)
+ }), a.chartX && (a.jsonKeys.x = a.chartX.id), a.names && (a.config.data.names = a.names), a.colors && (a.config.data.colors = a.colors), a.config.data.keys = a.jsonKeys, a.config.data.json = a.chartData, a.chart = c3.generate(a.config)
+ }
+
+ a.chart = null, a.columns = [], a.types = {}, a.axis = {}, a.axes = {}, a.xValues = null, a.xTick = null, a.names = null, a.colors = null, a.grid = null, a.legend = null, a.tooltip = null, a.chartSize = null, a.colors = null, a.jsonKeys = null, this.showGraph = function () {
+ var b = {};
+ b.bindto = "#" + a.bindto, b.data = {}, a.xValues && (b.data.x = a.xValues), a.columns && (b.data.columns = a.columns), b.data.types = a.types, b.data.axes = a.axes, a.names && (b.data.names = a.names), a.colors && (b.data.colors = a.colors), a.showLabels && "true" === a.showLabels && (b.data.labels = !0), a.showSubchart && "true" === a.showSubchart && (b.subchart = {show: !0}), a.enableZoom && "true" === a.enableZoom && (b.zoom = {enabled: !0}), b.axis = a.axis, a.xTick && (b.axis.x.tick = a.xTick), null != a.grid && (b.grid = a.grid), null != a.legend && (b.legend = a.legend), null != a.tooltip && (b.tooltip = a.tooltip), null != a.chartSize && (b.size = a.chartSize), null != a.colors && (b.color = {pattern: a.colors}), a.config = b, a.chartData && a.chartColumns ? a.$watchCollection("chartData", function () {
+ c()
+ }) : a.chart = c3.generate(a.config)
+ }, this.addColumn = function (c, d, e, f) {
+ a.columns.push(c), b(c[0], d, e, f)
+ }, this.addYAxis = function (b) {
+ a.axes = b, a.axis.y2 || (a.axis.y2 = {show: !0})
+ }, this.addXAxisValues = function (b) {
+ a.xValues = b
+ }, this.addAxisProperties = function (b, c) {
+ a.axis[b] = c
+ }, this.addXTick = function (b) {
+ a.xTick = b
+ }, this.rotateAxis = function () {
+ a.axis.rotated = !0
+ }, this.addGrid = function (b) {
+ null == a.grid && (a.grid = {}), null == a.grid[b] && (a.grid[b] = {}), a.grid[b].show = !0
+ }, this.addGridLine = function (b, c, d) {
+ null == a.grid && (a.grid = {}), "x" === b ? (void 0 === a.grid.x && (a.grid.x = {}), void 0 === a.grid.x.lines && (a.grid.x.lines = [])) : (void 0 === a.grid.y && (a.grid.y = {}), void 0 === a.grid.y.lines && (a.grid.y.lines = [])), "y2" === b ? a.grid.y.lines.push({
+ value: c,
+ text: d,
+ axis: "y2"
+ }) : a.grid[b].lines.push({value: c, text: d})
+ }, this.addLegend = function (b) {
+ a.legend = b
+ }, this.addTooltip = function (b) {
+ a.tooltip = b
+ }, this.addSize = function (b) {
+ a.chartSize = b
+ }, this.addColors = function (b) {
+ a.colors = b
+ }
+}]).directive("c3chart", ["$timeout", function (a) {
+ var b = function (b, c, d, e) {
+ a(function () {
+ e.showGraph()
+ })
+ };
+ return {
+ restrict: "E",
+ controller: "ChartController",
+ scope: {
+ bindto: "@bindtoId",
+ showLabels: "@showLabels",
+ showSubchart: "@showSubchart",
+ enableZoom: "@enableZoom",
+ chartData: "=chartData",
+ chartColumns: "=chartColumns",
+ chartX: "=chartX"
+ },
+ template: "<div><div id='{{bindto}}'></div><div ng-transclude></div></div>",
+ replace: !0,
+ transclude: !0,
+ link: b
+ }
+}]).directive("chartColumn", function () {
+ var a = function (a, b, c, d) {
+ var e = c.columnValues.split(",");
+ e.unshift(c.columnId), d.addColumn(e, c.columnType, c.columnName, c.columnColor)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxes", function () {
+ var a = function (a, b, c, d) {
+ var e = c.valuesX;
+ e && d.addXAxisValues(e);
+ var f = c.y, g = c.y2, h = {};
+ if (g) {
+ var i = g.split(",");
+ for (var j in i)h[i[j]] = "y2";
+ if (f) {
+ var k = f.split(",");
+ for (var l in k)h[k[l]] = "y"
+ }
+ d.addYAxis(h)
+ }
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxis", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisRotate;
+ e && d.rotateAxis()
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ transclude: !0,
+ template: "<div ng-transclude></div>",
+ replace: !0,
+ link: a
+ }
+}).directive("chartAxisX", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisPosition, f = c.axisLabel, g = {label: {text: f, position: e}}, h = c.axisType;
+ h && (g.type = h);
+ var i = c.axisHeight;
+ i && (g.height = i), d.addAxisProperties("x", g)
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ transclude: !0,
+ template: "<div ng-transclude></div>",
+ replace: !0,
+ link: a
+ }
+}).directive("chartAxisY", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisId, f = c.axisPosition, g = c.axisLabel, h = {label: {text: g, position: f}};
+ "y2" === e && (h.show = !0);
+ var i = c.paddingTop, j = c.paddingBottom;
+ (i || j) && (i = i ? i : 0, j = j ? j : 0, h.padding = {top: parseInt(i), bottom: parseInt(j)});
+ var k = c.rangeMax, l = c.rangeMin;
+ k && (h.max = parseInt(k)), l && (h.min = parseInt(l)), d.addAxisProperties(e, h)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartGrid", function () {
+ var a = function (a, b, c, d) {
+ var e = c.showX;
+ e && "true" === e && d.addGrid("x");
+ var f = c.showY;
+ f && "true" === f && d.addGrid("y");
+ var g = c.showY2;
+ g && "true" === g && d.addGrid("y2")
+ };
+ return {
+ require: "^c3chart",
+ restrict: "E",
+ scope: {},
+ replace: !0,
+ link: a,
+ transclude: !0,
+ template: "<div ng-transclude></div>"
+ }
+}).directive("chartGridOptional", function () {
+ var a = function (a, b, c, d) {
+ var e = c.axisId, f = c.gridValue, g = c.gridText;
+ d.addGridLine(e, f, g)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartAxisXTick", function () {
+ var a = function (a, b, c, d) {
+ var e = {}, f = c.tickCount;
+ f && (e.count = f);
+ var g = c.tickFormat;
+ g && (e.format = g);
+ var h = c.tickCulling;
+ h && (e.culling = h);
+ var i = c.tickRotate;
+ i && (e.rotate = i);
+ var j = c.tickFit;
+ j && (e.fit = j), d.addXTick(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartLegend", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.showLegend;
+ if (f && "false" === f)e = {show: !1}; else {
+ var g = c.legendPosition;
+ g && (e = {position: g})
+ }
+ null != e && d.addLegend(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartTooltip", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.showTooltip;
+ if (f && "false" === f)e = {show: !1}; else {
+ var g = c.groupTooltip;
+ g && "false" === g && (e = {grouped: !1})
+ }
+ null != e && d.addTooltip(e)
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartSize", function () {
+ var a = function (a, b, c, d) {
+ var e = null, f = c.chartWidth, g = c.chartHeight;
+ (f || g) && (e = {}, f && (e.width = parseInt(f)), g && (e.height = parseInt(g)), d.addSize(e))
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+}).directive("chartColors", function () {
+ var a = function (a, b, c, d) {
+ var e = c.colorPattern;
+ e && d.addColors(e.split(","))
+ };
+ return {require: "^c3chart", restrict: "E", scope: {}, replace: !0, link: a}
+});
+//# sourceMappingURL=c3-angular.min.js.map \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js.map b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js.map
new file mode 100644
index 00000000..83e8e2cc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3-angular.min.js.map
@@ -0,0 +1,157 @@
+{
+ "version": 3,
+ "file": "c3-angular.min.js",
+ "sources": ["c3-angular.js"],
+ "names": [
+ "angular",
+ "module",
+ "controller",
+ "$scope",
+ "addColumnProperties",
+ "id",
+ "columnType",
+ "columnName",
+ "columnColor",
+ "undefined",
+ "types",
+ "names",
+ "colors",
+ "loadChartData",
+ "jsonKeys",
+ "value",
+ "forEach",
+ "chartColumns",
+ "column",
+ "push",
+ "type",
+ "name",
+ "color",
+ "chartX",
+ "x",
+ "config",
+ "data",
+ "keys",
+ "json",
+ "chartData",
+ "chart",
+ "c3",
+ "generate",
+ "columns",
+ "axis",
+ "axes",
+ "xValues",
+ "xTick",
+ "grid",
+ "legend",
+ "tooltip",
+ "chartSize",
+ "this",
+ "showGraph",
+ "bindto",
+ "showLabels",
+ "labels",
+ "showSubchart",
+ "subchart",
+ "show",
+ "enableZoom",
+ "zoom",
+ "enabled",
+ "tick",
+ "size",
+ "pattern",
+ "$watchCollection",
+ "addColumn",
+ "addYAxis",
+ "yAxis",
+ "y2",
+ "addXAxisValues",
+ "addAxisProperties",
+ "addXTick",
+ "rotateAxis",
+ "rotated",
+ "addGrid",
+ "addGridLine",
+ "text",
+ "lines",
+ "y",
+ "addLegend",
+ "addTooltip",
+ "addSize",
+ "addColors",
+ "directive",
+ "$timeout",
+ "chartLinker",
+ "scope",
+ "element",
+ "attrs",
+ "chartCtrl",
+ "restrict",
+ "template",
+ "replace",
+ "transclude",
+ "link",
+ "columnLinker",
+ "columnValues",
+ "split",
+ "unshift",
+ "columnId",
+ "require",
+ "axesLinker",
+ "valuesX",
+ "items",
+ "item",
+ "yItems",
+ "yItem",
+ "axisLinker",
+ "rotate",
+ "axisRotate",
+ "position",
+ "axisPosition",
+ "label",
+ "axisLabel",
+ "axisType",
+ "height",
+ "axisHeight",
+ "axisId",
+ "paddingTop",
+ "paddingBottom",
+ "padding",
+ "top",
+ "parseInt",
+ "bottom",
+ "rangeMax",
+ "rangeMin",
+ "max",
+ "min",
+ "gridLinker",
+ "showX",
+ "showY",
+ "showY2",
+ "gridValue",
+ "gridText",
+ "tickLinker",
+ "count",
+ "tickCount",
+ "format",
+ "tickFormat",
+ "culling",
+ "tickCulling",
+ "tickRotate",
+ "fit",
+ "tickFit",
+ "legendLinker",
+ "showLegend",
+ "legendPosition",
+ "tooltipLinker",
+ "showTooltip",
+ "grouped",
+ "groupTooltip",
+ "sizeLinker",
+ "width",
+ "chartWidth",
+ "chartHeight",
+ "colorsLinker",
+ "colorPattern"
+ ],
+ "mappings": "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"
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.js
new file mode 100644
index 00000000..5f574be7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.js
@@ -0,0 +1,7473 @@
+(function (window) {
+ 'use strict';
+
+ /*global define, module, exports, require */
+
+ var c3 = {version: "0.4.8"};
+
+ var c3_chart_fn, c3_chart_internal_fn;
+
+ function Chart(config) {
+ var $$ = this.internal = new ChartInternal(this);
+ $$.loadConfig(config);
+ $$.init();
+
+ // bind "this" to nested API
+ (function bindThis(fn, target, argThis) {
+ Object.keys(fn).forEach(function (key) {
+ target[key] = fn[key].bind(argThis);
+ if (Object.keys(fn[key]).length > 0) {
+ bindThis(fn[key], target[key], argThis);
+ }
+ });
+ })(c3_chart_fn, this, this);
+ }
+
+ function ChartInternal(api) {
+ var $$ = this;
+ $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require("d3") : undefined;
+ $$.api = api;
+ $$.config = $$.getDefaultConfig();
+ $$.data = {};
+ $$.cache = {};
+ $$.axes = {};
+ }
+
+ c3.generate = function (config) {
+ return new Chart(config);
+ };
+
+ c3.chart = {
+ fn: Chart.prototype,
+ internal: {
+ fn: ChartInternal.prototype
+ }
+ };
+ c3_chart_fn = c3.chart.fn;
+ c3_chart_internal_fn = c3.chart.internal.fn;
+
+
+ c3_chart_internal_fn.init = function () {
+ var $$ = this, config = $$.config;
+
+ $$.initParams();
+
+ if (config.data_url) {
+ $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_keys, $$.initWithData);
+ }
+ else if (config.data_json) {
+ $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));
+ }
+ else if (config.data_rows) {
+ $$.initWithData($$.convertRowsToData(config.data_rows));
+ }
+ else if (config.data_columns) {
+ $$.initWithData($$.convertColumnsToData(config.data_columns));
+ }
+ else {
+ throw Error('url or json or rows or columns is required.');
+ }
+ };
+
+ c3_chart_internal_fn.initParams = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+
+ // MEMO: clipId needs to be unique because it conflicts when multiple charts exist
+ $$.clipId = "c3-" + (+new Date()) + '-clip',
+ $$.clipIdForXAxis = $$.clipId + '-xaxis',
+ $$.clipIdForYAxis = $$.clipId + '-yaxis',
+ $$.clipIdForGrid = $$.clipId + '-grid',
+ $$.clipIdForSubchart = $$.clipId + '-subchart',
+ $$.clipPath = $$.getClipPath($$.clipId),
+ $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis),
+ $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);
+ $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid),
+ $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart),
+
+ $$.dragStart = null;
+ $$.dragging = false;
+ $$.flowing = false;
+ $$.cancelClick = false;
+ $$.mouseover = false;
+ $$.transiting = false;
+
+ $$.color = $$.generateColor();
+ $$.levelColor = $$.generateLevelColor();
+
+ $$.dataTimeFormat = config.data_xLocaltime ? d3.time.format : d3.time.format.utc;
+ $$.axisTimeFormat = config.axis_x_localtime ? d3.time.format : d3.time.format.utc;
+ $$.defaultAxisTimeFormat = $$.axisTimeFormat.multi([
+ [".%L", function (d) {
+ return d.getMilliseconds();
+ }],
+ [":%S", function (d) {
+ return d.getSeconds();
+ }],
+ ["%I:%M", function (d) {
+ return d.getMinutes();
+ }],
+ ["%I %p", function (d) {
+ return d.getHours();
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getDay() && d.getDate() !== 1;
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getDate() !== 1;
+ }],
+ ["%-m/%-d", function (d) {
+ return d.getMonth();
+ }],
+ ["%Y/%-m/%-d", function () {
+ return true;
+ }]
+ ]);
+
+ $$.hiddenTargetIds = [];
+ $$.hiddenLegendIds = [];
+ $$.focusedTargetIds = [];
+ $$.defocusedTargetIds = [];
+
+ $$.xOrient = config.axis_rotated ? "left" : "bottom";
+ $$.yOrient = config.axis_rotated ? (config.axis_y_inner ? "top" : "bottom") : (config.axis_y_inner ? "right" : "left");
+ $$.y2Orient = config.axis_rotated ? (config.axis_y2_inner ? "bottom" : "top") : (config.axis_y2_inner ? "left" : "right");
+ $$.subXOrient = config.axis_rotated ? "left" : "bottom";
+
+ $$.isLegendRight = config.legend_position === 'right';
+ $$.isLegendInset = config.legend_position === 'inset';
+ $$.isLegendTop = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'top-right';
+ $$.isLegendLeft = config.legend_inset_anchor === 'top-left' || config.legend_inset_anchor === 'bottom-left';
+ $$.legendStep = 0;
+ $$.legendItemWidth = 0;
+ $$.legendItemHeight = 0;
+
+ $$.currentMaxTickWidths = {
+ x: 0,
+ y: 0,
+ y2: 0
+ };
+
+ $$.rotated_padding_left = 30;
+ $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;
+ $$.rotated_padding_top = 5;
+
+ $$.withoutFadeIn = {};
+
+ $$.intervalForObserveInserted = undefined;
+
+ $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js
+ };
+
+ c3_chart_internal_fn.initChartElements = function () {
+ if (this.initBar) {
+ this.initBar();
+ }
+ if (this.initLine) {
+ this.initLine();
+ }
+ if (this.initArc) {
+ this.initArc();
+ }
+ if (this.initGauge) {
+ this.initGauge();
+ }
+ if (this.initText) {
+ this.initText();
+ }
+ };
+
+ c3_chart_internal_fn.initWithData = function (data) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ var defs, main, binding = true;
+
+ if ($$.initPie) {
+ $$.initPie();
+ }
+ if ($$.initBrush) {
+ $$.initBrush();
+ }
+ if ($$.initZoom) {
+ $$.initZoom();
+ }
+
+ $$.selectChart = typeof config.bindto.node === 'function' ? config.bindto : d3.select(config.bindto);
+ if ($$.selectChart.empty()) {
+ $$.selectChart = d3.select(document.createElement('div')).style('opacity', 0);
+ $$.observeInserted($$.selectChart);
+ binding = false;
+ }
+ $$.selectChart.html("").classed("c3", true);
+
+ // Init data as targets
+ $$.data.xs = {};
+ $$.data.targets = $$.convertDataToTargets(data);
+
+ if (config.data_filter) {
+ $$.data.targets = $$.data.targets.filter(config.data_filter);
+ }
+
+ // Set targets to hide if needed
+ if (config.data_hide) {
+ $$.addHiddenTargetIds(config.data_hide === true ? $$.mapToIds($$.data.targets) : config.data_hide);
+ }
+ if (config.legend_hide) {
+ $$.addHiddenLegendIds(config.legend_hide === true ? $$.mapToIds($$.data.targets) : config.legend_hide);
+ }
+
+ // when gauge, hide legend // TODO: fix
+ if ($$.hasType('gauge')) {
+ config.legend_show = false;
+ }
+
+ // Init sizes and scales
+ $$.updateSizes();
+ $$.updateScales();
+
+ // Set domains for each scale
+ $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));
+ $$.y.domain($$.getYDomain($$.data.targets, 'y'));
+ $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));
+ $$.subX.domain($$.x.domain());
+ $$.subY.domain($$.y.domain());
+ $$.subY2.domain($$.y2.domain());
+
+ // Save original x domain for zoom update
+ $$.orgXDomain = $$.x.domain();
+
+ // Set initialized scales to brush and zoom
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x);
+ }
+
+ /*-- Basic Elements --*/
+
+ // Define svgs
+ $$.svg = $$.selectChart.append("svg")
+ .style("overflow", "hidden")
+ .on('mouseenter', function () {
+ return config.onmouseover.call($$);
+ })
+ .on('mouseleave', function () {
+ return config.onmouseout.call($$);
+ });
+
+ // Define defs
+ defs = $$.svg.append("defs");
+ $$.clipChart = $$.appendClip(defs, $$.clipId);
+ $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);
+ $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);
+ $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);
+ $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);
+ $$.updateSvgSize();
+
+ // Define regions
+ main = $$.main = $$.svg.append("g").attr("transform", $$.getTranslate('main'));
+
+ if ($$.initSubchart) {
+ $$.initSubchart();
+ }
+ if ($$.initTooltip) {
+ $$.initTooltip();
+ }
+ if ($$.initLegend) {
+ $$.initLegend();
+ }
+
+ /*-- Main Region --*/
+
+ // text when empty
+ main.append("text")
+ .attr("class", CLASS.text + ' ' + CLASS.empty)
+ .attr("text-anchor", "middle") // horizontal centering of text at x position in all browsers.
+ .attr("dominant-baseline", "middle"); // vertical centering of text at y position in all browsers, except IE.
+
+ // Regions
+ $$.initRegion();
+
+ // Grids
+ $$.initGrid();
+
+ // Define g for chart area
+ main.append('g')
+ .attr("clip-path", $$.clipPath)
+ .attr('class', CLASS.chart);
+
+ // Grid lines
+ if (config.grid_lines_front) {
+ $$.initGridLines();
+ }
+
+ // Cover whole with rects for events
+ $$.initEventRect();
+
+ // Define g for chart
+ $$.initChartElements();
+
+ // if zoom privileged, insert rect to forefront
+ // TODO: is this needed?
+ main.insert('rect', config.zoom_privileged ? null : 'g.' + CLASS.regions)
+ .attr('class', CLASS.zoomRect)
+ .attr('width', $$.width)
+ .attr('height', $$.height)
+ .style('opacity', 0)
+ .on("dblclick.zoom", null);
+
+ // Set default extent if defined
+ if (config.axis_x_extent) {
+ $$.brush.extent($$.getDefaultExtent());
+ }
+
+ // Add Axis
+ $$.initAxis();
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Draw with targets
+ if (binding) {
+ $$.updateDimension();
+ $$.config.oninit.call($$);
+ $$.redraw({
+ withTransform: true,
+ withUpdateXDomain: true,
+ withUpdateOrgXDomain: true,
+ withTransitionForAxis: false
+ });
+ }
+
+ // Bind resize event
+ if (window.onresize == null) {
+ window.onresize = $$.generateResize();
+ }
+ if (window.onresize.add) {
+ window.onresize.add(function () {
+ config.onresize.call($$);
+ });
+ window.onresize.add(function () {
+ $$.api.flush();
+ });
+ window.onresize.add(function () {
+ config.onresized.call($$);
+ });
+ }
+
+ // export element of the chart
+ $$.api.element = $$.selectChart.node();
+ };
+
+ c3_chart_internal_fn.smoothLines = function (el, type) {
+ var $$ = this;
+ if (type === 'grid') {
+ el.each(function () {
+ var g = $$.d3.select(this),
+ x1 = g.attr('x1'),
+ x2 = g.attr('x2'),
+ y1 = g.attr('y1'),
+ y2 = g.attr('y2');
+ g.attr({
+ 'x1': Math.ceil(x1),
+ 'x2': Math.ceil(x2),
+ 'y1': Math.ceil(y1),
+ 'y2': Math.ceil(y2)
+ });
+ });
+ }
+ };
+
+
+ c3_chart_internal_fn.updateSizes = function () {
+ var $$ = this, config = $$.config;
+ var legendHeight = $$.legend ? $$.getLegendHeight() : 0,
+ legendWidth = $$.legend ? $$.getLegendWidth() : 0,
+ legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight,
+ hasArc = $$.hasArcType(),
+ xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'),
+ subchartHeight = config.subchart_show && !hasArc ? (config.subchart_size_height + xAxisHeight) : 0;
+
+ $$.currentWidth = $$.getCurrentWidth();
+ $$.currentHeight = $$.getCurrentHeight();
+
+ // for main
+ $$.margin = config.axis_rotated ? {
+ top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),
+ right: hasArc ? 0 : $$.getCurrentPaddingRight(),
+ bottom: $$.getHorizontalAxisHeight('y') + legendHeightForBottom + $$.getCurrentPaddingBottom(),
+ left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())
+ } : {
+ top: 4 + $$.getCurrentPaddingTop(), // for top tick text
+ right: hasArc ? 0 : $$.getCurrentPaddingRight(),
+ bottom: xAxisHeight + subchartHeight + legendHeightForBottom + $$.getCurrentPaddingBottom(),
+ left: hasArc ? 0 : $$.getCurrentPaddingLeft()
+ };
+
+ // for subchart
+ $$.margin2 = config.axis_rotated ? {
+ top: $$.margin.top,
+ right: NaN,
+ bottom: 20 + legendHeightForBottom,
+ left: $$.rotated_padding_left
+ } : {
+ top: $$.currentHeight - subchartHeight - legendHeightForBottom,
+ right: NaN,
+ bottom: xAxisHeight + legendHeightForBottom,
+ left: $$.margin.left
+ };
+
+ // for legend
+ $$.margin3 = {
+ top: 0,
+ right: NaN,
+ bottom: 0,
+ left: 0
+ };
+ if ($$.updateSizeForLegend) {
+ $$.updateSizeForLegend(legendHeight, legendWidth);
+ }
+
+ $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;
+ $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;
+ if ($$.width < 0) {
+ $$.width = 0;
+ }
+ if ($$.height < 0) {
+ $$.height = 0;
+ }
+
+ $$.width2 = config.axis_rotated ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right : $$.width;
+ $$.height2 = config.axis_rotated ? $$.height : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;
+ if ($$.width2 < 0) {
+ $$.width2 = 0;
+ }
+ if ($$.height2 < 0) {
+ $$.height2 = 0;
+ }
+
+ // for arc
+ $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);
+ $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);
+ if ($$.hasType('gauge')) {
+ $$.arcHeight += $$.height - $$.getGaugeLabelHeight();
+ }
+ if ($$.updateRadius) {
+ $$.updateRadius();
+ }
+
+ if ($$.isLegendRight && hasArc) {
+ $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;
+ }
+ };
+
+ c3_chart_internal_fn.updateTargets = function (targets) {
+ var $$ = this, config = $$.config;
+
+ /*-- Main --*/
+
+ //-- Text --//
+ $$.updateTargetsForText(targets);
+
+ //-- Bar --//
+ $$.updateTargetsForBar(targets);
+
+ //-- Line --//
+ $$.updateTargetsForLine(targets);
+
+ //-- Arc --//
+ if ($$.updateTargetsForArc) {
+ $$.updateTargetsForArc(targets);
+ }
+ if ($$.updateTargetsForSubchart) {
+ $$.updateTargetsForSubchart(targets);
+ }
+
+ /*-- Show --*/
+
+ // Fade-in each chart
+ $$.svg.selectAll('.' + CLASS.target).filter(function (d) {
+ return $$.isTargetToShow(d.id);
+ })
+ .transition().duration(config.transition_duration)
+ .style("opacity", 1);
+ };
+
+ c3_chart_internal_fn.redraw = function (options, transitions) {
+ var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config;
+ var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType);
+ var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis,
+ withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend,
+ withEventRect, withDimension, withUpdateXAxis;
+ var hideAxis = $$.hasArcType();
+ var drawArea, drawBar, drawLine, xForText, yForText;
+ var duration, durationForExit, durationForAxis;
+ var waitForDraw, flow;
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets), tickValues, i, intervalForCulling, xDomainForZoom;
+ var xv = $$.xv.bind($$), cx, cy;
+
+ options = options || {};
+ withY = getOption(options, "withY", true);
+ withSubchart = getOption(options, "withSubchart", true);
+ withTransition = getOption(options, "withTransition", true);
+ withTransform = getOption(options, "withTransform", false);
+ withUpdateXDomain = getOption(options, "withUpdateXDomain", false);
+ withUpdateOrgXDomain = getOption(options, "withUpdateOrgXDomain", false);
+ withTrimXDomain = getOption(options, "withTrimXDomain", true);
+ withUpdateXAxis = getOption(options, "withUpdateXAxis", withUpdateXDomain);
+ withLegend = getOption(options, "withLegend", false);
+ withEventRect = getOption(options, "withEventRect", true);
+ withDimension = getOption(options, "withDimension", true);
+ withTransitionForExit = getOption(options, "withTransitionForExit", withTransition);
+ withTransitionForAxis = getOption(options, "withTransitionForAxis", withTransition);
+
+ duration = withTransition ? config.transition_duration : 0;
+ durationForExit = withTransitionForExit ? duration : 0;
+ durationForAxis = withTransitionForAxis ? duration : 0;
+
+ transitions = transitions || $$.generateAxisTransitions(durationForAxis);
+
+ // update legend and transform each g
+ if (withLegend && config.legend_show) {
+ $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);
+ } else if (withDimension) {
+ // need to update dimension (e.g. axis.y.tick.values) because y tick values should change
+ // no need to update axis in it because they will be updated in redraw()
+ $$.updateDimension(true);
+ }
+
+ // MEMO: needed for grids calculation
+ if ($$.isCategorized() && targetsToShow.length === 0) {
+ $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);
+ }
+
+ if (targetsToShow.length) {
+ $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);
+ if (!config.axis_x_tick_values) {
+ if (config.axis_x_tick_fit || config.axis_x_tick_count) {
+ tickValues = $$.generateTickValues($$.mapTargetsToUniqueXs(targetsToShow), config.axis_x_tick_count, $$.isTimeSeries());
+ } else {
+ tickValues = undefined;
+ }
+ $$.xAxis.tickValues(tickValues);
+ $$.subXAxis.tickValues(tickValues);
+ }
+ } else {
+ $$.xAxis.tickValues([]);
+ $$.subXAxis.tickValues([]);
+ }
+
+ if (config.zoom_rescale && !options.flow) {
+ xDomainForZoom = $$.x.orgDomain();
+ }
+
+ $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));
+ $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));
+
+ if (!config.axis_y_tick_values && config.axis_y_tick_count) {
+ $$.yAxis.tickValues($$.generateTickValues($$.y.domain(), config.axis_y_tick_count));
+ }
+ if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {
+ $$.y2Axis.tickValues($$.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));
+ }
+
+ // axes
+ $$.redrawAxis(transitions, hideAxis);
+
+ // Update axis label
+ $$.updateAxisLabels(withTransition);
+
+ // show/hide if manual culling needed
+ if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {
+ if (config.axis_x_tick_culling && tickValues) {
+ for (i = 1; i < tickValues.length; i++) {
+ if (tickValues.length / i < config.axis_x_tick_culling_max) {
+ intervalForCulling = i;
+ break;
+ }
+ }
+ $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {
+ var index = tickValues.indexOf(e);
+ if (index >= 0) {
+ d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');
+ }
+ });
+ } else {
+ $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').style('display', 'block');
+ }
+ }
+
+ // setup drawer - MEMO: these must be called after axis updated
+ drawArea = $$.generateDrawArea ? $$.generateDrawArea(areaIndices, false) : undefined;
+ drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;
+ drawLine = $$.generateDrawLine ? $$.generateDrawLine(lineIndices, false) : undefined;
+ xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);
+ yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false);
+
+ // Update sub domain
+ if (withY) {
+ $$.subY.domain($$.getYDomain(targetsToShow, 'y'));
+ $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));
+ }
+
+ // tooltip
+ $$.tooltip.style("display", "none");
+
+ // xgrid focus
+ $$.updateXgridFocus();
+
+ // Data empty label positioning and text.
+ main.select("text." + CLASS.text + '.' + CLASS.empty)
+ .attr("x", $$.width / 2)
+ .attr("y", $$.height / 2)
+ .text(config.data_empty_label_text)
+ .transition()
+ .style('opacity', targetsToShow.length ? 0 : 1);
+
+ // grid
+ $$.redrawGrid(duration);
+
+ // rect for regions
+ $$.redrawRegion(duration);
+
+ // bars
+ $$.redrawBar(durationForExit);
+
+ // lines, areas and cricles
+ $$.redrawLine(durationForExit);
+ $$.redrawArea(durationForExit);
+ $$.redrawCircle();
+
+ // text
+ if ($$.hasDataLabel()) {
+ $$.redrawText(durationForExit);
+ }
+
+ // arc
+ if ($$.redrawArc) {
+ $$.redrawArc(duration, durationForExit, withTransform);
+ }
+
+ // subchart
+ if ($$.redrawSubchart) {
+ $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);
+ }
+
+ // circles for select
+ main.selectAll('.' + CLASS.selectedCircles)
+ .filter($$.isBarType.bind($$))
+ .selectAll('circle')
+ .remove();
+
+ // event rects will redrawn when flow called
+ if (config.interaction_enabled && !options.flow && withEventRect) {
+ $$.redrawEventRect();
+ if ($$.updateZoom) {
+ $$.updateZoom();
+ }
+ }
+
+ // update circleY based on updated parameters
+ $$.updateCircleY();
+
+ // generate circle x/y functions depending on updated params
+ cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);
+ cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$);
+
+ // transition should be derived from one transition
+ d3.transition().duration(duration).each(function () {
+ var transitions = [];
+
+ $$.addTransitionForBar(transitions, drawBar);
+ $$.addTransitionForLine(transitions, drawLine);
+ $$.addTransitionForArea(transitions, drawArea);
+ $$.addTransitionForCircle(transitions, cx, cy);
+ $$.addTransitionForText(transitions, xForText, yForText, options.flow);
+ $$.addTransitionForRegion(transitions);
+ $$.addTransitionForGrid(transitions);
+
+ // Wait for end of transitions if called from flow API
+ if (options.flow) {
+ waitForDraw = $$.generateWait();
+ transitions.forEach(function (t) {
+ waitForDraw.add(t);
+ });
+ flow = $$.generateFlow({
+ targets: targetsToShow,
+ flow: options.flow,
+ duration: duration,
+ drawBar: drawBar,
+ drawLine: drawLine,
+ drawArea: drawArea,
+ cx: cx,
+ cy: cy,
+ xv: xv,
+ xForText: xForText,
+ yForText: yForText
+ });
+ }
+ })
+ .call(waitForDraw || function () {
+ }, flow || function () {
+ });
+
+ // update fadein condition
+ $$.mapToIds($$.data.targets).forEach(function (id) {
+ $$.withoutFadeIn[id] = true;
+ });
+ };
+
+ c3_chart_internal_fn.updateAndRedraw = function (options) {
+ var $$ = this, config = $$.config, transitions;
+ options = options || {};
+ // same with redraw
+ options.withTransition = getOption(options, "withTransition", true);
+ options.withTransform = getOption(options, "withTransform", false);
+ options.withLegend = getOption(options, "withLegend", false);
+ // NOT same with redraw
+ options.withUpdateXDomain = true;
+ options.withUpdateOrgXDomain = true;
+ options.withTransitionForExit = false;
+ options.withTransitionForTransform = getOption(options, "withTransitionForTransform", options.withTransition);
+ // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)
+ $$.updateSizes();
+ // MEMO: called in updateLegend in redraw if withLegend
+ if (!(options.withLegend && config.legend_show)) {
+ transitions = $$.generateAxisTransitions(options.withTransitionForAxis ? config.transition_duration : 0);
+ // Update scales
+ $$.updateScales();
+ $$.updateSvgSize();
+ // Update g positions
+ $$.transformAll(options.withTransitionForTransform, transitions);
+ }
+ // Draw with new sizes & scales
+ $$.redraw(options, transitions);
+ };
+ c3_chart_internal_fn.redrawWithoutRescale = function () {
+ this.redraw({
+ withY: false,
+ withSubchart: false,
+ withEventRect: false,
+ withTransitionForAxis: false
+ });
+ };
+
+ c3_chart_internal_fn.isTimeSeries = function () {
+ return this.config.axis_x_type === 'timeseries';
+ };
+ c3_chart_internal_fn.isCategorized = function () {
+ return this.config.axis_x_type.indexOf('categor') >= 0;
+ };
+ c3_chart_internal_fn.isCustomX = function () {
+ var $$ = this, config = $$.config;
+ return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));
+ };
+
+ c3_chart_internal_fn.isTimeSeriesY = function () {
+ return this.config.axis_y_type === 'timeseries';
+ };
+
+ c3_chart_internal_fn.getTranslate = function (target) {
+ var $$ = this, config = $$.config, x, y;
+ if (target === 'main') {
+ x = asHalfPixel($$.margin.left);
+ y = asHalfPixel($$.margin.top);
+ } else if (target === 'context') {
+ x = asHalfPixel($$.margin2.left);
+ y = asHalfPixel($$.margin2.top);
+ } else if (target === 'legend') {
+ x = $$.margin3.left;
+ y = $$.margin3.top;
+ } else if (target === 'x') {
+ x = 0;
+ y = config.axis_rotated ? 0 : $$.height;
+ } else if (target === 'y') {
+ x = 0;
+ y = config.axis_rotated ? $$.height : 0;
+ } else if (target === 'y2') {
+ x = config.axis_rotated ? 0 : $$.width;
+ y = config.axis_rotated ? 1 : 0;
+ } else if (target === 'subx') {
+ x = 0;
+ y = config.axis_rotated ? 0 : $$.height2;
+ } else if (target === 'arc') {
+ x = $$.arcWidth / 2;
+ y = $$.arcHeight / 2;
+ }
+ return "translate(" + x + "," + y + ")";
+ };
+ c3_chart_internal_fn.initialOpacity = function (d) {
+ return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;
+ };
+ c3_chart_internal_fn.initialOpacityForCircle = function (d) {
+ return d.value !== null && this.withoutFadeIn[d.id] ? this.opacityForCircle(d) : 0;
+ };
+ c3_chart_internal_fn.opacityForCircle = function (d) {
+ var opacity = this.config.point_show ? 1 : 0;
+ return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0;
+ };
+ c3_chart_internal_fn.opacityForText = function () {
+ return this.hasDataLabel() ? 1 : 0;
+ };
+ c3_chart_internal_fn.xx = function (d) {
+ return d ? this.x(d.x) : null;
+ };
+ c3_chart_internal_fn.xv = function (d) {
+ var $$ = this, value = d.value;
+ if ($$.isTimeSeries()) {
+ value = $$.parseDate(d.value);
+ }
+ else if ($$.isCategorized() && typeof d.value === 'string') {
+ value = $$.config.axis_x_categories.indexOf(d.value);
+ }
+ return Math.ceil($$.x(value));
+ };
+ c3_chart_internal_fn.yv = function (d) {
+ var $$ = this,
+ yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;
+ return Math.ceil(yScale(d.value));
+ };
+ c3_chart_internal_fn.subxx = function (d) {
+ return d ? this.subX(d.x) : null;
+ };
+
+ c3_chart_internal_fn.transformMain = function (withTransition, transitions) {
+ var $$ = this,
+ xAxis, yAxis, y2Axis;
+ if (transitions && transitions.axisX) {
+ xAxis = transitions.axisX;
+ } else {
+ xAxis = $$.main.select('.' + CLASS.axisX);
+ if (withTransition) {
+ xAxis = xAxis.transition();
+ }
+ }
+ if (transitions && transitions.axisY) {
+ yAxis = transitions.axisY;
+ } else {
+ yAxis = $$.main.select('.' + CLASS.axisY);
+ if (withTransition) {
+ yAxis = yAxis.transition();
+ }
+ }
+ if (transitions && transitions.axisY2) {
+ y2Axis = transitions.axisY2;
+ } else {
+ y2Axis = $$.main.select('.' + CLASS.axisY2);
+ if (withTransition) {
+ y2Axis = y2Axis.transition();
+ }
+ }
+ (withTransition ? $$.main.transition() : $$.main).attr("transform", $$.getTranslate('main'));
+ xAxis.attr("transform", $$.getTranslate('x'));
+ yAxis.attr("transform", $$.getTranslate('y'));
+ y2Axis.attr("transform", $$.getTranslate('y2'));
+ $$.main.select('.' + CLASS.chartArcs).attr("transform", $$.getTranslate('arc'));
+ };
+ c3_chart_internal_fn.transformAll = function (withTransition, transitions) {
+ var $$ = this;
+ $$.transformMain(withTransition, transitions);
+ if ($$.config.subchart_show) {
+ $$.transformContext(withTransition, transitions);
+ }
+ if ($$.legend) {
+ $$.transformLegend(withTransition);
+ }
+ };
+
+ c3_chart_internal_fn.updateSvgSize = function () {
+ var $$ = this,
+ brush = $$.svg.select(".c3-brush .background");
+ $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);
+ $$.svg.selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid]).select('rect')
+ .attr('width', $$.width)
+ .attr('height', $$.height);
+ $$.svg.select('#' + $$.clipIdForXAxis).select('rect')
+ .attr('x', $$.getXAxisClipX.bind($$))
+ .attr('y', $$.getXAxisClipY.bind($$))
+ .attr('width', $$.getXAxisClipWidth.bind($$))
+ .attr('height', $$.getXAxisClipHeight.bind($$));
+ $$.svg.select('#' + $$.clipIdForYAxis).select('rect')
+ .attr('x', $$.getYAxisClipX.bind($$))
+ .attr('y', $$.getYAxisClipY.bind($$))
+ .attr('width', $$.getYAxisClipWidth.bind($$))
+ .attr('height', $$.getYAxisClipHeight.bind($$));
+ $$.svg.select('#' + $$.clipIdForSubchart).select('rect')
+ .attr('width', $$.width)
+ .attr('height', brush.size() ? brush.attr('height') : 0);
+ $$.svg.select('.' + CLASS.zoomRect)
+ .attr('width', $$.width)
+ .attr('height', $$.height);
+ // MEMO: parent div's height will be bigger than svg when <!DOCTYPE html>
+ $$.selectChart.style('max-height', $$.currentHeight + "px");
+ };
+
+
+ c3_chart_internal_fn.updateDimension = function (withoutAxis) {
+ var $$ = this;
+ if (!withoutAxis) {
+ if ($$.config.axis_rotated) {
+ $$.axes.x.call($$.xAxis);
+ $$.axes.subx.call($$.subXAxis);
+ } else {
+ $$.axes.y.call($$.yAxis);
+ $$.axes.y2.call($$.y2Axis);
+ }
+ }
+ $$.updateSizes();
+ $$.updateScales();
+ $$.updateSvgSize();
+ $$.transformAll(false);
+ };
+
+ c3_chart_internal_fn.observeInserted = function (selection) {
+ var $$ = this, observer = new MutationObserver(function (mutations) {
+ mutations.forEach(function (mutation) {
+ if (mutation.type === 'childList' && mutation.previousSibling) {
+ observer.disconnect();
+ // need to wait for completion of load because size calculation requires the actual sizes determined after that completion
+ $$.intervalForObserveInserted = window.setInterval(function () {
+ // parentNode will NOT be null when completed
+ if (selection.node().parentNode) {
+ window.clearInterval($$.intervalForObserveInserted);
+ $$.updateDimension();
+ $$.config.oninit.call($$);
+ $$.redraw({
+ withTransform: true,
+ withUpdateXDomain: true,
+ withUpdateOrgXDomain: true,
+ withTransition: false,
+ withTransitionForTransform: false,
+ withLegend: true
+ });
+ selection.transition().style('opacity', 1);
+ }
+ }, 10);
+ }
+ });
+ });
+ observer.observe(selection.node(), {attributes: true, childList: true, characterData: true});
+ };
+
+
+ c3_chart_internal_fn.generateResize = function () {
+ var resizeFunctions = [];
+
+ function callResizeFunctions() {
+ resizeFunctions.forEach(function (f) {
+ f();
+ });
+ }
+
+ callResizeFunctions.add = function (f) {
+ resizeFunctions.push(f);
+ };
+ return callResizeFunctions;
+ };
+
+ c3_chart_internal_fn.endall = function (transition, callback) {
+ var n = 0;
+ transition
+ .each(function () {
+ ++n;
+ })
+ .each("end", function () {
+ if (!--n) {
+ callback.apply(this, arguments);
+ }
+ });
+ };
+ c3_chart_internal_fn.generateWait = function () {
+ var transitionsToWait = [],
+ f = function (transition, callback) {
+ var timer = setInterval(function () {
+ var done = 0;
+ transitionsToWait.forEach(function (t) {
+ if (t.empty()) {
+ done += 1;
+ return;
+ }
+ try {
+ t.transition();
+ } catch (e) {
+ done += 1;
+ }
+ });
+ if (done === transitionsToWait.length) {
+ clearInterval(timer);
+ if (callback) {
+ callback();
+ }
+ }
+ }, 10);
+ };
+ f.add = function (transition) {
+ transitionsToWait.push(transition);
+ };
+ return f;
+ };
+
+ c3_chart_internal_fn.parseDate = function (date) {
+ var $$ = this, parsedDate;
+ if (date instanceof Date) {
+ parsedDate = date;
+ } else if (typeof date === 'number' || !isNaN(date)) {
+ parsedDate = new Date(+date);
+ } else {
+ parsedDate = $$.dataTimeFormat($$.config.data_xFormat).parse(date);
+ }
+ if (!parsedDate || isNaN(+parsedDate)) {
+ window.console.error("Failed to parse x '" + date + "' to Date object");
+ }
+ return parsedDate;
+ };
+
+ c3_chart_internal_fn.getDefaultConfig = function () {
+ var config = {
+ bindto: '#chart',
+ size_width: undefined,
+ size_height: undefined,
+ padding_left: undefined,
+ padding_right: undefined,
+ padding_top: undefined,
+ padding_bottom: undefined,
+ zoom_enabled: false,
+ zoom_extent: undefined,
+ zoom_privileged: false,
+ zoom_rescale: false,
+ zoom_onzoom: function () {
+ },
+ zoom_onzoomstart: function () {
+ },
+ zoom_onzoomend: function () {
+ },
+ interaction_enabled: true,
+ onmouseover: function () {
+ },
+ onmouseout: function () {
+ },
+ onresize: function () {
+ },
+ onresized: function () {
+ },
+ oninit: function () {
+ },
+ transition_duration: 350,
+ data_x: undefined,
+ data_xs: {},
+ data_xFormat: '%Y-%m-%d',
+ data_xLocaltime: true,
+ data_xSort: true,
+ data_idConverter: function (id) {
+ return id;
+ },
+ data_names: {},
+ data_classes: {},
+ data_groups: [],
+ data_axes: {},
+ data_type: undefined,
+ data_types: {},
+ data_labels: {},
+ data_order: 'desc',
+ data_regions: {},
+ data_color: undefined,
+ data_colors: {},
+ data_hide: false,
+ data_filter: undefined,
+ data_selection_enabled: false,
+ data_selection_grouped: false,
+ data_selection_isselectable: function () {
+ return true;
+ },
+ data_selection_multiple: true,
+ data_onclick: function () {
+ },
+ data_onmouseover: function () {
+ },
+ data_onmouseout: function () {
+ },
+ data_onselected: function () {
+ },
+ data_onunselected: function () {
+ },
+ data_ondragstart: function () {
+ },
+ data_ondragend: function () {
+ },
+ data_url: undefined,
+ data_json: undefined,
+ data_rows: undefined,
+ data_columns: undefined,
+ data_mimeType: undefined,
+ data_keys: undefined,
+ // configuration for no plot-able data supplied.
+ data_empty_label_text: "",
+ // subchart
+ subchart_show: false,
+ subchart_size_height: 60,
+ subchart_onbrush: function () {
+ },
+ // color
+ color_pattern: [],
+ color_threshold: {},
+ // legend
+ legend_show: true,
+ legend_hide: false,
+ legend_position: 'bottom',
+ legend_inset_anchor: 'top-left',
+ legend_inset_x: 10,
+ legend_inset_y: 0,
+ legend_inset_step: undefined,
+ legend_item_onclick: undefined,
+ legend_item_onmouseover: undefined,
+ legend_item_onmouseout: undefined,
+ legend_equally: false,
+ // axis
+ axis_rotated: false,
+ axis_x_show: true,
+ axis_x_type: 'indexed',
+ axis_x_localtime: true,
+ axis_x_categories: [],
+ axis_x_tick_centered: false,
+ axis_x_tick_format: undefined,
+ axis_x_tick_culling: {},
+ axis_x_tick_culling_max: 10,
+ axis_x_tick_count: undefined,
+ axis_x_tick_fit: true,
+ axis_x_tick_values: null,
+ axis_x_tick_rotate: 0,
+ axis_x_tick_outer: true,
+ axis_x_tick_multiline: true,
+ axis_x_tick_width: null,
+ axis_x_max: undefined,
+ axis_x_min: undefined,
+ axis_x_padding: {},
+ axis_x_height: undefined,
+ axis_x_extent: undefined,
+ axis_x_label: {},
+ axis_y_show: true,
+ axis_y_type: undefined,
+ axis_y_max: undefined,
+ axis_y_min: undefined,
+ axis_y_center: undefined,
+ axis_y_inner: undefined,
+ axis_y_label: {},
+ axis_y_tick_format: undefined,
+ axis_y_tick_outer: true,
+ axis_y_tick_values: null,
+ axis_y_tick_count: undefined,
+ axis_y_tick_time_value: undefined,
+ axis_y_tick_time_interval: undefined,
+ axis_y_padding: {},
+ axis_y_default: undefined,
+ axis_y2_show: false,
+ axis_y2_max: undefined,
+ axis_y2_min: undefined,
+ axis_y2_center: undefined,
+ axis_y2_inner: undefined,
+ axis_y2_label: {},
+ axis_y2_tick_format: undefined,
+ axis_y2_tick_outer: true,
+ axis_y2_tick_values: null,
+ axis_y2_tick_count: undefined,
+ axis_y2_padding: {},
+ axis_y2_default: undefined,
+ // grid
+ grid_x_show: false,
+ grid_x_type: 'tick',
+ grid_x_lines: [],
+ grid_y_show: false,
+ // not used
+ // grid_y_type: 'tick',
+ grid_y_lines: [],
+ grid_y_ticks: 10,
+ grid_focus_show: true,
+ grid_lines_front: true,
+ // point - point of each data
+ point_show: true,
+ point_r: 2.5,
+ point_focus_expand_enabled: true,
+ point_focus_expand_r: undefined,
+ point_select_r: undefined,
+ // line
+ line_connectNull: false,
+ line_step_type: 'step',
+ // bar
+ bar_width: undefined,
+ bar_width_ratio: 0.6,
+ bar_width_max: undefined,
+ bar_zerobased: true,
+ // area
+ area_zerobased: true,
+ // pie
+ pie_label_show: true,
+ pie_label_format: undefined,
+ pie_label_threshold: 0.05,
+ pie_expand: true,
+ // gauge
+ gauge_label_show: true,
+ gauge_label_format: undefined,
+ gauge_expand: true,
+ gauge_min: 0,
+ gauge_max: 100,
+ gauge_units: undefined,
+ gauge_width: undefined,
+ // donut
+ donut_label_show: true,
+ donut_label_format: undefined,
+ donut_label_threshold: 0.05,
+ donut_width: undefined,
+ donut_expand: true,
+ donut_title: "",
+ // region - region to change style
+ regions: [],
+ // tooltip - show when mouseover on each data
+ tooltip_show: true,
+ tooltip_grouped: true,
+ tooltip_format_title: undefined,
+ tooltip_format_name: undefined,
+ tooltip_format_value: undefined,
+ tooltip_position: undefined,
+ tooltip_contents: function (d, defaultTitleFormat, defaultValueFormat, color) {
+ return this.getTooltipContent ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color) : '';
+ },
+ tooltip_init_show: false,
+ tooltip_init_x: 0,
+ tooltip_init_position: {top: '0px', left: '50px'}
+ };
+
+ Object.keys(this.additionalConfig).forEach(function (key) {
+ config[key] = this.additionalConfig[key];
+ }, this);
+
+ return config;
+ };
+ c3_chart_internal_fn.additionalConfig = {};
+
+ c3_chart_internal_fn.loadConfig = function (config) {
+ var this_config = this.config, target, keys, read;
+
+ function find() {
+ var key = keys.shift();
+ // console.log("key =>", key, ", target =>", target);
+ if (key && target && typeof target === 'object' && key in target) {
+ target = target[key];
+ return find();
+ }
+ else if (!key) {
+ return target;
+ }
+ else {
+ return undefined;
+ }
+ }
+
+ Object.keys(this_config).forEach(function (key) {
+ target = config;
+ keys = key.split('_');
+ read = find();
+ // console.log("CONFIG : ", key, read);
+ if (isDefined(read)) {
+ this_config[key] = read;
+ }
+ });
+ };
+
+ c3_chart_internal_fn.getScale = function (min, max, forTimeseries) {
+ return (forTimeseries ? this.d3.time.scale() : this.d3.scale.linear()).range([min, max]);
+ };
+ c3_chart_internal_fn.getX = function (min, max, domain, offset) {
+ var $$ = this,
+ scale = $$.getScale(min, max, $$.isTimeSeries()),
+ _scale = domain ? scale.domain(domain) : scale, key;
+ // Define customized scale if categorized axis
+ if ($$.isCategorized()) {
+ offset = offset || function () {
+ return 0;
+ };
+ scale = function (d, raw) {
+ var v = _scale(d) + offset(d);
+ return raw ? v : Math.ceil(v);
+ };
+ } else {
+ scale = function (d, raw) {
+ var v = _scale(d);
+ return raw ? v : Math.ceil(v);
+ };
+ }
+ // define functions
+ for (key in _scale) {
+ scale[key] = _scale[key];
+ }
+ scale.orgDomain = function () {
+ return _scale.domain();
+ };
+ // define custom domain() for categorized axis
+ if ($$.isCategorized()) {
+ scale.domain = function (domain) {
+ if (!arguments.length) {
+ domain = this.orgDomain();
+ return [domain[0], domain[1] + 1];
+ }
+ _scale.domain(domain);
+ return scale;
+ };
+ }
+ return scale;
+ };
+ c3_chart_internal_fn.getY = function (min, max, domain) {
+ var scale = this.getScale(min, max, this.isTimeSeriesY());
+ if (domain) {
+ scale.domain(domain);
+ }
+ return scale;
+ };
+ c3_chart_internal_fn.getYScale = function (id) {
+ return this.getAxisId(id) === 'y2' ? this.y2 : this.y;
+ };
+ c3_chart_internal_fn.getSubYScale = function (id) {
+ return this.getAxisId(id) === 'y2' ? this.subY2 : this.subY;
+ };
+ c3_chart_internal_fn.updateScales = function () {
+ var $$ = this, config = $$.config,
+ forInit = !$$.x;
+ // update edges
+ $$.xMin = config.axis_rotated ? 1 : 0;
+ $$.xMax = config.axis_rotated ? $$.height : $$.width;
+ $$.yMin = config.axis_rotated ? 0 : $$.height;
+ $$.yMax = config.axis_rotated ? $$.width : 1;
+ $$.subXMin = $$.xMin;
+ $$.subXMax = $$.xMax;
+ $$.subYMin = config.axis_rotated ? 0 : $$.height2;
+ $$.subYMax = config.axis_rotated ? $$.width2 : 1;
+ // update scales
+ $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () {
+ return $$.xAxis.tickOffset();
+ });
+ $$.y = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y_default : $$.y.domain());
+ $$.y2 = $$.getY($$.yMin, $$.yMax, forInit ? config.axis_y2_default : $$.y2.domain());
+ $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) {
+ return d % 1 ? 0 : $$.subXAxis.tickOffset();
+ });
+ $$.subY = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y_default : $$.subY.domain());
+ $$.subY2 = $$.getY($$.subYMin, $$.subYMax, forInit ? config.axis_y2_default : $$.subY2.domain());
+ // update axes
+ $$.xAxisTickFormat = $$.getXAxisTickFormat();
+ $$.xAxisTickValues = $$.getXAxisTickValues();
+ $$.yAxisTickValues = $$.getYAxisTickValues();
+ $$.y2AxisTickValues = $$.getY2AxisTickValues();
+
+ $$.xAxis = $$.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);
+ $$.subXAxis = $$.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);
+ $$.yAxis = $$.getYAxis($$.y, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, config.axis_y_tick_outer);
+ $$.y2Axis = $$.getYAxis($$.y2, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, config.axis_y2_tick_outer);
+
+ // Set initialized scales to brush and zoom
+ if (!forInit) {
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x);
+ }
+ }
+ // update for arc
+ if ($$.updateArc) {
+ $$.updateArc();
+ }
+ };
+
+ c3_chart_internal_fn.getYDomainMin = function (targets) {
+ var $$ = this, config = $$.config,
+ ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),
+ j, k, baseId, idsInGroup, id, hasNegativeValue;
+ if (config.data_groups.length > 0) {
+ hasNegativeValue = $$.hasNegativeValueInTargets(targets);
+ for (j = 0; j < config.data_groups.length; j++) {
+ // Determine baseId
+ idsInGroup = config.data_groups[j].filter(function (id) {
+ return ids.indexOf(id) >= 0;
+ });
+ if (idsInGroup.length === 0) {
+ continue;
+ }
+ baseId = idsInGroup[0];
+ // Consider negative values
+ if (hasNegativeValue && ys[baseId]) {
+ ys[baseId].forEach(function (v, i) {
+ ys[baseId][i] = v < 0 ? v : 0;
+ });
+ }
+ // Compute min
+ for (k = 1; k < idsInGroup.length; k++) {
+ id = idsInGroup[k];
+ if (!ys[id]) {
+ continue;
+ }
+ ys[id].forEach(function (v, i) {
+ if ($$.getAxisId(id) === $$.getAxisId(baseId) && ys[baseId] && !(hasNegativeValue && +v > 0)) {
+ ys[baseId][i] += +v;
+ }
+ });
+ }
+ }
+ }
+ return $$.d3.min(Object.keys(ys).map(function (key) {
+ return $$.d3.min(ys[key]);
+ }));
+ };
+ c3_chart_internal_fn.getYDomainMax = function (targets) {
+ var $$ = this, config = $$.config,
+ ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets),
+ j, k, baseId, idsInGroup, id, hasPositiveValue;
+ if (config.data_groups.length > 0) {
+ hasPositiveValue = $$.hasPositiveValueInTargets(targets);
+ for (j = 0; j < config.data_groups.length; j++) {
+ // Determine baseId
+ idsInGroup = config.data_groups[j].filter(function (id) {
+ return ids.indexOf(id) >= 0;
+ });
+ if (idsInGroup.length === 0) {
+ continue;
+ }
+ baseId = idsInGroup[0];
+ // Consider positive values
+ if (hasPositiveValue && ys[baseId]) {
+ ys[baseId].forEach(function (v, i) {
+ ys[baseId][i] = v > 0 ? v : 0;
+ });
+ }
+ // Compute max
+ for (k = 1; k < idsInGroup.length; k++) {
+ id = idsInGroup[k];
+ if (!ys[id]) {
+ continue;
+ }
+ ys[id].forEach(function (v, i) {
+ if ($$.getAxisId(id) === $$.getAxisId(baseId) && ys[baseId] && !(hasPositiveValue && +v < 0)) {
+ ys[baseId][i] += +v;
+ }
+ });
+ }
+ }
+ }
+ return $$.d3.max(Object.keys(ys).map(function (key) {
+ return $$.d3.max(ys[key]);
+ }));
+ };
+ c3_chart_internal_fn.getYDomain = function (targets, axisId, xDomain) {
+ var $$ = this, config = $$.config,
+ targetsByAxisId = targets.filter(function (t) {
+ return $$.getAxisId(t.id) === axisId;
+ }),
+ yTargets = xDomain ? $$.filterByXDomain(targetsByAxisId, xDomain) : targetsByAxisId,
+ yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min,
+ yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max,
+ yDomainMin = isValue(yMin) ? yMin : $$.getYDomainMin(yTargets),
+ yDomainMax = isValue(yMax) ? yMax : $$.getYDomainMax(yTargets),
+ domainLength, padding, padding_top, padding_bottom,
+ center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center,
+ yDomainAbs, lengths, diff, ratio, isAllPositive, isAllNegative,
+ isZeroBased = ($$.hasType('bar', yTargets) && config.bar_zerobased) || ($$.hasType('area', yTargets) && config.area_zerobased),
+ showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated,
+ showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated;
+
+ if (yDomainMax < yDomainMin) {
+ if (isValue(yMin)) {
+ yDomainMax = yDomainMin + 10; // TODO: introduce axis.y.maxMin
+ } else {
+ yDomainMin = yDomainMax - 10; // TODO: introduce axis.y.minMax
+ }
+ }
+
+ if (yTargets.length === 0) { // use current domain if target of axisId is none
+ return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();
+ }
+ if (isNaN(yDomainMin)) { // set minimum to zero when not number
+ yDomainMin = 0;
+ }
+ if (isNaN(yDomainMax)) { // set maximum to have same value as yDomainMin
+ yDomainMax = yDomainMin;
+ }
+ if (yDomainMin === yDomainMax) {
+ yDomainMin < 0 ? yDomainMax = 0 : yDomainMin = 0;
+ }
+ isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;
+ isAllNegative = yDomainMin <= 0 && yDomainMax <= 0;
+
+ // Cancel zerobased if axis_*_min / axis_*_max specified
+ if ((isValue(yMin) && isAllPositive) || (isValue(yMax) && isAllNegative)) {
+ isZeroBased = false;
+ }
+
+ // Bar/Area chart should be 0-based if all positive|negative
+ if (isZeroBased) {
+ if (isAllPositive) {
+ yDomainMin = 0;
+ }
+ if (isAllNegative) {
+ yDomainMax = 0;
+ }
+ }
+
+ domainLength = Math.abs(yDomainMax - yDomainMin);
+ padding = padding_top = padding_bottom = domainLength * 0.1;
+
+ if (typeof center !== 'undefined') {
+ yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));
+ yDomainMax = center + yDomainAbs;
+ yDomainMin = center - yDomainAbs;
+ }
+ // add padding for data label
+ if (showHorizontalDataLabel) {
+ lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, axisId, 'width');
+ diff = diffDomain($$.y.range());
+ ratio = [lengths[0] / diff, lengths[1] / diff];
+ padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));
+ padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));
+ } else if (showVerticalDataLabel) {
+ lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, axisId, 'height');
+ padding_top += this.convertPixelsToAxisPadding(lengths[1], domainLength);
+ padding_bottom += this.convertPixelsToAxisPadding(lengths[0], domainLength);
+ }
+ if (axisId === 'y' && notEmpty(config.axis_y_padding)) {
+ padding_top = $$.getAxisPadding(config.axis_y_padding, 'top', padding_top, domainLength);
+ padding_bottom = $$.getAxisPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);
+ }
+ if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {
+ padding_top = $$.getAxisPadding(config.axis_y2_padding, 'top', padding_top, domainLength);
+ padding_bottom = $$.getAxisPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);
+ }
+ // Bar/Area chart should be 0-based if all positive|negative
+ if (isZeroBased) {
+ if (isAllPositive) {
+ padding_bottom = yDomainMin;
+ }
+ if (isAllNegative) {
+ padding_top = -yDomainMax;
+ }
+ }
+ return [yDomainMin - padding_bottom, yDomainMax + padding_top];
+ };
+ c3_chart_internal_fn.getXDomainMin = function (targets) {
+ var $$ = this, config = $$.config;
+ return isDefined(config.axis_x_min) ?
+ ($$.isTimeSeries() ? this.parseDate(config.axis_x_min) : config.axis_x_min) :
+ $$.d3.min(targets, function (t) {
+ return $$.d3.min(t.values, function (v) {
+ return v.x;
+ });
+ });
+ };
+ c3_chart_internal_fn.getXDomainMax = function (targets) {
+ var $$ = this, config = $$.config;
+ return isDefined(config.axis_x_max) ?
+ ($$.isTimeSeries() ? this.parseDate(config.axis_x_max) : config.axis_x_max) :
+ $$.d3.max(targets, function (t) {
+ return $$.d3.max(t.values, function (v) {
+ return v.x;
+ });
+ });
+ };
+ c3_chart_internal_fn.getXDomainPadding = function (domain) {
+ var $$ = this, config = $$.config,
+ diff = domain[1] - domain[0],
+ maxDataCount, padding, paddingLeft, paddingRight;
+ if ($$.isCategorized()) {
+ padding = 0;
+ } else if ($$.hasType('bar')) {
+ maxDataCount = $$.getMaxDataCount();
+ padding = maxDataCount > 1 ? (diff / (maxDataCount - 1)) / 2 : 0.5;
+ } else {
+ padding = diff * 0.01;
+ }
+ if (typeof config.axis_x_padding === 'object' && notEmpty(config.axis_x_padding)) {
+ paddingLeft = isValue(config.axis_x_padding.left) ? config.axis_x_padding.left : padding;
+ paddingRight = isValue(config.axis_x_padding.right) ? config.axis_x_padding.right : padding;
+ } else if (typeof config.axis_x_padding === 'number') {
+ paddingLeft = paddingRight = config.axis_x_padding;
+ } else {
+ paddingLeft = paddingRight = padding;
+ }
+ return {left: paddingLeft, right: paddingRight};
+ };
+ c3_chart_internal_fn.getXDomain = function (targets) {
+ var $$ = this,
+ xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)],
+ firstX = xDomain[0], lastX = xDomain[1],
+ padding = $$.getXDomainPadding(xDomain),
+ min = 0, max = 0;
+ // show center of x domain if min and max are the same
+ if ((firstX - lastX) === 0 && !$$.isCategorized()) {
+ if ($$.isTimeSeries()) {
+ firstX = new Date(firstX.getTime() * 0.5);
+ lastX = new Date(lastX.getTime() * 1.5);
+ } else {
+ firstX = firstX === 0 ? 1 : (firstX * 0.5);
+ lastX = lastX === 0 ? -1 : (lastX * 1.5);
+ }
+ }
+ if (firstX || firstX === 0) {
+ min = $$.isTimeSeries() ? new Date(firstX.getTime() - padding.left) : firstX - padding.left;
+ }
+ if (lastX || lastX === 0) {
+ max = $$.isTimeSeries() ? new Date(lastX.getTime() + padding.right) : lastX + padding.right;
+ }
+ return [min, max];
+ };
+ c3_chart_internal_fn.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {
+ var $$ = this, config = $$.config;
+
+ if (withUpdateOrgXDomain) {
+ $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));
+ $$.orgXDomain = $$.x.domain();
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x).updateScaleExtent();
+ }
+ $$.subX.domain($$.x.domain());
+ if ($$.brush) {
+ $$.brush.scale($$.subX);
+ }
+ }
+ if (withUpdateXDomain) {
+ $$.x.domain(domain ? domain : (!$$.brush || $$.brush.empty()) ? $$.orgXDomain : $$.brush.extent());
+ if (config.zoom_enabled) {
+ $$.zoom.scale($$.x).updateScaleExtent();
+ }
+ }
+
+ // Trim domain when too big by zoom mousemove event
+ if (withTrim) {
+ $$.x.domain($$.trimXDomain($$.x.orgDomain()));
+ }
+
+ return $$.x.domain();
+ };
+ c3_chart_internal_fn.trimXDomain = function (domain) {
+ var $$ = this;
+ if (domain[0] <= $$.orgXDomain[0]) {
+ domain[1] = +domain[1] + ($$.orgXDomain[0] - domain[0]);
+ domain[0] = $$.orgXDomain[0];
+ }
+ if ($$.orgXDomain[1] <= domain[1]) {
+ domain[0] = +domain[0] - (domain[1] - $$.orgXDomain[1]);
+ domain[1] = $$.orgXDomain[1];
+ }
+ return domain;
+ };
+
+ c3_chart_internal_fn.isX = function (key) {
+ var $$ = this, config = $$.config;
+ return (config.data_x && key === config.data_x) || (notEmpty(config.data_xs) && hasValue(config.data_xs, key));
+ };
+ c3_chart_internal_fn.isNotX = function (key) {
+ return !this.isX(key);
+ };
+ c3_chart_internal_fn.getXKey = function (id) {
+ var $$ = this, config = $$.config;
+ return config.data_x ? config.data_x : notEmpty(config.data_xs) ? config.data_xs[id] : null;
+ };
+ c3_chart_internal_fn.getXValuesOfXKey = function (key, targets) {
+ var $$ = this,
+ xValues, ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];
+ ids.forEach(function (id) {
+ if ($$.getXKey(id) === key) {
+ xValues = $$.data.xs[id];
+ }
+ });
+ return xValues;
+ };
+ c3_chart_internal_fn.getIndexByX = function (x) {
+ var $$ = this,
+ data = $$.filterByX($$.data.targets, x);
+ return data.length ? data[0].index : null;
+ };
+ c3_chart_internal_fn.getXValue = function (id, i) {
+ var $$ = this;
+ return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i]) ? $$.data.xs[id][i] : i;
+ };
+ c3_chart_internal_fn.getOtherTargetXs = function () {
+ var $$ = this,
+ idsForX = Object.keys($$.data.xs);
+ return idsForX.length ? $$.data.xs[idsForX[0]] : null;
+ };
+ c3_chart_internal_fn.getOtherTargetX = function (index) {
+ var xs = this.getOtherTargetXs();
+ return xs && index < xs.length ? xs[index] : null;
+ };
+ c3_chart_internal_fn.addXs = function (xs) {
+ var $$ = this;
+ Object.keys(xs).forEach(function (id) {
+ $$.config.data_xs[id] = xs[id];
+ });
+ };
+ c3_chart_internal_fn.hasMultipleX = function (xs) {
+ return this.d3.set(Object.keys(xs).map(function (id) {
+ return xs[id];
+ })).size() > 1;
+ };
+ c3_chart_internal_fn.isMultipleX = function () {
+ return notEmpty(this.config.data_xs) || !this.config.data_xSort || this.hasType('scatter');
+ };
+ c3_chart_internal_fn.addName = function (data) {
+ var $$ = this, name;
+ if (data) {
+ name = $$.config.data_names[data.id];
+ data.name = name ? name : data.id;
+ }
+ return data;
+ };
+ c3_chart_internal_fn.getValueOnIndex = function (values, index) {
+ var valueOnIndex = values.filter(function (v) {
+ return v.index === index;
+ });
+ return valueOnIndex.length ? valueOnIndex[0] : null;
+ };
+ c3_chart_internal_fn.updateTargetX = function (targets, x) {
+ var $$ = this;
+ targets.forEach(function (t) {
+ t.values.forEach(function (v, i) {
+ v.x = $$.generateTargetX(x[i], t.id, i);
+ });
+ $$.data.xs[t.id] = x;
+ });
+ };
+ c3_chart_internal_fn.updateTargetXs = function (targets, xs) {
+ var $$ = this;
+ targets.forEach(function (t) {
+ if (xs[t.id]) {
+ $$.updateTargetX([t], xs[t.id]);
+ }
+ });
+ };
+ c3_chart_internal_fn.generateTargetX = function (rawX, id, index) {
+ var $$ = this, x;
+ if ($$.isTimeSeries()) {
+ x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));
+ }
+ else if ($$.isCustomX() && !$$.isCategorized()) {
+ x = isValue(rawX) ? +rawX : $$.getXValue(id, index);
+ }
+ else {
+ x = index;
+ }
+ return x;
+ };
+ c3_chart_internal_fn.cloneTarget = function (target) {
+ return {
+ id: target.id,
+ id_org: target.id_org,
+ values: target.values.map(function (d) {
+ return {x: d.x, value: d.value, id: d.id};
+ })
+ };
+ };
+ c3_chart_internal_fn.updateXs = function () {
+ var $$ = this;
+ if ($$.data.targets.length) {
+ $$.xs = [];
+ $$.data.targets[0].values.forEach(function (v) {
+ $$.xs[v.index] = v.x;
+ });
+ }
+ };
+ c3_chart_internal_fn.getPrevX = function (i) {
+ var x = this.xs[i - 1];
+ return typeof x !== 'undefined' ? x : null;
+ };
+ c3_chart_internal_fn.getNextX = function (i) {
+ var x = this.xs[i + 1];
+ return typeof x !== 'undefined' ? x : null;
+ };
+ c3_chart_internal_fn.getMaxDataCount = function () {
+ var $$ = this;
+ return $$.d3.max($$.data.targets, function (t) {
+ return t.values.length;
+ });
+ };
+ c3_chart_internal_fn.getMaxDataCountTarget = function (targets) {
+ var length = targets.length, max = 0, maxTarget;
+ if (length > 1) {
+ targets.forEach(function (t) {
+ if (t.values.length > max) {
+ maxTarget = t;
+ max = t.values.length;
+ }
+ });
+ } else {
+ maxTarget = length ? targets[0] : null;
+ }
+ return maxTarget;
+ };
+ c3_chart_internal_fn.getEdgeX = function (targets) {
+ var $$ = this;
+ return !targets.length ? [0, 0] : [
+ $$.d3.min(targets, function (t) {
+ return t.values[0].x;
+ }),
+ $$.d3.max(targets, function (t) {
+ return t.values[t.values.length - 1].x;
+ })
+ ];
+ };
+ c3_chart_internal_fn.mapToIds = function (targets) {
+ return targets.map(function (d) {
+ return d.id;
+ });
+ };
+ c3_chart_internal_fn.mapToTargetIds = function (ids) {
+ var $$ = this;
+ return ids ? (isString(ids) ? [ids] : ids) : $$.mapToIds($$.data.targets);
+ };
+ c3_chart_internal_fn.hasTarget = function (targets, id) {
+ var ids = this.mapToIds(targets), i;
+ for (i = 0; i < ids.length; i++) {
+ if (ids[i] === id) {
+ return true;
+ }
+ }
+ return false;
+ };
+ c3_chart_internal_fn.isTargetToShow = function (targetId) {
+ return this.hiddenTargetIds.indexOf(targetId) < 0;
+ };
+ c3_chart_internal_fn.isLegendToShow = function (targetId) {
+ return this.hiddenLegendIds.indexOf(targetId) < 0;
+ };
+ c3_chart_internal_fn.filterTargetsToShow = function (targets) {
+ var $$ = this;
+ return targets.filter(function (t) {
+ return $$.isTargetToShow(t.id);
+ });
+ };
+ c3_chart_internal_fn.mapTargetsToUniqueXs = function (targets) {
+ var $$ = this;
+ var xs = $$.d3.set($$.d3.merge(targets.map(function (t) {
+ return t.values.map(function (v) {
+ return +v.x;
+ });
+ }))).values();
+ return $$.isTimeSeries() ? xs.map(function (x) {
+ return new Date(+x);
+ }) : xs.map(function (x) {
+ return +x;
+ });
+ };
+ c3_chart_internal_fn.addHiddenTargetIds = function (targetIds) {
+ this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds);
+ };
+ c3_chart_internal_fn.removeHiddenTargetIds = function (targetIds) {
+ this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+ c3_chart_internal_fn.addHiddenLegendIds = function (targetIds) {
+ this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds);
+ };
+ c3_chart_internal_fn.removeHiddenLegendIds = function (targetIds) {
+ this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+ c3_chart_internal_fn.getValuesAsIdKeyed = function (targets) {
+ var ys = {};
+ targets.forEach(function (t) {
+ ys[t.id] = [];
+ t.values.forEach(function (v) {
+ ys[t.id].push(v.value);
+ });
+ });
+ return ys;
+ };
+ c3_chart_internal_fn.checkValueInTargets = function (targets, checker) {
+ var ids = Object.keys(targets), i, j, values;
+ for (i = 0; i < ids.length; i++) {
+ values = targets[ids[i]].values;
+ for (j = 0; j < values.length; j++) {
+ if (checker(values[j].value)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ c3_chart_internal_fn.hasNegativeValueInTargets = function (targets) {
+ return this.checkValueInTargets(targets, function (v) {
+ return v < 0;
+ });
+ };
+ c3_chart_internal_fn.hasPositiveValueInTargets = function (targets) {
+ return this.checkValueInTargets(targets, function (v) {
+ return v > 0;
+ });
+ };
+ c3_chart_internal_fn.isOrderDesc = function () {
+ var config = this.config;
+ return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'desc';
+ };
+ c3_chart_internal_fn.isOrderAsc = function () {
+ var config = this.config;
+ return typeof(config.data_order) === 'string' && config.data_order.toLowerCase() === 'asc';
+ };
+ c3_chart_internal_fn.orderTargets = function (targets) {
+ var $$ = this, config = $$.config, orderAsc = $$.isOrderAsc(), orderDesc = $$.isOrderDesc();
+ if (orderAsc || orderDesc) {
+ targets.sort(function (t1, t2) {
+ var reducer = function (p, c) {
+ return p + Math.abs(c.value);
+ };
+ var t1Sum = t1.values.reduce(reducer, 0),
+ t2Sum = t2.values.reduce(reducer, 0);
+ return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;
+ });
+ } else if (isFunction(config.data_order)) {
+ targets.sort(config.data_order);
+ } // TODO: accept name array for order
+ return targets;
+ };
+ c3_chart_internal_fn.filterByX = function (targets, x) {
+ return this.d3.merge(targets.map(function (t) {
+ return t.values;
+ })).filter(function (v) {
+ return v.x - x === 0;
+ });
+ };
+ c3_chart_internal_fn.filterRemoveNull = function (data) {
+ return data.filter(function (d) {
+ return isValue(d.value);
+ });
+ };
+ c3_chart_internal_fn.filterByXDomain = function (targets, xDomain) {
+ return targets.map(function (t) {
+ return {
+ id: t.id,
+ id_org: t.id_org,
+ values: t.values.filter(function (v) {
+ return xDomain[0] <= v.x && v.x <= xDomain[1];
+ })
+ };
+ });
+ };
+ c3_chart_internal_fn.hasDataLabel = function () {
+ var config = this.config;
+ if (typeof config.data_labels === 'boolean' && config.data_labels) {
+ return true;
+ } else if (typeof config.data_labels === 'object' && notEmpty(config.data_labels)) {
+ return true;
+ }
+ return false;
+ };
+ c3_chart_internal_fn.getDataLabelLength = function (min, max, axisId, key) {
+ var $$ = this,
+ lengths = [0, 0], paddingCoef = 1.3;
+ $$.selectChart.select('svg').selectAll('.dummy')
+ .data([min, max])
+ .enter().append('text')
+ .text(function (d) {
+ return $$.formatByAxisId(axisId)(d);
+ })
+ .each(function (d, i) {
+ lengths[i] = this.getBoundingClientRect()[key] * paddingCoef;
+ })
+ .remove();
+ return lengths;
+ };
+ c3_chart_internal_fn.isNoneArc = function (d) {
+ return this.hasTarget(this.data.targets, d.id);
+ },
+ c3_chart_internal_fn.isArc = function (d) {
+ return 'data' in d && this.hasTarget(this.data.targets, d.data.id);
+ };
+ c3_chart_internal_fn.findSameXOfValues = function (values, index) {
+ var i, targetX = values[index].x, sames = [];
+ for (i = index - 1; i >= 0; i--) {
+ if (targetX !== values[i].x) {
+ break;
+ }
+ sames.push(values[i]);
+ }
+ for (i = index; i < values.length; i++) {
+ if (targetX !== values[i].x) {
+ break;
+ }
+ sames.push(values[i]);
+ }
+ return sames;
+ };
+
+ c3_chart_internal_fn.findClosestFromTargets = function (targets, pos) {
+ var $$ = this, candidates;
+
+ // map to array of closest points of each target
+ candidates = targets.map(function (target) {
+ return $$.findClosest(target.values, pos);
+ });
+
+ // decide closest point and return
+ return $$.findClosest(candidates, pos);
+ };
+ c3_chart_internal_fn.findClosest = function (values, pos) {
+ var $$ = this, minDist = 100, closest;
+
+ // find mouseovering bar
+ values.filter(function (v) {
+ return v && $$.isBarType(v.id);
+ }).forEach(function (v) {
+ var shape = $$.main.select('.' + CLASS.bars + $$.getTargetSelectorSuffix(v.id) + ' .' + CLASS.bar + '-' + v.index).node();
+ if (!closest && $$.isWithinBar(shape)) {
+ closest = v;
+ }
+ });
+
+ // find closest point from non-bar
+ values.filter(function (v) {
+ return v && !$$.isBarType(v.id);
+ }).forEach(function (v) {
+ var d = $$.dist(v, pos);
+ if (d < minDist) {
+ minDist = d;
+ closest = v;
+ }
+ });
+
+ return closest;
+ };
+ c3_chart_internal_fn.dist = function (data, pos) {
+ var $$ = this, config = $$.config,
+ xIndex = config.axis_rotated ? 1 : 0,
+ yIndex = config.axis_rotated ? 0 : 1,
+ y = $$.circleY(data, data.index),
+ x = $$.x(data.x);
+ return Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2);
+ };
+ c3_chart_internal_fn.convertValuesToStep = function (values) {
+ var converted = [].concat(values), i;
+
+ if (!this.isCategorized()) {
+ return values;
+ }
+
+ for (i = values.length + 1; 0 < i; i--) {
+ converted[i] = converted[i - 1];
+ }
+
+ converted[0] = {
+ x: converted[0].x - 1,
+ value: converted[0].value,
+ id: converted[0].id
+ };
+ converted[values.length + 1] = {
+ x: converted[values.length].x + 1,
+ value: converted[values.length].value,
+ id: converted[values.length].id
+ };
+
+ return converted;
+ };
+ c3_chart_internal_fn.updateDataAttributes = function (name, attrs) {
+ var $$ = this, config = $$.config, current = config['data_' + name];
+ if (typeof attrs === 'undefined') {
+ return current;
+ }
+ Object.keys(attrs).forEach(function (id) {
+ current[id] = attrs[id];
+ });
+ $$.redraw({withLegend: true});
+ return current;
+ };
+
+ c3_chart_internal_fn.convertUrlToData = function (url, mimeType, keys, done) {
+ var $$ = this, type = mimeType ? mimeType : 'csv';
+ $$.d3.xhr(url, function (error, data) {
+ var d;
+ if (type === 'json') {
+ d = $$.convertJsonToData(JSON.parse(data.response), keys);
+ } else if (type === 'tsv') {
+ d = $$.convertTsvToData(data.response);
+ } else {
+ d = $$.convertCsvToData(data.response);
+ }
+ done.call($$, d);
+ });
+ };
+ c3_chart_internal_fn.convertXsvToData = function (xsv, parser) {
+ var rows = parser.parseRows(xsv), d;
+ if (rows.length === 1) {
+ d = [{}];
+ rows[0].forEach(function (id) {
+ d[0][id] = null;
+ });
+ } else {
+ d = parser.parse(xsv);
+ }
+ return d;
+ };
+ c3_chart_internal_fn.convertCsvToData = function (csv) {
+ return this.convertXsvToData(csv, this.d3.csv);
+ };
+ c3_chart_internal_fn.convertTsvToData = function (tsv) {
+ return this.convertXsvToData(tsv, this.d3.tsv);
+ };
+ c3_chart_internal_fn.convertJsonToData = function (json, keys) {
+ var $$ = this,
+ new_rows = [], targetKeys, data;
+ if (keys) { // when keys specified, json would be an array that includes objects
+ targetKeys = keys.value;
+ if (keys.x) {
+ targetKeys.push(keys.x);
+ $$.config.data_x = keys.x;
+ }
+ new_rows.push(targetKeys);
+ json.forEach(function (o) {
+ var new_row = [];
+ targetKeys.forEach(function (key) {
+ // convert undefined to null because undefined data will be removed in convertDataToTargets()
+ var v = isUndefined(o[key]) ? null : o[key];
+ new_row.push(v);
+ });
+ new_rows.push(new_row);
+ });
+ data = $$.convertRowsToData(new_rows);
+ } else {
+ Object.keys(json).forEach(function (key) {
+ new_rows.push([key].concat(json[key]));
+ });
+ data = $$.convertColumnsToData(new_rows);
+ }
+ return data;
+ };
+ c3_chart_internal_fn.convertRowsToData = function (rows) {
+ var keys = rows[0], new_row = {}, new_rows = [], i, j;
+ for (i = 1; i < rows.length; i++) {
+ new_row = {};
+ for (j = 0; j < rows[i].length; j++) {
+ if (isUndefined(rows[i][j])) {
+ throw new Error("Source data is missing a component at (" + i + "," + j + ")!");
+ }
+ new_row[keys[j]] = rows[i][j];
+ }
+ new_rows.push(new_row);
+ }
+ return new_rows;
+ };
+ c3_chart_internal_fn.convertColumnsToData = function (columns) {
+ var new_rows = [], i, j, key;
+ for (i = 0; i < columns.length; i++) {
+ key = columns[i][0];
+ for (j = 1; j < columns[i].length; j++) {
+ if (isUndefined(new_rows[j - 1])) {
+ new_rows[j - 1] = {};
+ }
+ if (isUndefined(columns[i][j])) {
+ throw new Error("Source data is missing a component at (" + i + "," + j + ")!");
+ }
+ new_rows[j - 1][key] = columns[i][j];
+ }
+ }
+ return new_rows;
+ };
+ c3_chart_internal_fn.convertDataToTargets = function (data, appendXs) {
+ var $$ = this, config = $$.config,
+ ids = $$.d3.keys(data[0]).filter($$.isNotX, $$),
+ xs = $$.d3.keys(data[0]).filter($$.isX, $$),
+ targets;
+
+ // save x for update data by load when custom x and c3.x API
+ ids.forEach(function (id) {
+ var xKey = $$.getXKey(id);
+
+ if ($$.isCustomX() || $$.isTimeSeries()) {
+ // if included in input data
+ if (xs.indexOf(xKey) >= 0) {
+ $$.data.xs[id] = (appendXs && $$.data.xs[id] ? $$.data.xs[id] : []).concat(
+ data.map(function (d) {
+ return d[xKey];
+ })
+ .filter(isValue)
+ .map(function (rawX, i) {
+ return $$.generateTargetX(rawX, id, i);
+ })
+ );
+ }
+ // if not included in input data, find from preloaded data of other id's x
+ else if (config.data_x) {
+ $$.data.xs[id] = $$.getOtherTargetXs();
+ }
+ // if not included in input data, find from preloaded data
+ else if (notEmpty(config.data_xs)) {
+ $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);
+ }
+ // MEMO: if no x included, use same x of current will be used
+ } else {
+ $$.data.xs[id] = data.map(function (d, i) {
+ return i;
+ });
+ }
+ });
+
+
+ // check x is defined
+ ids.forEach(function (id) {
+ if (!$$.data.xs[id]) {
+ throw new Error('x is not defined for id = "' + id + '".');
+ }
+ });
+
+ // convert to target
+ targets = ids.map(function (id, index) {
+ var convertedId = config.data_idConverter(id);
+ return {
+ id: convertedId,
+ id_org: id,
+ values: data.map(function (d, i) {
+ var xKey = $$.getXKey(id), rawX = d[xKey], x = $$.generateTargetX(rawX, id, i);
+ // use x as categories if custom x and categorized
+ if ($$.isCustomX() && $$.isCategorized() && index === 0 && rawX) {
+ if (i === 0) {
+ config.axis_x_categories = [];
+ }
+ config.axis_x_categories.push(rawX);
+ }
+ // mark as x = undefined if value is undefined and filter to remove after mapped
+ if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {
+ x = undefined;
+ }
+ return {x: x, value: d[id] !== null && !isNaN(d[id]) ? +d[id] : null, id: convertedId};
+ }).filter(function (v) {
+ return isDefined(v.x);
+ })
+ };
+ });
+
+ // finish targets
+ targets.forEach(function (t) {
+ var i;
+ // sort values by its x
+ if (config.data_xSort) {
+ t.values = t.values.sort(function (v1, v2) {
+ var x1 = v1.x || v1.x === 0 ? v1.x : Infinity,
+ x2 = v2.x || v2.x === 0 ? v2.x : Infinity;
+ return x1 - x2;
+ });
+ }
+ // indexing each value
+ i = 0;
+ t.values.forEach(function (v) {
+ v.index = i++;
+ });
+ // this needs to be sorted because its index and value.index is identical
+ $$.data.xs[t.id].sort(function (v1, v2) {
+ return v1 - v2;
+ });
+ });
+
+ // set target types
+ if (config.data_type) {
+ $$.setTargetType($$.mapToIds(targets).filter(function (id) {
+ return !(id in config.data_types);
+ }), config.data_type);
+ }
+
+ // cache as original id keyed
+ targets.forEach(function (d) {
+ $$.addCache(d.id_org, d);
+ });
+
+ return targets;
+ };
+
+ c3_chart_internal_fn.load = function (targets, args) {
+ var $$ = this;
+ if (targets) {
+ // filter loading targets if needed
+ if (args.filter) {
+ targets = targets.filter(args.filter);
+ }
+ // set type if args.types || args.type specified
+ if (args.type || args.types) {
+ targets.forEach(function (t) {
+ $$.setTargetType(t.id, args.types ? args.types[t.id] : args.type);
+ });
+ }
+ // Update/Add data
+ $$.data.targets.forEach(function (d) {
+ for (var i = 0; i < targets.length; i++) {
+ if (d.id === targets[i].id) {
+ d.values = targets[i].values;
+ targets.splice(i, 1);
+ break;
+ }
+ }
+ });
+ $$.data.targets = $$.data.targets.concat(targets); // add remained
+ }
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Redraw with new targets
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+
+ if (args.done) {
+ args.done();
+ }
+ };
+ c3_chart_internal_fn.loadFromArgs = function (args) {
+ var $$ = this;
+ if (args.data) {
+ $$.load($$.convertDataToTargets(args.data), args);
+ }
+ else if (args.url) {
+ $$.convertUrlToData(args.url, args.mimeType, args.keys, function (data) {
+ $$.load($$.convertDataToTargets(data), args);
+ });
+ }
+ else if (args.json) {
+ $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);
+ }
+ else if (args.rows) {
+ $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);
+ }
+ else if (args.columns) {
+ $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);
+ }
+ else {
+ $$.load(null, args);
+ }
+ };
+ c3_chart_internal_fn.unload = function (targetIds, done) {
+ var $$ = this;
+ if (!done) {
+ done = function () {
+ };
+ }
+ // filter existing target
+ targetIds = targetIds.filter(function (id) {
+ return $$.hasTarget($$.data.targets, id);
+ });
+ // If no target, call done and return
+ if (!targetIds || targetIds.length === 0) {
+ done();
+ return;
+ }
+ $$.svg.selectAll(targetIds.map(function (id) {
+ return $$.selectorTarget(id);
+ }))
+ .transition()
+ .style('opacity', 0)
+ .remove()
+ .call($$.endall, done);
+ targetIds.forEach(function (id) {
+ // Reset fadein for future load
+ $$.withoutFadeIn[id] = false;
+ // Remove target's elements
+ if ($$.legend) {
+ $$.legend.selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id)).remove();
+ }
+ // Remove target
+ $$.data.targets = $$.data.targets.filter(function (t) {
+ return t.id !== id;
+ });
+ });
+ };
+
+ c3_chart_internal_fn.categoryName = function (i) {
+ var config = this.config;
+ return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;
+ };
+
+ c3_chart_internal_fn.initEventRect = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.eventRects)
+ .style('fill-opacity', 0);
+ };
+ c3_chart_internal_fn.redrawEventRect = function () {
+ var $$ = this, config = $$.config,
+ eventRectUpdate, maxDataCountTarget,
+ isMultipleX = $$.isMultipleX();
+
+ // rects for mouseover
+ var eventRects = $$.main.select('.' + CLASS.eventRects)
+ .style('cursor', config.zoom_enabled ? config.axis_rotated ? 'ns-resize' : 'ew-resize' : null)
+ .classed(CLASS.eventRectsMultiple, isMultipleX)
+ .classed(CLASS.eventRectsSingle, !isMultipleX);
+
+ // clear old rects
+ eventRects.selectAll('.' + CLASS.eventRect).remove();
+
+ // open as public variable
+ $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);
+
+ if (isMultipleX) {
+ eventRectUpdate = $$.eventRect.data([0]);
+ // enter : only one rect will be added
+ $$.generateEventRectsForMultipleXs(eventRectUpdate.enter());
+ // update
+ $$.updateEventRect(eventRectUpdate);
+ // exit : not needed because always only one rect exists
+ }
+ else {
+ // Set data and update $$.eventRect
+ maxDataCountTarget = $$.getMaxDataCountTarget($$.data.targets);
+ eventRects.datum(maxDataCountTarget ? maxDataCountTarget.values : []);
+ $$.eventRect = eventRects.selectAll('.' + CLASS.eventRect);
+ eventRectUpdate = $$.eventRect.data(function (d) {
+ return d;
+ });
+ // enter
+ $$.generateEventRectsForSingleX(eventRectUpdate.enter());
+ // update
+ $$.updateEventRect(eventRectUpdate);
+ // exit
+ eventRectUpdate.exit().remove();
+ }
+ };
+ c3_chart_internal_fn.updateEventRect = function (eventRectUpdate) {
+ var $$ = this, config = $$.config,
+ x, y, w, h, rectW, rectX;
+
+ // set update selection if null
+ eventRectUpdate = eventRectUpdate || $$.eventRect.data(function (d) {
+ return d;
+ });
+
+ if ($$.isMultipleX()) {
+ // TODO: rotated not supported yet
+ x = 0;
+ y = 0;
+ w = $$.width;
+ h = $$.height;
+ }
+ else {
+ if (($$.isCustomX() || $$.isTimeSeries()) && !$$.isCategorized()) {
+
+ // update index for x that is used by prevX and nextX
+ $$.updateXs();
+
+ rectW = function (d) {
+ var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index);
+
+ // if there this is a single data point make the eventRect full width (or height)
+ if (prevX === null && nextX === null) {
+ return config.axis_rotated ? $$.height : $$.width;
+ }
+
+ if (prevX === null) {
+ prevX = $$.x.domain()[0];
+ }
+ if (nextX === null) {
+ nextX = $$.x.domain()[1];
+ }
+
+ return Math.max(0, ($$.x(nextX) - $$.x(prevX)) / 2);
+ };
+ rectX = function (d) {
+ var prevX = $$.getPrevX(d.index), nextX = $$.getNextX(d.index),
+ thisX = $$.data.xs[d.id][d.index];
+
+ // if there this is a single data point position the eventRect at 0
+ if (prevX === null && nextX === null) {
+ return 0;
+ }
+
+ if (prevX === null) {
+ prevX = $$.x.domain()[0];
+ }
+
+ return ($$.x(thisX) + $$.x(prevX)) / 2;
+ };
+ } else {
+ rectW = $$.getEventRectWidth();
+ rectX = function (d) {
+ return $$.x(d.x) - (rectW / 2);
+ };
+ }
+ x = config.axis_rotated ? 0 : rectX;
+ y = config.axis_rotated ? rectX : 0;
+ w = config.axis_rotated ? $$.width : rectW;
+ h = config.axis_rotated ? rectW : $$.height;
+ }
+
+ eventRectUpdate
+ .attr('class', $$.classEvent.bind($$))
+ .attr("x", x)
+ .attr("y", y)
+ .attr("width", w)
+ .attr("height", h);
+ };
+ c3_chart_internal_fn.generateEventRectsForSingleX = function (eventRectEnter) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ eventRectEnter.append("rect")
+ .attr("class", $$.classEvent.bind($$))
+ .style("cursor", config.data_selection_enabled && config.data_selection_grouped ? "pointer" : null)
+ .on('mouseover', function (d) {
+ var index = d.index, selectedData, newData;
+
+ if ($$.dragging || $$.flowing) {
+ return;
+ } // do nothing while dragging/flowing
+ if ($$.hasArcType()) {
+ return;
+ }
+
+ selectedData = $$.data.targets.map(function (t) {
+ return $$.addName($$.getValueOnIndex(t.values, index));
+ });
+
+ // Sort selectedData as names order
+ newData = [];
+ Object.keys(config.data_names).forEach(function (id) {
+ for (var j = 0; j < selectedData.length; j++) {
+ if (selectedData[j] && selectedData[j].id === id) {
+ newData.push(selectedData[j]);
+ selectedData.shift(j);
+ break;
+ }
+ }
+ });
+ selectedData = newData.concat(selectedData); // Add remained
+
+ // Expand shapes for selection
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(index, null, true);
+ }
+ $$.expandBars(index, null, true);
+
+ // Call event handler
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ config.data_onmouseover.call($$.api, d);
+ });
+ })
+ .on('mouseout', function (d) {
+ var index = d.index;
+ if ($$.hasArcType()) {
+ return;
+ }
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ // Undo expanded shapes
+ $$.unexpandCircles();
+ $$.unexpandBars();
+ // Call event handler
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ config.data_onmouseout.call($$.api, d);
+ });
+ })
+ .on('mousemove', function (d) {
+ var selectedData, index = d.index,
+ eventRect = $$.svg.select('.' + CLASS.eventRect + '-' + index);
+
+ if ($$.dragging || $$.flowing) {
+ return;
+ } // do nothing while dragging/flowing
+ if ($$.hasArcType()) {
+ return;
+ }
+
+ if ($$.isStepType(d) && $$.config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {
+ index -= 1;
+ }
+
+ // Show tooltip
+ selectedData = $$.filterTargetsToShow($$.data.targets).map(function (t) {
+ return $$.addName($$.getValueOnIndex(t.values, index));
+ });
+
+ if (config.tooltip_grouped) {
+ $$.showTooltip(selectedData, this);
+ $$.showXGridFocus(selectedData);
+ }
+
+ if (config.tooltip_grouped && (!config.data_selection_enabled || config.data_selection_grouped)) {
+ return;
+ }
+
+ $$.main.selectAll('.' + CLASS.shape + '-' + index)
+ .each(function () {
+ d3.select(this).classed(CLASS.EXPANDED, true);
+ if (config.data_selection_enabled) {
+ eventRect.style('cursor', config.data_selection_grouped ? 'pointer' : null);
+ }
+ if (!config.tooltip_grouped) {
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ if (!config.data_selection_grouped) {
+ $$.unexpandCircles(index);
+ $$.unexpandBars(index);
+ }
+ }
+ })
+ .filter(function (d) {
+ return $$.isWithinShape(this, d);
+ })
+ .each(function (d) {
+ if (config.data_selection_enabled && (config.data_selection_grouped || config.data_selection_isselectable(d))) {
+ eventRect.style('cursor', 'pointer');
+ }
+ if (!config.tooltip_grouped) {
+ $$.showTooltip([d], this);
+ $$.showXGridFocus([d]);
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(index, d.id, true);
+ }
+ $$.expandBars(index, d.id, true);
+ }
+ });
+ })
+ .on('click', function (d) {
+ var index = d.index;
+ if ($$.hasArcType() || !$$.toggleShape) {
+ return;
+ }
+ if ($$.cancelClick) {
+ $$.cancelClick = false;
+ return;
+ }
+ if ($$.isStepType(d) && config.line_step_type === 'step-after' && d3.mouse(this)[0] < $$.x($$.getXValue(d.id, index))) {
+ index -= 1;
+ }
+ $$.main.selectAll('.' + CLASS.shape + '-' + index).each(function (d) {
+ if (config.data_selection_grouped || $$.isWithinShape(this, d)) {
+ $$.toggleShape(this, d, index);
+ $$.config.data_onclick.call($$.api, d, this);
+ }
+ });
+ })
+ .call(
+ d3.behavior.drag().origin(Object)
+ .on('drag', function () {
+ $$.drag(d3.mouse(this));
+ })
+ .on('dragstart', function () {
+ $$.dragstart(d3.mouse(this));
+ })
+ .on('dragend', function () {
+ $$.dragend();
+ })
+ );
+ };
+
+ c3_chart_internal_fn.generateEventRectsForMultipleXs = function (eventRectEnter) {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+
+ function mouseout() {
+ $$.svg.select('.' + CLASS.eventRect).style('cursor', null);
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+ $$.unexpandCircles();
+ $$.unexpandBars();
+ }
+
+ eventRectEnter.append('rect')
+ .attr('x', 0)
+ .attr('y', 0)
+ .attr('width', $$.width)
+ .attr('height', $$.height)
+ .attr('class', CLASS.eventRect)
+ .on('mouseout', function () {
+ if ($$.hasArcType()) {
+ return;
+ }
+ mouseout();
+ })
+ .on('mousemove', function () {
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ var mouse, closest, sameXData, selectedData;
+
+ if ($$.dragging) {
+ return;
+ } // do nothing when dragging
+ if ($$.hasArcType(targetsToShow)) {
+ return;
+ }
+
+ mouse = d3.mouse(this);
+ closest = $$.findClosestFromTargets(targetsToShow, mouse);
+
+ if ($$.mouseover && (!closest || closest.id !== $$.mouseover.id)) {
+ config.data_onmouseout.call($$.api, $$.mouseover);
+ $$.mouseover = undefined;
+ }
+
+ if (!closest) {
+ mouseout();
+ return;
+ }
+
+ if ($$.isScatterType(closest) || !config.tooltip_grouped) {
+ sameXData = [closest];
+ } else {
+ sameXData = $$.filterByX(targetsToShow, closest.x);
+ }
+
+ // show tooltip when cursor is close to some point
+ selectedData = sameXData.map(function (d) {
+ return $$.addName(d);
+ });
+ $$.showTooltip(selectedData, this);
+
+ // expand points
+ if (config.point_focus_expand_enabled) {
+ $$.expandCircles(closest.index, closest.id, true);
+ }
+ $$.expandBars(closest.index, closest.id, true);
+
+ // Show xgrid focus line
+ $$.showXGridFocus(selectedData);
+
+ // Show cursor as pointer if point is close to mouse position
+ if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {
+ $$.svg.select('.' + CLASS.eventRect).style('cursor', 'pointer');
+ if (!$$.mouseover) {
+ config.data_onmouseover.call($$.api, closest);
+ $$.mouseover = closest;
+ }
+ }
+ })
+ .on('click', function () {
+ var targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ var mouse, closest;
+
+ if ($$.hasArcType(targetsToShow)) {
+ return;
+ }
+
+ mouse = d3.mouse(this);
+ closest = $$.findClosestFromTargets(targetsToShow, mouse);
+
+ if (!closest) {
+ return;
+ }
+
+ // select if selection enabled
+ if ($$.isBarType(closest.id) || $$.dist(closest, mouse) < 100) {
+ $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(closest.id)).select('.' + CLASS.shape + '-' + closest.index).each(function () {
+ if (config.data_selection_grouped || $$.isWithinShape(this, closest)) {
+ $$.toggleShape(this, closest, closest.index);
+ $$.config.data_onclick.call($$.api, closest, this);
+ }
+ });
+ }
+ })
+ .call(
+ d3.behavior.drag().origin(Object)
+ .on('drag', function () {
+ $$.drag(d3.mouse(this));
+ })
+ .on('dragstart', function () {
+ $$.dragstart(d3.mouse(this));
+ })
+ .on('dragend', function () {
+ $$.dragend();
+ })
+ );
+ };
+ c3_chart_internal_fn.dispatchEvent = function (type, index, mouse) {
+ var $$ = this,
+ selector = '.' + CLASS.eventRect + (!$$.isMultipleX() ? '-' + index : ''),
+ eventRect = $$.main.select(selector).node(),
+ box = eventRect.getBoundingClientRect(),
+ x = box.left + (mouse ? mouse[0] : 0),
+ y = box.top + (mouse ? mouse[1] : 0),
+ event = document.createEvent("MouseEvents");
+
+ event.initMouseEvent(type, true, true, window, 0, x, y, x, y,
+ false, false, false, false, 0, null);
+ eventRect.dispatchEvent(event);
+ };
+
+ c3_chart_internal_fn.getCurrentWidth = function () {
+ var $$ = this, config = $$.config;
+ return config.size_width ? config.size_width : $$.getParentWidth();
+ };
+ c3_chart_internal_fn.getCurrentHeight = function () {
+ var $$ = this, config = $$.config,
+ h = config.size_height ? config.size_height : $$.getParentHeight();
+ return h > 0 ? h : 320 / ($$.hasType('gauge') ? 2 : 1);
+ };
+ c3_chart_internal_fn.getCurrentPaddingTop = function () {
+ var config = this.config;
+ return isValue(config.padding_top) ? config.padding_top : 0;
+ };
+ c3_chart_internal_fn.getCurrentPaddingBottom = function () {
+ var config = this.config;
+ return isValue(config.padding_bottom) ? config.padding_bottom : 0;
+ };
+ c3_chart_internal_fn.getCurrentPaddingLeft = function (withoutRecompute) {
+ var $$ = this, config = $$.config;
+ if (isValue(config.padding_left)) {
+ return config.padding_left;
+ } else if (config.axis_rotated) {
+ return !config.axis_x_show ? 1 : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);
+ } else if (!config.axis_y_show || config.axis_y_inner) { // && !config.axis_rotated
+ return $$.getYAxisLabelPosition().isOuter ? 30 : 1;
+ } else {
+ return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));
+ }
+ };
+ c3_chart_internal_fn.getCurrentPaddingRight = function () {
+ var $$ = this, config = $$.config,
+ defaultPadding = 10, legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;
+ if (isValue(config.padding_right)) {
+ return config.padding_right + 1; // 1 is needed not to hide tick line
+ } else if (config.axis_rotated) {
+ return defaultPadding + legendWidthOnRight;
+ } else if (!config.axis_y2_show || config.axis_y2_inner) { // && !config.axis_rotated
+ return 2 + legendWidthOnRight + ($$.getY2AxisLabelPosition().isOuter ? 20 : 0);
+ } else {
+ return ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;
+ }
+ };
+
+ c3_chart_internal_fn.getParentRectValue = function (key) {
+ var parent = this.selectChart.node(), v;
+ while (parent && parent.tagName !== 'BODY') {
+ v = parent.getBoundingClientRect()[key];
+ if (v) {
+ break;
+ }
+ parent = parent.parentNode;
+ }
+ return v;
+ };
+ c3_chart_internal_fn.getParentWidth = function () {
+ return this.getParentRectValue('width');
+ };
+ c3_chart_internal_fn.getParentHeight = function () {
+ var h = this.selectChart.style('height');
+ return h.indexOf('px') > 0 ? +h.replace('px', '') : 0;
+ };
+
+
+ c3_chart_internal_fn.getSvgLeft = function (withoutRecompute) {
+ var $$ = this, config = $$.config,
+ hasLeftAxisRect = config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner),
+ leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,
+ leftAxis = $$.main.select('.' + leftAxisClass).node(),
+ svgRect = leftAxis && hasLeftAxisRect ? leftAxis.getBoundingClientRect() : {right: 0},
+ chartRect = $$.selectChart.node().getBoundingClientRect(),
+ hasArc = $$.hasArcType(),
+ svgLeft = svgRect.right - chartRect.left - (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));
+ return svgLeft > 0 ? svgLeft : 0;
+ };
+
+
+ c3_chart_internal_fn.getAxisWidthByAxisId = function (id, withoutRecompute) {
+ var $$ = this, position = $$.getAxisLabelPositionById(id);
+ return $$.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40);
+ };
+ c3_chart_internal_fn.getHorizontalAxisHeight = function (axisId) {
+ var $$ = this, config = $$.config, h = 30;
+ if (axisId === 'x' && !config.axis_x_show) {
+ return 8;
+ }
+ if (axisId === 'x' && config.axis_x_height) {
+ return config.axis_x_height;
+ }
+ if (axisId === 'y' && !config.axis_y_show) {
+ return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1;
+ }
+ if (axisId === 'y2' && !config.axis_y2_show) {
+ return $$.rotated_padding_top;
+ }
+ // Calculate x axis height when tick rotated
+ if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {
+ h = $$.getMaxTickWidth(axisId) * Math.cos(Math.PI * (90 - config.axis_x_tick_rotate) / 180);
+ }
+ return h + ($$.getAxisLabelPositionById(axisId).isInner ? 0 : 10) + (axisId === 'y2' ? -10 : 0);
+ };
+
+ c3_chart_internal_fn.getEventRectWidth = function () {
+ var $$ = this;
+ var target = $$.getMaxDataCountTarget($$.data.targets),
+ firstData, lastData, base, maxDataCount, ratio, w;
+ if (!target) {
+ return 0;
+ }
+ firstData = target.values[0], lastData = target.values[target.values.length - 1];
+ base = $$.x(lastData.x) - $$.x(firstData.x);
+ if (base === 0) {
+ return $$.config.axis_rotated ? $$.height : $$.width;
+ }
+ maxDataCount = $$.getMaxDataCount();
+ ratio = ($$.hasType('bar') ? (maxDataCount - ($$.isCategorized() ? 0.25 : 1)) / maxDataCount : 1);
+ w = maxDataCount > 1 ? (base * ratio) / (maxDataCount - 1) : base;
+ return w < 1 ? 1 : w;
+ };
+
+ c3_chart_internal_fn.getShapeIndices = function (typeFilter) {
+ var $$ = this, config = $$.config,
+ indices = {}, i = 0, j, k;
+ $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {
+ for (j = 0; j < config.data_groups.length; j++) {
+ if (config.data_groups[j].indexOf(d.id) < 0) {
+ continue;
+ }
+ for (k = 0; k < config.data_groups[j].length; k++) {
+ if (config.data_groups[j][k] in indices) {
+ indices[d.id] = indices[config.data_groups[j][k]];
+ break;
+ }
+ }
+ }
+ if (isUndefined(indices[d.id])) {
+ indices[d.id] = i++;
+ }
+ });
+ indices.__max__ = i - 1;
+ return indices;
+ };
+ c3_chart_internal_fn.getShapeX = function (offset, targetsNum, indices, isSub) {
+ var $$ = this, scale = isSub ? $$.subX : $$.x;
+ return function (d) {
+ var index = d.id in indices ? indices[d.id] : 0;
+ return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;
+ };
+ };
+ c3_chart_internal_fn.getShapeY = function (isSub) {
+ var $$ = this;
+ return function (d) {
+ var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);
+ return scale(d.value);
+ };
+ };
+ c3_chart_internal_fn.getShapeOffset = function (typeFilter, indices, isSub) {
+ var $$ = this,
+ targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))),
+ targetIds = targets.map(function (t) {
+ return t.id;
+ });
+ return function (d, i) {
+ var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id),
+ y0 = scale(0), offset = y0;
+ targets.forEach(function (t) {
+ var values = $$.isStepType(d) ? $$.convertValuesToStep(t.values) : t.values;
+ if (t.id === d.id || indices[t.id] !== indices[d.id]) {
+ return;
+ }
+ if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {
+ if (values[i].value * d.value >= 0) {
+ offset += scale(values[i].value) - y0;
+ }
+ }
+ });
+ return offset;
+ };
+ };
+ c3_chart_internal_fn.isWithinShape = function (that, d) {
+ var $$ = this,
+ shape = $$.d3.select(that), isWithin;
+ if (!$$.isTargetToShow(d.id)) {
+ isWithin = false;
+ }
+ else if (that.nodeName === 'circle') {
+ isWithin = $$.isStepType(d) ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value)) : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);
+ }
+ else if (that.nodeName === 'path') {
+ isWithin = shape.classed(CLASS.bar) ? $$.isWithinBar(that) : true;
+ }
+ return isWithin;
+ };
+
+
+ c3_chart_internal_fn.getInterpolate = function (d) {
+ var $$ = this;
+ return $$.isSplineType(d) ? "cardinal" : $$.isStepType(d) ? $$.config.line_step_type : "linear";
+ };
+
+ c3_chart_internal_fn.initLine = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartLines);
+ };
+ c3_chart_internal_fn.updateTargetsForLine = function (targets) {
+ var $$ = this, config = $$.config,
+ mainLineUpdate, mainLineEnter,
+ classChartLine = $$.classChartLine.bind($$),
+ classLines = $$.classLines.bind($$),
+ classAreas = $$.classAreas.bind($$),
+ classCircles = $$.classCircles.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainLineUpdate = $$.main.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartLine(d) + classFocus(d);
+ });
+ mainLineEnter = mainLineUpdate.enter().append('g')
+ .attr('class', classChartLine)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ // Lines for each data
+ mainLineEnter.append('g')
+ .attr("class", classLines);
+ // Areas
+ mainLineEnter.append('g')
+ .attr('class', classAreas);
+ // Circles for each data point on lines
+ mainLineEnter.append('g')
+ .attr("class", function (d) {
+ return $$.generateClass(CLASS.selectedCircles, d.id);
+ });
+ mainLineEnter.append('g')
+ .attr("class", classCircles)
+ .style("cursor", function (d) {
+ return config.data_selection_isselectable(d) ? "pointer" : null;
+ });
+ // Update date for selected circles
+ targets.forEach(function (t) {
+ $$.main.selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id)).selectAll('.' + CLASS.selectedCircle).each(function (d) {
+ d.value = t.values[d.index].value;
+ });
+ });
+ // MEMO: can not keep same color...
+ //mainLineUpdate.exit().remove();
+ };
+ c3_chart_internal_fn.redrawLine = function (durationForExit) {
+ var $$ = this;
+ $$.mainLine = $$.main.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)
+ .data($$.lineData.bind($$));
+ $$.mainLine.enter().append('path')
+ .attr('class', $$.classLine.bind($$))
+ .style("stroke", $$.color);
+ $$.mainLine
+ .style("opacity", $$.initialOpacity.bind($$))
+ .style('shape-rendering', function (d) {
+ return $$.isStepType(d) ? 'crispEdges' : '';
+ })
+ .attr('transform', null);
+ $$.mainLine.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForLine = function (transitions, drawLine) {
+ var $$ = this;
+ transitions.push($$.mainLine.transition()
+ .attr("d", drawLine)
+ .style("stroke", $$.color)
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.generateDrawLine = function (lineIndices, isSub) {
+ var $$ = this, config = $$.config,
+ line = $$.d3.svg.line(),
+ getPoints = $$.generateGetLinePoints(lineIndices, isSub),
+ yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,
+ xValue = function (d) {
+ return (isSub ? $$.subxx : $$.xx).call($$, d);
+ },
+ yValue = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)(d.value);
+ };
+
+ line = config.axis_rotated ? line.x(yValue).y(xValue) : line.x(xValue).y(yValue);
+ if (!config.line_connectNull) {
+ line = line.defined(function (d) {
+ return d.value != null;
+ });
+ }
+ return function (d) {
+ var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,
+ x = isSub ? $$.x : $$.subX, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;
+ if ($$.isLineType(d)) {
+ if (config.data_regions[d.id]) {
+ path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);
+ } else {
+ if ($$.isStepType(d)) {
+ values = $$.convertValuesToStep(values);
+ }
+ path = line.interpolate($$.getInterpolate(d))(values);
+ }
+ } else {
+ if (values[0]) {
+ x0 = x(values[0].x);
+ y0 = y(values[0].value);
+ }
+ path = config.axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0;
+ }
+ return path ? path : "M 0 0";
+ };
+ };
+ c3_chart_internal_fn.generateGetLinePoints = function (lineIndices, isSub) { // partial duplication of generateGetBarPoints
+ var $$ = this, config = $$.config,
+ lineTargetsNum = lineIndices.__max__ + 1,
+ x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub),
+ y = $$.getShapeY(!!isSub),
+ lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = lineOffset(d, i) || y0, // offset is for stacked area chart
+ posX = x(d), posY = y(d);
+ // fix posY not to overflow opposite quadrant
+ if (config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 1 point that marks the line position
+ return [
+ [posX, posY - (y0 - offset)],
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, posY - (y0 - offset)] // needed for compatibility
+ ];
+ };
+ };
+
+
+ c3_chart_internal_fn.lineWithRegions = function (d, x, y, _regions) {
+ var $$ = this, config = $$.config,
+ prev = -1, i, j,
+ s = "M", sWithRegion,
+ xp, yp, dx, dy, dd, diff, diffx2,
+ xValue, yValue,
+ regions = [];
+
+ function isWithinRegions(x, regions) {
+ var i;
+ for (i = 0; i < regions.length; i++) {
+ if (regions[i].start < x && x <= regions[i].end) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Check start/end of regions
+ if (isDefined(_regions)) {
+ for (i = 0; i < _regions.length; i++) {
+ regions[i] = {};
+ if (isUndefined(_regions[i].start)) {
+ regions[i].start = d[0].x;
+ } else {
+ regions[i].start = $$.isTimeSeries() ? $$.parseDate(_regions[i].start) : _regions[i].start;
+ }
+ if (isUndefined(_regions[i].end)) {
+ regions[i].end = d[d.length - 1].x;
+ } else {
+ regions[i].end = $$.isTimeSeries() ? $$.parseDate(_regions[i].end) : _regions[i].end;
+ }
+ }
+ }
+
+ // Set scales
+ xValue = config.axis_rotated ? function (d) {
+ return y(d.value);
+ } : function (d) {
+ return x(d.x);
+ };
+ yValue = config.axis_rotated ? function (d) {
+ return x(d.x);
+ } : function (d) {
+ return y(d.value);
+ };
+
+ // Define svg generator function for region
+ if ($$.isTimeSeries()) {
+ sWithRegion = function (d0, d1, j, diff) {
+ var x0 = d0.x.getTime(), x_diff = d1.x - d0.x,
+ xv0 = new Date(x0 + x_diff * j),
+ xv1 = new Date(x0 + x_diff * (j + diff));
+ return "M" + x(xv0) + " " + y(yp(j)) + " " + x(xv1) + " " + y(yp(j + diff));
+ };
+ } else {
+ sWithRegion = function (d0, d1, j, diff) {
+ return "M" + x(xp(j), true) + " " + y(yp(j)) + " " + x(xp(j + diff), true) + " " + y(yp(j + diff));
+ };
+ }
+
+ // Generate
+ for (i = 0; i < d.length; i++) {
+
+ // Draw as normal
+ if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) {
+ s += " " + xValue(d[i]) + " " + yValue(d[i]);
+ }
+ // Draw with region // TODO: Fix for horizotal charts
+ else {
+ xp = $$.getScale(d[i - 1].x, d[i].x, $$.isTimeSeries());
+ yp = $$.getScale(d[i - 1].value, d[i].value);
+
+ dx = x(d[i].x) - x(d[i - 1].x);
+ dy = y(d[i].value) - y(d[i - 1].value);
+ dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));
+ diff = 2 / dd;
+ diffx2 = diff * 2;
+
+ for (j = diff; j <= 1; j += diffx2) {
+ s += sWithRegion(d[i - 1], d[i], j, diff);
+ }
+ }
+ prev = d[i].x;
+ }
+
+ return s;
+ };
+
+
+ c3_chart_internal_fn.redrawArea = function (durationForExit) {
+ var $$ = this, d3 = $$.d3;
+ $$.mainArea = $$.main.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)
+ .data($$.lineData.bind($$));
+ $$.mainArea.enter().append('path')
+ .attr("class", $$.classArea.bind($$))
+ .style("fill", $$.color)
+ .style("opacity", function () {
+ $$.orgAreaOpacity = +d3.select(this).style('opacity');
+ return 0;
+ });
+ $$.mainArea
+ .style("opacity", $$.orgAreaOpacity);
+ $$.mainArea.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForArea = function (transitions, drawArea) {
+ var $$ = this;
+ transitions.push($$.mainArea.transition()
+ .attr("d", drawArea)
+ .style("fill", $$.color)
+ .style("opacity", $$.orgAreaOpacity));
+ };
+ c3_chart_internal_fn.generateDrawArea = function (areaIndices, isSub) {
+ var $$ = this, config = $$.config, area = $$.d3.svg.area(),
+ getPoints = $$.generateGetAreaPoints(areaIndices, isSub),
+ yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale,
+ xValue = function (d) {
+ return (isSub ? $$.subxx : $$.xx).call($$, d);
+ },
+ value0 = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[0][1] : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));
+ },
+ value1 = function (d, i) {
+ return config.data_groups.length > 0 ? getPoints(d, i)[1][1] : yScaleGetter.call($$, d.id)(d.value);
+ };
+
+ area = config.axis_rotated ? area.x0(value0).x1(value1).y(xValue) : area.x(xValue).y0(value0).y1(value1);
+ if (!config.line_connectNull) {
+ area = area.defined(function (d) {
+ return d.value !== null;
+ });
+ }
+
+ return function (d) {
+ var values = config.line_connectNull ? $$.filterRemoveNull(d.values) : d.values,
+ x0 = 0, y0 = 0, path;
+ if ($$.isAreaType(d)) {
+ if ($$.isStepType(d)) {
+ values = $$.convertValuesToStep(values);
+ }
+ path = area.interpolate($$.getInterpolate(d))(values);
+ } else {
+ if (values[0]) {
+ x0 = $$.x(values[0].x);
+ y0 = $$.getYScale(d.id)(values[0].value);
+ }
+ path = config.axis_rotated ? "M " + y0 + " " + x0 : "M " + x0 + " " + y0;
+ }
+ return path ? path : "M 0 0";
+ };
+ };
+ c3_chart_internal_fn.getAreaBaseValue = function () {
+ return 0;
+ };
+ c3_chart_internal_fn.generateGetAreaPoints = function (areaIndices, isSub) { // partial duplication of generateGetBarPoints
+ var $$ = this, config = $$.config,
+ areaTargetsNum = areaIndices.__max__ + 1,
+ x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub),
+ y = $$.getShapeY(!!isSub),
+ areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = areaOffset(d, i) || y0, // offset is for stacked area chart
+ posX = x(d), posY = y(d);
+ // fix posY not to overflow opposite quadrant
+ if (config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 1 point that marks the area position
+ return [
+ [posX, offset],
+ [posX, posY - (y0 - offset)],
+ [posX, posY - (y0 - offset)], // needed for compatibility
+ [posX, offset] // needed for compatibility
+ ];
+ };
+ };
+
+
+ c3_chart_internal_fn.redrawCircle = function () {
+ var $$ = this;
+ $$.mainCircle = $$.main.selectAll('.' + CLASS.circles).selectAll('.' + CLASS.circle)
+ .data($$.lineOrScatterData.bind($$));
+ $$.mainCircle.enter().append("circle")
+ .attr("class", $$.classCircle.bind($$))
+ .attr("r", $$.pointR.bind($$))
+ .style("fill", $$.color);
+ $$.mainCircle
+ .style("opacity", $$.initialOpacityForCircle.bind($$));
+ $$.mainCircle.exit().remove();
+ };
+ c3_chart_internal_fn.addTransitionForCircle = function (transitions, cx, cy) {
+ var $$ = this;
+ transitions.push($$.mainCircle.transition()
+ .style('opacity', $$.opacityForCircle.bind($$))
+ .style("fill", $$.color)
+ .attr("cx", cx)
+ .attr("cy", cy));
+ transitions.push($$.main.selectAll('.' + CLASS.selectedCircle).transition()
+ .attr("cx", cx)
+ .attr("cy", cy));
+ };
+ c3_chart_internal_fn.circleX = function (d) {
+ return d.x || d.x === 0 ? this.x(d.x) : null;
+ };
+ c3_chart_internal_fn.updateCircleY = function () {
+ var $$ = this, lineIndices, getPoints;
+ if ($$.config.data_groups.length > 0) {
+ lineIndices = $$.getShapeIndices($$.isLineType),
+ getPoints = $$.generateGetLinePoints(lineIndices);
+ $$.circleY = function (d, i) {
+ return getPoints(d, i)[0][1];
+ };
+ } else {
+ $$.circleY = function (d) {
+ return $$.getYScale(d.id)(d.value);
+ };
+ }
+ };
+ c3_chart_internal_fn.getCircles = function (i, id) {
+ var $$ = this;
+ return (id ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));
+ };
+ c3_chart_internal_fn.expandCircles = function (i, id, reset) {
+ var $$ = this,
+ r = $$.pointExpandedR.bind($$);
+ if (reset) {
+ $$.unexpandCircles();
+ }
+ $$.getCircles(i, id)
+ .classed(CLASS.EXPANDED, true)
+ .attr('r', r);
+ };
+ c3_chart_internal_fn.unexpandCircles = function (i) {
+ var $$ = this,
+ r = $$.pointR.bind($$);
+ $$.getCircles(i)
+ .filter(function () {
+ return $$.d3.select(this).classed(CLASS.EXPANDED);
+ })
+ .classed(CLASS.EXPANDED, false)
+ .attr('r', r);
+ };
+ c3_chart_internal_fn.pointR = function (d) {
+ var $$ = this, config = $$.config;
+ return $$.isStepType(d) ? 0 : (isFunction(config.point_r) ? config.point_r(d) : config.point_r);
+ };
+ c3_chart_internal_fn.pointExpandedR = function (d) {
+ var $$ = this, config = $$.config;
+ return config.point_focus_expand_enabled ? (config.point_focus_expand_r ? config.point_focus_expand_r : $$.pointR(d) * 1.75) : $$.pointR(d);
+ };
+ c3_chart_internal_fn.pointSelectR = function (d) {
+ var $$ = this, config = $$.config;
+ return config.point_select_r ? config.point_select_r : $$.pointR(d) * 4;
+ };
+ c3_chart_internal_fn.isWithinCircle = function (that, r) {
+ var d3 = this.d3,
+ mouse = d3.mouse(that), d3_this = d3.select(that),
+ cx = +d3_this.attr("cx"), cy = +d3_this.attr("cy");
+ return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;
+ };
+ c3_chart_internal_fn.isWithinStep = function (that, y) {
+ return Math.abs(y - this.d3.mouse(that)[1]) < 30;
+ };
+
+ c3_chart_internal_fn.initBar = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartBars);
+ };
+ c3_chart_internal_fn.updateTargetsForBar = function (targets) {
+ var $$ = this, config = $$.config,
+ mainBarUpdate, mainBarEnter,
+ classChartBar = $$.classChartBar.bind($$),
+ classBars = $$.classBars.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainBarUpdate = $$.main.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartBar(d) + classFocus(d);
+ });
+ mainBarEnter = mainBarUpdate.enter().append('g')
+ .attr('class', classChartBar)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ // Bars for each data
+ mainBarEnter.append('g')
+ .attr("class", classBars)
+ .style("cursor", function (d) {
+ return config.data_selection_isselectable(d) ? "pointer" : null;
+ });
+
+ };
+ c3_chart_internal_fn.redrawBar = function (durationForExit) {
+ var $$ = this,
+ barData = $$.barData.bind($$),
+ classBar = $$.classBar.bind($$),
+ initialOpacity = $$.initialOpacity.bind($$),
+ color = function (d) {
+ return $$.color(d.id);
+ };
+ $$.mainBar = $$.main.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)
+ .data(barData);
+ $$.mainBar.enter().append('path')
+ .attr("class", classBar)
+ .style("stroke", color)
+ .style("fill", color);
+ $$.mainBar
+ .style("opacity", initialOpacity);
+ $$.mainBar.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForBar = function (transitions, drawBar) {
+ var $$ = this;
+ transitions.push($$.mainBar.transition()
+ .attr('d', drawBar)
+ .style("fill", $$.color)
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.getBarW = function (axis, barTargetsNum) {
+ var $$ = this, config = $$.config,
+ w = typeof config.bar_width === 'number' ? config.bar_width : barTargetsNum ? (axis.tickOffset() * 2 * config.bar_width_ratio) / barTargetsNum : 0;
+ return config.bar_width_max && w > config.bar_width_max ? config.bar_width_max : w;
+ };
+ c3_chart_internal_fn.getBars = function (i, id) {
+ var $$ = this;
+ return (id ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id)) : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));
+ };
+ c3_chart_internal_fn.expandBars = function (i, id, reset) {
+ var $$ = this;
+ if (reset) {
+ $$.unexpandBars();
+ }
+ $$.getBars(i, id).classed(CLASS.EXPANDED, true);
+ };
+ c3_chart_internal_fn.unexpandBars = function (i) {
+ var $$ = this;
+ $$.getBars(i).classed(CLASS.EXPANDED, false);
+ };
+ c3_chart_internal_fn.generateDrawBar = function (barIndices, isSub) {
+ var $$ = this, config = $$.config,
+ getPoints = $$.generateGetBarPoints(barIndices, isSub);
+ return function (d, i) {
+ // 4 points that make a bar
+ var points = getPoints(d, i);
+
+ // switch points if axis is rotated, not applicable for sub chart
+ var indexX = config.axis_rotated ? 1 : 0;
+ var indexY = config.axis_rotated ? 0 : 1;
+
+ var path = 'M ' + points[0][indexX] + ',' + points[0][indexY] + ' ' +
+ 'L' + points[1][indexX] + ',' + points[1][indexY] + ' ' +
+ 'L' + points[2][indexX] + ',' + points[2][indexY] + ' ' +
+ 'L' + points[3][indexX] + ',' + points[3][indexY] + ' ' +
+ 'z';
+
+ return path;
+ };
+ };
+ c3_chart_internal_fn.generateGetBarPoints = function (barIndices, isSub) {
+ var $$ = this,
+ axis = isSub ? $$.subXAxis : $$.xAxis,
+ barTargetsNum = barIndices.__max__ + 1,
+ barW = $$.getBarW(axis, barTargetsNum),
+ barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub),
+ barY = $$.getShapeY(!!isSub),
+ barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub),
+ yScale = isSub ? $$.getSubYScale : $$.getYScale;
+ return function (d, i) {
+ var y0 = yScale.call($$, d.id)(0),
+ offset = barOffset(d, i) || y0, // offset is for stacked bar chart
+ posX = barX(d), posY = barY(d);
+ // fix posY not to overflow opposite quadrant
+ if ($$.config.axis_rotated) {
+ if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {
+ posY = y0;
+ }
+ }
+ // 4 points that make a bar
+ return [
+ [posX, offset],
+ [posX, posY - (y0 - offset)],
+ [posX + barW, posY - (y0 - offset)],
+ [posX + barW, offset]
+ ];
+ };
+ };
+ c3_chart_internal_fn.isWithinBar = function (that) {
+ var mouse = this.d3.mouse(that), box = that.getBoundingClientRect(),
+ seg0 = that.pathSegList.getItem(0), seg1 = that.pathSegList.getItem(1),
+ x = Math.min(seg0.x, seg1.x), y = Math.min(seg0.y, seg1.y),
+ w = box.width, h = box.height, offset = 2,
+ sx = x - offset, ex = x + w + offset, sy = y + h + offset, ey = y - offset;
+ return sx < mouse[0] && mouse[0] < ex && ey < mouse[1] && mouse[1] < sy;
+ };
+
+ c3_chart_internal_fn.initText = function () {
+ var $$ = this;
+ $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartTexts);
+ $$.mainText = $$.d3.selectAll([]);
+ };
+ c3_chart_internal_fn.updateTargetsForText = function (targets) {
+ var $$ = this, mainTextUpdate, mainTextEnter,
+ classChartText = $$.classChartText.bind($$),
+ classTexts = $$.classTexts.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainTextUpdate = $$.main.select('.' + CLASS.chartTexts).selectAll('.' + CLASS.chartText)
+ .data(targets)
+ .attr('class', function (d) {
+ return classChartText(d) + classFocus(d);
+ });
+ mainTextEnter = mainTextUpdate.enter().append('g')
+ .attr('class', classChartText)
+ .style('opacity', 0)
+ .style("pointer-events", "none");
+ mainTextEnter.append('g')
+ .attr('class', classTexts);
+ };
+ c3_chart_internal_fn.redrawText = function (durationForExit) {
+ var $$ = this, config = $$.config,
+ barOrLineData = $$.barOrLineData.bind($$),
+ classText = $$.classText.bind($$);
+ $$.mainText = $$.main.selectAll('.' + CLASS.texts).selectAll('.' + CLASS.text)
+ .data(barOrLineData);
+ $$.mainText.enter().append('text')
+ .attr("class", classText)
+ .attr('text-anchor', function (d) {
+ return config.axis_rotated ? (d.value < 0 ? 'end' : 'start') : 'middle';
+ })
+ .style("stroke", 'none')
+ .style("fill", function (d) {
+ return $$.color(d);
+ })
+ .style("fill-opacity", 0);
+ $$.mainText
+ .text(function (d, i, j) {
+ return $$.formatByAxisId($$.getAxisId(d.id))(d.value, d.id, i, j);
+ });
+ $$.mainText.exit()
+ .transition().duration(durationForExit)
+ .style('fill-opacity', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForText = function (transitions, xForText, yForText, forFlow) {
+ var $$ = this,
+ opacityForText = forFlow ? 0 : $$.opacityForText.bind($$);
+ transitions.push($$.mainText.transition()
+ .attr('x', xForText)
+ .attr('y', yForText)
+ .style("fill", $$.color)
+ .style("fill-opacity", opacityForText));
+ };
+ c3_chart_internal_fn.getTextRect = function (text, cls) {
+ var body = this.d3.select('body').classed('c3', true),
+ svg = body.append("svg").style('visibility', 'hidden'), rect;
+ svg.selectAll('.dummy')
+ .data([text])
+ .enter().append('text')
+ .classed(cls ? cls : "", true)
+ .text(text)
+ .each(function () {
+ rect = this.getBoundingClientRect();
+ });
+ svg.remove();
+ body.classed('c3', false);
+ return rect;
+ };
+ c3_chart_internal_fn.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {
+ var $$ = this,
+ getAreaPoints = $$.generateGetAreaPoints(barIndices, false),
+ getBarPoints = $$.generateGetBarPoints(barIndices, false),
+ getLinePoints = $$.generateGetLinePoints(lineIndices, false),
+ getter = forX ? $$.getXForText : $$.getYForText;
+ return function (d, i) {
+ var getPoints = $$.isAreaType(d) ? getAreaPoints : $$.isBarType(d) ? getBarPoints : getLinePoints;
+ return getter.call($$, getPoints(d, i), d, this);
+ };
+ };
+ c3_chart_internal_fn.getXForText = function (points, d, textElement) {
+ var $$ = this,
+ box = textElement.getBoundingClientRect(), xPos, padding;
+ if ($$.config.axis_rotated) {
+ padding = $$.isBarType(d) ? 4 : 6;
+ xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);
+ } else {
+ xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];
+ }
+ // show labels regardless of the domain if value is null
+ if (d.value === null) {
+ if (xPos > $$.width) {
+ xPos = $$.width - box.width;
+ } else if (xPos < 0) {
+ xPos = 4;
+ }
+ }
+ return xPos;
+ };
+ c3_chart_internal_fn.getYForText = function (points, d, textElement) {
+ var $$ = this,
+ box = textElement.getBoundingClientRect(), yPos;
+ if ($$.config.axis_rotated) {
+ yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;
+ } else {
+ yPos = points[2][1] + (d.value < 0 ? box.height : $$.isBarType(d) ? -3 : -6);
+ }
+ // show labels regardless of the domain if value is null
+ if (d.value === null && !$$.config.axis_rotated) {
+ if (yPos < box.height) {
+ yPos = box.height;
+ } else if (yPos > this.height) {
+ yPos = this.height - 4;
+ }
+ }
+ return yPos;
+ };
+
+ c3_chart_internal_fn.setTargetType = function (targetIds, type) {
+ var $$ = this, config = $$.config;
+ $$.mapToTargetIds(targetIds).forEach(function (id) {
+ $$.withoutFadeIn[id] = (type === config.data_types[id]);
+ config.data_types[id] = type;
+ });
+ if (!targetIds) {
+ config.data_type = type;
+ }
+ };
+ c3_chart_internal_fn.hasType = function (type, targets) {
+ var $$ = this, types = $$.config.data_types, has = false;
+ targets = targets || $$.data.targets;
+ if (targets && targets.length) {
+ targets.forEach(function (target) {
+ var t = types[target.id];
+ if ((t && t.indexOf(type) >= 0) || (!t && type === 'line')) {
+ has = true;
+ }
+ });
+ } else if (Object.keys(types).length) {
+ Object.keys(types).forEach(function (id) {
+ if (types[id] === type) {
+ has = true;
+ }
+ });
+ } else {
+ has = $$.config.data_type === type;
+ }
+ return has;
+ };
+ c3_chart_internal_fn.hasArcType = function (targets) {
+ return this.hasType('pie', targets) || this.hasType('donut', targets) || this.hasType('gauge', targets);
+ };
+ c3_chart_internal_fn.isLineType = function (d) {
+ var config = this.config, id = isString(d) ? d : d.id;
+ return !config.data_types[id] || ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isStepType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isSplineType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isAreaType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return ['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >= 0;
+ };
+ c3_chart_internal_fn.isBarType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'bar';
+ };
+ c3_chart_internal_fn.isScatterType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'scatter';
+ };
+ c3_chart_internal_fn.isPieType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'pie';
+ };
+ c3_chart_internal_fn.isGaugeType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'gauge';
+ };
+ c3_chart_internal_fn.isDonutType = function (d) {
+ var id = isString(d) ? d : d.id;
+ return this.config.data_types[id] === 'donut';
+ };
+ c3_chart_internal_fn.isArcType = function (d) {
+ return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);
+ };
+ c3_chart_internal_fn.lineData = function (d) {
+ return this.isLineType(d) ? [d] : [];
+ };
+ c3_chart_internal_fn.arcData = function (d) {
+ return this.isArcType(d.data) ? [d] : [];
+ };
+ /* not used
+ function scatterData(d) {
+ return isScatterType(d) ? d.values : [];
+ }
+ */
+ c3_chart_internal_fn.barData = function (d) {
+ return this.isBarType(d) ? d.values : [];
+ };
+ c3_chart_internal_fn.lineOrScatterData = function (d) {
+ return this.isLineType(d) || this.isScatterType(d) ? d.values : [];
+ };
+ c3_chart_internal_fn.barOrLineData = function (d) {
+ return this.isBarType(d) || this.isLineType(d) ? d.values : [];
+ };
+
+ c3_chart_internal_fn.initGrid = function () {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+ $$.grid = $$.main.append('g')
+ .attr("clip-path", $$.clipPathForGrid)
+ .attr('class', CLASS.grid);
+ if (config.grid_x_show) {
+ $$.grid.append("g").attr("class", CLASS.xgrids);
+ }
+ if (config.grid_y_show) {
+ $$.grid.append('g').attr('class', CLASS.ygrids);
+ }
+ if (config.grid_focus_show) {
+ $$.grid.append('g')
+ .attr("class", CLASS.xgridFocus)
+ .append('line')
+ .attr('class', CLASS.xgridFocus);
+ }
+ $$.xgrid = d3.selectAll([]);
+ if (!config.grid_lines_front) {
+ $$.initGridLines();
+ }
+ };
+ c3_chart_internal_fn.initGridLines = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.gridLines = $$.main.append('g')
+ .attr("clip-path", $$.clipPathForGrid)
+ .attr('class', CLASS.grid + ' ' + CLASS.gridLines);
+ $$.gridLines.append('g').attr("class", CLASS.xgridLines);
+ $$.gridLines.append('g').attr('class', CLASS.ygridLines);
+ $$.xgridLines = d3.selectAll([]);
+ };
+ c3_chart_internal_fn.updateXGrid = function (withoutUpdate) {
+ var $$ = this, config = $$.config, d3 = $$.d3,
+ xgridData = $$.generateGridData(config.grid_x_type, $$.x),
+ tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;
+
+ $$.xgridAttr = config.axis_rotated ? {
+ 'x1': 0,
+ 'x2': $$.width,
+ 'y1': function (d) {
+ return $$.x(d) - tickOffset;
+ },
+ 'y2': function (d) {
+ return $$.x(d) - tickOffset;
+ }
+ } : {
+ 'x1': function (d) {
+ return $$.x(d) + tickOffset;
+ },
+ 'x2': function (d) {
+ return $$.x(d) + tickOffset;
+ },
+ 'y1': 0,
+ 'y2': $$.height
+ };
+
+ $$.xgrid = $$.main.select('.' + CLASS.xgrids).selectAll('.' + CLASS.xgrid)
+ .data(xgridData);
+ $$.xgrid.enter().append('line').attr("class", CLASS.xgrid);
+ if (!withoutUpdate) {
+ $$.xgrid.attr($$.xgridAttr)
+ .style("opacity", function () {
+ return +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1') === (config.axis_rotated ? $$.height : 0) ? 0 : 1;
+ });
+ }
+ $$.xgrid.exit().remove();
+ };
+
+ c3_chart_internal_fn.updateYGrid = function () {
+ var $$ = this, config = $$.config,
+ gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);
+ $$.ygrid = $$.main.select('.' + CLASS.ygrids).selectAll('.' + CLASS.ygrid)
+ .data(gridValues);
+ $$.ygrid.enter().append('line')
+ .attr('class', CLASS.ygrid);
+ $$.ygrid.attr("x1", config.axis_rotated ? $$.y : 0)
+ .attr("x2", config.axis_rotated ? $$.y : $$.width)
+ .attr("y1", config.axis_rotated ? 0 : $$.y)
+ .attr("y2", config.axis_rotated ? $$.height : $$.y);
+ $$.ygrid.exit().remove();
+ $$.smoothLines($$.ygrid, 'grid');
+ };
+
+
+ c3_chart_internal_fn.redrawGrid = function (duration) {
+ var $$ = this, main = $$.main, config = $$.config,
+ xgridLine, ygridLine, yv;
+
+ // hide if arc type
+ $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');
+
+ main.select('line.' + CLASS.xgridFocus).style("visibility", "hidden");
+ if (config.grid_x_show) {
+ $$.updateXGrid();
+ }
+ $$.xgridLines = main.select('.' + CLASS.xgridLines).selectAll('.' + CLASS.xgridLine)
+ .data(config.grid_x_lines);
+ // enter
+ xgridLine = $$.xgridLines.enter().append('g')
+ .attr("class", function (d) {
+ return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : '');
+ });
+ xgridLine.append('line')
+ .style("opacity", 0);
+ xgridLine.append('text')
+ .attr("text-anchor", "end")
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .attr('dx', config.axis_rotated ? 0 : -$$.margin.top)
+ .attr('dy', -5)
+ .style("opacity", 0);
+ // udpate
+ // done in d3.transition() of the end of this function
+ // exit
+ $$.xgridLines.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+
+ // Y-Grid
+ if (config.grid_y_show) {
+ $$.updateYGrid();
+ }
+ $$.ygridLines = main.select('.' + CLASS.ygridLines).selectAll('.' + CLASS.ygridLine)
+ .data(config.grid_y_lines);
+ // enter
+ ygridLine = $$.ygridLines.enter().append('g')
+ .attr("class", function (d) {
+ return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : '');
+ });
+ ygridLine.append('line')
+ .style("opacity", 0);
+ ygridLine.append('text')
+ .attr("text-anchor", "end")
+ .attr("transform", config.axis_rotated ? "rotate(-90)" : "")
+ .attr('dx', config.axis_rotated ? 0 : -$$.margin.top)
+ .attr('dy', -5)
+ .style("opacity", 0);
+ // update
+ yv = $$.yv.bind($$);
+ $$.ygridLines.select('line')
+ .transition().duration(duration)
+ .attr("x1", config.axis_rotated ? yv : 0)
+ .attr("x2", config.axis_rotated ? yv : $$.width)
+ .attr("y1", config.axis_rotated ? 0 : yv)
+ .attr("y2", config.axis_rotated ? $$.height : yv)
+ .style("opacity", 1);
+ $$.ygridLines.select('text')
+ .transition().duration(duration)
+ .attr("x", config.axis_rotated ? 0 : $$.width)
+ .attr("y", yv)
+ .text(function (d) {
+ return d.text;
+ })
+ .style("opacity", 1);
+ // exit
+ $$.ygridLines.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForGrid = function (transitions) {
+ var $$ = this, config = $$.config, xv = $$.xv.bind($$);
+ transitions.push($$.xgridLines.select('line').transition()
+ .attr("x1", config.axis_rotated ? 0 : xv)
+ .attr("x2", config.axis_rotated ? $$.width : xv)
+ .attr("y1", config.axis_rotated ? xv : $$.margin.top)
+ .attr("y2", config.axis_rotated ? xv : $$.height)
+ .style("opacity", 1));
+ transitions.push($$.xgridLines.select('text').transition()
+ .attr("x", config.axis_rotated ? $$.width : 0)
+ .attr("y", xv)
+ .text(function (d) {
+ return d.text;
+ })
+ .style("opacity", 1));
+ };
+ c3_chart_internal_fn.showXGridFocus = function (selectedData) {
+ var $$ = this, config = $$.config,
+ dataToShow = selectedData.filter(function (d) {
+ return d && isValue(d.value);
+ }),
+ focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus),
+ xx = $$.xx.bind($$);
+ if (!config.tooltip_show) {
+ return;
+ }
+ // Hide when scatter plot exists
+ if ($$.hasType('scatter') || $$.hasArcType()) {
+ return;
+ }
+ focusEl
+ .style("visibility", "visible")
+ .data([dataToShow[0]])
+ .attr(config.axis_rotated ? 'y1' : 'x1', xx)
+ .attr(config.axis_rotated ? 'y2' : 'x2', xx);
+ $$.smoothLines(focusEl, 'grid');
+ };
+ c3_chart_internal_fn.hideXGridFocus = function () {
+ this.main.select('line.' + CLASS.xgridFocus).style("visibility", "hidden");
+ };
+ c3_chart_internal_fn.updateXgridFocus = function () {
+ var $$ = this, config = $$.config;
+ $$.main.select('line.' + CLASS.xgridFocus)
+ .attr("x1", config.axis_rotated ? 0 : -10)
+ .attr("x2", config.axis_rotated ? $$.width : -10)
+ .attr("y1", config.axis_rotated ? -10 : 0)
+ .attr("y2", config.axis_rotated ? -10 : $$.height);
+ };
+ c3_chart_internal_fn.generateGridData = function (type, scale) {
+ var $$ = this,
+ gridData = [], xDomain, firstYear, lastYear, i,
+ tickNum = $$.main.select("." + CLASS.axisX).selectAll('.tick').size();
+ if (type === 'year') {
+ xDomain = $$.getXDomain();
+ firstYear = xDomain[0].getFullYear();
+ lastYear = xDomain[1].getFullYear();
+ for (i = firstYear; i <= lastYear; i++) {
+ gridData.push(new Date(i + '-01-01 00:00:00'));
+ }
+ } else {
+ gridData = scale.ticks(10);
+ if (gridData.length > tickNum) { // use only int
+ gridData = gridData.filter(function (d) {
+ return ("" + d).indexOf('.') < 0;
+ });
+ }
+ }
+ return gridData;
+ };
+ c3_chart_internal_fn.getGridFilterToRemove = function (params) {
+ return params ? function (line) {
+ var found = false;
+ [].concat(params).forEach(function (param) {
+ if ((('value' in param && line.value === param.value) || ('class' in param && line['class'] === param['class']))) {
+ found = true;
+ }
+ });
+ return found;
+ } : function () {
+ return true;
+ };
+ };
+ c3_chart_internal_fn.removeGridLines = function (params, forX) {
+ var $$ = this, config = $$.config,
+ toRemove = $$.getGridFilterToRemove(params),
+ toShow = function (line) {
+ return !toRemove(line);
+ },
+ classLines = forX ? CLASS.xgridLines : CLASS.ygridLines,
+ classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;
+ $$.main.select('.' + classLines).selectAll('.' + classLine).filter(toRemove)
+ .transition().duration(config.transition_duration)
+ .style('opacity', 0).remove();
+ if (forX) {
+ config.grid_x_lines = config.grid_x_lines.filter(toShow);
+ } else {
+ config.grid_y_lines = config.grid_y_lines.filter(toShow);
+ }
+ };
+
+ c3_chart_internal_fn.initTooltip = function () {
+ var $$ = this, config = $$.config, i;
+ $$.tooltip = $$.selectChart
+ .style("position", "relative")
+ .append("div")
+ .attr('class', CLASS.tooltipContainer)
+ .style("position", "absolute")
+ .style("pointer-events", "none")
+ .style("display", "none");
+ // Show tooltip if needed
+ if (config.tooltip_init_show) {
+ if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {
+ config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);
+ for (i = 0; i < $$.data.targets[0].values.length; i++) {
+ if (($$.data.targets[0].values[i].x - config.tooltip_init_x) === 0) {
+ break;
+ }
+ }
+ config.tooltip_init_x = i;
+ }
+ $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {
+ return $$.addName(d.values[config.tooltip_init_x]);
+ }), $$.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));
+ $$.tooltip.style("top", config.tooltip_init_position.top)
+ .style("left", config.tooltip_init_position.left)
+ .style("display", "block");
+ }
+ };
+ c3_chart_internal_fn.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {
+ var $$ = this, config = $$.config,
+ titleFormat = config.tooltip_format_title || defaultTitleFormat,
+ nameFormat = config.tooltip_format_name || function (name) {
+ return name;
+ },
+ valueFormat = config.tooltip_format_value || defaultValueFormat,
+ text, i, title, value, name, bgcolor;
+ for (i = 0; i < d.length; i++) {
+ if (!(d[i] && (d[i].value || d[i].value === 0))) {
+ continue;
+ }
+
+ if (!text) {
+ title = titleFormat ? titleFormat(d[i].x) : d[i].x;
+ text = "<table class='" + CLASS.tooltip + "'>" + (title || title === 0 ? "<tr><th colspan='2'>" + title + "</th></tr>" : "");
+ }
+
+ name = nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index);
+ value = valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index);
+ bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);
+
+ text += "<tr class='" + CLASS.tooltipName + "-" + d[i].id + "'>";
+ text += "<td class='name'><span style='background-color:" + bgcolor + "'></span>" + name + "</td>";
+ text += "<td class='value'>" + value + "</td>";
+ text += "</tr>";
+ }
+ return text + "</table>";
+ };
+ c3_chart_internal_fn.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+ var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;
+ var forArc = $$.hasArcType(),
+ mouse = d3.mouse(element);
+ // Determin tooltip position
+ if (forArc) {
+ tooltipLeft = (($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2) + mouse[0];
+ tooltipTop = ($$.height / 2) + mouse[1] + 20;
+ } else {
+ svgLeft = $$.getSvgLeft(true);
+ if (config.axis_rotated) {
+ tooltipLeft = svgLeft + mouse[0] + 100;
+ tooltipRight = tooltipLeft + tWidth;
+ chartRight = $$.currentWidth - $$.getCurrentPaddingRight();
+ tooltipTop = $$.x(dataToShow[0].x) + 20;
+ } else {
+ tooltipLeft = svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;
+ tooltipRight = tooltipLeft + tWidth;
+ chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();
+ tooltipTop = mouse[1] + 15;
+ }
+
+ if (tooltipRight > chartRight) {
+ tooltipLeft -= tooltipRight - chartRight;
+ }
+ if (tooltipTop + tHeight > $$.currentHeight) {
+ tooltipTop -= tHeight + 30;
+ }
+ }
+ if (tooltipTop < 0) {
+ tooltipTop = 0;
+ }
+ return {top: tooltipTop, left: tooltipLeft};
+ };
+ c3_chart_internal_fn.showTooltip = function (selectedData, element) {
+ var $$ = this, config = $$.config;
+ var tWidth, tHeight, position;
+ var forArc = $$.hasArcType(),
+ dataToShow = selectedData.filter(function (d) {
+ return d && isValue(d.value);
+ }),
+ positionFunction = config.tooltip_position || c3_chart_internal_fn.tooltipPosition;
+ if (dataToShow.length === 0 || !config.tooltip_show) {
+ return;
+ }
+ $$.tooltip.html(config.tooltip_contents.call($$, selectedData, $$.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color)).style("display", "block");
+
+ // Get tooltip dimensions
+ tWidth = $$.tooltip.property('offsetWidth');
+ tHeight = $$.tooltip.property('offsetHeight');
+
+ position = positionFunction.call(this, dataToShow, tWidth, tHeight, element);
+ // Set tooltip
+ $$.tooltip
+ .style("top", position.top + "px")
+ .style("left", position.left + 'px');
+ };
+ c3_chart_internal_fn.hideTooltip = function () {
+ this.tooltip.style("display", "none");
+ };
+
+ c3_chart_internal_fn.initLegend = function () {
+ var $$ = this;
+ $$.legendHasRendered = false;
+ $$.legend = $$.svg.append("g").attr("transform", $$.getTranslate('legend'));
+ if (!$$.config.legend_show) {
+ $$.legend.style('visibility', 'hidden');
+ $$.hiddenLegendIds = $$.mapToIds($$.data.targets);
+ return;
+ }
+ // MEMO: call here to update legend box and tranlate for all
+ // MEMO: translate will be upated by this, so transform not needed in updateLegend()
+ $$.updateLegendWithDefaults();
+ };
+ c3_chart_internal_fn.updateLegendWithDefaults = function () {
+ var $$ = this;
+ $$.updateLegend($$.mapToIds($$.data.targets), {
+ withTransform: false,
+ withTransitionForTransform: false,
+ withTransition: false
+ });
+ };
+ c3_chart_internal_fn.updateSizeForLegend = function (legendHeight, legendWidth) {
+ var $$ = this, config = $$.config, insetLegendPosition = {
+ top: $$.isLegendTop ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5 : $$.currentHeight - legendHeight - $$.getCurrentPaddingBottom() - config.legend_inset_y,
+ left: $$.isLegendLeft ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5 : $$.currentWidth - legendWidth - $$.getCurrentPaddingRight() - config.legend_inset_x + 0.5
+ };
+
+ $$.margin3 = {
+ top: $$.isLegendRight ? 0 : $$.isLegendInset ? insetLegendPosition.top : $$.currentHeight - legendHeight,
+ right: NaN,
+ bottom: 0,
+ left: $$.isLegendRight ? $$.currentWidth - legendWidth : $$.isLegendInset ? insetLegendPosition.left : 0
+ };
+ };
+ c3_chart_internal_fn.transformLegend = function (withTransition) {
+ var $$ = this;
+ (withTransition ? $$.legend.transition() : $$.legend).attr("transform", $$.getTranslate('legend'));
+ };
+ c3_chart_internal_fn.updateLegendStep = function (step) {
+ this.legendStep = step;
+ };
+ c3_chart_internal_fn.updateLegendItemWidth = function (w) {
+ this.legendItemWidth = w;
+ };
+ c3_chart_internal_fn.updateLegendItemHeight = function (h) {
+ this.legendItemHeight = h;
+ };
+ c3_chart_internal_fn.getLegendWidth = function () {
+ var $$ = this;
+ return $$.config.legend_show ? $$.isLegendRight || $$.isLegendInset ? $$.legendItemWidth * ($$.legendStep + 1) : $$.currentWidth : 0;
+ };
+ c3_chart_internal_fn.getLegendHeight = function () {
+ var $$ = this, h = 0;
+ if ($$.config.legend_show) {
+ if ($$.isLegendRight) {
+ h = $$.currentHeight;
+ } else {
+ h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);
+ }
+ }
+ return h;
+ };
+ c3_chart_internal_fn.opacityForLegend = function (legendItem) {
+ return legendItem.classed(CLASS.legendItemHidden) ? null : 1;
+ };
+ c3_chart_internal_fn.opacityForUnfocusedLegend = function (legendItem) {
+ return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;
+ };
+ c3_chart_internal_fn.toggleFocusLegend = function (targetIds, focus) {
+ var $$ = this;
+ targetIds = $$.mapToTargetIds(targetIds);
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .filter(function (id) {
+ return targetIds.indexOf(id) >= 0;
+ })
+ .classed(CLASS.legendItemFocused, focus)
+ .transition().duration(100)
+ .style('opacity', function () {
+ var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;
+ return opacity.call($$, $$.d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.revertLegend = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .classed(CLASS.legendItemFocused, false)
+ .transition().duration(100)
+ .style('opacity', function () {
+ return $$.opacityForLegend(d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.showLegend = function (targetIds) {
+ var $$ = this, config = $$.config;
+ if (!config.legend_show) {
+ config.legend_show = true;
+ $$.legend.style('visibility', 'visible');
+ if (!$$.legendHasRendered) {
+ $$.updateLegendWithDefaults();
+ }
+ }
+ $$.removeHiddenLegendIds(targetIds);
+ $$.legend.selectAll($$.selectorLegends(targetIds))
+ .style('visibility', 'visible')
+ .transition()
+ .style('opacity', function () {
+ return $$.opacityForLegend($$.d3.select(this));
+ });
+ };
+ c3_chart_internal_fn.hideLegend = function (targetIds) {
+ var $$ = this, config = $$.config;
+ if (config.legend_show && isEmpty(targetIds)) {
+ config.legend_show = false;
+ $$.legend.style('visibility', 'hidden');
+ }
+ $$.addHiddenLegendIds(targetIds);
+ $$.legend.selectAll($$.selectorLegends(targetIds))
+ .style('opacity', 0)
+ .style('visibility', 'hidden');
+ };
+ var legendItemTextBox = {};
+ c3_chart_internal_fn.clearLegendItemTextBoxCache = function () {
+ legendItemTextBox = {};
+ };
+ c3_chart_internal_fn.updateLegend = function (targetIds, options, transitions) {
+ var $$ = this, config = $$.config;
+ var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect;
+ var paddingTop = 4, paddingRight = 10, maxWidth = 0, maxHeight = 0, posMin = 10, tileWidth = 15;
+ var l, totalLength = 0, offsets = {}, widths = {}, heights = {}, margins = [0], steps = {}, step = 0;
+ var withTransition, withTransitionForTransform;
+ var hasFocused = $$.legend.selectAll('.' + CLASS.legendItemFocused).size();
+ var texts, rects, tiles, background;
+
+ options = options || {};
+ withTransition = getOption(options, "withTransition", true);
+ withTransitionForTransform = getOption(options, "withTransitionForTransform", true);
+
+ function getTextBox(textElement, id) {
+ if (!legendItemTextBox[id]) {
+ legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem);
+ }
+ return legendItemTextBox[id];
+ }
+
+ function updatePositions(textElement, id, index) {
+ var reset = index === 0, isLast = index === targetIds.length - 1,
+ box = getTextBox(textElement, id),
+ itemWidth = box.width + tileWidth + (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight),
+ itemHeight = box.height + paddingTop,
+ itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth,
+ areaLength = $$.isLegendRight || $$.isLegendInset ? $$.getLegendHeight() : $$.getLegendWidth(),
+ margin, maxLength;
+
+ // MEMO: care about condifion of step, totalLength
+ function updateValues(id, withoutStep) {
+ if (!withoutStep) {
+ margin = (areaLength - totalLength - itemLength) / 2;
+ if (margin < posMin) {
+ margin = (areaLength - itemLength) / 2;
+ totalLength = 0;
+ step++;
+ }
+ }
+ steps[id] = step;
+ margins[step] = $$.isLegendInset ? 10 : margin;
+ offsets[id] = totalLength;
+ totalLength += itemLength;
+ }
+
+ if (reset) {
+ totalLength = 0;
+ step = 0;
+ maxWidth = 0;
+ maxHeight = 0;
+ }
+
+ if (config.legend_show && !$$.isLegendToShow(id)) {
+ widths[id] = heights[id] = steps[id] = offsets[id] = 0;
+ return;
+ }
+
+ widths[id] = itemWidth;
+ heights[id] = itemHeight;
+
+ if (!maxWidth || itemWidth >= maxWidth) {
+ maxWidth = itemWidth;
+ }
+ if (!maxHeight || itemHeight >= maxHeight) {
+ maxHeight = itemHeight;
+ }
+ maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;
+
+ if (config.legend_equally) {
+ Object.keys(widths).forEach(function (id) {
+ widths[id] = maxWidth;
+ });
+ Object.keys(heights).forEach(function (id) {
+ heights[id] = maxHeight;
+ });
+ margin = (areaLength - maxLength * targetIds.length) / 2;
+ if (margin < posMin) {
+ totalLength = 0;
+ step = 0;
+ targetIds.forEach(function (id) {
+ updateValues(id);
+ });
+ }
+ else {
+ updateValues(id, true);
+ }
+ } else {
+ updateValues(id);
+ }
+ }
+
+ if ($$.isLegendInset) {
+ step = config.legend_inset_step ? config.legend_inset_step : targetIds.length;
+ $$.updateLegendStep(step);
+ }
+
+ if ($$.isLegendRight) {
+ xForLegend = function (id) {
+ return maxWidth * steps[id];
+ };
+ yForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ } else if ($$.isLegendInset) {
+ xForLegend = function (id) {
+ return maxWidth * steps[id] + 10;
+ };
+ yForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ } else {
+ xForLegend = function (id) {
+ return margins[steps[id]] + offsets[id];
+ };
+ yForLegend = function (id) {
+ return maxHeight * steps[id];
+ };
+ }
+ xForLegendText = function (id, i) {
+ return xForLegend(id, i) + 14;
+ };
+ yForLegendText = function (id, i) {
+ return yForLegend(id, i) + 9;
+ };
+ xForLegendRect = function (id, i) {
+ return xForLegend(id, i);
+ };
+ yForLegendRect = function (id, i) {
+ return yForLegend(id, i) - 5;
+ };
+
+ // Define g for legend area
+ l = $$.legend.selectAll('.' + CLASS.legendItem)
+ .data(targetIds)
+ .enter().append('g')
+ .attr('class', function (id) {
+ return $$.generateClass(CLASS.legendItem, id);
+ })
+ .style('visibility', function (id) {
+ return $$.isLegendToShow(id) ? 'visible' : 'hidden';
+ })
+ .style('cursor', 'pointer')
+ .on('click', function (id) {
+ if (config.legend_item_onclick) {
+ config.legend_item_onclick.call($$, id);
+ } else {
+ if ($$.d3.event.altKey) {
+ $$.api.hide();
+ $$.api.show(id);
+ } else {
+ $$.api.toggle(id);
+ $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();
+ }
+ }
+ })
+ .on('mouseover', function (id) {
+ $$.d3.select(this).classed(CLASS.legendItemFocused, true);
+ if (!$$.transiting && $$.isTargetToShow(id)) {
+ $$.api.focus(id);
+ }
+ if (config.legend_item_onmouseover) {
+ config.legend_item_onmouseover.call($$, id);
+ }
+ })
+ .on('mouseout', function (id) {
+ $$.d3.select(this).classed(CLASS.legendItemFocused, false);
+ $$.api.revert();
+ if (config.legend_item_onmouseout) {
+ config.legend_item_onmouseout.call($$, id);
+ }
+ });
+ l.append('text')
+ .text(function (id) {
+ return isDefined(config.data_names[id]) ? config.data_names[id] : id;
+ })
+ .each(function (id, i) {
+ updatePositions(this, id, i);
+ })
+ .style("pointer-events", "none")
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);
+ l.append('rect')
+ .attr("class", CLASS.legendItemEvent)
+ .style('fill-opacity', 0)
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);
+ l.append('rect')
+ .attr("class", CLASS.legendItemTile)
+ .style("pointer-events", "none")
+ .style('fill', $$.color)
+ .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)
+ .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegend)
+ .attr('width', 10)
+ .attr('height', 10);
+
+ // Set background for inset legend
+ background = $$.legend.select('.' + CLASS.legendBackground + ' rect');
+ if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {
+ background = $$.legend.insert('g', '.' + CLASS.legendItem)
+ .attr("class", CLASS.legendBackground)
+ .append('rect');
+ }
+
+ texts = $$.legend.selectAll('text')
+ .data(targetIds)
+ .text(function (id) {
+ return isDefined(config.data_names[id]) ? config.data_names[id] : id;
+ }) // MEMO: needed for update
+ .each(function (id, i) {
+ updatePositions(this, id, i);
+ });
+ (withTransition ? texts.transition() : texts)
+ .attr('x', xForLegendText)
+ .attr('y', yForLegendText);
+
+ rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent)
+ .data(targetIds);
+ (withTransition ? rects.transition() : rects)
+ .attr('width', function (id) {
+ return widths[id];
+ })
+ .attr('height', function (id) {
+ return heights[id];
+ })
+ .attr('x', xForLegendRect)
+ .attr('y', yForLegendRect);
+
+ tiles = $$.legend.selectAll('rect.' + CLASS.legendItemTile)
+ .data(targetIds);
+ (withTransition ? tiles.transition() : tiles)
+ .style('fill', $$.color)
+ .attr('x', xForLegend)
+ .attr('y', yForLegend);
+
+ if (background) {
+ (withTransition ? background.transition() : background)
+ .attr('height', $$.getLegendHeight() - 12)
+ .attr('width', maxWidth * (step + 1) + 10);
+ }
+
+ // toggle legend state
+ $$.legend.selectAll('.' + CLASS.legendItem)
+ .classed(CLASS.legendItemHidden, function (id) {
+ return !$$.isTargetToShow(id);
+ })
+ .transition()
+ .style('opacity', function (id) {
+ var This = $$.d3.select(this);
+ if ($$.isTargetToShow(id)) {
+ return !hasFocused || This.classed(CLASS.legendItemFocused) ? $$.opacityForLegend(This) : $$.opacityForUnfocusedLegend(This);
+ } else {
+ return null; // c3-legend-item-hidden will be applied
+ }
+ });
+
+ // Update all to reflect change of legend
+ $$.updateLegendItemWidth(maxWidth);
+ $$.updateLegendItemHeight(maxHeight);
+ $$.updateLegendStep(step);
+ // Update size and scale
+ $$.updateSizes();
+ $$.updateScales();
+ $$.updateSvgSize();
+ // Update g positions
+ $$.transformAll(withTransitionForTransform, transitions);
+ $$.legendHasRendered = true;
+ };
+
+ c3_chart_internal_fn.initAxis = function () {
+ var $$ = this, config = $$.config, main = $$.main;
+ $$.axes.x = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisX)
+ .attr("clip-path", $$.clipPathForXAxis)
+ .attr("transform", $$.getTranslate('x'))
+ .style("visibility", config.axis_x_show ? 'visible' : 'hidden');
+ $$.axes.x.append("text")
+ .attr("class", CLASS.axisXLabel)
+ .attr("transform", config.axis_rotated ? "rotate(-90)" : "")
+ .style("text-anchor", $$.textAnchorForXAxisLabel.bind($$));
+
+ $$.axes.y = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisY)
+ .attr("clip-path", config.axis_y_inner ? "" : $$.clipPathForYAxis)
+ .attr("transform", $$.getTranslate('y'))
+ .style("visibility", config.axis_y_show ? 'visible' : 'hidden');
+ $$.axes.y.append("text")
+ .attr("class", CLASS.axisYLabel)
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .style("text-anchor", $$.textAnchorForYAxisLabel.bind($$));
+
+ $$.axes.y2 = main.append("g")
+ .attr("class", CLASS.axis + ' ' + CLASS.axisY2)
+ // clip-path?
+ .attr("transform", $$.getTranslate('y2'))
+ .style("visibility", config.axis_y2_show ? 'visible' : 'hidden');
+ $$.axes.y2.append("text")
+ .attr("class", CLASS.axisY2Label)
+ .attr("transform", config.axis_rotated ? "" : "rotate(-90)")
+ .style("text-anchor", $$.textAnchorForY2AxisLabel.bind($$));
+ };
+ c3_chart_internal_fn.getXAxis = function (scale, orient, tickFormat, tickValues, withOuterTick) {
+ var $$ = this, config = $$.config,
+ axisParams = {
+ isCategory: $$.isCategorized(),
+ withOuterTick: withOuterTick,
+ tickMultiline: config.axis_x_tick_multiline,
+ tickWidth: config.axis_x_tick_width
+ },
+ axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient);
+
+ if ($$.isTimeSeries() && tickValues) {
+ tickValues = tickValues.map(function (v) {
+ return $$.parseDate(v);
+ });
+ }
+
+ // Set tick
+ axis.tickFormat(tickFormat).tickValues(tickValues);
+ if ($$.isCategorized()) {
+ axis.tickCentered(config.axis_x_tick_centered);
+ if (isEmpty(config.axis_x_tick_culling)) {
+ config.axis_x_tick_culling = false;
+ }
+ } else {
+ // TODO: move this to c3_axis
+ axis.tickOffset = function () {
+ var scale = this.scale(),
+ edgeX = $$.getEdgeX($$.data.targets), diff = scale(edgeX[1]) - scale(edgeX[0]),
+ base = diff ? diff : (config.axis_rotated ? $$.height : $$.width);
+ return (base / $$.getMaxDataCount()) / 2;
+ };
+ }
+
+ return axis;
+ };
+ c3_chart_internal_fn.getYAxis = function (scale, orient, tickFormat, tickValues, withOuterTick) {
+ var axisParams = {withOuterTick: withOuterTick},
+ axis = c3_axis(this.d3, axisParams).scale(scale).orient(orient).tickFormat(tickFormat);
+ if (this.isTimeSeriesY()) {
+ axis.ticks(this.d3.time[this.config.axis_y_tick_time_value], this.config.axis_y_tick_time_interval);
+ } else {
+ axis.tickValues(tickValues);
+ }
+ return axis;
+ };
+ c3_chart_internal_fn.getAxisId = function (id) {
+ var config = this.config;
+ return id in config.data_axes ? config.data_axes[id] : 'y';
+ };
+ c3_chart_internal_fn.getXAxisTickFormat = function () {
+ var $$ = this, config = $$.config,
+ format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) {
+ return v < 0 ? v.toFixed(0) : v;
+ };
+ if (config.axis_x_tick_format) {
+ if (isFunction(config.axis_x_tick_format)) {
+ format = config.axis_x_tick_format;
+ } else if ($$.isTimeSeries()) {
+ format = function (date) {
+ return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : "";
+ };
+ }
+ }
+ return isFunction(format) ? function (v) {
+ return format.call($$, v);
+ } : format;
+ };
+ c3_chart_internal_fn.getAxisTickValues = function (tickValues, axis) {
+ return tickValues ? tickValues : axis ? axis.tickValues() : undefined;
+ };
+ c3_chart_internal_fn.getXAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_x_tick_values, this.xAxis);
+ };
+ c3_chart_internal_fn.getYAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y_tick_values, this.yAxis);
+ };
+ c3_chart_internal_fn.getY2AxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y2_tick_values, this.y2Axis);
+ };
+ c3_chart_internal_fn.getAxisLabelOptionByAxisId = function (axisId) {
+ var $$ = this, config = $$.config, option;
+ if (axisId === 'y') {
+ option = config.axis_y_label;
+ } else if (axisId === 'y2') {
+ option = config.axis_y2_label;
+ } else if (axisId === 'x') {
+ option = config.axis_x_label;
+ }
+ return option;
+ };
+ c3_chart_internal_fn.getAxisLabelText = function (axisId) {
+ var option = this.getAxisLabelOptionByAxisId(axisId);
+ return isString(option) ? option : option ? option.text : null;
+ };
+ c3_chart_internal_fn.setAxisLabelText = function (axisId, text) {
+ var $$ = this, config = $$.config,
+ option = $$.getAxisLabelOptionByAxisId(axisId);
+ if (isString(option)) {
+ if (axisId === 'y') {
+ config.axis_y_label = text;
+ } else if (axisId === 'y2') {
+ config.axis_y2_label = text;
+ } else if (axisId === 'x') {
+ config.axis_x_label = text;
+ }
+ } else if (option) {
+ option.text = text;
+ }
+ };
+ c3_chart_internal_fn.getAxisLabelPosition = function (axisId, defaultPosition) {
+ var option = this.getAxisLabelOptionByAxisId(axisId),
+ position = (option && typeof option === 'object' && option.position) ? option.position : defaultPosition;
+ return {
+ isInner: position.indexOf('inner') >= 0,
+ isOuter: position.indexOf('outer') >= 0,
+ isLeft: position.indexOf('left') >= 0,
+ isCenter: position.indexOf('center') >= 0,
+ isRight: position.indexOf('right') >= 0,
+ isTop: position.indexOf('top') >= 0,
+ isMiddle: position.indexOf('middle') >= 0,
+ isBottom: position.indexOf('bottom') >= 0
+ };
+ };
+ c3_chart_internal_fn.getXAxisLabelPosition = function () {
+ return this.getAxisLabelPosition('x', this.config.axis_rotated ? 'inner-top' : 'inner-right');
+ };
+ c3_chart_internal_fn.getYAxisLabelPosition = function () {
+ return this.getAxisLabelPosition('y', this.config.axis_rotated ? 'inner-right' : 'inner-top');
+ };
+ c3_chart_internal_fn.getY2AxisLabelPosition = function () {
+ return this.getAxisLabelPosition('y2', this.config.axis_rotated ? 'inner-right' : 'inner-top');
+ };
+ c3_chart_internal_fn.getAxisLabelPositionById = function (id) {
+ return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition();
+ };
+ c3_chart_internal_fn.textForXAxisLabel = function () {
+ return this.getAxisLabelText('x');
+ };
+ c3_chart_internal_fn.textForYAxisLabel = function () {
+ return this.getAxisLabelText('y');
+ };
+ c3_chart_internal_fn.textForY2AxisLabel = function () {
+ return this.getAxisLabelText('y2');
+ };
+ c3_chart_internal_fn.xForAxisLabel = function (forHorizontal, position) {
+ var $$ = this;
+ if (forHorizontal) {
+ return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;
+ } else {
+ return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0;
+ }
+ };
+ c3_chart_internal_fn.dxForAxisLabel = function (forHorizontal, position) {
+ if (forHorizontal) {
+ return position.isLeft ? "0.5em" : position.isRight ? "-0.5em" : "0";
+ } else {
+ return position.isTop ? "-0.5em" : position.isBottom ? "0.5em" : "0";
+ }
+ };
+ c3_chart_internal_fn.textAnchorForAxisLabel = function (forHorizontal, position) {
+ if (forHorizontal) {
+ return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';
+ } else {
+ return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';
+ }
+ };
+ c3_chart_internal_fn.xForXAxisLabel = function () {
+ return this.xForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.xForYAxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.xForY2AxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForXAxisLabel = function () {
+ return this.dxForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForYAxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.dxForY2AxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition());
+ };
+ c3_chart_internal_fn.dyForXAxisLabel = function () {
+ var $$ = this, config = $$.config,
+ position = $$.getXAxisLabelPosition();
+ if (config.axis_rotated) {
+ return position.isInner ? "1.2em" : -25 - $$.getMaxTickWidth('x');
+ } else {
+ return position.isInner ? "-0.5em" : config.axis_x_height ? config.axis_x_height - 10 : "3em";
+ }
+ };
+ c3_chart_internal_fn.dyForYAxisLabel = function () {
+ var $$ = this,
+ position = $$.getYAxisLabelPosition();
+ if ($$.config.axis_rotated) {
+ return position.isInner ? "-0.5em" : "3em";
+ } else {
+ return position.isInner ? "1.2em" : -10 - ($$.config.axis_y_inner ? 0 : ($$.getMaxTickWidth('y') + 10));
+ }
+ };
+ c3_chart_internal_fn.dyForY2AxisLabel = function () {
+ var $$ = this,
+ position = $$.getY2AxisLabelPosition();
+ if ($$.config.axis_rotated) {
+ return position.isInner ? "1.2em" : "-2.2em";
+ } else {
+ return position.isInner ? "-0.5em" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth('y2') + 15));
+ }
+ };
+ c3_chart_internal_fn.textAnchorForXAxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel(!$$.config.axis_rotated, $$.getXAxisLabelPosition());
+ };
+ c3_chart_internal_fn.textAnchorForYAxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel($$.config.axis_rotated, $$.getYAxisLabelPosition());
+ };
+ c3_chart_internal_fn.textAnchorForY2AxisLabel = function () {
+ var $$ = this;
+ return $$.textAnchorForAxisLabel($$.config.axis_rotated, $$.getY2AxisLabelPosition());
+ };
+
+ c3_chart_internal_fn.xForRotatedTickText = function (r) {
+ return 8 * Math.sin(Math.PI * (r / 180));
+ };
+ c3_chart_internal_fn.yForRotatedTickText = function (r) {
+ return 11.5 - 2.5 * (r / 15) * (r > 0 ? 1 : -1);
+ };
+ c3_chart_internal_fn.rotateTickText = function (axis, transition, rotate) {
+ axis.selectAll('.tick text')
+ .style("text-anchor", rotate > 0 ? "start" : "end");
+ transition.selectAll('.tick text')
+ .attr("y", this.yForRotatedTickText(rotate))
+ .attr("transform", "rotate(" + rotate + ")")
+ .selectAll('tspan')
+ .attr('dx', this.xForRotatedTickText(rotate));
+ };
+
+ c3_chart_internal_fn.getMaxTickWidth = function (id, withoutRecompute) {
+ var $$ = this, config = $$.config,
+ maxWidth = 0, targetsToShow, scale, axis;
+ if (withoutRecompute && $$.currentMaxTickWidths[id]) {
+ return $$.currentMaxTickWidths[id];
+ }
+ if ($$.svg) {
+ targetsToShow = $$.filterTargetsToShow($$.data.targets);
+ if (id === 'y') {
+ scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));
+ axis = $$.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues);
+ } else if (id === 'y2') {
+ scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));
+ axis = $$.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues);
+ } else {
+ scale = $$.x.copy().domain($$.getXDomain(targetsToShow));
+ axis = $$.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues);
+ }
+ $$.d3.select('body').append("g").style('visibility', 'hidden').call(axis).each(function () {
+ $$.d3.select(this).selectAll('text tspan').each(function () {
+ var box = this.getBoundingClientRect();
+ if (box.left > 0 && maxWidth < box.width) {
+ maxWidth = box.width;
+ }
+ });
+ }).remove();
+ }
+ $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;
+ return $$.currentMaxTickWidths[id];
+ };
+
+ c3_chart_internal_fn.updateAxisLabels = function (withTransition) {
+ var $$ = this;
+ var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel),
+ axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel),
+ axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);
+ (withTransition ? axisXLabel.transition() : axisXLabel)
+ .attr("x", $$.xForXAxisLabel.bind($$))
+ .attr("dx", $$.dxForXAxisLabel.bind($$))
+ .attr("dy", $$.dyForXAxisLabel.bind($$))
+ .text($$.textForXAxisLabel.bind($$));
+ (withTransition ? axisYLabel.transition() : axisYLabel)
+ .attr("x", $$.xForYAxisLabel.bind($$))
+ .attr("dx", $$.dxForYAxisLabel.bind($$))
+ .attr("dy", $$.dyForYAxisLabel.bind($$))
+ .text($$.textForYAxisLabel.bind($$));
+ (withTransition ? axisY2Label.transition() : axisY2Label)
+ .attr("x", $$.xForY2AxisLabel.bind($$))
+ .attr("dx", $$.dxForY2AxisLabel.bind($$))
+ .attr("dy", $$.dyForY2AxisLabel.bind($$))
+ .text($$.textForY2AxisLabel.bind($$));
+ };
+
+ c3_chart_internal_fn.getAxisPadding = function (padding, key, defaultValue, domainLength) {
+ if (!isValue(padding[key])) {
+ return defaultValue;
+ }
+ if (padding.unit === 'ratio') {
+ return padding[key] * domainLength;
+ }
+ // assume padding is pixels if unit is not specified
+ return this.convertPixelsToAxisPadding(padding[key], domainLength);
+ };
+ c3_chart_internal_fn.convertPixelsToAxisPadding = function (pixels, domainLength) {
+ var length = this.config.axis_rotated ? this.width : this.height;
+ return domainLength * (pixels / length);
+ };
+
+ c3_chart_internal_fn.generateTickValues = function (values, tickCount, forTimeSeries) {
+ var tickValues = values, targetCount, start, end, count, interval, i, tickValue;
+ if (tickCount) {
+ targetCount = isFunction(tickCount) ? tickCount() : tickCount;
+ // compute ticks according to tickCount
+ if (targetCount === 1) {
+ tickValues = [values[0]];
+ } else if (targetCount === 2) {
+ tickValues = [values[0], values[values.length - 1]];
+ } else if (targetCount > 2) {
+ count = targetCount - 2;
+ start = values[0];
+ end = values[values.length - 1];
+ interval = (end - start) / (count + 1);
+ // re-construct unique values
+ tickValues = [start];
+ for (i = 0; i < count; i++) {
+ tickValue = +start + interval * (i + 1);
+ tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);
+ }
+ tickValues.push(end);
+ }
+ }
+ if (!forTimeSeries) {
+ tickValues = tickValues.sort(function (a, b) {
+ return a - b;
+ });
+ }
+ return tickValues;
+ };
+ c3_chart_internal_fn.generateAxisTransitions = function (duration) {
+ var $$ = this, axes = $$.axes;
+ return {
+ axisX: duration ? axes.x.transition().duration(duration) : axes.x,
+ axisY: duration ? axes.y.transition().duration(duration) : axes.y,
+ axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,
+ axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx
+ };
+ };
+ c3_chart_internal_fn.redrawAxis = function (transitions, isHidden) {
+ var $$ = this, config = $$.config;
+ $$.axes.x.style("opacity", isHidden ? 0 : 1);
+ $$.axes.y.style("opacity", isHidden ? 0 : 1);
+ $$.axes.y2.style("opacity", isHidden ? 0 : 1);
+ $$.axes.subx.style("opacity", isHidden ? 0 : 1);
+ transitions.axisX.call($$.xAxis);
+ transitions.axisY.call($$.yAxis);
+ transitions.axisY2.call($$.y2Axis);
+ transitions.axisSubX.call($$.subXAxis);
+ // rotate tick text if needed
+ if (!config.axis_rotated && config.axis_x_tick_rotate) {
+ $$.rotateTickText($$.axes.x, transitions.axisX, config.axis_x_tick_rotate);
+ $$.rotateTickText($$.axes.subx, transitions.axisSubX, config.axis_x_tick_rotate);
+ }
+ };
+
+ c3_chart_internal_fn.getClipPath = function (id) {
+ var isIE9 = window.navigator.appVersion.toLowerCase().indexOf("msie 9.") >= 0;
+ return "url(" + (isIE9 ? "" : document.URL.split('#')[0]) + "#" + id + ")";
+ };
+ c3_chart_internal_fn.appendClip = function (parent, id) {
+ return parent.append("clipPath").attr("id", id).append("rect");
+ };
+ c3_chart_internal_fn.getAxisClipX = function (forHorizontal) {
+ // axis line width + padding for left
+ var left = Math.max(30, this.margin.left);
+ return forHorizontal ? -(1 + left) : -(left - 1);
+ };
+ c3_chart_internal_fn.getAxisClipY = function (forHorizontal) {
+ return forHorizontal ? -20 : -this.margin.top;
+ };
+ c3_chart_internal_fn.getXAxisClipX = function () {
+ var $$ = this;
+ return $$.getAxisClipX(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getXAxisClipY = function () {
+ var $$ = this;
+ return $$.getAxisClipY(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipX = function () {
+ var $$ = this;
+ return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipY = function () {
+ var $$ = this;
+ return $$.getAxisClipY($$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getAxisClipWidth = function (forHorizontal) {
+ var $$ = this,
+ left = Math.max(30, $$.margin.left),
+ right = Math.max(30, $$.margin.right);
+ // width + axis line width + padding for left/right
+ return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;
+ };
+ c3_chart_internal_fn.getAxisClipHeight = function (forHorizontal) {
+ // less than 20 is not enough to show the axis label 'outer' without legend
+ return (forHorizontal ? this.margin.bottom : (this.margin.top + this.height)) + 20;
+ };
+ c3_chart_internal_fn.getXAxisClipWidth = function () {
+ var $$ = this;
+ return $$.getAxisClipWidth(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getXAxisClipHeight = function () {
+ var $$ = this;
+ return $$.getAxisClipHeight(!$$.config.axis_rotated);
+ };
+ c3_chart_internal_fn.getYAxisClipWidth = function () {
+ var $$ = this;
+ return $$.getAxisClipWidth($$.config.axis_rotated) + ($$.config.axis_y_inner ? 20 : 0);
+ };
+ c3_chart_internal_fn.getYAxisClipHeight = function () {
+ var $$ = this;
+ return $$.getAxisClipHeight($$.config.axis_rotated);
+ };
+
+ c3_chart_internal_fn.initPie = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config;
+ $$.pie = d3.layout.pie().value(function (d) {
+ return d.values.reduce(function (a, b) {
+ return a + b.value;
+ }, 0);
+ });
+ if (!config.data_order) {
+ $$.pie.sort(null);
+ }
+ };
+
+ c3_chart_internal_fn.updateRadius = function () {
+ var $$ = this, config = $$.config,
+ w = config.gauge_width || config.donut_width;
+ $$.radiusExpanded = Math.min($$.arcWidth, $$.arcHeight) / 2;
+ $$.radius = $$.radiusExpanded * 0.95;
+ $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;
+ $$.innerRadius = $$.hasType('donut') || $$.hasType('gauge') ? $$.radius * $$.innerRadiusRatio : 0;
+ };
+
+ c3_chart_internal_fn.updateArc = function () {
+ var $$ = this;
+ $$.svgArc = $$.getSvgArc();
+ $$.svgArcExpanded = $$.getSvgArcExpanded();
+ $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);
+ };
+
+ c3_chart_internal_fn.updateAngle = function (d) {
+ var $$ = this, config = $$.config,
+ found = false, index = 0,
+ gMin = config.gauge_min, gMax = config.gauge_max, gTic, gValue;
+ $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {
+ if (!found && t.data.id === d.data.id) {
+ found = true;
+ d = t;
+ d.index = index;
+ }
+ index++;
+ });
+ if (isNaN(d.endAngle)) {
+ d.endAngle = d.startAngle;
+ }
+ if ($$.isGaugeType(d.data)) {
+ gTic = (Math.PI) / (gMax - gMin);
+ gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : (gMax - gMin);
+ d.startAngle = -1 * (Math.PI / 2);
+ d.endAngle = d.startAngle + gTic * gValue;
+ }
+ return found ? d : null;
+ };
+
+ c3_chart_internal_fn.getSvgArc = function () {
+ var $$ = this,
+ arc = $$.d3.svg.arc().outerRadius($$.radius).innerRadius($$.innerRadius),
+ newArc = function (d, withoutUpdate) {
+ var updated;
+ if (withoutUpdate) {
+ return arc(d);
+ } // for interpolate
+ updated = $$.updateAngle(d);
+ return updated ? arc(updated) : "M 0 0";
+ };
+ // TODO: extends all function
+ newArc.centroid = arc.centroid;
+ return newArc;
+ };
+
+ c3_chart_internal_fn.getSvgArcExpanded = function (rate) {
+ var $$ = this,
+ arc = $$.d3.svg.arc().outerRadius($$.radiusExpanded * (rate ? rate : 1)).innerRadius($$.innerRadius);
+ return function (d) {
+ var updated = $$.updateAngle(d);
+ return updated ? arc(updated) : "M 0 0";
+ };
+ };
+
+ c3_chart_internal_fn.getArc = function (d, withoutUpdate, force) {
+ return force || this.isArcType(d.data) ? this.svgArc(d, withoutUpdate) : "M 0 0";
+ };
+
+
+ c3_chart_internal_fn.transformForArcLabel = function (d) {
+ var $$ = this,
+ updated = $$.updateAngle(d), c, x, y, h, ratio, translate = "";
+ if (updated && !$$.hasType('gauge')) {
+ c = this.svgArc.centroid(updated);
+ x = isNaN(c[0]) ? 0 : c[0];
+ y = isNaN(c[1]) ? 0 : c[1];
+ h = Math.sqrt(x * x + y * y);
+ // TODO: ratio should be an option?
+ ratio = $$.radius && h ? (36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) * $$.radius / h : 0;
+ translate = "translate(" + (x * ratio) + ',' + (y * ratio) + ")";
+ }
+ return translate;
+ };
+
+ c3_chart_internal_fn.getArcRatio = function (d) {
+ var $$ = this,
+ whole = $$.hasType('gauge') ? Math.PI : (Math.PI * 2);
+ return d ? (d.endAngle - d.startAngle) / whole : null;
+ };
+
+ c3_chart_internal_fn.convertToArcData = function (d) {
+ return this.addName({
+ id: d.data.id,
+ value: d.value,
+ ratio: this.getArcRatio(d),
+ index: d.index
+ });
+ };
+
+ c3_chart_internal_fn.textForArcLabel = function (d) {
+ var $$ = this,
+ updated, value, ratio, id, format;
+ if (!$$.shouldShowArcLabel()) {
+ return "";
+ }
+ updated = $$.updateAngle(d);
+ value = updated ? updated.value : null;
+ ratio = $$.getArcRatio(updated);
+ id = d.data.id;
+ if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) {
+ return "";
+ }
+ format = $$.getArcLabelFormat();
+ return format ? format(value, ratio, id) : $$.defaultArcValueFormat(value, ratio);
+ };
+
+ c3_chart_internal_fn.expandArc = function (targetIds) {
+ var $$ = this, interval;
+
+ // MEMO: avoid to cancel transition
+ if ($$.transiting) {
+ interval = window.setInterval(function () {
+ if (!$$.transiting) {
+ window.clearInterval(interval);
+ if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {
+ $$.expandArc(targetIds);
+ }
+ }
+ }, 10);
+ return;
+ }
+
+ targetIds = $$.mapToTargetIds(targetIds);
+
+ $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).each(function (d) {
+ if (!$$.shouldExpand(d.data.id)) {
+ return;
+ }
+ $$.d3.select(this).selectAll('path')
+ .transition().duration(50)
+ .attr("d", $$.svgArcExpanded)
+ .transition().duration(100)
+ .attr("d", $$.svgArcExpandedSub)
+ .each(function (d) {
+ if ($$.isDonutType(d.data)) {
+ // callback here
+ }
+ });
+ });
+ };
+
+ c3_chart_internal_fn.unexpandArc = function (targetIds) {
+ var $$ = this;
+
+ if ($$.transiting) {
+ return;
+ }
+
+ targetIds = $$.mapToTargetIds(targetIds);
+
+ $$.svg.selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc)).selectAll('path')
+ .transition().duration(50)
+ .attr("d", $$.svgArc);
+ $$.svg.selectAll('.' + CLASS.arc)
+ .style("opacity", 1);
+ };
+
+ c3_chart_internal_fn.shouldExpand = function (id) {
+ var $$ = this, config = $$.config;
+ return ($$.isDonutType(id) && config.donut_expand) || ($$.isGaugeType(id) && config.gauge_expand) || ($$.isPieType(id) && config.pie_expand);
+ };
+
+ c3_chart_internal_fn.shouldShowArcLabel = function () {
+ var $$ = this, config = $$.config, shouldShow = true;
+ if ($$.hasType('donut')) {
+ shouldShow = config.donut_label_show;
+ } else if ($$.hasType('pie')) {
+ shouldShow = config.pie_label_show;
+ }
+ // when gauge, always true
+ return shouldShow;
+ };
+
+ c3_chart_internal_fn.meetsArcLabelThreshold = function (ratio) {
+ var $$ = this, config = $$.config,
+ threshold = $$.hasType('donut') ? config.donut_label_threshold : config.pie_label_threshold;
+ return ratio >= threshold;
+ };
+
+ c3_chart_internal_fn.getArcLabelFormat = function () {
+ var $$ = this, config = $$.config,
+ format = config.pie_label_format;
+ if ($$.hasType('gauge')) {
+ format = config.gauge_label_format;
+ } else if ($$.hasType('donut')) {
+ format = config.donut_label_format;
+ }
+ return format;
+ };
+
+ c3_chart_internal_fn.getArcTitle = function () {
+ var $$ = this;
+ return $$.hasType('donut') ? $$.config.donut_title : "";
+ };
+
+ c3_chart_internal_fn.updateTargetsForArc = function (targets) {
+ var $$ = this, main = $$.main,
+ mainPieUpdate, mainPieEnter,
+ classChartArc = $$.classChartArc.bind($$),
+ classArcs = $$.classArcs.bind($$),
+ classFocus = $$.classFocus.bind($$);
+ mainPieUpdate = main.select('.' + CLASS.chartArcs).selectAll('.' + CLASS.chartArc)
+ .data($$.pie(targets))
+ .attr("class", function (d) {
+ return classChartArc(d) + classFocus(d.data);
+ });
+ mainPieEnter = mainPieUpdate.enter().append("g")
+ .attr("class", classChartArc);
+ mainPieEnter.append('g')
+ .attr('class', classArcs);
+ mainPieEnter.append("text")
+ .attr("dy", $$.hasType('gauge') ? "-.1em" : ".35em")
+ .style("opacity", 0)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ // MEMO: can not keep same color..., but not bad to update color in redraw
+ //mainPieUpdate.exit().remove();
+ };
+
+ c3_chart_internal_fn.initArc = function () {
+ var $$ = this;
+ $$.arcs = $$.main.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartArcs)
+ .attr("transform", $$.getTranslate('arc'));
+ $$.arcs.append('text')
+ .attr('class', CLASS.chartArcsTitle)
+ .style("text-anchor", "middle")
+ .text($$.getArcTitle());
+ };
+
+ c3_chart_internal_fn.redrawArc = function (duration, durationForExit, withTransform) {
+ var $$ = this, d3 = $$.d3, config = $$.config, main = $$.main,
+ mainArc;
+ mainArc = main.selectAll('.' + CLASS.arcs).selectAll('.' + CLASS.arc)
+ .data($$.arcData.bind($$));
+ mainArc.enter().append('path')
+ .attr("class", $$.classArc.bind($$))
+ .style("fill", function (d) {
+ return $$.color(d.data);
+ })
+ .style("cursor", function (d) {
+ return config.interaction_enabled && config.data_selection_isselectable(d) ? "pointer" : null;
+ })
+ .style("opacity", 0)
+ .each(function (d) {
+ if ($$.isGaugeType(d.data)) {
+ d.startAngle = d.endAngle = -1 * (Math.PI / 2);
+ }
+ this._current = d;
+ });
+ mainArc
+ .attr("transform", function (d) {
+ return !$$.isGaugeType(d.data) && withTransform ? "scale(0)" : "";
+ })
+ .style("opacity", function (d) {
+ return d === this._current ? 0 : 1;
+ })
+ .on('mouseover', config.interaction_enabled ? function (d) {
+ var updated, arcData;
+ if ($$.transiting) { // skip while transiting
+ return;
+ }
+ updated = $$.updateAngle(d);
+ arcData = $$.convertToArcData(updated);
+ // transitions
+ $$.expandArc(updated.data.id);
+ $$.api.focus(updated.data.id);
+ $$.toggleFocusLegend(updated.data.id, true);
+ $$.config.data_onmouseover(arcData, this);
+ } : null)
+ .on('mousemove', config.interaction_enabled ? function (d) {
+ var updated = $$.updateAngle(d),
+ arcData = $$.convertToArcData(updated),
+ selectedData = [arcData];
+ $$.showTooltip(selectedData, this);
+ } : null)
+ .on('mouseout', config.interaction_enabled ? function (d) {
+ var updated, arcData;
+ if ($$.transiting) { // skip while transiting
+ return;
+ }
+ updated = $$.updateAngle(d);
+ arcData = $$.convertToArcData(updated);
+ // transitions
+ $$.unexpandArc(updated.data.id);
+ $$.api.revert();
+ $$.revertLegend();
+ $$.hideTooltip();
+ $$.config.data_onmouseout(arcData, this);
+ } : null)
+ .on('click', config.interaction_enabled ? function (d, i) {
+ var updated = $$.updateAngle(d),
+ arcData = $$.convertToArcData(updated);
+ if ($$.toggleShape) {
+ $$.toggleShape(this, arcData, i);
+ }
+ $$.config.data_onclick.call($$.api, arcData, this);
+ } : null)
+ .each(function () {
+ $$.transiting = true;
+ })
+ .transition().duration(duration)
+ .attrTween("d", function (d) {
+ var updated = $$.updateAngle(d), interpolate;
+ if (!updated) {
+ return function () {
+ return "M 0 0";
+ };
+ }
+ // if (this._current === d) {
+ // this._current = {
+ // startAngle: Math.PI*2,
+ // endAngle: Math.PI*2,
+ // };
+ // }
+ if (isNaN(this._current.endAngle)) {
+ this._current.endAngle = this._current.startAngle;
+ }
+ interpolate = d3.interpolate(this._current, updated);
+ this._current = interpolate(0);
+ return function (t) {
+ var interpolated = interpolate(t);
+ interpolated.data = d.data; // data.id will be updated by interporator
+ return $$.getArc(interpolated, true);
+ };
+ })
+ .attr("transform", withTransform ? "scale(1)" : "")
+ .style("fill", function (d) {
+ return $$.levelColor ? $$.levelColor(d.data.values[0].value) : $$.color(d.data.id);
+ }) // Where gauge reading color would receive customization.
+ .style("opacity", 1)
+ .call($$.endall, function () {
+ $$.transiting = false;
+ });
+ mainArc.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ main.selectAll('.' + CLASS.chartArc).select('text')
+ .style("opacity", 0)
+ .attr('class', function (d) {
+ return $$.isGaugeType(d.data) ? CLASS.gaugeValue : '';
+ })
+ .text($$.textForArcLabel.bind($$))
+ .attr("transform", $$.transformForArcLabel.bind($$))
+ .style('font-size', function (d) {
+ return $$.isGaugeType(d.data) ? Math.round($$.radius / 5) + 'px' : '';
+ })
+ .transition().duration(duration)
+ .style("opacity", function (d) {
+ return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0;
+ });
+ main.select('.' + CLASS.chartArcsTitle)
+ .style("opacity", $$.hasType('donut') || $$.hasType('gauge') ? 1 : 0);
+
+ if ($$.hasType('gauge')) {
+ $$.arcs.select('.' + CLASS.chartArcsBackground)
+ .attr("d", function () {
+ var d = {
+ data: [{value: config.gauge_max}],
+ startAngle: -1 * (Math.PI / 2),
+ endAngle: Math.PI / 2
+ };
+ return $$.getArc(d, true, true);
+ });
+ $$.arcs.select('.' + CLASS.chartArcsGaugeUnit)
+ .attr("dy", ".75em")
+ .text(config.gauge_label_show ? config.gauge_units : '');
+ $$.arcs.select('.' + CLASS.chartArcsGaugeMin)
+ .attr("dx", -1 * ($$.innerRadius + (($$.radius - $$.innerRadius) / 2)) + "px")
+ .attr("dy", "1.2em")
+ .text(config.gauge_label_show ? config.gauge_min : '');
+ $$.arcs.select('.' + CLASS.chartArcsGaugeMax)
+ .attr("dx", $$.innerRadius + (($$.radius - $$.innerRadius) / 2) + "px")
+ .attr("dy", "1.2em")
+ .text(config.gauge_label_show ? config.gauge_max : '');
+ }
+ };
+ c3_chart_internal_fn.initGauge = function () {
+ var arcs = this.arcs;
+ if (this.hasType('gauge')) {
+ arcs.append('path')
+ .attr("class", CLASS.chartArcsBackground);
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeUnit)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeMin)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ arcs.append("text")
+ .attr("class", CLASS.chartArcsGaugeMax)
+ .style("text-anchor", "middle")
+ .style("pointer-events", "none");
+ }
+ };
+ c3_chart_internal_fn.getGaugeLabelHeight = function () {
+ return this.config.gauge_label_show ? 20 : 0;
+ };
+
+ c3_chart_internal_fn.initRegion = function () {
+ var $$ = this;
+ $$.region = $$.main.append('g')
+ .attr("clip-path", $$.clipPath)
+ .attr("class", CLASS.regions);
+ };
+ c3_chart_internal_fn.redrawRegion = function (duration) {
+ var $$ = this, config = $$.config;
+
+ // hide if arc type
+ $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');
+
+ $$.mainRegion = $$.main.select('.' + CLASS.regions).selectAll('.' + CLASS.region)
+ .data(config.regions);
+ $$.mainRegion.enter().append('g')
+ .attr('class', $$.classRegion.bind($$))
+ .append('rect')
+ .style("fill-opacity", 0);
+ $$.mainRegion.exit().transition().duration(duration)
+ .style("opacity", 0)
+ .remove();
+ };
+ c3_chart_internal_fn.addTransitionForRegion = function (transitions) {
+ var $$ = this,
+ x = $$.regionX.bind($$),
+ y = $$.regionY.bind($$),
+ w = $$.regionWidth.bind($$),
+ h = $$.regionHeight.bind($$);
+ transitions.push($$.mainRegion.selectAll('rect').transition()
+ .attr("x", x)
+ .attr("y", y)
+ .attr("width", w)
+ .attr("height", h)
+ .style("fill-opacity", function (d) {
+ return isValue(d.opacity) ? d.opacity : 0.1;
+ }));
+ };
+ c3_chart_internal_fn.regionX = function (d) {
+ var $$ = this, config = $$.config,
+ xPos, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0;
+ } else {
+ xPos = config.axis_rotated ? 0 : ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0);
+ }
+ return xPos;
+ };
+ c3_chart_internal_fn.regionY = function (d) {
+ var $$ = this, config = $$.config,
+ yPos, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ yPos = config.axis_rotated ? 0 : ('end' in d ? yScale(d.end) : 0);
+ } else {
+ yPos = config.axis_rotated ? ('start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0) : 0;
+ }
+ return yPos;
+ };
+ c3_chart_internal_fn.regionWidth = function (d) {
+ var $$ = this, config = $$.config,
+ start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ end = config.axis_rotated ? ('end' in d ? yScale(d.end) : $$.width) : $$.width;
+ } else {
+ end = config.axis_rotated ? $$.width : ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width);
+ }
+ return end < start ? 0 : end - start;
+ };
+ c3_chart_internal_fn.regionHeight = function (d) {
+ var $$ = this, config = $$.config,
+ start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;
+ if (d.axis === 'y' || d.axis === 'y2') {
+ end = config.axis_rotated ? $$.height : ('start' in d ? yScale(d.start) : $$.height);
+ } else {
+ end = config.axis_rotated ? ('end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height) : $$.height;
+ }
+ return end < start ? 0 : end - start;
+ };
+ c3_chart_internal_fn.isRegionOnX = function (d) {
+ return !d.axis || d.axis === 'x';
+ };
+
+ c3_chart_internal_fn.drag = function (mouse) {
+ var $$ = this, config = $$.config, main = $$.main, d3 = $$.d3;
+ var sx, sy, mx, my, minX, maxX, minY, maxY;
+
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ if (config.zoom_enabled && !$$.zoom.altDomain) {
+ return;
+ } // skip if zoomable because of conflict drag dehavior
+ if (!config.data_selection_multiple) {
+ return;
+ } // skip when single selection because drag is used for multiple selection
+
+ sx = $$.dragStart[0];
+ sy = $$.dragStart[1];
+ mx = mouse[0];
+ my = mouse[1];
+ minX = Math.min(sx, mx);
+ maxX = Math.max(sx, mx);
+ minY = (config.data_selection_grouped) ? $$.margin.top : Math.min(sy, my);
+ maxY = (config.data_selection_grouped) ? $$.height : Math.max(sy, my);
+
+ main.select('.' + CLASS.dragarea)
+ .attr('x', minX)
+ .attr('y', minY)
+ .attr('width', maxX - minX)
+ .attr('height', maxY - minY);
+ // TODO: binary search when multiple xs
+ main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape)
+ .filter(function (d) {
+ return config.data_selection_isselectable(d);
+ })
+ .each(function (d, i) {
+ var shape = d3.select(this),
+ isSelected = shape.classed(CLASS.SELECTED),
+ isIncluded = shape.classed(CLASS.INCLUDED),
+ _x, _y, _w, _h, toggle, isWithin = false, box;
+ if (shape.classed(CLASS.circle)) {
+ _x = shape.attr("cx") * 1;
+ _y = shape.attr("cy") * 1;
+ toggle = $$.togglePoint;
+ isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;
+ }
+ else if (shape.classed(CLASS.bar)) {
+ box = getPathBox(this);
+ _x = box.x;
+ _y = box.y;
+ _w = box.width;
+ _h = box.height;
+ toggle = $$.togglePath;
+ isWithin = !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);
+ } else {
+ // line/area selection not supported yet
+ return;
+ }
+ if (isWithin ^ isIncluded) {
+ shape.classed(CLASS.INCLUDED, !isIncluded);
+ // TODO: included/unincluded callback here
+ shape.classed(CLASS.SELECTED, !isSelected);
+ toggle.call($$, !isSelected, shape, d, i);
+ }
+ });
+ };
+
+ c3_chart_internal_fn.dragstart = function (mouse) {
+ var $$ = this, config = $$.config;
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ $$.dragStart = mouse;
+ $$.main.select('.' + CLASS.chart).append('rect')
+ .attr('class', CLASS.dragarea)
+ .style('opacity', 0.1);
+ $$.dragging = true;
+ $$.config.data_ondragstart.call($$.api);
+ };
+
+ c3_chart_internal_fn.dragend = function () {
+ var $$ = this, config = $$.config;
+ if ($$.hasArcType()) {
+ return;
+ }
+ if (!config.data_selection_enabled) {
+ return;
+ } // do nothing if not selectable
+ $$.main.select('.' + CLASS.dragarea)
+ .transition().duration(100)
+ .style('opacity', 0)
+ .remove();
+ $$.main.selectAll('.' + CLASS.shape)
+ .classed(CLASS.INCLUDED, false);
+ $$.dragging = false;
+ $$.config.data_ondragend.call($$.api);
+ };
+
+
+ c3_chart_internal_fn.selectPoint = function (target, d, i) {
+ var $$ = this, config = $$.config,
+ cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$),
+ cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$),
+ r = $$.pointSelectR.bind($$);
+ config.data_onselected.call($$.api, d, target.node());
+ // add selected-circle on low layer g
+ $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)
+ .data([d])
+ .enter().append('circle')
+ .attr("class", function () {
+ return $$.generateClass(CLASS.selectedCircle, i);
+ })
+ .attr("cx", cx)
+ .attr("cy", cy)
+ .attr("stroke", function () {
+ return $$.color(d);
+ })
+ .attr("r", function (d) {
+ return $$.pointSelectR(d) * 1.4;
+ })
+ .transition().duration(100)
+ .attr("r", r);
+ };
+ c3_chart_internal_fn.unselectPoint = function (target, d, i) {
+ var $$ = this;
+ $$.config.data_onunselected(d, target.node());
+ // remove selected-circle from low layer g
+ $$.main.select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id)).selectAll('.' + CLASS.selectedCircle + '-' + i)
+ .transition().duration(100).attr('r', 0)
+ .remove();
+ };
+ c3_chart_internal_fn.togglePoint = function (selected, target, d, i) {
+ selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);
+ };
+ c3_chart_internal_fn.selectPath = function (target, d) {
+ var $$ = this;
+ $$.config.data_onselected.call($$, d, target.node());
+ target.transition().duration(100)
+ .style("fill", function () {
+ return $$.d3.rgb($$.color(d)).brighter(0.75);
+ });
+ };
+ c3_chart_internal_fn.unselectPath = function (target, d) {
+ var $$ = this;
+ $$.config.data_onunselected.call($$, d, target.node());
+ target.transition().duration(100)
+ .style("fill", function () {
+ return $$.color(d);
+ });
+ };
+ c3_chart_internal_fn.togglePath = function (selected, target, d, i) {
+ selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);
+ };
+ c3_chart_internal_fn.getToggle = function (that, d) {
+ var $$ = this, toggle;
+ if (that.nodeName === 'circle') {
+ if ($$.isStepType(d)) {
+ // circle is hidden in step chart, so treat as within the click area
+ toggle = function () {
+ }; // TODO: how to select step chart?
+ } else {
+ toggle = $$.togglePoint;
+ }
+ }
+ else if (that.nodeName === 'path') {
+ toggle = $$.togglePath;
+ }
+ return toggle;
+ };
+ c3_chart_internal_fn.toggleShape = function (that, d, i) {
+ var $$ = this, d3 = $$.d3, config = $$.config,
+ shape = d3.select(that), isSelected = shape.classed(CLASS.SELECTED),
+ toggle = $$.getToggle(that, d).bind($$);
+
+ if (config.data_selection_enabled && config.data_selection_isselectable(d)) {
+ if (!config.data_selection_multiple) {
+ $$.main.selectAll('.' + CLASS.shapes + (config.data_selection_grouped ? $$.getTargetSelectorSuffix(d.id) : "")).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this);
+ if (shape.classed(CLASS.SELECTED)) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ });
+ }
+ shape.classed(CLASS.SELECTED, !isSelected);
+ toggle(!isSelected, shape, d, i);
+ }
+ };
+
+ c3_chart_internal_fn.initBrush = function () {
+ var $$ = this, d3 = $$.d3;
+ $$.brush = d3.svg.brush().on("brush", function () {
+ $$.redrawForBrush();
+ });
+ $$.brush.update = function () {
+ if ($$.context) {
+ $$.context.select('.' + CLASS.brush).call(this);
+ }
+ return this;
+ };
+ $$.brush.scale = function (scale) {
+ return $$.config.axis_rotated ? this.y(scale) : this.x(scale);
+ };
+ };
+ c3_chart_internal_fn.initSubchart = function () {
+ var $$ = this, config = $$.config,
+ context = $$.context = $$.svg.append("g").attr("transform", $$.getTranslate('context'));
+
+ if (!config.subchart_show) {
+ context.style('visibility', 'hidden');
+ }
+
+ // Define g for chart area
+ context.append('g')
+ .attr("clip-path", $$.clipPathForSubchart)
+ .attr('class', CLASS.chart);
+
+ // Define g for bar chart area
+ context.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartBars);
+
+ // Define g for line chart area
+ context.select('.' + CLASS.chart).append("g")
+ .attr("class", CLASS.chartLines);
+
+ // Add extent rect for Brush
+ context.append("g")
+ .attr("clip-path", $$.clipPath)
+ .attr("class", CLASS.brush)
+ .call($$.brush)
+ .selectAll("rect")
+ .attr(config.axis_rotated ? "width" : "height", config.axis_rotated ? $$.width2 : $$.height2);
+
+ // ATTENTION: This must be called AFTER chart added
+ // Add Axis
+ $$.axes.subx = context.append("g")
+ .attr("class", CLASS.axisX)
+ .attr("transform", $$.getTranslate('subx'))
+ .attr("clip-path", config.axis_rotated ? "" : $$.clipPathForXAxis);
+ };
+ c3_chart_internal_fn.updateTargetsForSubchart = function (targets) {
+ var $$ = this, context = $$.context, config = $$.config,
+ contextLineEnter, contextLineUpdate, contextBarEnter, contextBarUpdate,
+ classChartBar = $$.classChartBar.bind($$),
+ classBars = $$.classBars.bind($$),
+ classChartLine = $$.classChartLine.bind($$),
+ classLines = $$.classLines.bind($$),
+ classAreas = $$.classAreas.bind($$);
+
+ if (config.subchart_show) {
+ contextBarUpdate = context.select('.' + CLASS.chartBars).selectAll('.' + CLASS.chartBar)
+ .data(targets)
+ .attr('class', classChartBar);
+ contextBarEnter = contextBarUpdate.enter().append('g')
+ .style('opacity', 0)
+ .attr('class', classChartBar);
+ // Bars for each data
+ contextBarEnter.append('g')
+ .attr("class", classBars);
+
+ //-- Line --//
+ contextLineUpdate = context.select('.' + CLASS.chartLines).selectAll('.' + CLASS.chartLine)
+ .data(targets)
+ .attr('class', classChartLine);
+ contextLineEnter = contextLineUpdate.enter().append('g')
+ .style('opacity', 0)
+ .attr('class', classChartLine);
+ // Lines for each data
+ contextLineEnter.append("g")
+ .attr("class", classLines);
+ // Area
+ contextLineEnter.append("g")
+ .attr("class", classAreas);
+ }
+ };
+ c3_chart_internal_fn.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {
+ var $$ = this, d3 = $$.d3, context = $$.context, config = $$.config,
+ contextLine, contextArea, contextBar, drawAreaOnSub, drawBarOnSub, drawLineOnSub,
+ barData = $$.barData.bind($$),
+ lineData = $$.lineData.bind($$),
+ classBar = $$.classBar.bind($$),
+ classLine = $$.classLine.bind($$),
+ classArea = $$.classArea.bind($$),
+ initialOpacity = $$.initialOpacity.bind($$);
+
+ // subchart
+ if (config.subchart_show) {
+ // reflect main chart to extent on subchart if zoomed
+ if (d3.event && d3.event.type === 'zoom') {
+ $$.brush.extent($$.x.orgDomain()).update();
+ }
+ // update subchart elements if needed
+ if (withSubchart) {
+
+ // extent rect
+ if (!$$.brush.empty()) {
+ $$.brush.extent($$.x.orgDomain()).update();
+ }
+ // setup drawer - MEMO: this must be called after axis updated
+ drawAreaOnSub = $$.generateDrawArea(areaIndices, true);
+ drawBarOnSub = $$.generateDrawBar(barIndices, true);
+ drawLineOnSub = $$.generateDrawLine(lineIndices, true);
+ // bars
+ contextBar = context.selectAll('.' + CLASS.bars).selectAll('.' + CLASS.bar)
+ .data(barData);
+ contextBar.enter().append('path')
+ .attr("class", classBar)
+ .style("stroke", 'none')
+ .style("fill", $$.color);
+ contextBar
+ .style("opacity", initialOpacity)
+ .transition().duration(duration)
+ .attr('d', drawBarOnSub)
+ .style('opacity', 1);
+ contextBar.exit().transition().duration(duration)
+ .style('opacity', 0)
+ .remove();
+ // lines
+ contextLine = context.selectAll('.' + CLASS.lines).selectAll('.' + CLASS.line)
+ .data(lineData);
+ contextLine.enter().append('path')
+ .attr('class', classLine)
+ .style('stroke', $$.color);
+ contextLine
+ .style("opacity", initialOpacity)
+ .transition().duration(duration)
+ .attr("d", drawLineOnSub)
+ .style('opacity', 1);
+ contextLine.exit().transition().duration(duration)
+ .style('opacity', 0)
+ .remove();
+ // area
+ contextArea = context.selectAll('.' + CLASS.areas).selectAll('.' + CLASS.area)
+ .data(lineData);
+ contextArea.enter().append('path')
+ .attr("class", classArea)
+ .style("fill", $$.color)
+ .style("opacity", function () {
+ $$.orgAreaOpacity = +d3.select(this).style('opacity');
+ return 0;
+ });
+ contextArea
+ .style("opacity", 0)
+ .transition().duration(duration)
+ .attr("d", drawAreaOnSub)
+ .style("fill", $$.color)
+ .style("opacity", $$.orgAreaOpacity);
+ contextArea.exit().transition().duration(durationForExit)
+ .style('opacity', 0)
+ .remove();
+ }
+ }
+ };
+ c3_chart_internal_fn.redrawForBrush = function () {
+ var $$ = this, x = $$.x;
+ $$.redraw({
+ withTransition: false,
+ withY: $$.config.zoom_rescale,
+ withSubchart: false,
+ withUpdateXDomain: true,
+ withDimension: false
+ });
+ $$.config.subchart_onbrush.call($$.api, x.orgDomain());
+ };
+ c3_chart_internal_fn.transformContext = function (withTransition, transitions) {
+ var $$ = this, subXAxis;
+ if (transitions && transitions.axisSubX) {
+ subXAxis = transitions.axisSubX;
+ } else {
+ subXAxis = $$.context.select('.' + CLASS.axisX);
+ if (withTransition) {
+ subXAxis = subXAxis.transition();
+ }
+ }
+ $$.context.attr("transform", $$.getTranslate('context'));
+ subXAxis.attr("transform", $$.getTranslate('subx'));
+ };
+ c3_chart_internal_fn.getDefaultExtent = function () {
+ var $$ = this, config = $$.config,
+ extent = isFunction(config.axis_x_extent) ? config.axis_x_extent($$.getXDomain($$.data.targets)) : config.axis_x_extent;
+ if ($$.isTimeSeries()) {
+ extent = [$$.parseDate(extent[0]), $$.parseDate(extent[1])];
+ }
+ return extent;
+ };
+
+ c3_chart_internal_fn.initZoom = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config, startEvent;
+
+ $$.zoom = d3.behavior.zoom()
+ .on("zoomstart", function () {
+ startEvent = d3.event.sourceEvent;
+ $$.zoom.altDomain = d3.event.sourceEvent.altKey ? $$.x.orgDomain() : null;
+ config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);
+ })
+ .on("zoom", function () {
+ $$.redrawForZoom.call($$);
+ })
+ .on('zoomend', function () {
+ var event = d3.event.sourceEvent;
+ // if click, do nothing. otherwise, click interaction will be canceled.
+ if (event && startEvent.clientX === event.clientX && startEvent.clientY === event.clientY) {
+ return;
+ }
+ $$.redrawEventRect();
+ $$.updateZoom();
+ config.zoom_onzoomend.call($$.api, $$.x.orgDomain());
+ });
+ $$.zoom.scale = function (scale) {
+ return config.axis_rotated ? this.y(scale) : this.x(scale);
+ };
+ $$.zoom.orgScaleExtent = function () {
+ var extent = config.zoom_extent ? config.zoom_extent : [1, 10];
+ return [extent[0], Math.max($$.getMaxDataCount() / extent[1], extent[1])];
+ };
+ $$.zoom.updateScaleExtent = function () {
+ var ratio = diffDomain($$.x.orgDomain()) / diffDomain($$.orgXDomain),
+ extent = this.orgScaleExtent();
+ this.scaleExtent([extent[0] * ratio, extent[1] * ratio]);
+ return this;
+ };
+ };
+ c3_chart_internal_fn.updateZoom = function () {
+ var $$ = this, z = $$.config.zoom_enabled ? $$.zoom : function () {
+ };
+ $$.main.select('.' + CLASS.zoomRect).call(z).on("dblclick.zoom", null);
+ $$.main.selectAll('.' + CLASS.eventRect).call(z).on("dblclick.zoom", null);
+ };
+ c3_chart_internal_fn.redrawForZoom = function () {
+ var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x;
+ if (!config.zoom_enabled) {
+ return;
+ }
+ if ($$.filterTargetsToShow($$.data.targets).length === 0) {
+ return;
+ }
+ if (d3.event.sourceEvent.type === 'mousemove' && zoom.altDomain) {
+ x.domain(zoom.altDomain);
+ zoom.scale(x).updateScaleExtent();
+ return;
+ }
+ if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {
+ x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);
+ }
+ $$.redraw({
+ withTransition: false,
+ withY: config.zoom_rescale,
+ withSubchart: false,
+ withEventRect: false,
+ withDimension: false
+ });
+ if (d3.event.sourceEvent.type === 'mousemove') {
+ $$.cancelClick = true;
+ }
+ config.zoom_onzoom.call($$.api, x.orgDomain());
+ };
+
+ c3_chart_internal_fn.generateColor = function () {
+ var $$ = this, config = $$.config, d3 = $$.d3,
+ colors = config.data_colors,
+ pattern = notEmpty(config.color_pattern) ? config.color_pattern : d3.scale.category10().range(),
+ callback = config.data_color,
+ ids = [];
+
+ return function (d) {
+ var id = d.id || d, color;
+
+ // if callback function is provided
+ if (colors[id] instanceof Function) {
+ color = colors[id](d);
+ }
+ // if specified, choose that color
+ else if (colors[id]) {
+ color = colors[id];
+ }
+ // if not specified, choose from pattern
+ else {
+ if (ids.indexOf(id) < 0) {
+ ids.push(id);
+ }
+ color = pattern[ids.indexOf(id) % pattern.length];
+ colors[id] = color;
+ }
+ return callback instanceof Function ? callback(color, d) : color;
+ };
+ };
+ c3_chart_internal_fn.generateLevelColor = function () {
+ var $$ = this, config = $$.config,
+ colors = config.color_pattern,
+ threshold = config.color_threshold,
+ asValue = threshold.unit === 'value',
+ values = threshold.values && threshold.values.length ? threshold.values : [],
+ max = threshold.max || 100;
+ return notEmpty(config.color_threshold) ? function (value) {
+ var i, v, color = colors[colors.length - 1];
+ for (i = 0; i < values.length; i++) {
+ v = asValue ? value : (value * 100 / max);
+ if (v < values[i]) {
+ color = colors[i];
+ break;
+ }
+ }
+ return color;
+ } : null;
+ };
+
+ c3_chart_internal_fn.getYFormat = function (forArc) {
+ var $$ = this,
+ formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat,
+ formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;
+ return function (v, ratio, id) {
+ var format = $$.getAxisId(id) === 'y2' ? formatForY2 : formatForY;
+ return format.call($$, v, ratio);
+ };
+ };
+ c3_chart_internal_fn.yFormat = function (v) {
+ var $$ = this, config = $$.config,
+ format = config.axis_y_tick_format ? config.axis_y_tick_format : $$.defaultValueFormat;
+ return format(v);
+ };
+ c3_chart_internal_fn.y2Format = function (v) {
+ var $$ = this, config = $$.config,
+ format = config.axis_y2_tick_format ? config.axis_y2_tick_format : $$.defaultValueFormat;
+ return format(v);
+ };
+ c3_chart_internal_fn.defaultValueFormat = function (v) {
+ return isValue(v) ? +v : "";
+ };
+ c3_chart_internal_fn.defaultArcValueFormat = function (v, ratio) {
+ return (ratio * 100).toFixed(1) + '%';
+ };
+ c3_chart_internal_fn.formatByAxisId = function (axisId) {
+ var $$ = this, data_labels = $$.config.data_labels,
+ format = function (v) {
+ return isValue(v) ? +v : "";
+ };
+ // find format according to axis id
+ if (typeof data_labels.format === 'function') {
+ format = data_labels.format;
+ } else if (typeof data_labels.format === 'object') {
+ if (data_labels.format[axisId]) {
+ format = data_labels.format[axisId];
+ }
+ }
+ return format;
+ };
+
+ c3_chart_internal_fn.hasCaches = function (ids) {
+ for (var i = 0; i < ids.length; i++) {
+ if (!(ids[i] in this.cache)) {
+ return false;
+ }
+ }
+ return true;
+ };
+ c3_chart_internal_fn.addCache = function (id, target) {
+ this.cache[id] = this.cloneTarget(target);
+ };
+ c3_chart_internal_fn.getCaches = function (ids) {
+ var targets = [], i;
+ for (i = 0; i < ids.length; i++) {
+ if (ids[i] in this.cache) {
+ targets.push(this.cloneTarget(this.cache[ids[i]]));
+ }
+ }
+ return targets;
+ };
+
+ var CLASS = c3_chart_internal_fn.CLASS = {
+ target: 'c3-target',
+ chart: 'c3-chart',
+ chartLine: 'c3-chart-line',
+ chartLines: 'c3-chart-lines',
+ chartBar: 'c3-chart-bar',
+ chartBars: 'c3-chart-bars',
+ chartText: 'c3-chart-text',
+ chartTexts: 'c3-chart-texts',
+ chartArc: 'c3-chart-arc',
+ chartArcs: 'c3-chart-arcs',
+ chartArcsTitle: 'c3-chart-arcs-title',
+ chartArcsBackground: 'c3-chart-arcs-background',
+ chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',
+ chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',
+ chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',
+ selectedCircle: 'c3-selected-circle',
+ selectedCircles: 'c3-selected-circles',
+ eventRect: 'c3-event-rect',
+ eventRects: 'c3-event-rects',
+ eventRectsSingle: 'c3-event-rects-single',
+ eventRectsMultiple: 'c3-event-rects-multiple',
+ zoomRect: 'c3-zoom-rect',
+ brush: 'c3-brush',
+ focused: 'c3-focused',
+ defocused: 'c3-defocused',
+ region: 'c3-region',
+ regions: 'c3-regions',
+ tooltipContainer: 'c3-tooltip-container',
+ tooltip: 'c3-tooltip',
+ tooltipName: 'c3-tooltip-name',
+ shape: 'c3-shape',
+ shapes: 'c3-shapes',
+ line: 'c3-line',
+ lines: 'c3-lines',
+ bar: 'c3-bar',
+ bars: 'c3-bars',
+ circle: 'c3-circle',
+ circles: 'c3-circles',
+ arc: 'c3-arc',
+ arcs: 'c3-arcs',
+ area: 'c3-area',
+ areas: 'c3-areas',
+ empty: 'c3-empty',
+ text: 'c3-text',
+ texts: 'c3-texts',
+ gaugeValue: 'c3-gauge-value',
+ grid: 'c3-grid',
+ gridLines: 'c3-grid-lines',
+ xgrid: 'c3-xgrid',
+ xgrids: 'c3-xgrids',
+ xgridLine: 'c3-xgrid-line',
+ xgridLines: 'c3-xgrid-lines',
+ xgridFocus: 'c3-xgrid-focus',
+ ygrid: 'c3-ygrid',
+ ygrids: 'c3-ygrids',
+ ygridLine: 'c3-ygrid-line',
+ ygridLines: 'c3-ygrid-lines',
+ axis: 'c3-axis',
+ axisX: 'c3-axis-x',
+ axisXLabel: 'c3-axis-x-label',
+ axisY: 'c3-axis-y',
+ axisYLabel: 'c3-axis-y-label',
+ axisY2: 'c3-axis-y2',
+ axisY2Label: 'c3-axis-y2-label',
+ legendBackground: 'c3-legend-background',
+ legendItem: 'c3-legend-item',
+ legendItemEvent: 'c3-legend-item-event',
+ legendItemTile: 'c3-legend-item-tile',
+ legendItemHidden: 'c3-legend-item-hidden',
+ legendItemFocused: 'c3-legend-item-focused',
+ dragarea: 'c3-dragarea',
+ EXPANDED: '_expanded_',
+ SELECTED: '_selected_',
+ INCLUDED: '_included_'
+ };
+ c3_chart_internal_fn.generateClass = function (prefix, targetId) {
+ return " " + prefix + " " + prefix + this.getTargetSelectorSuffix(targetId);
+ };
+ c3_chart_internal_fn.classText = function (d) {
+ return this.generateClass(CLASS.text, d.index);
+ };
+ c3_chart_internal_fn.classTexts = function (d) {
+ return this.generateClass(CLASS.texts, d.id);
+ };
+ c3_chart_internal_fn.classShape = function (d) {
+ return this.generateClass(CLASS.shape, d.index);
+ };
+ c3_chart_internal_fn.classShapes = function (d) {
+ return this.generateClass(CLASS.shapes, d.id);
+ };
+ c3_chart_internal_fn.classLine = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.line, d.id);
+ };
+ c3_chart_internal_fn.classLines = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);
+ };
+ c3_chart_internal_fn.classCircle = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.circle, d.index);
+ };
+ c3_chart_internal_fn.classCircles = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);
+ };
+ c3_chart_internal_fn.classBar = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.bar, d.index);
+ };
+ c3_chart_internal_fn.classBars = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);
+ };
+ c3_chart_internal_fn.classArc = function (d) {
+ return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);
+ };
+ c3_chart_internal_fn.classArcs = function (d) {
+ return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);
+ };
+ c3_chart_internal_fn.classArea = function (d) {
+ return this.classShape(d) + this.generateClass(CLASS.area, d.id);
+ };
+ c3_chart_internal_fn.classAreas = function (d) {
+ return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);
+ };
+ c3_chart_internal_fn.classRegion = function (d, i) {
+ return this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : '');
+ };
+ c3_chart_internal_fn.classEvent = function (d) {
+ return this.generateClass(CLASS.eventRect, d.index);
+ };
+ c3_chart_internal_fn.classTarget = function (id) {
+ var $$ = this;
+ var additionalClassSuffix = $$.config.data_classes[id], additionalClass = '';
+ if (additionalClassSuffix) {
+ additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;
+ }
+ return $$.generateClass(CLASS.target, id) + additionalClass;
+ };
+ c3_chart_internal_fn.classFocus = function (d) {
+ return this.classFocused(d) + this.classDefocused(d);
+ };
+ c3_chart_internal_fn.classFocused = function (d) {
+ return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');
+ };
+ c3_chart_internal_fn.classDefocused = function (d) {
+ return ' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : '');
+ };
+ c3_chart_internal_fn.classChartText = function (d) {
+ return CLASS.chartText + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartLine = function (d) {
+ return CLASS.chartLine + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartBar = function (d) {
+ return CLASS.chartBar + this.classTarget(d.id);
+ };
+ c3_chart_internal_fn.classChartArc = function (d) {
+ return CLASS.chartArc + this.classTarget(d.data.id);
+ };
+ c3_chart_internal_fn.getTargetSelectorSuffix = function (targetId) {
+ return targetId || targetId === 0 ? ('-' + targetId).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g, '-') : '';
+ };
+ c3_chart_internal_fn.selectorTarget = function (id, prefix) {
+ return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);
+ };
+ c3_chart_internal_fn.selectorTargets = function (ids, prefix) {
+ var $$ = this;
+ ids = ids || [];
+ return ids.length ? ids.map(function (id) {
+ return $$.selectorTarget(id, prefix);
+ }) : null;
+ };
+ c3_chart_internal_fn.selectorLegend = function (id) {
+ return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);
+ };
+ c3_chart_internal_fn.selectorLegends = function (ids) {
+ var $$ = this;
+ return ids && ids.length ? ids.map(function (id) {
+ return $$.selectorLegend(id);
+ }) : null;
+ };
+
+ var isValue = c3_chart_internal_fn.isValue = function (v) {
+ return v || v === 0;
+ },
+ isFunction = c3_chart_internal_fn.isFunction = function (o) {
+ return typeof o === 'function';
+ },
+ isString = c3_chart_internal_fn.isString = function (o) {
+ return typeof o === 'string';
+ },
+ isUndefined = c3_chart_internal_fn.isUndefined = function (v) {
+ return typeof v === 'undefined';
+ },
+ isDefined = c3_chart_internal_fn.isDefined = function (v) {
+ return typeof v !== 'undefined';
+ },
+ ceil10 = c3_chart_internal_fn.ceil10 = function (v) {
+ return Math.ceil(v / 10) * 10;
+ },
+ asHalfPixel = c3_chart_internal_fn.asHalfPixel = function (n) {
+ return Math.ceil(n) + 0.5;
+ },
+ diffDomain = c3_chart_internal_fn.diffDomain = function (d) {
+ return d[1] - d[0];
+ },
+ isEmpty = c3_chart_internal_fn.isEmpty = function (o) {
+ return !o || (isString(o) && o.length === 0) || (typeof o === 'object' && Object.keys(o).length === 0);
+ },
+ notEmpty = c3_chart_internal_fn.notEmpty = function (o) {
+ return Object.keys(o).length > 0;
+ },
+ getOption = c3_chart_internal_fn.getOption = function (options, key, defaultValue) {
+ return isDefined(options[key]) ? options[key] : defaultValue;
+ },
+ hasValue = c3_chart_internal_fn.hasValue = function (dict, value) {
+ var found = false;
+ Object.keys(dict).forEach(function (key) {
+ if (dict[key] === value) {
+ found = true;
+ }
+ });
+ return found;
+ },
+ getPathBox = c3_chart_internal_fn.getPathBox = function (path) {
+ var box = path.getBoundingClientRect(),
+ items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)],
+ minX = items[0].x, minY = Math.min(items[0].y, items[1].y);
+ return {x: minX, y: minY, width: box.width, height: box.height};
+ };
+
+ c3_chart_fn.focus = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),
+
+ this.revert();
+ this.defocus();
+ candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);
+ if ($$.hasArcType()) {
+ $$.expandArc(targetIds);
+ }
+ $$.toggleFocusLegend(targetIds, true);
+
+ $$.focusedTargetIds = targetIds;
+ $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ };
+
+ c3_chart_fn.defocus = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$))),
+
+ this.revert();
+ candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);
+ if ($$.hasArcType()) {
+ $$.unexpandArc(targetIds);
+ }
+ $$.toggleFocusLegend(targetIds, false);
+
+ $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {
+ return targetIds.indexOf(id) < 0;
+ });
+ $$.defocusedTargetIds = targetIds;
+ };
+
+ c3_chart_fn.revert = function (targetIds) {
+ var $$ = this.internal, candidates;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets
+
+ candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);
+ if ($$.hasArcType()) {
+ $$.unexpandArc(targetIds);
+ }
+ if ($$.config.legend_show) {
+ $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));
+ }
+
+ $$.focusedTargetIds = [];
+ $$.defocusedTargetIds = [];
+ };
+
+ c3_chart_fn.show = function (targetIds, options) {
+ var $$ = this.internal, targets;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ options = options || {};
+
+ $$.removeHiddenTargetIds(targetIds);
+ targets = $$.svg.selectAll($$.selectorTargets(targetIds));
+
+ targets.transition()
+ .style('opacity', 1, 'important')
+ .call($$.endall, function () {
+ targets.style('opacity', null).style('opacity', 1);
+ });
+
+ if (options.withLegend) {
+ $$.showLegend(targetIds);
+ }
+
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ };
+
+ c3_chart_fn.hide = function (targetIds, options) {
+ var $$ = this.internal, targets;
+
+ targetIds = $$.mapToTargetIds(targetIds);
+ options = options || {};
+
+ $$.addHiddenTargetIds(targetIds);
+ targets = $$.svg.selectAll($$.selectorTargets(targetIds));
+
+ targets.transition()
+ .style('opacity', 0, 'important')
+ .call($$.endall, function () {
+ targets.style('opacity', null).style('opacity', 0);
+ });
+
+ if (options.withLegend) {
+ $$.hideLegend(targetIds);
+ }
+
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ };
+
+ c3_chart_fn.toggle = function (targetIds, options) {
+ var that = this, $$ = this.internal;
+ $$.mapToTargetIds(targetIds).forEach(function (targetId) {
+ $$.isTargetToShow(targetId) ? that.hide(targetId, options) : that.show(targetId, options);
+ });
+ };
+
+ c3_chart_fn.zoom = function (domain) {
+ var $$ = this.internal;
+ if (domain) {
+ if ($$.isTimeSeries()) {
+ domain = domain.map(function (x) {
+ return $$.parseDate(x);
+ });
+ }
+ $$.brush.extent(domain);
+ $$.redraw({withUpdateXDomain: true, withY: $$.config.zoom_rescale});
+ $$.config.zoom_onzoom.call(this, $$.x.orgDomain());
+ }
+ return $$.brush.extent();
+ };
+ c3_chart_fn.zoom.enable = function (enabled) {
+ var $$ = this.internal;
+ $$.config.zoom_enabled = enabled;
+ $$.updateAndRedraw();
+ };
+ c3_chart_fn.unzoom = function () {
+ var $$ = this.internal;
+ $$.brush.clear().update();
+ $$.redraw({withUpdateXDomain: true});
+ };
+
+ c3_chart_fn.load = function (args) {
+ var $$ = this.internal, config = $$.config;
+ // update xs if specified
+ if (args.xs) {
+ $$.addXs(args.xs);
+ }
+ // update classes if exists
+ if ('classes' in args) {
+ Object.keys(args.classes).forEach(function (id) {
+ config.data_classes[id] = args.classes[id];
+ });
+ }
+ // update categories if exists
+ if ('categories' in args && $$.isCategorized()) {
+ config.axis_x_categories = args.categories;
+ }
+ // update axes if exists
+ if ('axes' in args) {
+ Object.keys(args.axes).forEach(function (id) {
+ config.data_axes[id] = args.axes[id];
+ });
+ }
+ // use cache if exists
+ if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {
+ $$.load($$.getCaches(args.cacheIds), args.done);
+ return;
+ }
+ // unload if needed
+ if ('unload' in args) {
+ // TODO: do not unload if target will load (included in url/rows/columns)
+ $$.unload($$.mapToTargetIds((typeof args.unload === 'boolean' && args.unload) ? null : args.unload), function () {
+ $$.loadFromArgs(args);
+ });
+ } else {
+ $$.loadFromArgs(args);
+ }
+ };
+
+ c3_chart_fn.unload = function (args) {
+ var $$ = this.internal;
+ args = args || {};
+ if (args instanceof Array) {
+ args = {ids: args};
+ } else if (typeof args === 'string') {
+ args = {ids: [args]};
+ }
+ $$.unload($$.mapToTargetIds(args.ids), function () {
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true, withLegend: true});
+ if (args.done) {
+ args.done();
+ }
+ });
+ };
+
+ c3_chart_fn.flow = function (args) {
+ var $$ = this.internal,
+ targets, data, notfoundIds = [], orgDataCount = $$.getMaxDataCount(),
+ dataCount, domain, baseTarget, baseValue, length = 0, tail = 0, diff, to;
+
+ if (args.json) {
+ data = $$.convertJsonToData(args.json, args.keys);
+ }
+ else if (args.rows) {
+ data = $$.convertRowsToData(args.rows);
+ }
+ else if (args.columns) {
+ data = $$.convertColumnsToData(args.columns);
+ }
+ else {
+ return;
+ }
+ targets = $$.convertDataToTargets(data, true);
+
+ // Update/Add data
+ $$.data.targets.forEach(function (t) {
+ var found = false, i, j;
+ for (i = 0; i < targets.length; i++) {
+ if (t.id === targets[i].id) {
+ found = true;
+
+ if (t.values[t.values.length - 1]) {
+ tail = t.values[t.values.length - 1].index + 1;
+ }
+ length = targets[i].values.length;
+
+ for (j = 0; j < length; j++) {
+ targets[i].values[j].index = tail + j;
+ if (!$$.isTimeSeries()) {
+ targets[i].values[j].x = tail + j;
+ }
+ }
+ t.values = t.values.concat(targets[i].values);
+
+ targets.splice(i, 1);
+ break;
+ }
+ }
+ if (!found) {
+ notfoundIds.push(t.id);
+ }
+ });
+
+ // Append null for not found targets
+ $$.data.targets.forEach(function (t) {
+ var i, j;
+ for (i = 0; i < notfoundIds.length; i++) {
+ if (t.id === notfoundIds[i]) {
+ tail = t.values[t.values.length - 1].index + 1;
+ for (j = 0; j < length; j++) {
+ t.values.push({
+ id: t.id,
+ index: tail + j,
+ x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,
+ value: null
+ });
+ }
+ }
+ }
+ });
+
+ // Generate null values for new target
+ if ($$.data.targets.length) {
+ targets.forEach(function (t) {
+ var i, missing = [];
+ for (i = $$.data.targets[0].values[0].index; i < tail; i++) {
+ missing.push({
+ id: t.id,
+ index: i,
+ x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,
+ value: null
+ });
+ }
+ t.values.forEach(function (v) {
+ v.index += tail;
+ if (!$$.isTimeSeries()) {
+ v.x += tail;
+ }
+ });
+ t.values = missing.concat(t.values);
+ });
+ }
+ $$.data.targets = $$.data.targets.concat(targets); // add remained
+
+ // check data count because behavior needs to change when it's only one
+ dataCount = $$.getMaxDataCount();
+ baseTarget = $$.data.targets[0];
+ baseValue = baseTarget.values[0];
+
+ // Update length to flow if needed
+ if (isDefined(args.to)) {
+ length = 0;
+ to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;
+ baseTarget.values.forEach(function (v) {
+ if (v.x < to) {
+ length++;
+ }
+ });
+ } else if (isDefined(args.length)) {
+ length = args.length;
+ }
+
+ // If only one data, update the domain to flow from left edge of the chart
+ if (!orgDataCount) {
+ if ($$.isTimeSeries()) {
+ if (baseTarget.values.length > 1) {
+ diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;
+ } else {
+ diff = baseValue.x - $$.getXDomain($$.data.targets)[0];
+ }
+ } else {
+ diff = 1;
+ }
+ domain = [baseValue.x - diff, baseValue.x];
+ $$.updateXDomain(null, true, true, false, domain);
+ } else if (orgDataCount === 1) {
+ if ($$.isTimeSeries()) {
+ diff = (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;
+ domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];
+ $$.updateXDomain(null, true, true, false, domain);
+ }
+ }
+
+ // Set targets
+ $$.updateTargets($$.data.targets);
+
+ // Redraw with new targets
+ $$.redraw({
+ flow: {
+ index: baseValue.index,
+ length: length,
+ duration: isValue(args.duration) ? args.duration : $$.config.transition_duration,
+ done: args.done,
+ orgDataCount: orgDataCount,
+ },
+ withLegend: true,
+ withTransition: orgDataCount > 1,
+ withTrimXDomain: false,
+ withUpdateXAxis: true,
+ });
+ };
+
+ c3_chart_internal_fn.generateFlow = function (args) {
+ var $$ = this, config = $$.config, d3 = $$.d3;
+
+ return function () {
+ var targets = args.targets,
+ flow = args.flow,
+ drawBar = args.drawBar,
+ drawLine = args.drawLine,
+ drawArea = args.drawArea,
+ cx = args.cx,
+ cy = args.cy,
+ xv = args.xv,
+ xForText = args.xForText,
+ yForText = args.yForText,
+ duration = args.duration;
+
+ var translateX, scaleX = 1, transform,
+ flowIndex = flow.index,
+ flowLength = flow.length,
+ flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex),
+ flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength),
+ orgDomain = $$.x.domain(), domain,
+ durationForFlow = flow.duration || duration,
+ done = flow.done || function () {
+ },
+ wait = $$.generateWait();
+
+ var xgrid = $$.xgrid || d3.selectAll([]),
+ xgridLines = $$.xgridLines || d3.selectAll([]),
+ mainRegion = $$.mainRegion || d3.selectAll([]),
+ mainText = $$.mainText || d3.selectAll([]),
+ mainBar = $$.mainBar || d3.selectAll([]),
+ mainLine = $$.mainLine || d3.selectAll([]),
+ mainArea = $$.mainArea || d3.selectAll([]),
+ mainCircle = $$.mainCircle || d3.selectAll([]);
+
+ // set flag
+ $$.flowing = true;
+
+ // remove head data after rendered
+ $$.data.targets.forEach(function (d) {
+ d.values.splice(0, flowLength);
+ });
+
+ // update x domain to generate axis elements for flow
+ domain = $$.updateXDomain(targets, true, true);
+ // update elements related to x scale
+ if ($$.updateXGrid) {
+ $$.updateXGrid(true);
+ }
+
+ // generate transform to flow
+ if (!flow.orgDataCount) { // if empty
+ if ($$.data.targets[0].values.length !== 1) {
+ translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);
+ } else {
+ if ($$.isTimeSeries()) {
+ flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);
+ flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);
+ translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);
+ } else {
+ translateX = diffDomain(domain) / 2;
+ }
+ }
+ } else if (flow.orgDataCount === 1 || flowStart.x === flowEnd.x) {
+ translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);
+ } else {
+ if ($$.isTimeSeries()) {
+ translateX = ($$.x(orgDomain[0]) - $$.x(domain[0]));
+ } else {
+ translateX = ($$.x(flowStart.x) - $$.x(flowEnd.x));
+ }
+ }
+ scaleX = (diffDomain(orgDomain) / diffDomain(domain));
+ transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';
+
+ // hide tooltip
+ $$.hideXGridFocus();
+ $$.hideTooltip();
+
+ d3.transition().ease('linear').duration(durationForFlow).each(function () {
+ wait.add($$.axes.x.transition().call($$.xAxis));
+ wait.add(mainBar.transition().attr('transform', transform));
+ wait.add(mainLine.transition().attr('transform', transform));
+ wait.add(mainArea.transition().attr('transform', transform));
+ wait.add(mainCircle.transition().attr('transform', transform));
+ wait.add(mainText.transition().attr('transform', transform));
+ wait.add(mainRegion.filter($$.isRegionOnX).transition().attr('transform', transform));
+ wait.add(xgrid.transition().attr('transform', transform));
+ wait.add(xgridLines.transition().attr('transform', transform));
+ })
+ .call(wait, function () {
+ var i, shapes = [], texts = [], eventRects = [];
+
+ // remove flowed elements
+ if (flowLength) {
+ for (i = 0; i < flowLength; i++) {
+ shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));
+ texts.push('.' + CLASS.text + '-' + (flowIndex + i));
+ eventRects.push('.' + CLASS.eventRect + '-' + (flowIndex + i));
+ }
+ $$.svg.selectAll('.' + CLASS.shapes).selectAll(shapes).remove();
+ $$.svg.selectAll('.' + CLASS.texts).selectAll(texts).remove();
+ $$.svg.selectAll('.' + CLASS.eventRects).selectAll(eventRects).remove();
+ $$.svg.select('.' + CLASS.xgrid).remove();
+ }
+
+ // draw again for removing flowed elements and reverting attr
+ xgrid
+ .attr('transform', null)
+ .attr($$.xgridAttr);
+ xgridLines
+ .attr('transform', null);
+ xgridLines.select('line')
+ .attr("x1", config.axis_rotated ? 0 : xv)
+ .attr("x2", config.axis_rotated ? $$.width : xv);
+ xgridLines.select('text')
+ .attr("x", config.axis_rotated ? $$.width : 0)
+ .attr("y", xv);
+ mainBar
+ .attr('transform', null)
+ .attr("d", drawBar);
+ mainLine
+ .attr('transform', null)
+ .attr("d", drawLine);
+ mainArea
+ .attr('transform', null)
+ .attr("d", drawArea);
+ mainCircle
+ .attr('transform', null)
+ .attr("cx", cx)
+ .attr("cy", cy);
+ mainText
+ .attr('transform', null)
+ .attr('x', xForText)
+ .attr('y', yForText)
+ .style('fill-opacity', $$.opacityForText.bind($$));
+ mainRegion
+ .attr('transform', null);
+ mainRegion.select('rect').filter($$.isRegionOnX)
+ .attr("x", $$.regionX.bind($$))
+ .attr("width", $$.regionWidth.bind($$));
+
+ if (config.interaction_enabled) {
+ $$.redrawEventRect();
+ }
+
+ // callback for end of flow
+ done();
+
+ $$.flowing = false;
+ });
+ };
+ };
+
+ c3_chart_fn.selected = function (targetId) {
+ var $$ = this.internal, d3 = $$.d3;
+ return d3.merge(
+ $$.main.selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId)).selectAll('.' + CLASS.shape)
+ .filter(function () {
+ return d3.select(this).classed(CLASS.SELECTED);
+ })
+ .map(function (d) {
+ return d.map(function (d) {
+ var data = d.__data__;
+ return data.data ? data.data : data;
+ });
+ })
+ );
+ };
+ c3_chart_fn.select = function (ids, indices, resetOther) {
+ var $$ = this.internal, d3 = $$.d3, config = $$.config;
+ if (!config.data_selection_enabled) {
+ return;
+ }
+ $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this), id = d.data ? d.data.id : d.id,
+ toggle = $$.getToggle(this, d).bind($$),
+ isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,
+ isTargetIndex = !indices || indices.indexOf(i) >= 0,
+ isSelected = shape.classed(CLASS.SELECTED);
+ // line/area selection not supported yet
+ if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {
+ return;
+ }
+ if (isTargetId && isTargetIndex) {
+ if (config.data_selection_isselectable(d) && !isSelected) {
+ toggle(true, shape.classed(CLASS.SELECTED, true), d, i);
+ }
+ } else if (isDefined(resetOther) && resetOther) {
+ if (isSelected) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ }
+ });
+ };
+ c3_chart_fn.unselect = function (ids, indices) {
+ var $$ = this.internal, d3 = $$.d3, config = $$.config;
+ if (!config.data_selection_enabled) {
+ return;
+ }
+ $$.main.selectAll('.' + CLASS.shapes).selectAll('.' + CLASS.shape).each(function (d, i) {
+ var shape = d3.select(this), id = d.data ? d.data.id : d.id,
+ toggle = $$.getToggle(this, d).bind($$),
+ isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0,
+ isTargetIndex = !indices || indices.indexOf(i) >= 0,
+ isSelected = shape.classed(CLASS.SELECTED);
+ // line/area selection not supported yet
+ if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {
+ return;
+ }
+ if (isTargetId && isTargetIndex) {
+ if (config.data_selection_isselectable(d)) {
+ if (isSelected) {
+ toggle(false, shape.classed(CLASS.SELECTED, false), d, i);
+ }
+ }
+ }
+ });
+ };
+
+ c3_chart_fn.transform = function (type, targetIds) {
+ var $$ = this.internal,
+ options = ['pie', 'donut'].indexOf(type) >= 0 ? {withTransform: true} : null;
+ $$.transformTo(targetIds, type, options);
+ };
+
+ c3_chart_internal_fn.transformTo = function (targetIds, type, optionsForRedraw) {
+ var $$ = this,
+ withTransitionForAxis = !$$.hasArcType(),
+ options = optionsForRedraw || {withTransitionForAxis: withTransitionForAxis};
+ options.withTransitionForTransform = false;
+ $$.transiting = false;
+ $$.setTargetType(targetIds, type);
+ $$.updateAndRedraw(options);
+ };
+
+ c3_chart_fn.groups = function (groups) {
+ var $$ = this.internal, config = $$.config;
+ if (isUndefined(groups)) {
+ return config.data_groups;
+ }
+ config.data_groups = groups;
+ $$.redraw();
+ return config.data_groups;
+ };
+
+ c3_chart_fn.xgrids = function (grids) {
+ var $$ = this.internal, config = $$.config;
+ if (!grids) {
+ return config.grid_x_lines;
+ }
+ config.grid_x_lines = grids;
+ $$.redrawWithoutRescale();
+ return config.grid_x_lines;
+ };
+ c3_chart_fn.xgrids.add = function (grids) {
+ var $$ = this.internal;
+ return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));
+ };
+ c3_chart_fn.xgrids.remove = function (params) { // TODO: multiple
+ var $$ = this.internal;
+ $$.removeGridLines(params, true);
+ };
+
+ c3_chart_fn.ygrids = function (grids) {
+ var $$ = this.internal, config = $$.config;
+ if (!grids) {
+ return config.grid_y_lines;
+ }
+ config.grid_y_lines = grids;
+ $$.redrawWithoutRescale();
+ return config.grid_y_lines;
+ };
+ c3_chart_fn.ygrids.add = function (grids) {
+ var $$ = this.internal;
+ return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));
+ };
+ c3_chart_fn.ygrids.remove = function (params) { // TODO: multiple
+ var $$ = this.internal;
+ $$.removeGridLines(params, false);
+ };
+
+ c3_chart_fn.regions = function (regions) {
+ var $$ = this.internal, config = $$.config;
+ if (!regions) {
+ return config.regions;
+ }
+ config.regions = regions;
+ $$.redrawWithoutRescale();
+ return config.regions;
+ };
+ c3_chart_fn.regions.add = function (regions) {
+ var $$ = this.internal, config = $$.config;
+ if (!regions) {
+ return config.regions;
+ }
+ config.regions = config.regions.concat(regions);
+ $$.redrawWithoutRescale();
+ return config.regions;
+ };
+ c3_chart_fn.regions.remove = function (options) {
+ var $$ = this.internal, config = $$.config,
+ duration, classes, regions;
+
+ options = options || {};
+ duration = $$.getOption(options, "duration", config.transition_duration);
+ classes = $$.getOption(options, "classes", [CLASS.region]);
+
+ regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) {
+ return '.' + c;
+ }));
+ (duration ? regions.transition().duration(duration) : regions)
+ .style('opacity', 0)
+ .remove();
+
+ config.regions = config.regions.filter(function (region) {
+ var found = false;
+ if (!region['class']) {
+ return true;
+ }
+ region['class'].split(' ').forEach(function (c) {
+ if (classes.indexOf(c) >= 0) {
+ found = true;
+ }
+ });
+ return !found;
+ });
+
+ return config.regions;
+ };
+
+ c3_chart_fn.data = function (targetIds) {
+ var targets = this.internal.data.targets;
+ return typeof targetIds === 'undefined' ? targets : targets.filter(function (t) {
+ return [].concat(targetIds).indexOf(t.id) >= 0;
+ });
+ };
+ c3_chart_fn.data.shown = function (targetIds) {
+ return this.internal.filterTargetsToShow(this.data(targetIds));
+ };
+ c3_chart_fn.data.values = function (targetId) {
+ var targets, values = null;
+ if (targetId) {
+ targets = this.data(targetId);
+ values = targets[0] ? targets[0].values.map(function (d) {
+ return d.value;
+ }) : null;
+ }
+ return values;
+ };
+ c3_chart_fn.data.names = function (names) {
+ this.internal.clearLegendItemTextBoxCache();
+ return this.internal.updateDataAttributes('names', names);
+ };
+ c3_chart_fn.data.colors = function (colors) {
+ return this.internal.updateDataAttributes('colors', colors);
+ };
+ c3_chart_fn.data.axes = function (axes) {
+ return this.internal.updateDataAttributes('axes', axes);
+ };
+
+ c3_chart_fn.category = function (i, category) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length > 1) {
+ config.axis_x_categories[i] = category;
+ $$.redraw();
+ }
+ return config.axis_x_categories[i];
+ };
+ c3_chart_fn.categories = function (categories) {
+ var $$ = this.internal, config = $$.config;
+ if (!arguments.length) {
+ return config.axis_x_categories;
+ }
+ config.axis_x_categories = categories;
+ $$.redraw();
+ return config.axis_x_categories;
+ };
+
+ // TODO: fix
+ c3_chart_fn.color = function (id) {
+ var $$ = this.internal;
+ return $$.color(id); // more patterns
+ };
+
+ c3_chart_fn.x = function (x) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ $$.updateTargetX($$.data.targets, x);
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ }
+ return $$.data.xs;
+ };
+ c3_chart_fn.xs = function (xs) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ $$.updateTargetXs($$.data.targets, xs);
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ }
+ return $$.data.xs;
+ };
+
+ c3_chart_fn.axis = function () {
+ };
+ c3_chart_fn.axis.labels = function (labels) {
+ var $$ = this.internal;
+ if (arguments.length) {
+ Object.keys(labels).forEach(function (axisId) {
+ $$.setAxisLabelText(axisId, labels[axisId]);
+ });
+ $$.updateAxisLabels();
+ }
+ // TODO: return some values?
+ };
+ c3_chart_fn.axis.max = function (max) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length) {
+ if (typeof max === 'object') {
+ if (isValue(max.x)) {
+ config.axis_x_max = max.x;
+ }
+ if (isValue(max.y)) {
+ config.axis_y_max = max.y;
+ }
+ if (isValue(max.y2)) {
+ config.axis_y2_max = max.y2;
+ }
+ } else {
+ config.axis_y_max = config.axis_y2_max = max;
+ }
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ } else {
+ return {
+ x: config.axis_x_max,
+ y: config.axis_y_max,
+ y2: config.axis_y2_max
+ };
+ }
+ };
+ c3_chart_fn.axis.min = function (min) {
+ var $$ = this.internal, config = $$.config;
+ if (arguments.length) {
+ if (typeof min === 'object') {
+ if (isValue(min.x)) {
+ config.axis_x_min = min.x;
+ }
+ if (isValue(min.y)) {
+ config.axis_y_min = min.y;
+ }
+ if (isValue(min.y2)) {
+ config.axis_y2_min = min.y2;
+ }
+ } else {
+ config.axis_y_min = config.axis_y2_min = min;
+ }
+ $$.redraw({withUpdateOrgXDomain: true, withUpdateXDomain: true});
+ } else {
+ return {
+ x: config.axis_x_min,
+ y: config.axis_y_min,
+ y2: config.axis_y2_min
+ };
+ }
+ };
+ c3_chart_fn.axis.range = function (range) {
+ if (arguments.length) {
+ if (isDefined(range.max)) {
+ this.axis.max(range.max);
+ }
+ if (isDefined(range.min)) {
+ this.axis.min(range.min);
+ }
+ } else {
+ return {
+ max: this.axis.max(),
+ min: this.axis.min()
+ };
+ }
+ };
+
+ c3_chart_fn.legend = function () {
+ };
+ c3_chart_fn.legend.show = function (targetIds) {
+ var $$ = this.internal;
+ $$.showLegend($$.mapToTargetIds(targetIds));
+ $$.updateAndRedraw({withLegend: true});
+ };
+ c3_chart_fn.legend.hide = function (targetIds) {
+ var $$ = this.internal;
+ $$.hideLegend($$.mapToTargetIds(targetIds));
+ $$.updateAndRedraw({withLegend: true});
+ };
+
+ c3_chart_fn.resize = function (size) {
+ var $$ = this.internal, config = $$.config;
+ config.size_width = size ? size.width : null;
+ config.size_height = size ? size.height : null;
+ this.flush();
+ };
+
+ c3_chart_fn.flush = function () {
+ var $$ = this.internal;
+ $$.updateAndRedraw({withLegend: true, withTransition: false, withTransitionForTransform: false});
+ };
+
+ c3_chart_fn.destroy = function () {
+ var $$ = this.internal;
+ $$.data.targets = undefined;
+ $$.data.xs = {};
+ $$.selectChart.classed('c3', false).html("");
+ window.clearInterval($$.intervalForObserveInserted);
+ window.onresize = null;
+ };
+
+ c3_chart_fn.tooltip = function () {
+ };
+ c3_chart_fn.tooltip.show = function (args) {
+ var $$ = this.internal, index, mouse;
+
+ // determine mouse position on the chart
+ if (args.mouse) {
+ mouse = args.mouse;
+ }
+
+ // determine focus data
+ if (args.data) {
+ if ($$.isMultipleX()) {
+ // if multiple xs, target point will be determined by mouse
+ mouse = [$$.x(args.data.x), $$.getYScale(args.data.id)(args.data.value)];
+ index = null;
+ } else {
+ // TODO: when tooltip_grouped = false
+ index = isValue(args.data.index) ? args.data.index : $$.getIndexByX(args.data.x);
+ }
+ }
+ else if (typeof args.x !== 'undefined') {
+ index = $$.getIndexByX(args.x);
+ }
+ else if (typeof args.index !== 'undefined') {
+ index = args.index;
+ }
+
+ // emulate mouse events to show
+ $$.dispatchEvent('mouseover', index, mouse);
+ $$.dispatchEvent('mousemove', index, mouse);
+ };
+ c3_chart_fn.tooltip.hide = function () {
+ // TODO: get target data by checking the state of focus
+ this.internal.dispatchEvent('mouseout', 0);
+ };
+
+ // Features:
+ // 1. category axis
+ // 2. ceil values of translate/x/y to int for half pixel antialiasing
+ // 3. multiline tick text
+ var tickTextCharSize;
+
+ function c3_axis(d3, params) {
+ var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments;
+
+ var tickOffset = 0, tickCulling = true, tickCentered;
+
+ params = params || {};
+ outerTickSize = params.withOuterTick ? 6 : 0;
+
+ function axisX(selection, x) {
+ selection.attr("transform", function (d) {
+ return "translate(" + Math.ceil(x(d) + tickOffset) + ", 0)";
+ });
+ }
+
+ function axisY(selection, y) {
+ selection.attr("transform", function (d) {
+ return "translate(0," + Math.ceil(y(d)) + ")";
+ });
+ }
+
+ function scaleExtent(domain) {
+ var start = domain[0], stop = domain[domain.length - 1];
+ return start < stop ? [start, stop] : [stop, start];
+ }
+
+ function generateTicks(scale) {
+ var i, domain, ticks = [];
+ if (scale.ticks) {
+ return scale.ticks.apply(scale, tickArguments);
+ }
+ domain = scale.domain();
+ for (i = Math.ceil(domain[0]); i < domain[1]; i++) {
+ ticks.push(i);
+ }
+ if (ticks.length > 0 && ticks[0] > 0) {
+ ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));
+ }
+ return ticks;
+ }
+
+ function copyScale() {
+ var newScale = scale.copy(), domain;
+ if (params.isCategory) {
+ domain = scale.domain();
+ newScale.domain([domain[0], domain[1] - 1]);
+ }
+ return newScale;
+ }
+
+ function textFormatted(v) {
+ return tickFormat ? tickFormat(v) : v;
+ }
+
+ function getSizeFor1Char(tick) {
+ if (tickTextCharSize) {
+ return tickTextCharSize;
+ }
+ var size = {
+ h: 11.5,
+ w: 5.5
+ };
+ tick.select('text').text(textFormatted).each(function (d) {
+ var box = this.getBoundingClientRect(),
+ text = textFormatted(d),
+ h = box.height,
+ w = text ? (box.width / text.length) : undefined;
+ if (h && w) {
+ size.h = h;
+ size.w = w;
+ }
+ }).text('');
+ tickTextCharSize = size;
+ return size;
+ }
+
+ function axis(g) {
+ g.each(function () {
+ var g = d3.select(this);
+ var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale();
+
+ var ticks = tickValues ? tickValues : generateTicks(scale1),
+ tick = g.selectAll(".tick").data(ticks, scale1),
+ tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6),
+ // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.
+ tickExit = tick.exit().remove(),
+ tickUpdate = d3.transition(tick).style("opacity", 1),
+ tickTransform, tickX, tickY;
+
+ var range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range()),
+ path = g.selectAll(".domain").data([0]),
+ pathUpdate = (path.enter().append("path").attr("class", "domain"), d3.transition(path));
+ tickEnter.append("line");
+ tickEnter.append("text");
+
+ var lineEnter = tickEnter.select("line"),
+ lineUpdate = tickUpdate.select("line"),
+ textEnter = tickEnter.select("text"),
+ textUpdate = tickUpdate.select("text");
+
+ if (params.isCategory) {
+ tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);
+ tickX = tickCentered ? 0 : tickOffset;
+ tickY = tickCentered ? tickOffset : 0;
+ } else {
+ tickOffset = tickX = 0;
+ }
+
+ var text, tspan, sizeFor1Char = getSizeFor1Char(g.select('.tick')), counts = [];
+ var tickLength = Math.max(innerTickSize, 0) + tickPadding,
+ isVertical = orient === 'left' || orient === 'right';
+
+ // this should be called only when category axis
+ function splitTickText(d, maxWidth) {
+ var tickText = textFormatted(d),
+ subtext, spaceIndex, textWidth, splitted = [];
+
+ if (Object.prototype.toString.call(tickText) === "[object Array]") {
+ return tickText;
+ }
+
+ if (!maxWidth || maxWidth <= 0) {
+ maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110;
+ }
+
+ function split(splitted, text) {
+ spaceIndex = undefined;
+ for (var i = 1; i < text.length; i++) {
+ if (text.charAt(i) === ' ') {
+ spaceIndex = i;
+ }
+ subtext = text.substr(0, i + 1);
+ textWidth = sizeFor1Char.w * subtext.length;
+ // if text width gets over tick width, split by space index or crrent index
+ if (maxWidth < textWidth) {
+ return split(
+ splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)),
+ text.slice(spaceIndex ? spaceIndex + 1 : i)
+ );
+ }
+ }
+ return splitted.concat(text);
+ }
+
+ return split(splitted, tickText + "");
+ }
+
+ function tspanDy(d, i) {
+ var dy = sizeFor1Char.h;
+ if (i === 0) {
+ if (orient === 'left' || orient === 'right') {
+ dy = -((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3);
+ } else {
+ dy = ".71em";
+ }
+ }
+ return dy;
+ }
+
+ function tickSize(d) {
+ var tickPosition = scale(d) + (tickCentered ? 0 : tickOffset);
+ return range[0] < tickPosition && tickPosition < range[1] ? innerTickSize : 0;
+ }
+
+ text = tick.select("text");
+ tspan = text.selectAll('tspan')
+ .data(function (d, i) {
+ var splitted = params.tickMultiline ? splitTickText(d, params.tickWidth) : [].concat(textFormatted(d));
+ counts[i] = splitted.length;
+ return splitted.map(function (s) {
+ return {index: i, splitted: s};
+ });
+ });
+ tspan.enter().append('tspan');
+ tspan.exit().remove();
+ tspan.text(function (d) {
+ return d.splitted;
+ });
+
+ switch (orient) {
+ case "bottom":
+ {
+ tickTransform = axisX;
+ lineEnter.attr("y2", innerTickSize);
+ textEnter.attr("y", tickLength);
+ lineUpdate.attr("x1", tickX).attr("x2", tickX).attr("y2", tickSize);
+ textUpdate.attr("x", 0).attr("y", tickLength);
+ text.style("text-anchor", "middle");
+ tspan.attr('x', 0).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
+ break;
+ }
+ case "top":
+ {
+ tickTransform = axisX;
+ lineEnter.attr("y2", -innerTickSize);
+ textEnter.attr("y", -tickLength);
+ lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
+ textUpdate.attr("x", 0).attr("y", -tickLength);
+ text.style("text-anchor", "middle");
+ tspan.attr('x', 0).attr("dy", "0em");
+ pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
+ break;
+ }
+ case "left":
+ {
+ tickTransform = axisY;
+ lineEnter.attr("x2", -innerTickSize);
+ textEnter.attr("x", -tickLength);
+ lineUpdate.attr("x2", -innerTickSize).attr("y1", tickY).attr("y2", tickY);
+ textUpdate.attr("x", -tickLength).attr("y", tickOffset);
+ text.style("text-anchor", "end");
+ tspan.attr('x', -tickLength).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
+ break;
+ }
+ case "right":
+ {
+ tickTransform = axisY;
+ lineEnter.attr("x2", innerTickSize);
+ textEnter.attr("x", tickLength);
+ lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
+ textUpdate.attr("x", tickLength).attr("y", 0);
+ text.style("text-anchor", "start");
+ tspan.attr('x', tickLength).attr("dy", tspanDy);
+ pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
+ break;
+ }
+ }
+ if (scale1.rangeBand) {
+ var x = scale1, dx = x.rangeBand() / 2;
+ scale0 = scale1 = function (d) {
+ return x(d) + dx;
+ };
+ } else if (scale0.rangeBand) {
+ scale0 = scale1;
+ } else {
+ tickExit.call(tickTransform, scale1);
+ }
+ tickEnter.call(tickTransform, scale0);
+ tickUpdate.call(tickTransform, scale1);
+ });
+ }
+
+ axis.scale = function (x) {
+ if (!arguments.length) {
+ return scale;
+ }
+ scale = x;
+ return axis;
+ };
+ axis.orient = function (x) {
+ if (!arguments.length) {
+ return orient;
+ }
+ orient = x in {top: 1, right: 1, bottom: 1, left: 1} ? x + "" : "bottom";
+ return axis;
+ };
+ axis.tickFormat = function (format) {
+ if (!arguments.length) {
+ return tickFormat;
+ }
+ tickFormat = format;
+ return axis;
+ };
+ axis.tickCentered = function (isCentered) {
+ if (!arguments.length) {
+ return tickCentered;
+ }
+ tickCentered = isCentered;
+ return axis;
+ };
+ axis.tickOffset = function () { // This will be overwritten when normal x axis
+ return tickOffset;
+ };
+ axis.ticks = function () {
+ if (!arguments.length) {
+ return tickArguments;
+ }
+ tickArguments = arguments;
+ return axis;
+ };
+ axis.tickCulling = function (culling) {
+ if (!arguments.length) {
+ return tickCulling;
+ }
+ tickCulling = culling;
+ return axis;
+ };
+ axis.tickValues = function (x) {
+ if (typeof x === 'function') {
+ tickValues = function () {
+ return x(scale.domain());
+ };
+ }
+ else {
+ if (!arguments.length) {
+ return tickValues;
+ }
+ tickValues = x;
+ }
+ return axis;
+ };
+ return axis;
+ }
+
+ // fix problems using c3 with phantomjs #578
+ Function.prototype.bind = Function.prototype.bind || function (thisp) {
+ var fn = this;
+ return function () {
+ return fn.apply(thisp, arguments);
+ };
+ };
+
+ if (typeof define === 'function' && define.amd) {
+ define("c3", ["d3"], c3);
+ } else if ('undefined' !== typeof exports && 'undefined' !== typeof module) {
+ module.exports = c3;
+ } else {
+ window.c3 = c3;
+ }
+
+})(window);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.min.js
new file mode 100644
index 00000000..3c335da3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/c3.min.js
@@ -0,0 +1,2665 @@
+!function (a) {
+ "use strict";
+ function b(a) {
+ var b = this.internal = new c(this);
+ b.loadConfig(a), b.init(), function d(a, b, c) {
+ Object.keys(a).forEach(function (e) {
+ b[e] = a[e].bind(c), Object.keys(a[e]).length > 0 && d(a[e], b[e], c)
+ })
+ }(e, this, this)
+ }
+
+ function c(b) {
+ var c = this;
+ c.d3 = a.d3 ? a.d3 : "undefined" != typeof require ? require("d3") : void 0, c.api = b, c.config = c.getDefaultConfig(), c.data = {}, c.cache = {}, c.axes = {}
+ }
+
+ function d(a, b) {
+ function c(a, b) {
+ a.attr("transform", function (a) {
+ return "translate(" + Math.ceil(b(a) + t) + ", 0)"
+ })
+ }
+
+ function d(a, b) {
+ a.attr("transform", function (a) {
+ return "translate(0," + Math.ceil(b(a)) + ")"
+ })
+ }
+
+ function e(a) {
+ var b = a[0], c = a[a.length - 1];
+ return c > b ? [b, c] : [c, b]
+ }
+
+ function f(a) {
+ var b, c, d = [];
+ if (a.ticks)return a.ticks.apply(a, m);
+ for (c = a.domain(), b = Math.ceil(c[0]); b < c[1]; b++)d.push(b);
+ return d.length > 0 && d[0] > 0 && d.unshift(d[0] - (d[1] - d[0])), d
+ }
+
+ function g() {
+ var a, c = o.copy();
+ return b.isCategory && (a = o.domain(), c.domain([a[0], a[1] - 1])), c
+ }
+
+ function h(a) {
+ return l ? l(a) : a
+ }
+
+ function i(a) {
+ if (w)return w;
+ var b = {h: 11.5, w: 5.5};
+ return a.select("text").text(h).each(function (a) {
+ var c = this.getBoundingClientRect(), d = h(a), e = c.height, f = d ? c.width / d.length : void 0;
+ e && f && (b.h = e, b.w = f)
+ }).text(""), w = b, b
+ }
+
+ function j(j) {
+ j.each(function () {
+ function j(a, c) {
+ function d(a, b) {
+ f = void 0;
+ for (var h = 1; h < b.length; h++)if (" " === b.charAt(h) && (f = h), e = b.substr(0, h + 1), g = O.w * e.length, g > c)return d(a.concat(b.substr(0, f ? f : h)), b.slice(f ? f + 1 : h));
+ return a.concat(b)
+ }
+
+ var e, f, g, i = h(a), j = [];
+ return "[object Array]" === Object.prototype.toString.call(i) ? i : ((!c || 0 >= c) && (c = R ? 95 : b.isCategory ? Math.ceil(z(A[1]) - z(A[0])) - 12 : 110), d(j, i + ""))
+ }
+
+ function l(a, b) {
+ var c = O.h;
+ return 0 === b && (c = "left" === p || "right" === p ? -((P[a.index] - 1) * (O.h / 2) - 3) : ".71em"), c
+ }
+
+ function m(a) {
+ var b = o(a) + (n ? 0 : t);
+ return F[0] < b && b < F[1] ? q : 0
+ }
+
+ var u, v, w, x = a.select(this), y = this.__chart__ || o, z = this.__chart__ = g(), A = s ? s : f(z), B = x.selectAll(".tick").data(A, z), C = B.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), D = B.exit().remove(), E = a.transition(B).style("opacity", 1), F = o.rangeExtent ? o.rangeExtent() : e(o.range()), G = x.selectAll(".domain").data([0]), H = (G.enter().append("path").attr("class", "domain"), a.transition(G));
+ C.append("line"), C.append("text");
+ var I = C.select("line"), J = E.select("line"), K = C.select("text"), L = E.select("text");
+ b.isCategory ? (t = Math.ceil((z(1) - z(0)) / 2), v = n ? 0 : t, w = n ? t : 0) : t = v = 0;
+ var M, N, O = i(x.select(".tick")), P = [], Q = Math.max(q, 0) + r, R = "left" === p || "right" === p;
+ switch (M = B.select("text"), N = M.selectAll("tspan").data(function (a, c) {
+ var d = b.tickMultiline ? j(a, b.tickWidth) : [].concat(h(a));
+ return P[c] = d.length, d.map(function (a) {
+ return {index: c, splitted: a}
+ })
+ }), N.enter().append("tspan"), N.exit().remove(), N.text(function (a) {
+ return a.splitted
+ }), p) {
+ case"bottom":
+ u = c, I.attr("y2", q), K.attr("y", Q), J.attr("x1", v).attr("x2", v).attr("y2", m), L.attr("x", 0).attr("y", Q), M.style("text-anchor", "middle"), N.attr("x", 0).attr("dy", l), H.attr("d", "M" + F[0] + "," + k + "V0H" + F[1] + "V" + k);
+ break;
+ case"top":
+ u = c, I.attr("y2", -q), K.attr("y", -Q), J.attr("x2", 0).attr("y2", -q), L.attr("x", 0).attr("y", -Q), M.style("text-anchor", "middle"), N.attr("x", 0).attr("dy", "0em"), H.attr("d", "M" + F[0] + "," + -k + "V0H" + F[1] + "V" + -k);
+ break;
+ case"left":
+ u = d, I.attr("x2", -q), K.attr("x", -Q), J.attr("x2", -q).attr("y1", w).attr("y2", w), L.attr("x", -Q).attr("y", t), M.style("text-anchor", "end"), N.attr("x", -Q).attr("dy", l), H.attr("d", "M" + -k + "," + F[0] + "H0V" + F[1] + "H" + -k);
+ break;
+ case"right":
+ u = d, I.attr("x2", q), K.attr("x", Q), J.attr("x2", q).attr("y2", 0), L.attr("x", Q).attr("y", 0), M.style("text-anchor", "start"), N.attr("x", Q).attr("dy", l), H.attr("d", "M" + k + "," + F[0] + "H0V" + F[1] + "H" + k)
+ }
+ if (z.rangeBand) {
+ var S = z, T = S.rangeBand() / 2;
+ y = z = function (a) {
+ return S(a) + T
+ }
+ } else y.rangeBand ? y = z : D.call(u, z);
+ C.call(u, y), E.call(u, z)
+ })
+ }
+
+ var k, l, m, n, o = a.scale.linear(), p = "bottom", q = 6, r = 3, s = null, t = 0, u = !0;
+ return b = b || {}, k = b.withOuterTick ? 6 : 0, j.scale = function (a) {
+ return arguments.length ? (o = a, j) : o
+ }, j.orient = function (a) {
+ return arguments.length ? (p = a in{top: 1, right: 1, bottom: 1, left: 1} ? a + "" : "bottom", j) : p
+ }, j.tickFormat = function (a) {
+ return arguments.length ? (l = a, j) : l
+ }, j.tickCentered = function (a) {
+ return arguments.length ? (n = a, j) : n
+ }, j.tickOffset = function () {
+ return t
+ }, j.ticks = function () {
+ return arguments.length ? (m = arguments, j) : m
+ }, j.tickCulling = function (a) {
+ return arguments.length ? (u = a, j) : u
+ }, j.tickValues = function (a) {
+ if ("function" == typeof a)s = function () {
+ return a(o.domain())
+ }; else {
+ if (!arguments.length)return s;
+ s = a
+ }
+ return j
+ }, j
+ }
+
+ var e, f, g = {version: "0.4.8"};
+ g.generate = function (a) {
+ return new b(a)
+ }, g.chart = {
+ fn: b.prototype,
+ internal: {fn: c.prototype}
+ }, e = g.chart.fn, f = g.chart.internal.fn, f.init = function () {
+ var a = this, b = a.config;
+ if (a.initParams(), b.data_url)a.convertUrlToData(b.data_url, b.data_mimeType, b.data_keys, a.initWithData); else if (b.data_json)a.initWithData(a.convertJsonToData(b.data_json, b.data_keys)); else if (b.data_rows)a.initWithData(a.convertRowsToData(b.data_rows)); else {
+ if (!b.data_columns)throw Error("url or json or rows or columns is required.");
+ a.initWithData(a.convertColumnsToData(b.data_columns))
+ }
+ }, f.initParams = function () {
+ var a = this, b = a.d3, c = a.config;
+ a.clipId = "c3-" + +new Date + "-clip", a.clipIdForXAxis = a.clipId + "-xaxis", a.clipIdForYAxis = a.clipId + "-yaxis", a.clipIdForGrid = a.clipId + "-grid", a.clipIdForSubchart = a.clipId + "-subchart", a.clipPath = a.getClipPath(a.clipId), a.clipPathForXAxis = a.getClipPath(a.clipIdForXAxis), a.clipPathForYAxis = a.getClipPath(a.clipIdForYAxis), a.clipPathForGrid = a.getClipPath(a.clipIdForGrid), a.clipPathForSubchart = a.getClipPath(a.clipIdForSubchart), a.dragStart = null, a.dragging = !1, a.flowing = !1, a.cancelClick = !1, a.mouseover = !1, a.transiting = !1, a.color = a.generateColor(), a.levelColor = a.generateLevelColor(), a.dataTimeFormat = c.data_xLocaltime ? b.time.format : b.time.format.utc, a.axisTimeFormat = c.axis_x_localtime ? b.time.format : b.time.format.utc, a.defaultAxisTimeFormat = a.axisTimeFormat.multi([[".%L", function (a) {
+ return a.getMilliseconds()
+ }], [":%S", function (a) {
+ return a.getSeconds()
+ }], ["%I:%M", function (a) {
+ return a.getMinutes()
+ }], ["%I %p", function (a) {
+ return a.getHours()
+ }], ["%-m/%-d", function (a) {
+ return a.getDay() && 1 !== a.getDate()
+ }], ["%-m/%-d", function (a) {
+ return 1 !== a.getDate()
+ }], ["%-m/%-d", function (a) {
+ return a.getMonth()
+ }], ["%Y/%-m/%-d", function () {
+ return !0
+ }]]), a.hiddenTargetIds = [], a.hiddenLegendIds = [], a.focusedTargetIds = [], a.defocusedTargetIds = [], a.xOrient = c.axis_rotated ? "left" : "bottom", a.yOrient = c.axis_rotated ? c.axis_y_inner ? "top" : "bottom" : c.axis_y_inner ? "right" : "left", a.y2Orient = c.axis_rotated ? c.axis_y2_inner ? "bottom" : "top" : c.axis_y2_inner ? "left" : "right", a.subXOrient = c.axis_rotated ? "left" : "bottom", a.isLegendRight = "right" === c.legend_position, a.isLegendInset = "inset" === c.legend_position, a.isLegendTop = "top-left" === c.legend_inset_anchor || "top-right" === c.legend_inset_anchor, a.isLegendLeft = "top-left" === c.legend_inset_anchor || "bottom-left" === c.legend_inset_anchor, a.legendStep = 0, a.legendItemWidth = 0, a.legendItemHeight = 0, a.currentMaxTickWidths = {
+ x: 0,
+ y: 0,
+ y2: 0
+ }, a.rotated_padding_left = 30, a.rotated_padding_right = c.axis_rotated && !c.axis_x_show ? 0 : 30, a.rotated_padding_top = 5, a.withoutFadeIn = {}, a.intervalForObserveInserted = void 0, a.axes.subx = b.selectAll([])
+ }, f.initChartElements = function () {
+ this.initBar && this.initBar(), this.initLine && this.initLine(), this.initArc && this.initArc(), this.initGauge && this.initGauge(), this.initText && this.initText()
+ }, f.initWithData = function (b) {
+ var c, d, e = this, f = e.d3, g = e.config, h = !0;
+ e.initPie && e.initPie(), e.initBrush && e.initBrush(), e.initZoom && e.initZoom(), e.selectChart = "function" == typeof g.bindto.node ? g.bindto : f.select(g.bindto), e.selectChart.empty() && (e.selectChart = f.select(document.createElement("div")).style("opacity", 0), e.observeInserted(e.selectChart), h = !1), e.selectChart.html("").classed("c3", !0), e.data.xs = {}, e.data.targets = e.convertDataToTargets(b), g.data_filter && (e.data.targets = e.data.targets.filter(g.data_filter)), g.data_hide && e.addHiddenTargetIds(g.data_hide === !0 ? e.mapToIds(e.data.targets) : g.data_hide), g.legend_hide && e.addHiddenLegendIds(g.legend_hide === !0 ? e.mapToIds(e.data.targets) : g.legend_hide), e.hasType("gauge") && (g.legend_show = !1), e.updateSizes(), e.updateScales(), e.x.domain(f.extent(e.getXDomain(e.data.targets))), e.y.domain(e.getYDomain(e.data.targets, "y")), e.y2.domain(e.getYDomain(e.data.targets, "y2")), e.subX.domain(e.x.domain()), e.subY.domain(e.y.domain()), e.subY2.domain(e.y2.domain()), e.orgXDomain = e.x.domain(), e.brush && e.brush.scale(e.subX), g.zoom_enabled && e.zoom.scale(e.x), e.svg = e.selectChart.append("svg").style("overflow", "hidden").on("mouseenter", function () {
+ return g.onmouseover.call(e)
+ }).on("mouseleave", function () {
+ return g.onmouseout.call(e)
+ }), c = e.svg.append("defs"), e.clipChart = e.appendClip(c, e.clipId), e.clipXAxis = e.appendClip(c, e.clipIdForXAxis), e.clipYAxis = e.appendClip(c, e.clipIdForYAxis), e.clipGrid = e.appendClip(c, e.clipIdForGrid), e.clipSubchart = e.appendClip(c, e.clipIdForSubchart), e.updateSvgSize(), d = e.main = e.svg.append("g").attr("transform", e.getTranslate("main")), e.initSubchart && e.initSubchart(), e.initTooltip && e.initTooltip(), e.initLegend && e.initLegend(), d.append("text").attr("class", i.text + " " + i.empty).attr("text-anchor", "middle").attr("dominant-baseline", "middle"), e.initRegion(), e.initGrid(), d.append("g").attr("clip-path", e.clipPath).attr("class", i.chart), g.grid_lines_front && e.initGridLines(), e.initEventRect(), e.initChartElements(), d.insert("rect", g.zoom_privileged ? null : "g." + i.regions).attr("class", i.zoomRect).attr("width", e.width).attr("height", e.height).style("opacity", 0).on("dblclick.zoom", null), g.axis_x_extent && e.brush.extent(e.getDefaultExtent()), e.initAxis(), e.updateTargets(e.data.targets), h && (e.updateDimension(), e.config.oninit.call(e), e.redraw({
+ withTransform: !0,
+ withUpdateXDomain: !0,
+ withUpdateOrgXDomain: !0,
+ withTransitionForAxis: !1
+ })), null == a.onresize && (a.onresize = e.generateResize()), a.onresize.add && (a.onresize.add(function () {
+ g.onresize.call(e)
+ }), a.onresize.add(function () {
+ e.api.flush()
+ }), a.onresize.add(function () {
+ g.onresized.call(e)
+ })), e.api.element = e.selectChart.node()
+ }, f.smoothLines = function (a, b) {
+ var c = this;
+ "grid" === b && a.each(function () {
+ var a = c.d3.select(this), b = a.attr("x1"), d = a.attr("x2"), e = a.attr("y1"), f = a.attr("y2");
+ a.attr({x1: Math.ceil(b), x2: Math.ceil(d), y1: Math.ceil(e), y2: Math.ceil(f)})
+ })
+ }, f.updateSizes = function () {
+ var a = this, b = a.config, c = a.legend ? a.getLegendHeight() : 0, d = a.legend ? a.getLegendWidth() : 0, e = a.isLegendRight || a.isLegendInset ? 0 : c, f = a.hasArcType(), g = b.axis_rotated || f ? 0 : a.getHorizontalAxisHeight("x"), h = b.subchart_show && !f ? b.subchart_size_height + g : 0;
+ a.currentWidth = a.getCurrentWidth(), a.currentHeight = a.getCurrentHeight(), a.margin = b.axis_rotated ? {
+ top: a.getHorizontalAxisHeight("y2") + a.getCurrentPaddingTop(),
+ right: f ? 0 : a.getCurrentPaddingRight(),
+ bottom: a.getHorizontalAxisHeight("y") + e + a.getCurrentPaddingBottom(),
+ left: h + (f ? 0 : a.getCurrentPaddingLeft())
+ } : {
+ top: 4 + a.getCurrentPaddingTop(),
+ right: f ? 0 : a.getCurrentPaddingRight(),
+ bottom: g + h + e + a.getCurrentPaddingBottom(),
+ left: f ? 0 : a.getCurrentPaddingLeft()
+ }, a.margin2 = b.axis_rotated ? {
+ top: a.margin.top,
+ right: 0 / 0,
+ bottom: 20 + e,
+ left: a.rotated_padding_left
+ } : {top: a.currentHeight - h - e, right: 0 / 0, bottom: g + e, left: a.margin.left}, a.margin3 = {
+ top: 0,
+ right: 0 / 0,
+ bottom: 0,
+ left: 0
+ }, a.updateSizeForLegend && a.updateSizeForLegend(c, d), a.width = a.currentWidth - a.margin.left - a.margin.right, a.height = a.currentHeight - a.margin.top - a.margin.bottom, a.width < 0 && (a.width = 0), a.height < 0 && (a.height = 0), a.width2 = b.axis_rotated ? a.margin.left - a.rotated_padding_left - a.rotated_padding_right : a.width, a.height2 = b.axis_rotated ? a.height : a.currentHeight - a.margin2.top - a.margin2.bottom, a.width2 < 0 && (a.width2 = 0), a.height2 < 0 && (a.height2 = 0), a.arcWidth = a.width - (a.isLegendRight ? d + 10 : 0), a.arcHeight = a.height - (a.isLegendRight ? 0 : 10), a.hasType("gauge") && (a.arcHeight += a.height - a.getGaugeLabelHeight()), a.updateRadius && a.updateRadius(), a.isLegendRight && f && (a.margin3.left = a.arcWidth / 2 + 1.1 * a.radiusExpanded)
+ }, f.updateTargets = function (a) {
+ var b = this, c = b.config;
+ b.updateTargetsForText(a), b.updateTargetsForBar(a), b.updateTargetsForLine(a), b.updateTargetsForArc && b.updateTargetsForArc(a), b.updateTargetsForSubchart && b.updateTargetsForSubchart(a), b.svg.selectAll("." + i.target).filter(function (a) {
+ return b.isTargetToShow(a.id)
+ }).transition().duration(c.transition_duration).style("opacity", 1)
+ }, f.redraw = function (a, b) {
+ var c, d, e, f, g, h, j, k, l, m, n, o, p, q, r, s, u, v, w, x, y, z, A, B, C, D, E, F, G, H = this, I = H.main, J = H.d3, K = H.config, L = H.getShapeIndices(H.isAreaType), M = H.getShapeIndices(H.isBarType), N = H.getShapeIndices(H.isLineType), O = H.hasArcType(), P = H.filterTargetsToShow(H.data.targets), Q = H.xv.bind(H);
+ if (a = a || {}, c = t(a, "withY", !0), d = t(a, "withSubchart", !0), e = t(a, "withTransition", !0), h = t(a, "withTransform", !1), j = t(a, "withUpdateXDomain", !1), k = t(a, "withUpdateOrgXDomain", !1), l = t(a, "withTrimXDomain", !0), p = t(a, "withUpdateXAxis", j), m = t(a, "withLegend", !1), n = t(a, "withEventRect", !0), o = t(a, "withDimension", !0), f = t(a, "withTransitionForExit", e), g = t(a, "withTransitionForAxis", e), w = e ? K.transition_duration : 0, x = f ? w : 0, y = g ? w : 0, b = b || H.generateAxisTransitions(y), m && K.legend_show ? H.updateLegend(H.mapToIds(H.data.targets), a, b) : o && H.updateDimension(!0), H.isCategorized() && 0 === P.length && H.x.domain([0, H.axes.x.selectAll(".tick").size()]), P.length ? (H.updateXDomain(P, j, k, l), K.axis_x_tick_values || (B = K.axis_x_tick_fit || K.axis_x_tick_count ? H.generateTickValues(H.mapTargetsToUniqueXs(P), K.axis_x_tick_count, H.isTimeSeries()) : void 0, H.xAxis.tickValues(B), H.subXAxis.tickValues(B))) : (H.xAxis.tickValues([]), H.subXAxis.tickValues([])), K.zoom_rescale && !a.flow && (E = H.x.orgDomain()), H.y.domain(H.getYDomain(P, "y", E)), H.y2.domain(H.getYDomain(P, "y2", E)), !K.axis_y_tick_values && K.axis_y_tick_count && H.yAxis.tickValues(H.generateTickValues(H.y.domain(), K.axis_y_tick_count)), !K.axis_y2_tick_values && K.axis_y2_tick_count && H.y2Axis.tickValues(H.generateTickValues(H.y2.domain(), K.axis_y2_tick_count)), H.redrawAxis(b, O), H.updateAxisLabels(e), (j || p) && P.length)if (K.axis_x_tick_culling && B) {
+ for (C = 1; C < B.length; C++)if (B.length / C < K.axis_x_tick_culling_max) {
+ D = C;
+ break
+ }
+ H.svg.selectAll("." + i.axisX + " .tick text").each(function (a) {
+ var b = B.indexOf(a);
+ b >= 0 && J.select(this).style("display", b % D ? "none" : "block")
+ })
+ } else H.svg.selectAll("." + i.axisX + " .tick text").style("display", "block");
+ q = H.generateDrawArea ? H.generateDrawArea(L, !1) : void 0, r = H.generateDrawBar ? H.generateDrawBar(M) : void 0, s = H.generateDrawLine ? H.generateDrawLine(N, !1) : void 0, u = H.generateXYForText(L, M, N, !0), v = H.generateXYForText(L, M, N, !1), c && (H.subY.domain(H.getYDomain(P, "y")), H.subY2.domain(H.getYDomain(P, "y2"))), H.tooltip.style("display", "none"), H.updateXgridFocus(), I.select("text." + i.text + "." + i.empty).attr("x", H.width / 2).attr("y", H.height / 2).text(K.data_empty_label_text).transition().style("opacity", P.length ? 0 : 1), H.redrawGrid(w), H.redrawRegion(w), H.redrawBar(x), H.redrawLine(x), H.redrawArea(x), H.redrawCircle(), H.hasDataLabel() && H.redrawText(x), H.redrawArc && H.redrawArc(w, x, h), H.redrawSubchart && H.redrawSubchart(d, b, w, x, L, M, N), I.selectAll("." + i.selectedCircles).filter(H.isBarType.bind(H)).selectAll("circle").remove(), K.interaction_enabled && !a.flow && n && (H.redrawEventRect(), H.updateZoom && H.updateZoom()), H.updateCircleY(), F = (H.config.axis_rotated ? H.circleY : H.circleX).bind(H), G = (H.config.axis_rotated ? H.circleX : H.circleY).bind(H), J.transition().duration(w).each(function () {
+ var b = [];
+ H.addTransitionForBar(b, r), H.addTransitionForLine(b, s), H.addTransitionForArea(b, q), H.addTransitionForCircle(b, F, G), H.addTransitionForText(b, u, v, a.flow), H.addTransitionForRegion(b), H.addTransitionForGrid(b), a.flow && (z = H.generateWait(), b.forEach(function (a) {
+ z.add(a)
+ }), A = H.generateFlow({
+ targets: P,
+ flow: a.flow,
+ duration: w,
+ drawBar: r,
+ drawLine: s,
+ drawArea: q,
+ cx: F,
+ cy: G,
+ xv: Q,
+ xForText: u,
+ yForText: v
+ }))
+ }).call(z || function () {
+ }, A || function () {
+ }), H.mapToIds(H.data.targets).forEach(function (a) {
+ H.withoutFadeIn[a] = !0
+ })
+ }, f.updateAndRedraw = function (a) {
+ var b, c = this, d = c.config;
+ a = a || {}, a.withTransition = t(a, "withTransition", !0), a.withTransform = t(a, "withTransform", !1), a.withLegend = t(a, "withLegend", !1), a.withUpdateXDomain = !0, a.withUpdateOrgXDomain = !0, a.withTransitionForExit = !1, a.withTransitionForTransform = t(a, "withTransitionForTransform", a.withTransition), c.updateSizes(), a.withLegend && d.legend_show || (b = c.generateAxisTransitions(a.withTransitionForAxis ? d.transition_duration : 0), c.updateScales(), c.updateSvgSize(), c.transformAll(a.withTransitionForTransform, b)), c.redraw(a, b)
+ }, f.redrawWithoutRescale = function () {
+ this.redraw({withY: !1, withSubchart: !1, withEventRect: !1, withTransitionForAxis: !1})
+ }, f.isTimeSeries = function () {
+ return "timeseries" === this.config.axis_x_type
+ }, f.isCategorized = function () {
+ return this.config.axis_x_type.indexOf("categor") >= 0
+ }, f.isCustomX = function () {
+ var a = this, b = a.config;
+ return !a.isTimeSeries() && (b.data_x || s(b.data_xs))
+ }, f.isTimeSeriesY = function () {
+ return "timeseries" === this.config.axis_y_type
+ }, f.getTranslate = function (a) {
+ var b, c, d = this, e = d.config;
+ return "main" === a ? (b = p(d.margin.left), c = p(d.margin.top)) : "context" === a ? (b = p(d.margin2.left), c = p(d.margin2.top)) : "legend" === a ? (b = d.margin3.left, c = d.margin3.top) : "x" === a ? (b = 0, c = e.axis_rotated ? 0 : d.height) : "y" === a ? (b = 0, c = e.axis_rotated ? d.height : 0) : "y2" === a ? (b = e.axis_rotated ? 0 : d.width, c = e.axis_rotated ? 1 : 0) : "subx" === a ? (b = 0, c = e.axis_rotated ? 0 : d.height2) : "arc" === a && (b = d.arcWidth / 2, c = d.arcHeight / 2), "translate(" + b + "," + c + ")"
+ }, f.initialOpacity = function (a) {
+ return null !== a.value && this.withoutFadeIn[a.id] ? 1 : 0
+ }, f.initialOpacityForCircle = function (a) {
+ return null !== a.value && this.withoutFadeIn[a.id] ? this.opacityForCircle(a) : 0
+ }, f.opacityForCircle = function (a) {
+ var b = this.config.point_show ? 1 : 0;
+ return j(a.value) ? this.isScatterType(a) ? .5 : b : 0
+ }, f.opacityForText = function () {
+ return this.hasDataLabel() ? 1 : 0
+ }, f.xx = function (a) {
+ return a ? this.x(a.x) : null
+ }, f.xv = function (a) {
+ var b = this, c = a.value;
+ return b.isTimeSeries() ? c = b.parseDate(a.value) : b.isCategorized() && "string" == typeof a.value && (c = b.config.axis_x_categories.indexOf(a.value)), Math.ceil(b.x(c))
+ }, f.yv = function (a) {
+ var b = this, c = a.axis && "y2" === a.axis ? b.y2 : b.y;
+ return Math.ceil(c(a.value))
+ }, f.subxx = function (a) {
+ return a ? this.subX(a.x) : null
+ }, f.transformMain = function (a, b) {
+ var c, d, e, f = this;
+ b && b.axisX ? c = b.axisX : (c = f.main.select("." + i.axisX), a && (c = c.transition())), b && b.axisY ? d = b.axisY : (d = f.main.select("." + i.axisY), a && (d = d.transition())), b && b.axisY2 ? e = b.axisY2 : (e = f.main.select("." + i.axisY2), a && (e = e.transition())), (a ? f.main.transition() : f.main).attr("transform", f.getTranslate("main")), c.attr("transform", f.getTranslate("x")), d.attr("transform", f.getTranslate("y")), e.attr("transform", f.getTranslate("y2")), f.main.select("." + i.chartArcs).attr("transform", f.getTranslate("arc"))
+ }, f.transformAll = function (a, b) {
+ var c = this;
+ c.transformMain(a, b), c.config.subchart_show && c.transformContext(a, b), c.legend && c.transformLegend(a)
+ }, f.updateSvgSize = function () {
+ var a = this, b = a.svg.select(".c3-brush .background");
+ a.svg.attr("width", a.currentWidth).attr("height", a.currentHeight), a.svg.selectAll(["#" + a.clipId, "#" + a.clipIdForGrid]).select("rect").attr("width", a.width).attr("height", a.height), a.svg.select("#" + a.clipIdForXAxis).select("rect").attr("x", a.getXAxisClipX.bind(a)).attr("y", a.getXAxisClipY.bind(a)).attr("width", a.getXAxisClipWidth.bind(a)).attr("height", a.getXAxisClipHeight.bind(a)), a.svg.select("#" + a.clipIdForYAxis).select("rect").attr("x", a.getYAxisClipX.bind(a)).attr("y", a.getYAxisClipY.bind(a)).attr("width", a.getYAxisClipWidth.bind(a)).attr("height", a.getYAxisClipHeight.bind(a)), a.svg.select("#" + a.clipIdForSubchart).select("rect").attr("width", a.width).attr("height", b.size() ? b.attr("height") : 0), a.svg.select("." + i.zoomRect).attr("width", a.width).attr("height", a.height), a.selectChart.style("max-height", a.currentHeight + "px")
+ }, f.updateDimension = function (a) {
+ var b = this;
+ a || (b.config.axis_rotated ? (b.axes.x.call(b.xAxis), b.axes.subx.call(b.subXAxis)) : (b.axes.y.call(b.yAxis), b.axes.y2.call(b.y2Axis))), b.updateSizes(), b.updateScales(), b.updateSvgSize(), b.transformAll(!1)
+ }, f.observeInserted = function (b) {
+ var c = this, d = new MutationObserver(function (e) {
+ e.forEach(function (e) {
+ "childList" === e.type && e.previousSibling && (d.disconnect(), c.intervalForObserveInserted = a.setInterval(function () {
+ b.node().parentNode && (a.clearInterval(c.intervalForObserveInserted), c.updateDimension(), c.config.oninit.call(c), c.redraw({
+ withTransform: !0,
+ withUpdateXDomain: !0,
+ withUpdateOrgXDomain: !0,
+ withTransition: !1,
+ withTransitionForTransform: !1,
+ withLegend: !0
+ }), b.transition().style("opacity", 1))
+ }, 10))
+ })
+ });
+ d.observe(b.node(), {attributes: !0, childList: !0, characterData: !0})
+ }, f.generateResize = function () {
+ function a() {
+ b.forEach(function (a) {
+ a()
+ })
+ }
+
+ var b = [];
+ return a.add = function (a) {
+ b.push(a)
+ }, a
+ }, f.endall = function (a, b) {
+ var c = 0;
+ a.each(function () {
+ ++c
+ }).each("end", function () {
+ --c || b.apply(this, arguments)
+ })
+ }, f.generateWait = function () {
+ var a = [], b = function (b, c) {
+ var d = setInterval(function () {
+ var b = 0;
+ a.forEach(function (a) {
+ if (a.empty())return void(b += 1);
+ try {
+ a.transition()
+ } catch (c) {
+ b += 1
+ }
+ }), b === a.length && (clearInterval(d), c && c())
+ }, 10)
+ };
+ return b.add = function (b) {
+ a.push(b)
+ }, b
+ }, f.parseDate = function (b) {
+ var c, d = this;
+ return c = b instanceof Date ? b : "number" != typeof b && isNaN(b) ? d.dataTimeFormat(d.config.data_xFormat).parse(b) : new Date(+b), (!c || isNaN(+c)) && a.console.error("Failed to parse x '" + b + "' to Date object"), c
+ }, f.getDefaultConfig = function () {
+ var a = {
+ bindto: "#chart",
+ size_width: void 0,
+ size_height: void 0,
+ padding_left: void 0,
+ padding_right: void 0,
+ padding_top: void 0,
+ padding_bottom: void 0,
+ zoom_enabled: !1,
+ zoom_extent: void 0,
+ zoom_privileged: !1,
+ zoom_rescale: !1,
+ zoom_onzoom: function () {
+ },
+ zoom_onzoomstart: function () {
+ },
+ zoom_onzoomend: function () {
+ },
+ interaction_enabled: !0,
+ onmouseover: function () {
+ },
+ onmouseout: function () {
+ },
+ onresize: function () {
+ },
+ onresized: function () {
+ },
+ oninit: function () {
+ },
+ transition_duration: 350,
+ data_x: void 0,
+ data_xs: {},
+ data_xFormat: "%Y-%m-%d",
+ data_xLocaltime: !0,
+ data_xSort: !0,
+ data_idConverter: function (a) {
+ return a
+ },
+ data_names: {},
+ data_classes: {},
+ data_groups: [],
+ data_axes: {},
+ data_type: void 0,
+ data_types: {},
+ data_labels: {},
+ data_order: "desc",
+ data_regions: {},
+ data_color: void 0,
+ data_colors: {},
+ data_hide: !1,
+ data_filter: void 0,
+ data_selection_enabled: !1,
+ data_selection_grouped: !1,
+ data_selection_isselectable: function () {
+ return !0
+ },
+ data_selection_multiple: !0,
+ data_onclick: function () {
+ },
+ data_onmouseover: function () {
+ },
+ data_onmouseout: function () {
+ },
+ data_onselected: function () {
+ },
+ data_onunselected: function () {
+ },
+ data_ondragstart: function () {
+ },
+ data_ondragend: function () {
+ },
+ data_url: void 0,
+ data_json: void 0,
+ data_rows: void 0,
+ data_columns: void 0,
+ data_mimeType: void 0,
+ data_keys: void 0,
+ data_empty_label_text: "",
+ subchart_show: !1,
+ subchart_size_height: 60,
+ subchart_onbrush: function () {
+ },
+ color_pattern: [],
+ color_threshold: {},
+ legend_show: !0,
+ legend_hide: !1,
+ legend_position: "bottom",
+ legend_inset_anchor: "top-left",
+ legend_inset_x: 10,
+ legend_inset_y: 0,
+ legend_inset_step: void 0,
+ legend_item_onclick: void 0,
+ legend_item_onmouseover: void 0,
+ legend_item_onmouseout: void 0,
+ legend_equally: !1,
+ axis_rotated: !1,
+ axis_x_show: !0,
+ axis_x_type: "indexed",
+ axis_x_localtime: !0,
+ axis_x_categories: [],
+ axis_x_tick_centered: !1,
+ axis_x_tick_format: void 0,
+ axis_x_tick_culling: {},
+ axis_x_tick_culling_max: 10,
+ axis_x_tick_count: void 0,
+ axis_x_tick_fit: !0,
+ axis_x_tick_values: null,
+ axis_x_tick_rotate: 0,
+ axis_x_tick_outer: !0,
+ axis_x_tick_multiline: !0,
+ axis_x_tick_width: null,
+ axis_x_max: void 0,
+ axis_x_min: void 0,
+ axis_x_padding: {},
+ axis_x_height: void 0,
+ axis_x_extent: void 0,
+ axis_x_label: {},
+ axis_y_show: !0,
+ axis_y_type: void 0,
+ axis_y_max: void 0,
+ axis_y_min: void 0,
+ axis_y_center: void 0,
+ axis_y_inner: void 0,
+ axis_y_label: {},
+ axis_y_tick_format: void 0,
+ axis_y_tick_outer: !0,
+ axis_y_tick_values: null,
+ axis_y_tick_count: void 0,
+ axis_y_tick_time_value: void 0,
+ axis_y_tick_time_interval: void 0,
+ axis_y_padding: {},
+ axis_y_default: void 0,
+ axis_y2_show: !1,
+ axis_y2_max: void 0,
+ axis_y2_min: void 0,
+ axis_y2_center: void 0,
+ axis_y2_inner: void 0,
+ axis_y2_label: {},
+ axis_y2_tick_format: void 0,
+ axis_y2_tick_outer: !0,
+ axis_y2_tick_values: null,
+ axis_y2_tick_count: void 0,
+ axis_y2_padding: {},
+ axis_y2_default: void 0,
+ grid_x_show: !1,
+ grid_x_type: "tick",
+ grid_x_lines: [],
+ grid_y_show: !1,
+ grid_y_lines: [],
+ grid_y_ticks: 10,
+ grid_focus_show: !0,
+ grid_lines_front: !0,
+ point_show: !0,
+ point_r: 2.5,
+ point_focus_expand_enabled: !0,
+ point_focus_expand_r: void 0,
+ point_select_r: void 0,
+ line_connectNull: !1,
+ line_step_type: "step",
+ bar_width: void 0,
+ bar_width_ratio: .6,
+ bar_width_max: void 0,
+ bar_zerobased: !0,
+ area_zerobased: !0,
+ pie_label_show: !0,
+ pie_label_format: void 0,
+ pie_label_threshold: .05,
+ pie_expand: !0,
+ gauge_label_show: !0,
+ gauge_label_format: void 0,
+ gauge_expand: !0,
+ gauge_min: 0,
+ gauge_max: 100,
+ gauge_units: void 0,
+ gauge_width: void 0,
+ donut_label_show: !0,
+ donut_label_format: void 0,
+ donut_label_threshold: .05,
+ donut_width: void 0,
+ donut_expand: !0,
+ donut_title: "",
+ regions: [],
+ tooltip_show: !0,
+ tooltip_grouped: !0,
+ tooltip_format_title: void 0,
+ tooltip_format_name: void 0,
+ tooltip_format_value: void 0,
+ tooltip_contents: function (a, b, c, d) {
+ return this.getTooltipContent ? this.getTooltipContent(a, b, c, d) : ""
+ },
+ tooltip_init_show: !1,
+ tooltip_init_x: 0,
+ tooltip_init_position: {top: "0px", left: "50px"}
+ };
+ return Object.keys(this.additionalConfig).forEach(function (b) {
+ a[b] = this.additionalConfig[b]
+ }, this), a
+ }, f.additionalConfig = {}, f.loadConfig = function (a) {
+ function b() {
+ var a = d.shift();
+ return a && c && "object" == typeof c && a in c ? (c = c[a], b()) : a ? void 0 : c
+ }
+
+ var c, d, e, f = this.config;
+ Object.keys(f).forEach(function (g) {
+ c = a, d = g.split("_"), e = b(), n(e) && (f[g] = e)
+ })
+ }, f.getScale = function (a, b, c) {
+ return (c ? this.d3.time.scale() : this.d3.scale.linear()).range([a, b])
+ }, f.getX = function (a, b, c, d) {
+ var e, f = this, g = f.getScale(a, b, f.isTimeSeries()), h = c ? g.domain(c) : g;
+ f.isCategorized() ? (d = d || function () {
+ return 0
+ }, g = function (a, b) {
+ var c = h(a) + d(a);
+ return b ? c : Math.ceil(c)
+ }) : g = function (a, b) {
+ var c = h(a);
+ return b ? c : Math.ceil(c)
+ };
+ for (e in h)g[e] = h[e];
+ return g.orgDomain = function () {
+ return h.domain()
+ }, f.isCategorized() && (g.domain = function (a) {
+ return arguments.length ? (h.domain(a), g) : (a = this.orgDomain(), [a[0], a[1] + 1])
+ }), g
+ }, f.getY = function (a, b, c) {
+ var d = this.getScale(a, b, this.isTimeSeriesY());
+ return c && d.domain(c), d
+ }, f.getYScale = function (a) {
+ return "y2" === this.getAxisId(a) ? this.y2 : this.y
+ }, f.getSubYScale = function (a) {
+ return "y2" === this.getAxisId(a) ? this.subY2 : this.subY
+ }, f.updateScales = function () {
+ var a = this, b = a.config, c = !a.x;
+ a.xMin = b.axis_rotated ? 1 : 0, a.xMax = b.axis_rotated ? a.height : a.width, a.yMin = b.axis_rotated ? 0 : a.height, a.yMax = b.axis_rotated ? a.width : 1, a.subXMin = a.xMin, a.subXMax = a.xMax, a.subYMin = b.axis_rotated ? 0 : a.height2, a.subYMax = b.axis_rotated ? a.width2 : 1, a.x = a.getX(a.xMin, a.xMax, c ? void 0 : a.x.orgDomain(), function () {
+ return a.xAxis.tickOffset()
+ }), a.y = a.getY(a.yMin, a.yMax, c ? b.axis_y_default : a.y.domain()), a.y2 = a.getY(a.yMin, a.yMax, c ? b.axis_y2_default : a.y2.domain()), a.subX = a.getX(a.xMin, a.xMax, a.orgXDomain, function (b) {
+ return b % 1 ? 0 : a.subXAxis.tickOffset()
+ }), a.subY = a.getY(a.subYMin, a.subYMax, c ? b.axis_y_default : a.subY.domain()), a.subY2 = a.getY(a.subYMin, a.subYMax, c ? b.axis_y2_default : a.subY2.domain()), a.xAxisTickFormat = a.getXAxisTickFormat(), a.xAxisTickValues = a.getXAxisTickValues(), a.yAxisTickValues = a.getYAxisTickValues(), a.y2AxisTickValues = a.getY2AxisTickValues(), a.xAxis = a.getXAxis(a.x, a.xOrient, a.xAxisTickFormat, a.xAxisTickValues, b.axis_x_tick_outer), a.subXAxis = a.getXAxis(a.subX, a.subXOrient, a.xAxisTickFormat, a.xAxisTickValues, b.axis_x_tick_outer), a.yAxis = a.getYAxis(a.y, a.yOrient, b.axis_y_tick_format, a.yAxisTickValues, b.axis_y_tick_outer), a.y2Axis = a.getYAxis(a.y2, a.y2Orient, b.axis_y2_tick_format, a.y2AxisTickValues, b.axis_y2_tick_outer), c || (a.brush && a.brush.scale(a.subX), b.zoom_enabled && a.zoom.scale(a.x)), a.updateArc && a.updateArc()
+ }, f.getYDomainMin = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config, j = h.mapToIds(a), k = h.getValuesAsIdKeyed(a);
+ if (i.data_groups.length > 0)for (g = h.hasNegativeValueInTargets(a), b = 0; b < i.data_groups.length; b++)if (e = i.data_groups[b].filter(function (a) {
+ return j.indexOf(a) >= 0
+ }), 0 !== e.length)for (d = e[0], g && k[d] && k[d].forEach(function (a, b) {
+ k[d][b] = 0 > a ? a : 0
+ }), c = 1; c < e.length; c++)f = e[c], k[f] && k[f].forEach(function (a, b) {
+ h.getAxisId(f) !== h.getAxisId(d) || !k[d] || g && +a > 0 || (k[d][b] += +a)
+ });
+ return h.d3.min(Object.keys(k).map(function (a) {
+ return h.d3.min(k[a])
+ }))
+ }, f.getYDomainMax = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config, j = h.mapToIds(a), k = h.getValuesAsIdKeyed(a);
+ if (i.data_groups.length > 0)for (g = h.hasPositiveValueInTargets(a), b = 0; b < i.data_groups.length; b++)if (e = i.data_groups[b].filter(function (a) {
+ return j.indexOf(a) >= 0
+ }), 0 !== e.length)for (d = e[0], g && k[d] && k[d].forEach(function (a, b) {
+ k[d][b] = a > 0 ? a : 0
+ }), c = 1; c < e.length; c++)f = e[c], k[f] && k[f].forEach(function (a, b) {
+ h.getAxisId(f) !== h.getAxisId(d) || !k[d] || g && 0 > +a || (k[d][b] += +a)
+ });
+ return h.d3.max(Object.keys(k).map(function (a) {
+ return h.d3.max(k[a])
+ }))
+ }, f.getYDomain = function (a, b, c) {
+ var d, e, f, g, h, i, k, l, m, n, o = this, p = o.config, r = a.filter(function (a) {
+ return o.getAxisId(a.id) === b
+ }), t = c ? o.filterByXDomain(r, c) : r, u = "y2" === b ? p.axis_y2_min : p.axis_y_min, v = "y2" === b ? p.axis_y2_max : p.axis_y_max, w = j(u) ? u : o.getYDomainMin(t), x = j(v) ? v : o.getYDomainMax(t), y = "y2" === b ? p.axis_y2_center : p.axis_y_center, z = o.hasType("bar", t) && p.bar_zerobased || o.hasType("area", t) && p.area_zerobased, A = o.hasDataLabel() && p.axis_rotated, B = o.hasDataLabel() && !p.axis_rotated;
+ return w > x && (j(u) ? x = w + 10 : w = x - 10), 0 === t.length ? "y2" === b ? o.y2.domain() : o.y.domain() : (isNaN(w) && (w = 0), isNaN(x) && (x = w), w === x && (0 > w ? x = 0 : w = 0), m = w >= 0 && x >= 0, n = 0 >= w && 0 >= x, (j(u) && m || j(v) && n) && (z = !1), z && (m && (w = 0), n && (x = 0)), d = Math.abs(x - w), e = f = g = .1 * d, "undefined" != typeof y && (h = Math.max(Math.abs(w), Math.abs(x)), x = y + h, w = y - h), A ? (i = o.getDataLabelLength(w, x, b, "width"), k = q(o.y.range()), l = [i[0] / k, i[1] / k], f += d * (l[1] / (1 - l[0] - l[1])), g += d * (l[0] / (1 - l[0] - l[1]))) : B && (i = o.getDataLabelLength(w, x, b, "height"), f += this.convertPixelsToAxisPadding(i[1], d), g += this.convertPixelsToAxisPadding(i[0], d)), "y" === b && s(p.axis_y_padding) && (f = o.getAxisPadding(p.axis_y_padding, "top", f, d), g = o.getAxisPadding(p.axis_y_padding, "bottom", g, d)), "y2" === b && s(p.axis_y2_padding) && (f = o.getAxisPadding(p.axis_y2_padding, "top", f, d), g = o.getAxisPadding(p.axis_y2_padding, "bottom", g, d)), z && (m && (g = w), n && (f = -x)), [w - g, x + f])
+ }, f.getXDomainMin = function (a) {
+ var b = this, c = b.config;
+ return n(c.axis_x_min) ? b.isTimeSeries() ? this.parseDate(c.axis_x_min) : c.axis_x_min : b.d3.min(a, function (a) {
+ return b.d3.min(a.values, function (a) {
+ return a.x
+ })
+ })
+ }, f.getXDomainMax = function (a) {
+ var b = this, c = b.config;
+ return n(c.axis_x_max) ? b.isTimeSeries() ? this.parseDate(c.axis_x_max) : c.axis_x_max : b.d3.max(a, function (a) {
+ return b.d3.max(a.values, function (a) {
+ return a.x
+ })
+ })
+ }, f.getXDomainPadding = function (a) {
+ var b, c, d, e, f = this, g = f.config, h = a[1] - a[0];
+ return f.isCategorized() ? c = 0 : f.hasType("bar") ? (b = f.getMaxDataCount(), c = b > 1 ? h / (b - 1) / 2 : .5) : c = .01 * h, "object" == typeof g.axis_x_padding && s(g.axis_x_padding) ? (d = j(g.axis_x_padding.left) ? g.axis_x_padding.left : c, e = j(g.axis_x_padding.right) ? g.axis_x_padding.right : c) : d = e = "number" == typeof g.axis_x_padding ? g.axis_x_padding : c, {
+ left: d,
+ right: e
+ }
+ }, f.getXDomain = function (a) {
+ var b = this, c = [b.getXDomainMin(a), b.getXDomainMax(a)], d = c[0], e = c[1], f = b.getXDomainPadding(c), g = 0, h = 0;
+ return d - e !== 0 || b.isCategorized() || (b.isTimeSeries() ? (d = new Date(.5 * d.getTime()), e = new Date(1.5 * e.getTime())) : (d = 0 === d ? 1 : .5 * d, e = 0 === e ? -1 : 1.5 * e)), (d || 0 === d) && (g = b.isTimeSeries() ? new Date(d.getTime() - f.left) : d - f.left), (e || 0 === e) && (h = b.isTimeSeries() ? new Date(e.getTime() + f.right) : e + f.right), [g, h]
+ }, f.updateXDomain = function (a, b, c, d, e) {
+ var f = this, g = f.config;
+ return c && (f.x.domain(e ? e : f.d3.extent(f.getXDomain(a))), f.orgXDomain = f.x.domain(), g.zoom_enabled && f.zoom.scale(f.x).updateScaleExtent(), f.subX.domain(f.x.domain()), f.brush && f.brush.scale(f.subX)), b && (f.x.domain(e ? e : !f.brush || f.brush.empty() ? f.orgXDomain : f.brush.extent()), g.zoom_enabled && f.zoom.scale(f.x).updateScaleExtent()), d && f.x.domain(f.trimXDomain(f.x.orgDomain())), f.x.domain()
+ }, f.trimXDomain = function (a) {
+ var b = this;
+ return a[0] <= b.orgXDomain[0] && (a[1] = +a[1] + (b.orgXDomain[0] - a[0]), a[0] = b.orgXDomain[0]), b.orgXDomain[1] <= a[1] && (a[0] = +a[0] - (a[1] - b.orgXDomain[1]), a[1] = b.orgXDomain[1]), a
+ }, f.isX = function (a) {
+ var b = this, c = b.config;
+ return c.data_x && a === c.data_x || s(c.data_xs) && u(c.data_xs, a)
+ }, f.isNotX = function (a) {
+ return !this.isX(a)
+ }, f.getXKey = function (a) {
+ var b = this, c = b.config;
+ return c.data_x ? c.data_x : s(c.data_xs) ? c.data_xs[a] : null
+ }, f.getXValuesOfXKey = function (a, b) {
+ var c, d = this, e = b && s(b) ? d.mapToIds(b) : [];
+ return e.forEach(function (b) {
+ d.getXKey(b) === a && (c = d.data.xs[b])
+ }), c
+ }, f.getIndexByX = function (a) {
+ var b = this, c = b.filterByX(b.data.targets, a);
+ return c.length ? c[0].index : null
+ }, f.getXValue = function (a, b) {
+ var c = this;
+ return a in c.data.xs && c.data.xs[a] && j(c.data.xs[a][b]) ? c.data.xs[a][b] : b
+ }, f.getOtherTargetXs = function () {
+ var a = this, b = Object.keys(a.data.xs);
+ return b.length ? a.data.xs[b[0]] : null
+ }, f.getOtherTargetX = function (a) {
+ var b = this.getOtherTargetXs();
+ return b && a < b.length ? b[a] : null
+ }, f.addXs = function (a) {
+ var b = this;
+ Object.keys(a).forEach(function (c) {
+ b.config.data_xs[c] = a[c]
+ })
+ }, f.hasMultipleX = function (a) {
+ return this.d3.set(Object.keys(a).map(function (b) {
+ return a[b]
+ })).size() > 1
+ }, f.isMultipleX = function () {
+ return s(this.config.data_xs) || !this.config.data_xSort || this.hasType("scatter")
+ }, f.addName = function (a) {
+ var b, c = this;
+ return a && (b = c.config.data_names[a.id], a.name = b ? b : a.id), a
+ }, f.getValueOnIndex = function (a, b) {
+ var c = a.filter(function (a) {
+ return a.index === b
+ });
+ return c.length ? c[0] : null
+ }, f.updateTargetX = function (a, b) {
+ var c = this;
+ a.forEach(function (a) {
+ a.values.forEach(function (d, e) {
+ d.x = c.generateTargetX(b[e], a.id, e)
+ }), c.data.xs[a.id] = b
+ })
+ }, f.updateTargetXs = function (a, b) {
+ var c = this;
+ a.forEach(function (a) {
+ b[a.id] && c.updateTargetX([a], b[a.id])
+ })
+ }, f.generateTargetX = function (a, b, c) {
+ var d, e = this;
+ return d = e.isTimeSeries() ? e.parseDate(a ? a : e.getXValue(b, c)) : e.isCustomX() && !e.isCategorized() ? j(a) ? +a : e.getXValue(b, c) : c
+ }, f.cloneTarget = function (a) {
+ return {
+ id: a.id, id_org: a.id_org, values: a.values.map(function (a) {
+ return {x: a.x, value: a.value, id: a.id}
+ })
+ }
+ }, f.updateXs = function () {
+ var a = this;
+ a.data.targets.length && (a.xs = [], a.data.targets[0].values.forEach(function (b) {
+ a.xs[b.index] = b.x
+ }))
+ }, f.getPrevX = function (a) {
+ var b = this.xs[a - 1];
+ return "undefined" != typeof b ? b : null
+ }, f.getNextX = function (a) {
+ var b = this.xs[a + 1];
+ return "undefined" != typeof b ? b : null
+ }, f.getMaxDataCount = function () {
+ var a = this;
+ return a.d3.max(a.data.targets, function (a) {
+ return a.values.length
+ })
+ }, f.getMaxDataCountTarget = function (a) {
+ var b, c = a.length, d = 0;
+ return c > 1 ? a.forEach(function (a) {
+ a.values.length > d && (b = a, d = a.values.length)
+ }) : b = c ? a[0] : null, b
+ }, f.getEdgeX = function (a) {
+ var b = this;
+ return a.length ? [b.d3.min(a, function (a) {
+ return a.values[0].x
+ }), b.d3.max(a, function (a) {
+ return a.values[a.values.length - 1].x
+ })] : [0, 0]
+ }, f.mapToIds = function (a) {
+ return a.map(function (a) {
+ return a.id
+ })
+ }, f.mapToTargetIds = function (a) {
+ var b = this;
+ return a ? l(a) ? [a] : a : b.mapToIds(b.data.targets)
+ }, f.hasTarget = function (a, b) {
+ var c, d = this.mapToIds(a);
+ for (c = 0; c < d.length; c++)if (d[c] === b)return !0;
+ return !1
+ }, f.isTargetToShow = function (a) {
+ return this.hiddenTargetIds.indexOf(a) < 0
+ }, f.isLegendToShow = function (a) {
+ return this.hiddenLegendIds.indexOf(a) < 0
+ }, f.filterTargetsToShow = function (a) {
+ var b = this;
+ return a.filter(function (a) {
+ return b.isTargetToShow(a.id)
+ })
+ }, f.mapTargetsToUniqueXs = function (a) {
+ var b = this, c = b.d3.set(b.d3.merge(a.map(function (a) {
+ return a.values.map(function (a) {
+ return +a.x
+ })
+ }))).values();
+ return c.map(b.isTimeSeries() ? function (a) {
+ return new Date(+a)
+ } : function (a) {
+ return +a
+ })
+ }, f.addHiddenTargetIds = function (a) {
+ this.hiddenTargetIds = this.hiddenTargetIds.concat(a)
+ }, f.removeHiddenTargetIds = function (a) {
+ this.hiddenTargetIds = this.hiddenTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, f.addHiddenLegendIds = function (a) {
+ this.hiddenLegendIds = this.hiddenLegendIds.concat(a)
+ }, f.removeHiddenLegendIds = function (a) {
+ this.hiddenLegendIds = this.hiddenLegendIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, f.getValuesAsIdKeyed = function (a) {
+ var b = {};
+ return a.forEach(function (a) {
+ b[a.id] = [], a.values.forEach(function (c) {
+ b[a.id].push(c.value)
+ })
+ }), b
+ }, f.checkValueInTargets = function (a, b) {
+ var c, d, e, f = Object.keys(a);
+ for (c = 0; c < f.length; c++)for (e = a[f[c]].values, d = 0; d < e.length; d++)if (b(e[d].value))return !0;
+ return !1
+ }, f.hasNegativeValueInTargets = function (a) {
+ return this.checkValueInTargets(a, function (a) {
+ return 0 > a
+ })
+ }, f.hasPositiveValueInTargets = function (a) {
+ return this.checkValueInTargets(a, function (a) {
+ return a > 0
+ })
+ }, f.isOrderDesc = function () {
+ var a = this.config;
+ return "string" == typeof a.data_order && "desc" === a.data_order.toLowerCase()
+ }, f.isOrderAsc = function () {
+ var a = this.config;
+ return "string" == typeof a.data_order && "asc" === a.data_order.toLowerCase()
+ }, f.orderTargets = function (a) {
+ var b = this, c = b.config, d = b.isOrderAsc(), e = b.isOrderDesc();
+ return d || e ? a.sort(function (a, b) {
+ var c = function (a, b) {
+ return a + Math.abs(b.value)
+ }, e = a.values.reduce(c, 0), f = b.values.reduce(c, 0);
+ return d ? f - e : e - f
+ }) : k(c.data_order) && a.sort(c.data_order), a
+ }, f.filterByX = function (a, b) {
+ return this.d3.merge(a.map(function (a) {
+ return a.values
+ })).filter(function (a) {
+ return a.x - b === 0
+ })
+ }, f.filterRemoveNull = function (a) {
+ return a.filter(function (a) {
+ return j(a.value)
+ })
+ }, f.filterByXDomain = function (a, b) {
+ return a.map(function (a) {
+ return {
+ id: a.id, id_org: a.id_org, values: a.values.filter(function (a) {
+ return b[0] <= a.x && a.x <= b[1]
+ })
+ }
+ })
+ }, f.hasDataLabel = function () {
+ var a = this.config;
+ return "boolean" == typeof a.data_labels && a.data_labels ? !0 : "object" == typeof a.data_labels && s(a.data_labels) ? !0 : !1
+ }, f.getDataLabelLength = function (a, b, c, d) {
+ var e = this, f = [0, 0], g = 1.3;
+ return e.selectChart.select("svg").selectAll(".dummy").data([a, b]).enter().append("text").text(function (a) {
+ return e.formatByAxisId(c)(a)
+ }).each(function (a, b) {
+ f[b] = this.getBoundingClientRect()[d] * g
+ }).remove(), f
+ }, f.isNoneArc = function (a) {
+ return this.hasTarget(this.data.targets, a.id)
+ },f.isArc = function (a) {
+ return "data"in a && this.hasTarget(this.data.targets, a.data.id)
+ },f.findSameXOfValues = function (a, b) {
+ var c, d = a[b].x, e = [];
+ for (c = b - 1; c >= 0 && d === a[c].x; c--)e.push(a[c]);
+ for (c = b; c < a.length && d === a[c].x; c++)e.push(a[c]);
+ return e
+ },f.findClosestFromTargets = function (a, b) {
+ var c, d = this;
+ return c = a.map(function (a) {
+ return d.findClosest(a.values, b)
+ }), d.findClosest(c, b)
+ },f.findClosest = function (a, b) {
+ var c, d = this, e = 100;
+ return a.filter(function (a) {
+ return a && d.isBarType(a.id)
+ }).forEach(function (a) {
+ var b = d.main.select("." + i.bars + d.getTargetSelectorSuffix(a.id) + " ." + i.bar + "-" + a.index).node();
+ !c && d.isWithinBar(b) && (c = a)
+ }), a.filter(function (a) {
+ return a && !d.isBarType(a.id)
+ }).forEach(function (a) {
+ var f = d.dist(a, b);
+ e > f && (e = f, c = a)
+ }), c
+ },f.dist = function (a, b) {
+ var c = this, d = c.config, e = d.axis_rotated ? 1 : 0, f = d.axis_rotated ? 0 : 1, g = c.circleY(a, a.index), h = c.x(a.x);
+ return Math.pow(h - b[e], 2) + Math.pow(g - b[f], 2)
+ },f.convertValuesToStep = function (a) {
+ var b, c = [].concat(a);
+ if (!this.isCategorized())return a;
+ for (b = a.length + 1; b > 0; b--)c[b] = c[b - 1];
+ return c[0] = {x: c[0].x - 1, value: c[0].value, id: c[0].id}, c[a.length + 1] = {
+ x: c[a.length].x + 1,
+ value: c[a.length].value,
+ id: c[a.length].id
+ }, c
+ },f.updateDataAttributes = function (a, b) {
+ var c = this, d = c.config, e = d["data_" + a];
+ return "undefined" == typeof b ? e : (Object.keys(b).forEach(function (a) {
+ e[a] = b[a]
+ }), c.redraw({withLegend: !0}), e)
+ },f.convertUrlToData = function (a, b, c, d) {
+ var e = this, f = b ? b : "csv";
+ e.d3.xhr(a, function (a, b) {
+ var g;
+ g = "json" === f ? e.convertJsonToData(JSON.parse(b.response), c) : "tsv" === f ? e.convertTsvToData(b.response) : e.convertCsvToData(b.response), d.call(e, g)
+ })
+ },f.convertXsvToData = function (a, b) {
+ var c, d = b.parseRows(a);
+ return 1 === d.length ? (c = [{}], d[0].forEach(function (a) {
+ c[0][a] = null
+ })) : c = b.parse(a), c
+ },f.convertCsvToData = function (a) {
+ return this.convertXsvToData(a, this.d3.csv)
+ },f.convertTsvToData = function (a) {
+ return this.convertXsvToData(a, this.d3.tsv)
+ },f.convertJsonToData = function (a, b) {
+ var c, d, e = this, f = [];
+ return b ? (c = b.value, b.x && (c.push(b.x), e.config.data_x = b.x), f.push(c), a.forEach(function (a) {
+ var b = [];
+ c.forEach(function (c) {
+ var d = m(a[c]) ? null : a[c];
+ b.push(d)
+ }), f.push(b)
+ }), d = e.convertRowsToData(f)) : (Object.keys(a).forEach(function (b) {
+ f.push([b].concat(a[b]))
+ }), d = e.convertColumnsToData(f)), d
+ },f.convertRowsToData = function (a) {
+ var b, c, d = a[0], e = {}, f = [];
+ for (b = 1; b < a.length; b++) {
+ for (e = {}, c = 0; c < a[b].length; c++) {
+ if (m(a[b][c]))throw new Error("Source data is missing a component at (" + b + "," + c + ")!");
+ e[d[c]] = a[b][c]
+ }
+ f.push(e)
+ }
+ return f
+ },f.convertColumnsToData = function (a) {
+ var b, c, d, e = [];
+ for (b = 0; b < a.length; b++)for (d = a[b][0], c = 1; c < a[b].length; c++) {
+ if (m(e[c - 1]) && (e[c - 1] = {}), m(a[b][c]))throw new Error("Source data is missing a component at (" + b + "," + c + ")!");
+ e[c - 1][d] = a[b][c]
+ }
+ return e
+ },f.convertDataToTargets = function (a, b) {
+ var c, d = this, e = d.config, f = d.d3.keys(a[0]).filter(d.isNotX, d), g = d.d3.keys(a[0]).filter(d.isX, d);
+ return f.forEach(function (c) {
+ var f = d.getXKey(c);
+ d.isCustomX() || d.isTimeSeries() ? g.indexOf(f) >= 0 ? d.data.xs[c] = (b && d.data.xs[c] ? d.data.xs[c] : []).concat(a.map(function (a) {
+ return a[f]
+ }).filter(j).map(function (a, b) {
+ return d.generateTargetX(a, c, b)
+ })) : e.data_x ? d.data.xs[c] = d.getOtherTargetXs() : s(e.data_xs) && (d.data.xs[c] = d.getXValuesOfXKey(f, d.data.targets)) : d.data.xs[c] = a.map(function (a, b) {
+ return b
+ })
+ }), f.forEach(function (a) {
+ if (!d.data.xs[a])throw new Error('x is not defined for id = "' + a + '".')
+ }), c = f.map(function (b, c) {
+ var f = e.data_idConverter(b);
+ return {
+ id: f, id_org: b, values: a.map(function (a, g) {
+ var h = d.getXKey(b), i = a[h], j = d.generateTargetX(i, b, g);
+ return d.isCustomX() && d.isCategorized() && 0 === c && i && (0 === g && (e.axis_x_categories = []), e.axis_x_categories.push(i)), (m(a[b]) || d.data.xs[b].length <= g) && (j = void 0), {
+ x: j,
+ value: null === a[b] || isNaN(a[b]) ? null : +a[b],
+ id: f
+ }
+ }).filter(function (a) {
+ return n(a.x)
+ })
+ }
+ }), c.forEach(function (a) {
+ var b;
+ e.data_xSort && (a.values = a.values.sort(function (a, b) {
+ var c = a.x || 0 === a.x ? a.x : 1 / 0, d = b.x || 0 === b.x ? b.x : 1 / 0;
+ return c - d
+ })), b = 0, a.values.forEach(function (a) {
+ a.index = b++
+ }), d.data.xs[a.id].sort(function (a, b) {
+ return a - b
+ })
+ }), e.data_type && d.setTargetType(d.mapToIds(c).filter(function (a) {
+ return !(a in e.data_types)
+ }), e.data_type), c.forEach(function (a) {
+ d.addCache(a.id_org, a)
+ }), c
+ },f.load = function (a, b) {
+ var c = this;
+ a && (b.filter && (a = a.filter(b.filter)), (b.type || b.types) && a.forEach(function (a) {
+ c.setTargetType(a.id, b.types ? b.types[a.id] : b.type)
+ }), c.data.targets.forEach(function (b) {
+ for (var c = 0; c < a.length; c++)if (b.id === a[c].id) {
+ b.values = a[c].values, a.splice(c, 1);
+ break
+ }
+ }), c.data.targets = c.data.targets.concat(a)), c.updateTargets(c.data.targets), c.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0,
+ withLegend: !0
+ }), b.done && b.done()
+ },f.loadFromArgs = function (a) {
+ var b = this;
+ a.data ? b.load(b.convertDataToTargets(a.data), a) : a.url ? b.convertUrlToData(a.url, a.mimeType, a.keys, function (c) {
+ b.load(b.convertDataToTargets(c), a)
+ }) : a.json ? b.load(b.convertDataToTargets(b.convertJsonToData(a.json, a.keys)), a) : a.rows ? b.load(b.convertDataToTargets(b.convertRowsToData(a.rows)), a) : a.columns ? b.load(b.convertDataToTargets(b.convertColumnsToData(a.columns)), a) : b.load(null, a)
+ },f.unload = function (a, b) {
+ var c = this;
+ return b || (b = function () {
+ }), a = a.filter(function (a) {
+ return c.hasTarget(c.data.targets, a)
+ }), a && 0 !== a.length ? (c.svg.selectAll(a.map(function (a) {
+ return c.selectorTarget(a)
+ })).transition().style("opacity", 0).remove().call(c.endall, b), void a.forEach(function (a) {
+ c.withoutFadeIn[a] = !1, c.legend && c.legend.selectAll("." + i.legendItem + c.getTargetSelectorSuffix(a)).remove(), c.data.targets = c.data.targets.filter(function (b) {
+ return b.id !== a
+ })
+ })) : void b()
+ },f.categoryName = function (a) {
+ var b = this.config;
+ return a < b.axis_x_categories.length ? b.axis_x_categories[a] : a
+ },f.initEventRect = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.eventRects).style("fill-opacity", 0)
+ },f.redrawEventRect = function () {
+ var a, b, c = this, d = c.config, e = c.isMultipleX(), f = c.main.select("." + i.eventRects).style("cursor", d.zoom_enabled ? d.axis_rotated ? "ns-resize" : "ew-resize" : null).classed(i.eventRectsMultiple, e).classed(i.eventRectsSingle, !e);
+ f.selectAll("." + i.eventRect).remove(), c.eventRect = f.selectAll("." + i.eventRect), e ? (a = c.eventRect.data([0]), c.generateEventRectsForMultipleXs(a.enter()), c.updateEventRect(a)) : (b = c.getMaxDataCountTarget(c.data.targets), f.datum(b ? b.values : []), c.eventRect = f.selectAll("." + i.eventRect), a = c.eventRect.data(function (a) {
+ return a
+ }), c.generateEventRectsForSingleX(a.enter()), c.updateEventRect(a), a.exit().remove())
+ },f.updateEventRect = function (a) {
+ var b, c, d, e, f, g, h = this, i = h.config;
+ a = a || h.eventRect.data(function (a) {
+ return a
+ }), h.isMultipleX() ? (b = 0, c = 0, d = h.width, e = h.height) : (!h.isCustomX() && !h.isTimeSeries() || h.isCategorized() ? (f = h.getEventRectWidth(), g = function (a) {
+ return h.x(a.x) - f / 2
+ }) : (h.updateXs(), f = function (a) {
+ var b = h.getPrevX(a.index), c = h.getNextX(a.index);
+ return null === b && null === c ? i.axis_rotated ? h.height : h.width : (null === b && (b = h.x.domain()[0]), null === c && (c = h.x.domain()[1]), Math.max(0, (h.x(c) - h.x(b)) / 2))
+ }, g = function (a) {
+ var b = h.getPrevX(a.index), c = h.getNextX(a.index), d = h.data.xs[a.id][a.index];
+ return null === b && null === c ? 0 : (null === b && (b = h.x.domain()[0]), (h.x(d) + h.x(b)) / 2)
+ }), b = i.axis_rotated ? 0 : g, c = i.axis_rotated ? g : 0, d = i.axis_rotated ? h.width : f, e = i.axis_rotated ? f : h.height), a.attr("class", h.classEvent.bind(h)).attr("x", b).attr("y", c).attr("width", d).attr("height", e)
+ },f.generateEventRectsForSingleX = function (a) {
+ var b = this, c = b.d3, d = b.config;
+ a.append("rect").attr("class", b.classEvent.bind(b)).style("cursor", d.data_selection_enabled && d.data_selection_grouped ? "pointer" : null).on("mouseover", function (a) {
+ var c, e, f = a.index;
+ b.dragging || b.flowing || b.hasArcType() || (c = b.data.targets.map(function (a) {
+ return b.addName(b.getValueOnIndex(a.values, f))
+ }), e = [], Object.keys(d.data_names).forEach(function (a) {
+ for (var b = 0; b < c.length; b++)if (c[b] && c[b].id === a) {
+ e.push(c[b]), c.shift(b);
+ break
+ }
+ }), c = e.concat(c), d.point_focus_expand_enabled && b.expandCircles(f, null, !0), b.expandBars(f, null, !0), b.main.selectAll("." + i.shape + "-" + f).each(function (a) {
+ d.data_onmouseover.call(b.api, a)
+ }))
+ }).on("mouseout", function (a) {
+ var c = a.index;
+ b.hasArcType() || (b.hideXGridFocus(), b.hideTooltip(), b.unexpandCircles(), b.unexpandBars(), b.main.selectAll("." + i.shape + "-" + c).each(function (a) {
+ d.data_onmouseout.call(b.api, a)
+ }))
+ }).on("mousemove", function (a) {
+ var e, f = a.index, g = b.svg.select("." + i.eventRect + "-" + f);
+ b.dragging || b.flowing || b.hasArcType() || (b.isStepType(a) && "step-after" === b.config.line_step_type && c.mouse(this)[0] < b.x(b.getXValue(a.id, f)) && (f -= 1), e = b.filterTargetsToShow(b.data.targets).map(function (a) {
+ return b.addName(b.getValueOnIndex(a.values, f))
+ }), d.tooltip_grouped && (b.showTooltip(e, c.mouse(this)), b.showXGridFocus(e)), (!d.tooltip_grouped || d.data_selection_enabled && !d.data_selection_grouped) && b.main.selectAll("." + i.shape + "-" + f).each(function () {
+ c.select(this).classed(i.EXPANDED, !0), d.data_selection_enabled && g.style("cursor", d.data_selection_grouped ? "pointer" : null), d.tooltip_grouped || (b.hideXGridFocus(), b.hideTooltip(), d.data_selection_grouped || (b.unexpandCircles(f), b.unexpandBars(f)))
+ }).filter(function (a) {
+ return b.isWithinShape(this, a)
+ }).each(function (a) {
+ d.data_selection_enabled && (d.data_selection_grouped || d.data_selection_isselectable(a)) && g.style("cursor", "pointer"), d.tooltip_grouped || (b.showTooltip([a], c.mouse(this)), b.showXGridFocus([a]), d.point_focus_expand_enabled && b.expandCircles(f, a.id, !0), b.expandBars(f, a.id, !0))
+ }))
+ }).on("click", function (a) {
+ var e = a.index;
+ if (!b.hasArcType() && b.toggleShape) {
+ if (b.cancelClick)return void(b.cancelClick = !1);
+ b.isStepType(a) && "step-after" === d.line_step_type && c.mouse(this)[0] < b.x(b.getXValue(a.id, e)) && (e -= 1), b.main.selectAll("." + i.shape + "-" + e).each(function (a) {
+ (d.data_selection_grouped || b.isWithinShape(this, a)) && (b.toggleShape(this, a, e), b.config.data_onclick.call(b.api, a, this))
+ })
+ }
+ }).call(c.behavior.drag().origin(Object).on("drag", function () {
+ b.drag(c.mouse(this))
+ }).on("dragstart", function () {
+ b.dragstart(c.mouse(this))
+ }).on("dragend", function () {
+ b.dragend()
+ }))
+ },f.generateEventRectsForMultipleXs = function (a) {
+ function b() {
+ c.svg.select("." + i.eventRect).style("cursor", null), c.hideXGridFocus(), c.hideTooltip(), c.unexpandCircles(), c.unexpandBars()
+ }
+
+ var c = this, d = c.d3, e = c.config;
+ a.append("rect").attr("x", 0).attr("y", 0).attr("width", c.width).attr("height", c.height).attr("class", i.eventRect).on("mouseout", function () {
+ c.hasArcType() || b()
+ }).on("mousemove", function () {
+ var a, f, g, h, j = c.filterTargetsToShow(c.data.targets);
+ if (!c.dragging && !c.hasArcType(j)) {
+ if (a = d.mouse(this), f = c.findClosestFromTargets(j, a), !c.mouseover || f && f.id === c.mouseover.id || (e.data_onmouseout.call(c.api, c.mouseover), c.mouseover = void 0), !f)return void b();
+ g = c.isScatterType(f) || !e.tooltip_grouped ? [f] : c.filterByX(j, f.x), h = g.map(function (a) {
+ return c.addName(a)
+ }), c.showTooltip(h, a), e.point_focus_expand_enabled && c.expandCircles(f.index, f.id, !0), c.expandBars(f.index, f.id, !0), c.showXGridFocus(h), (c.isBarType(f.id) || c.dist(f, a) < 100) && (c.svg.select("." + i.eventRect).style("cursor", "pointer"), c.mouseover || (e.data_onmouseover.call(c.api, f), c.mouseover = f))
+ }
+ }).on("click", function () {
+ var a, b, f = c.filterTargetsToShow(c.data.targets);
+ c.hasArcType(f) || (a = d.mouse(this), b = c.findClosestFromTargets(f, a), b && (c.isBarType(b.id) || c.dist(b, a) < 100) && c.main.selectAll("." + i.shapes + c.getTargetSelectorSuffix(b.id)).select("." + i.shape + "-" + b.index).each(function () {
+ (e.data_selection_grouped || c.isWithinShape(this, b)) && (c.toggleShape(this, b, b.index), c.config.data_onclick.call(c.api, b, this))
+ }))
+ }).call(d.behavior.drag().origin(Object).on("drag", function () {
+ c.drag(d.mouse(this))
+ }).on("dragstart", function () {
+ c.dragstart(d.mouse(this))
+ }).on("dragend", function () {
+ c.dragend()
+ }))
+ },f.dispatchEvent = function (b, c, d) {
+ var e = this, f = "." + i.eventRect + (e.isMultipleX() ? "" : "-" + c), g = e.main.select(f).node(), h = g.getBoundingClientRect(), j = h.left + (d ? d[0] : 0), k = h.top + (d ? d[1] : 0), l = document.createEvent("MouseEvents");
+ l.initMouseEvent(b, !0, !0, a, 0, j, k, j, k, !1, !1, !1, !1, 0, null), g.dispatchEvent(l)
+ },f.getCurrentWidth = function () {
+ var a = this, b = a.config;
+ return b.size_width ? b.size_width : a.getParentWidth()
+ },f.getCurrentHeight = function () {
+ var a = this, b = a.config, c = b.size_height ? b.size_height : a.getParentHeight();
+ return c > 0 ? c : 320 / (a.hasType("gauge") ? 2 : 1)
+ },f.getCurrentPaddingTop = function () {
+ var a = this.config;
+ return j(a.padding_top) ? a.padding_top : 0
+ },f.getCurrentPaddingBottom = function () {
+ var a = this.config;
+ return j(a.padding_bottom) ? a.padding_bottom : 0
+ },f.getCurrentPaddingLeft = function (a) {
+ var b = this, c = b.config;
+ return j(c.padding_left) ? c.padding_left : c.axis_rotated ? c.axis_x_show ? Math.max(o(b.getAxisWidthByAxisId("x", a)), 40) : 1 : !c.axis_y_show || c.axis_y_inner ? b.getYAxisLabelPosition().isOuter ? 30 : 1 : o(b.getAxisWidthByAxisId("y", a))
+ },f.getCurrentPaddingRight = function () {
+ var a = this, b = a.config, c = 10, d = a.isLegendRight ? a.getLegendWidth() + 20 : 0;
+ return j(b.padding_right) ? b.padding_right + 1 : b.axis_rotated ? c + d : !b.axis_y2_show || b.axis_y2_inner ? 2 + d + (a.getY2AxisLabelPosition().isOuter ? 20 : 0) : o(a.getAxisWidthByAxisId("y2")) + d
+ },f.getParentRectValue = function (a) {
+ for (var b, c = this.selectChart.node(); c && "BODY" !== c.tagName && !(b = c.getBoundingClientRect()[a]);)c = c.parentNode;
+ return b
+ },f.getParentWidth = function () {
+ return this.getParentRectValue("width")
+ },f.getParentHeight = function () {
+ var a = this.selectChart.style("height");
+ return a.indexOf("px") > 0 ? +a.replace("px", "") : 0
+ },f.getSvgLeft = function (a) {
+ var b = this, c = b.config, d = c.axis_rotated || !c.axis_rotated && !c.axis_y_inner, e = c.axis_rotated ? i.axisX : i.axisY, f = b.main.select("." + e).node(), g = f && d ? f.getBoundingClientRect() : {right: 0}, h = b.selectChart.node().getBoundingClientRect(), j = b.hasArcType(), k = g.right - h.left - (j ? 0 : b.getCurrentPaddingLeft(a));
+ return k > 0 ? k : 0
+ },f.getAxisWidthByAxisId = function (a, b) {
+ var c = this, d = c.getAxisLabelPositionById(a);
+ return c.getMaxTickWidth(a, b) + (d.isInner ? 20 : 40)
+ },f.getHorizontalAxisHeight = function (a) {
+ var b = this, c = b.config, d = 30;
+ return "x" !== a || c.axis_x_show ? "x" === a && c.axis_x_height ? c.axis_x_height : "y" !== a || c.axis_y_show ? "y2" !== a || c.axis_y2_show ? ("x" === a && !c.axis_rotated && c.axis_x_tick_rotate && (d = b.getMaxTickWidth(a) * Math.cos(Math.PI * (90 - c.axis_x_tick_rotate) / 180)), d + (b.getAxisLabelPositionById(a).isInner ? 0 : 10) + ("y2" === a ? -10 : 0)) : b.rotated_padding_top : !c.legend_show || b.isLegendRight || b.isLegendInset ? 1 : 10 : 8
+ },f.getEventRectWidth = function () {
+ var a, b, c, d, e, f, g = this, h = g.getMaxDataCountTarget(g.data.targets);
+ return h ? (a = h.values[0], b = h.values[h.values.length - 1], c = g.x(b.x) - g.x(a.x), 0 === c ? g.config.axis_rotated ? g.height : g.width : (d = g.getMaxDataCount(), e = g.hasType("bar") ? (d - (g.isCategorized() ? .25 : 1)) / d : 1, f = d > 1 ? c * e / (d - 1) : c, 1 > f ? 1 : f)) : 0
+ },f.getShapeIndices = function (a) {
+ var b, c, d = this, e = d.config, f = {}, g = 0;
+ return d.filterTargetsToShow(d.data.targets.filter(a, d)).forEach(function (a) {
+ for (b = 0; b < e.data_groups.length; b++)if (!(e.data_groups[b].indexOf(a.id) < 0))for (c = 0; c < e.data_groups[b].length; c++)if (e.data_groups[b][c]in f) {
+ f[a.id] = f[e.data_groups[b][c]];
+ break
+ }
+ m(f[a.id]) && (f[a.id] = g++)
+ }), f.__max__ = g - 1, f
+ },f.getShapeX = function (a, b, c, d) {
+ var e = this, f = d ? e.subX : e.x;
+ return function (d) {
+ var e = d.id in c ? c[d.id] : 0;
+ return d.x || 0 === d.x ? f(d.x) - a * (b / 2 - e) : 0
+ }
+ },f.getShapeY = function (a) {
+ var b = this;
+ return function (c) {
+ var d = a ? b.getSubYScale(c.id) : b.getYScale(c.id);
+ return d(c.value)
+ }
+ },f.getShapeOffset = function (a, b, c) {
+ var d = this, e = d.orderTargets(d.filterTargetsToShow(d.data.targets.filter(a, d))), f = e.map(function (a) {
+ return a.id
+ });
+ return function (a, g) {
+ var h = c ? d.getSubYScale(a.id) : d.getYScale(a.id), i = h(0), j = i;
+ return e.forEach(function (c) {
+ var e = d.isStepType(a) ? d.convertValuesToStep(c.values) : c.values;
+ c.id !== a.id && b[c.id] === b[a.id] && f.indexOf(c.id) < f.indexOf(a.id) && e[g].value * a.value >= 0 && (j += h(e[g].value) - i)
+ }), j
+ }
+ },f.isWithinShape = function (a, b) {
+ var c, d = this, e = d.d3.select(a);
+ return d.isTargetToShow(b.id) ? "circle" === a.nodeName ? c = d.isStepType(b) ? d.isWithinStep(a, d.getYScale(b.id)(b.value)) : d.isWithinCircle(a, 1.5 * d.pointSelectR(b)) : "path" === a.nodeName && (c = e.classed(i.bar) ? d.isWithinBar(a) : !0) : c = !1, c
+ },f.getInterpolate = function (a) {
+ var b = this;
+ return b.isSplineType(a) ? "cardinal" : b.isStepType(a) ? b.config.line_step_type : "linear"
+ },f.initLine = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartLines)
+ },f.updateTargetsForLine = function (a) {
+ var b, c, d = this, e = d.config, f = d.classChartLine.bind(d), g = d.classLines.bind(d), h = d.classAreas.bind(d), j = d.classCircles.bind(d), k = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartLines).selectAll("." + i.chartLine).data(a).attr("class", function (a) {
+ return f(a) + k(a)
+ }), c = b.enter().append("g").attr("class", f).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", g), c.append("g").attr("class", h), c.append("g").attr("class", function (a) {
+ return d.generateClass(i.selectedCircles, a.id)
+ }), c.append("g").attr("class", j).style("cursor", function (a) {
+ return e.data_selection_isselectable(a) ? "pointer" : null
+ }), a.forEach(function (a) {
+ d.main.selectAll("." + i.selectedCircles + d.getTargetSelectorSuffix(a.id)).selectAll("." + i.selectedCircle).each(function (b) {
+ b.value = a.values[b.index].value
+ })
+ })
+ },f.redrawLine = function (a) {
+ var b = this;
+ b.mainLine = b.main.selectAll("." + i.lines).selectAll("." + i.line).data(b.lineData.bind(b)), b.mainLine.enter().append("path").attr("class", b.classLine.bind(b)).style("stroke", b.color), b.mainLine.style("opacity", b.initialOpacity.bind(b)).style("shape-rendering", function (a) {
+ return b.isStepType(a) ? "crispEdges" : ""
+ }).attr("transform", null), b.mainLine.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForLine = function (a, b) {
+ var c = this;
+ a.push(c.mainLine.transition().attr("d", b).style("stroke", c.color).style("opacity", 1))
+ },f.generateDrawLine = function (a, b) {
+ var c = this, d = c.config, e = c.d3.svg.line(), f = c.generateGetLinePoints(a, b), g = b ? c.getSubYScale : c.getYScale, h = function (a) {
+ return (b ? c.subxx : c.xx).call(c, a)
+ }, i = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[0][1] : g.call(c, a.id)(a.value)
+ };
+ return e = d.axis_rotated ? e.x(i).y(h) : e.x(h).y(i), d.line_connectNull || (e = e.defined(function (a) {
+ return null != a.value
+ })), function (a) {
+ var f, h = d.line_connectNull ? c.filterRemoveNull(a.values) : a.values, i = b ? c.x : c.subX, j = g.call(c, a.id), k = 0, l = 0;
+ return c.isLineType(a) ? d.data_regions[a.id] ? f = c.lineWithRegions(h, i, j, d.data_regions[a.id]) : (c.isStepType(a) && (h = c.convertValuesToStep(h)), f = e.interpolate(c.getInterpolate(a))(h)) : (h[0] && (k = i(h[0].x), l = j(h[0].value)), f = d.axis_rotated ? "M " + l + " " + k : "M " + k + " " + l), f ? f : "M 0 0"
+ }
+ },f.generateGetLinePoints = function (a, b) {
+ var c = this, d = c.config, e = a.__max__ + 1, f = c.getShapeX(0, e, a, !!b), g = c.getShapeY(!!b), h = c.getShapeOffset(c.isLineType, a, !!b), i = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var e = i.call(c, a.id)(0), j = h(a, b) || e, k = f(a), l = g(a);
+ return d.axis_rotated && (0 < a.value && e > l || a.value < 0 && l > e) && (l = e), [[k, l - (e - j)], [k, l - (e - j)], [k, l - (e - j)], [k, l - (e - j)]]
+ }
+ },f.lineWithRegions = function (a, b, c, d) {
+ function e(a, b) {
+ var c;
+ for (c = 0; c < b.length; c++)if (b[c].start < a && a <= b[c].end)return !0;
+ return !1
+ }
+
+ var f, g, h, i, j, k, l, o, p, q, r, s, t = this, u = t.config, v = -1, w = "M", x = [];
+ if (n(d))for (f = 0; f < d.length; f++)x[f] = {}, x[f].start = m(d[f].start) ? a[0].x : t.isTimeSeries() ? t.parseDate(d[f].start) : d[f].start, x[f].end = m(d[f].end) ? a[a.length - 1].x : t.isTimeSeries() ? t.parseDate(d[f].end) : d[f].end;
+ for (r = u.axis_rotated ? function (a) {
+ return c(a.value)
+ } : function (a) {
+ return b(a.x)
+ }, s = u.axis_rotated ? function (a) {
+ return b(a.x)
+ } : function (a) {
+ return c(a.value)
+ }, h = t.isTimeSeries() ? function (a, d, e, f) {
+ var g = a.x.getTime(), h = d.x - a.x, i = new Date(g + h * e), k = new Date(g + h * (e + f));
+ return "M" + b(i) + " " + c(j(e)) + " " + b(k) + " " + c(j(e + f))
+ } : function (a, d, e, f) {
+ return "M" + b(i(e), !0) + " " + c(j(e)) + " " + b(i(e + f), !0) + " " + c(j(e + f))
+ }, f = 0; f < a.length; f++) {
+ if (m(x) || !e(a[f].x, x))w += " " + r(a[f]) + " " + s(a[f]); else for (i = t.getScale(a[f - 1].x, a[f].x, t.isTimeSeries()), j = t.getScale(a[f - 1].value, a[f].value), k = b(a[f].x) - b(a[f - 1].x), l = c(a[f].value) - c(a[f - 1].value), o = Math.sqrt(Math.pow(k, 2) + Math.pow(l, 2)), p = 2 / o, q = 2 * p, g = p; 1 >= g; g += q)w += h(a[f - 1], a[f], g, p);
+ v = a[f].x
+ }
+ return w
+ },f.redrawArea = function (a) {
+ var b = this, c = b.d3;
+ b.mainArea = b.main.selectAll("." + i.areas).selectAll("." + i.area).data(b.lineData.bind(b)), b.mainArea.enter().append("path").attr("class", b.classArea.bind(b)).style("fill", b.color).style("opacity", function () {
+ return b.orgAreaOpacity = +c.select(this).style("opacity"), 0
+ }), b.mainArea.style("opacity", b.orgAreaOpacity), b.mainArea.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForArea = function (a, b) {
+ var c = this;
+ a.push(c.mainArea.transition().attr("d", b).style("fill", c.color).style("opacity", c.orgAreaOpacity))
+ },f.generateDrawArea = function (a, b) {
+ var c = this, d = c.config, e = c.d3.svg.area(), f = c.generateGetAreaPoints(a, b), g = b ? c.getSubYScale : c.getYScale, h = function (a) {
+ return (b ? c.subxx : c.xx).call(c, a)
+ }, i = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[0][1] : g.call(c, a.id)(0)
+ }, j = function (a, b) {
+ return d.data_groups.length > 0 ? f(a, b)[1][1] : g.call(c, a.id)(a.value)
+ };
+ return e = d.axis_rotated ? e.x0(i).x1(j).y(h) : e.x(h).y0(i).y1(j), d.line_connectNull || (e = e.defined(function (a) {
+ return null !== a.value
+ })), function (a) {
+ var b, f = d.line_connectNull ? c.filterRemoveNull(a.values) : a.values, g = 0, h = 0;
+ return c.isAreaType(a) ? (c.isStepType(a) && (f = c.convertValuesToStep(f)), b = e.interpolate(c.getInterpolate(a))(f)) : (f[0] && (g = c.x(f[0].x), h = c.getYScale(a.id)(f[0].value)), b = d.axis_rotated ? "M " + h + " " + g : "M " + g + " " + h), b ? b : "M 0 0"
+ }
+ },f.generateGetAreaPoints = function (a, b) {
+ var c = this, d = c.config, e = a.__max__ + 1, f = c.getShapeX(0, e, a, !!b), g = c.getShapeY(!!b), h = c.getShapeOffset(c.isAreaType, a, !!b), i = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var e = i.call(c, a.id)(0), j = h(a, b) || e, k = f(a), l = g(a);
+ return d.axis_rotated && (0 < a.value && e > l || a.value < 0 && l > e) && (l = e), [[k, j], [k, l - (e - j)], [k, l - (e - j)], [k, j]]
+ }
+ },f.redrawCircle = function () {
+ var a = this;
+ a.mainCircle = a.main.selectAll("." + i.circles).selectAll("." + i.circle).data(a.lineOrScatterData.bind(a)), a.mainCircle.enter().append("circle").attr("class", a.classCircle.bind(a)).attr("r", a.pointR.bind(a)).style("fill", a.color), a.mainCircle.style("opacity", a.initialOpacityForCircle.bind(a)), a.mainCircle.exit().remove()
+ },f.addTransitionForCircle = function (a, b, c) {
+ var d = this;
+ a.push(d.mainCircle.transition().style("opacity", d.opacityForCircle.bind(d)).style("fill", d.color).attr("cx", b).attr("cy", c)), a.push(d.main.selectAll("." + i.selectedCircle).transition().attr("cx", b).attr("cy", c))
+ },f.circleX = function (a) {
+ return a.x || 0 === a.x ? this.x(a.x) : null
+ },f.updateCircleY = function () {
+ var a, b, c = this;
+ c.config.data_groups.length > 0 ? (a = c.getShapeIndices(c.isLineType), b = c.generateGetLinePoints(a), c.circleY = function (a, c) {
+ return b(a, c)[0][1]
+ }) : c.circleY = function (a) {
+ return c.getYScale(a.id)(a.value)
+ }
+ },f.getCircles = function (a, b) {
+ var c = this;
+ return (b ? c.main.selectAll("." + i.circles + c.getTargetSelectorSuffix(b)) : c.main).selectAll("." + i.circle + (j(a) ? "-" + a : ""))
+ },f.expandCircles = function (a, b, c) {
+ var d = this, e = d.pointExpandedR.bind(d);
+ c && d.unexpandCircles(), d.getCircles(a, b).classed(i.EXPANDED, !0).attr("r", e)
+ },f.unexpandCircles = function (a) {
+ var b = this, c = b.pointR.bind(b);
+ b.getCircles(a).filter(function () {
+ return b.d3.select(this).classed(i.EXPANDED)
+ }).classed(i.EXPANDED, !1).attr("r", c)
+ },f.pointR = function (a) {
+ var b = this, c = b.config;
+ return b.isStepType(a) ? 0 : k(c.point_r) ? c.point_r(a) : c.point_r
+ },f.pointExpandedR = function (a) {
+ var b = this, c = b.config;
+ return c.point_focus_expand_enabled ? c.point_focus_expand_r ? c.point_focus_expand_r : 1.75 * b.pointR(a) : b.pointR(a)
+ },f.pointSelectR = function (a) {
+ var b = this, c = b.config;
+ return c.point_select_r ? c.point_select_r : 4 * b.pointR(a)
+ },f.isWithinCircle = function (a, b) {
+ var c = this.d3, d = c.mouse(a), e = c.select(a), f = +e.attr("cx"), g = +e.attr("cy");
+ return Math.sqrt(Math.pow(f - d[0], 2) + Math.pow(g - d[1], 2)) < b
+ },f.isWithinStep = function (a, b) {
+ return Math.abs(b - this.d3.mouse(a)[1]) < 30
+ },f.initBar = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartBars)
+ },f.updateTargetsForBar = function (a) {
+ var b, c, d = this, e = d.config, f = d.classChartBar.bind(d), g = d.classBars.bind(d), h = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartBars).selectAll("." + i.chartBar).data(a).attr("class", function (a) {
+ return f(a) + h(a)
+ }), c = b.enter().append("g").attr("class", f).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", g).style("cursor", function (a) {
+ return e.data_selection_isselectable(a) ? "pointer" : null
+ })
+ },f.redrawBar = function (a) {
+ var b = this, c = b.barData.bind(b), d = b.classBar.bind(b), e = b.initialOpacity.bind(b), f = function (a) {
+ return b.color(a.id)
+ };
+ b.mainBar = b.main.selectAll("." + i.bars).selectAll("." + i.bar).data(c), b.mainBar.enter().append("path").attr("class", d).style("stroke", f).style("fill", f), b.mainBar.style("opacity", e), b.mainBar.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForBar = function (a, b) {
+ var c = this;
+ a.push(c.mainBar.transition().attr("d", b).style("fill", c.color).style("opacity", 1))
+ },f.getBarW = function (a, b) {
+ var c = this, d = c.config, e = "number" == typeof d.bar_width ? d.bar_width : b ? 2 * a.tickOffset() * d.bar_width_ratio / b : 0;
+ return d.bar_width_max && e > d.bar_width_max ? d.bar_width_max : e
+ },f.getBars = function (a, b) {
+ var c = this;
+ return (b ? c.main.selectAll("." + i.bars + c.getTargetSelectorSuffix(b)) : c.main).selectAll("." + i.bar + (j(a) ? "-" + a : ""))
+ },f.expandBars = function (a, b, c) {
+ var d = this;
+ c && d.unexpandBars(), d.getBars(a, b).classed(i.EXPANDED, !0)
+ },f.unexpandBars = function (a) {
+ var b = this;
+ b.getBars(a).classed(i.EXPANDED, !1)
+ },f.generateDrawBar = function (a, b) {
+ var c = this, d = c.config, e = c.generateGetBarPoints(a, b);
+ return function (a, b) {
+ var c = e(a, b), f = d.axis_rotated ? 1 : 0, g = d.axis_rotated ? 0 : 1, h = "M " + c[0][f] + "," + c[0][g] + " L" + c[1][f] + "," + c[1][g] + " L" + c[2][f] + "," + c[2][g] + " L" + c[3][f] + "," + c[3][g] + " z";
+ return h
+ }
+ },f.generateGetBarPoints = function (a, b) {
+ var c = this, d = b ? c.subXAxis : c.xAxis, e = a.__max__ + 1, f = c.getBarW(d, e), g = c.getShapeX(f, e, a, !!b), h = c.getShapeY(!!b), i = c.getShapeOffset(c.isBarType, a, !!b), j = b ? c.getSubYScale : c.getYScale;
+ return function (a, b) {
+ var d = j.call(c, a.id)(0), e = i(a, b) || d, k = g(a), l = h(a);
+ return c.config.axis_rotated && (0 < a.value && d > l || a.value < 0 && l > d) && (l = d), [[k, e], [k, l - (d - e)], [k + f, l - (d - e)], [k + f, e]]
+ }
+ },f.isWithinBar = function (a) {
+ var b = this.d3.mouse(a), c = a.getBoundingClientRect(), d = a.pathSegList.getItem(0), e = a.pathSegList.getItem(1), f = Math.min(d.x, e.x), g = Math.min(d.y, e.y), h = c.width, i = c.height, j = 2, k = f - j, l = f + h + j, m = g + i + j, n = g - j;
+ return k < b[0] && b[0] < l && n < b[1] && b[1] < m
+ },f.initText = function () {
+ var a = this;
+ a.main.select("." + i.chart).append("g").attr("class", i.chartTexts), a.mainText = a.d3.selectAll([])
+ },f.updateTargetsForText = function (a) {
+ var b, c, d = this, e = d.classChartText.bind(d), f = d.classTexts.bind(d), g = d.classFocus.bind(d);
+ b = d.main.select("." + i.chartTexts).selectAll("." + i.chartText).data(a).attr("class", function (a) {
+ return e(a) + g(a)
+ }), c = b.enter().append("g").attr("class", e).style("opacity", 0).style("pointer-events", "none"), c.append("g").attr("class", f)
+ },f.redrawText = function (a) {
+ var b = this, c = b.config, d = b.barOrLineData.bind(b), e = b.classText.bind(b);
+ b.mainText = b.main.selectAll("." + i.texts).selectAll("." + i.text).data(d), b.mainText.enter().append("text").attr("class", e).attr("text-anchor", function (a) {
+ return c.axis_rotated ? a.value < 0 ? "end" : "start" : "middle"
+ }).style("stroke", "none").style("fill", function (a) {
+ return b.color(a)
+ }).style("fill-opacity", 0), b.mainText.text(function (a, c, d) {
+ return b.formatByAxisId(b.getAxisId(a.id))(a.value, a.id, c, d)
+ }), b.mainText.exit().transition().duration(a).style("fill-opacity", 0).remove()
+ },f.addTransitionForText = function (a, b, c, d) {
+ var e = this, f = d ? 0 : e.opacityForText.bind(e);
+ a.push(e.mainText.transition().attr("x", b).attr("y", c).style("fill", e.color).style("fill-opacity", f))
+ },f.getTextRect = function (a, b) {
+ var c, d = this.d3.select("body").classed("c3", !0), e = d.append("svg").style("visibility", "hidden");
+ return e.selectAll(".dummy").data([a]).enter().append("text").classed(b ? b : "", !0).text(a).each(function () {
+ c = this.getBoundingClientRect()
+ }), e.remove(), d.classed("c3", !1), c
+ },f.generateXYForText = function (a, b, c, d) {
+ var e = this, f = e.generateGetAreaPoints(b, !1), g = e.generateGetBarPoints(b, !1), h = e.generateGetLinePoints(c, !1), i = d ? e.getXForText : e.getYForText;
+ return function (a, b) {
+ var c = e.isAreaType(a) ? f : e.isBarType(a) ? g : h;
+ return i.call(e, c(a, b), a, this)
+ }
+ },f.getXForText = function (a, b, c) {
+ var d, e, f = this, g = c.getBoundingClientRect();
+ return f.config.axis_rotated ? (e = f.isBarType(b) ? 4 : 6, d = a[2][1] + e * (b.value < 0 ? -1 : 1)) : d = f.hasType("bar") ? (a[2][0] + a[0][0]) / 2 : a[0][0], null === b.value && (d > f.width ? d = f.width - g.width : 0 > d && (d = 4)), d
+ },f.getYForText = function (a, b, c) {
+ var d, e = this, f = c.getBoundingClientRect();
+ return d = e.config.axis_rotated ? (a[0][0] + a[2][0] + .6 * f.height) / 2 : a[2][1] + (b.value < 0 ? f.height : e.isBarType(b) ? -3 : -6), null !== b.value || e.config.axis_rotated || (d < f.height ? d = f.height : d > this.height && (d = this.height - 4)), d
+ },f.setTargetType = function (a, b) {
+ var c = this, d = c.config;
+ c.mapToTargetIds(a).forEach(function (a) {
+ c.withoutFadeIn[a] = b === d.data_types[a], d.data_types[a] = b
+ }), a || (d.data_type = b)
+ },f.hasType = function (a, b) {
+ var c = this, d = c.config.data_types, e = !1;
+ return b = b || c.data.targets, b && b.length ? b.forEach(function (b) {
+ var c = d[b.id];
+ (c && c.indexOf(a) >= 0 || !c && "line" === a) && (e = !0)
+ }) : Object.keys(d).length ? Object.keys(d).forEach(function (b) {
+ d[b] === a && (e = !0)
+ }) : e = c.config.data_type === a, e
+ },f.hasArcType = function (a) {
+ return this.hasType("pie", a) || this.hasType("donut", a) || this.hasType("gauge", a)
+ },f.isLineType = function (a) {
+ var b = this.config, c = l(a) ? a : a.id;
+ return !b.data_types[c] || ["line", "spline", "area", "area-spline", "step", "area-step"].indexOf(b.data_types[c]) >= 0
+ },f.isStepType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["step", "area-step"].indexOf(this.config.data_types[b]) >= 0
+ },f.isSplineType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["spline", "area-spline"].indexOf(this.config.data_types[b]) >= 0
+ },f.isAreaType = function (a) {
+ var b = l(a) ? a : a.id;
+ return ["area", "area-spline", "area-step"].indexOf(this.config.data_types[b]) >= 0
+ },f.isBarType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "bar" === this.config.data_types[b]
+ },f.isScatterType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "scatter" === this.config.data_types[b]
+ },f.isPieType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "pie" === this.config.data_types[b]
+ },f.isGaugeType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "gauge" === this.config.data_types[b]
+ },f.isDonutType = function (a) {
+ var b = l(a) ? a : a.id;
+ return "donut" === this.config.data_types[b]
+ },f.isArcType = function (a) {
+ return this.isPieType(a) || this.isDonutType(a) || this.isGaugeType(a)
+ },f.lineData = function (a) {
+ return this.isLineType(a) ? [a] : []
+ },f.arcData = function (a) {
+ return this.isArcType(a.data) ? [a] : []
+ },f.barData = function (a) {
+ return this.isBarType(a) ? a.values : []
+ },f.lineOrScatterData = function (a) {
+ return this.isLineType(a) || this.isScatterType(a) ? a.values : []
+ },f.barOrLineData = function (a) {
+ return this.isBarType(a) || this.isLineType(a) ? a.values : []
+ },f.initGrid = function () {
+ var a = this, b = a.config, c = a.d3;
+ a.grid = a.main.append("g").attr("clip-path", a.clipPathForGrid).attr("class", i.grid), b.grid_x_show && a.grid.append("g").attr("class", i.xgrids), b.grid_y_show && a.grid.append("g").attr("class", i.ygrids), b.grid_focus_show && a.grid.append("g").attr("class", i.xgridFocus).append("line").attr("class", i.xgridFocus), a.xgrid = c.selectAll([]), b.grid_lines_front || a.initGridLines()
+ },f.initGridLines = function () {
+ var a = this, b = a.d3;
+ a.gridLines = a.main.append("g").attr("clip-path", a.clipPathForGrid).attr("class", i.grid + " " + i.gridLines), a.gridLines.append("g").attr("class", i.xgridLines), a.gridLines.append("g").attr("class", i.ygridLines), a.xgridLines = b.selectAll([])
+ },f.updateXGrid = function (a) {
+ var b = this, c = b.config, d = b.d3, e = b.generateGridData(c.grid_x_type, b.x), f = b.isCategorized() ? b.xAxis.tickOffset() : 0;
+ b.xgridAttr = c.axis_rotated ? {
+ x1: 0, x2: b.width, y1: function (a) {
+ return b.x(a) - f
+ }, y2: function (a) {
+ return b.x(a) - f
+ }
+ } : {
+ x1: function (a) {
+ return b.x(a) + f
+ }, x2: function (a) {
+ return b.x(a) + f
+ }, y1: 0, y2: b.height
+ }, b.xgrid = b.main.select("." + i.xgrids).selectAll("." + i.xgrid).data(e), b.xgrid.enter().append("line").attr("class", i.xgrid), a || b.xgrid.attr(b.xgridAttr).style("opacity", function () {
+ return +d.select(this).attr(c.axis_rotated ? "y1" : "x1") === (c.axis_rotated ? b.height : 0) ? 0 : 1
+ }), b.xgrid.exit().remove()
+ },f.updateYGrid = function () {
+ var a = this, b = a.config, c = a.yAxis.tickValues() || a.y.ticks(b.grid_y_ticks);
+ a.ygrid = a.main.select("." + i.ygrids).selectAll("." + i.ygrid).data(c), a.ygrid.enter().append("line").attr("class", i.ygrid), a.ygrid.attr("x1", b.axis_rotated ? a.y : 0).attr("x2", b.axis_rotated ? a.y : a.width).attr("y1", b.axis_rotated ? 0 : a.y).attr("y2", b.axis_rotated ? a.height : a.y), a.ygrid.exit().remove(), a.smoothLines(a.ygrid, "grid")
+ },f.redrawGrid = function (a) {
+ var b, c, d, e = this, f = e.main, g = e.config;
+ e.grid.style("visibility", e.hasArcType() ? "hidden" : "visible"), f.select("line." + i.xgridFocus).style("visibility", "hidden"), g.grid_x_show && e.updateXGrid(), e.xgridLines = f.select("." + i.xgridLines).selectAll("." + i.xgridLine).data(g.grid_x_lines), b = e.xgridLines.enter().append("g").attr("class", function (a) {
+ return i.xgridLine + (a["class"] ? " " + a["class"] : "")
+ }), b.append("line").style("opacity", 0), b.append("text").attr("text-anchor", "end").attr("transform", g.axis_rotated ? "" : "rotate(-90)").attr("dx", g.axis_rotated ? 0 : -e.margin.top).attr("dy", -5).style("opacity", 0), e.xgridLines.exit().transition().duration(a).style("opacity", 0).remove(), g.grid_y_show && e.updateYGrid(), e.ygridLines = f.select("." + i.ygridLines).selectAll("." + i.ygridLine).data(g.grid_y_lines), c = e.ygridLines.enter().append("g").attr("class", function (a) {
+ return i.ygridLine + (a["class"] ? " " + a["class"] : "")
+ }), c.append("line").style("opacity", 0), c.append("text").attr("text-anchor", "end").attr("transform", g.axis_rotated ? "rotate(-90)" : "").attr("dx", g.axis_rotated ? 0 : -e.margin.top).attr("dy", -5).style("opacity", 0), d = e.yv.bind(e), e.ygridLines.select("line").transition().duration(a).attr("x1", g.axis_rotated ? d : 0).attr("x2", g.axis_rotated ? d : e.width).attr("y1", g.axis_rotated ? 0 : d).attr("y2", g.axis_rotated ? e.height : d).style("opacity", 1), e.ygridLines.select("text").transition().duration(a).attr("x", g.axis_rotated ? 0 : e.width).attr("y", d).text(function (a) {
+ return a.text
+ }).style("opacity", 1), e.ygridLines.exit().transition().duration(a).style("opacity", 0).remove()
+ },f.addTransitionForGrid = function (a) {
+ var b = this, c = b.config, d = b.xv.bind(b);
+ a.push(b.xgridLines.select("line").transition().attr("x1", c.axis_rotated ? 0 : d).attr("x2", c.axis_rotated ? b.width : d).attr("y1", c.axis_rotated ? d : b.margin.top).attr("y2", c.axis_rotated ? d : b.height).style("opacity", 1)), a.push(b.xgridLines.select("text").transition().attr("x", c.axis_rotated ? b.width : 0).attr("y", d).text(function (a) {
+ return a.text
+ }).style("opacity", 1))
+ },f.showXGridFocus = function (a) {
+ var b = this, c = b.config, d = a.filter(function (a) {
+ return a && j(a.value)
+ }), e = b.main.selectAll("line." + i.xgridFocus), f = b.xx.bind(b);
+ c.tooltip_show && (b.hasType("scatter") || b.hasArcType() || (e.style("visibility", "visible").data([d[0]]).attr(c.axis_rotated ? "y1" : "x1", f).attr(c.axis_rotated ? "y2" : "x2", f), b.smoothLines(e, "grid")))
+ },f.hideXGridFocus = function () {
+ this.main.select("line." + i.xgridFocus).style("visibility", "hidden")
+ },f.updateXgridFocus = function () {
+ var a = this, b = a.config;
+ a.main.select("line." + i.xgridFocus).attr("x1", b.axis_rotated ? 0 : -10).attr("x2", b.axis_rotated ? a.width : -10).attr("y1", b.axis_rotated ? -10 : 0).attr("y2", b.axis_rotated ? -10 : a.height)
+ },f.generateGridData = function (a, b) {
+ var c, d, e, f, g = this, h = [], j = g.main.select("." + i.axisX).selectAll(".tick").size();
+ if ("year" === a)for (c = g.getXDomain(), d = c[0].getFullYear(), e = c[1].getFullYear(), f = d; e >= f; f++)h.push(new Date(f + "-01-01 00:00:00")); else h = b.ticks(10), h.length > j && (h = h.filter(function (a) {
+ return ("" + a).indexOf(".") < 0
+ }));
+ return h
+ },f.getGridFilterToRemove = function (a) {
+ return a ? function (b) {
+ var c = !1;
+ return [].concat(a).forEach(function (a) {
+ ("value"in a && b.value === a.value || "class"in a && b["class"] === a["class"]) && (c = !0)
+ }), c
+ } : function () {
+ return !0
+ }
+ },f.removeGridLines = function (a, b) {
+ var c = this, d = c.config, e = c.getGridFilterToRemove(a), f = function (a) {
+ return !e(a)
+ }, g = b ? i.xgridLines : i.ygridLines, h = b ? i.xgridLine : i.ygridLine;
+ c.main.select("." + g).selectAll("." + h).filter(e).transition().duration(d.transition_duration).style("opacity", 0).remove(), b ? d.grid_x_lines = d.grid_x_lines.filter(f) : d.grid_y_lines = d.grid_y_lines.filter(f)
+ },f.initTooltip = function () {
+ var a, b = this, c = b.config;
+ if (b.tooltip = b.selectChart.style("position", "relative").append("div").attr("class", i.tooltipContainer).style("position", "absolute").style("pointer-events", "none").style("display", "none"), c.tooltip_init_show) {
+ if (b.isTimeSeries() && l(c.tooltip_init_x)) {
+ for (c.tooltip_init_x = b.parseDate(c.tooltip_init_x), a = 0; a < b.data.targets[0].values.length && b.data.targets[0].values[a].x - c.tooltip_init_x !== 0; a++);
+ c.tooltip_init_x = a
+ }
+ b.tooltip.html(c.tooltip_contents.call(b, b.data.targets.map(function (a) {
+ return b.addName(a.values[c.tooltip_init_x])
+ }), b.getXAxisTickFormat(), b.getYFormat(b.hasArcType()), b.color)), b.tooltip.style("top", c.tooltip_init_position.top).style("left", c.tooltip_init_position.left).style("display", "block")
+ }
+ },f.getTooltipContent = function (a, b, c, d) {
+ var e, f, g, h, j, k, l = this, m = l.config, n = m.tooltip_format_title || b, o = m.tooltip_format_name || function (a) {
+ return a
+ }, p = m.tooltip_format_value || c;
+ for (f = 0; f < a.length; f++)a[f] && (a[f].value || 0 === a[f].value) && (e || (g = n ? n(a[f].x) : a[f].x, e = "<table class='" + i.tooltip + "'>" + (g || 0 === g ? "<tr><th colspan='2'>" + g + "</th></tr>" : "")), j = o(a[f].name, a[f].ratio, a[f].id, a[f].index), h = p(a[f].value, a[f].ratio, a[f].id, a[f].index), k = l.levelColor ? l.levelColor(a[f].value) : d(a[f].id), e += "<tr class='" + i.tooltipName + "-" + a[f].id + "'>", e += "<td class='name'><span style='background-color:" + k + "'></span>" + j + "</td>", e += "<td class='value'>" + h + "</td>", e += "</tr>");
+ return e + "</table>"
+ },f.showTooltip = function (a, b) {
+ var c, d, e, f, g, h, i, k = this, l = k.config, m = k.hasArcType(), n = a.filter(function (a) {
+ return a && j(a.value)
+ });
+ 0 !== n.length && l.tooltip_show && (k.tooltip.html(l.tooltip_contents.call(k, a, k.getXAxisTickFormat(), k.getYFormat(m), k.color)).style("display", "block"), c = k.tooltip.property("offsetWidth"), d = k.tooltip.property("offsetHeight"), m ? (f = k.width / 2 + b[0], h = k.height / 2 + b[1] + 20) : (e = k.getSvgLeft(!0), l.axis_rotated ? (f = e + b[0] + 100, g = f + c, i = k.currentWidth - k.getCurrentPaddingRight(), h = k.x(n[0].x) + 20) : (f = e + k.getCurrentPaddingLeft(!0) + k.x(n[0].x) + 20, g = f + c, i = e + k.currentWidth - k.getCurrentPaddingRight(), h = b[1] + 15), g > i && (f -= g - i), h + d > k.currentHeight && (h -= d + 30)), 0 > h && (h = 0), k.tooltip.style("top", h + "px").style("left", f + "px"))
+ },f.hideTooltip = function () {
+ this.tooltip.style("display", "none")
+ },f.initLegend = function () {
+ var a = this;
+ return a.legendHasRendered = !1, a.legend = a.svg.append("g").attr("transform", a.getTranslate("legend")), a.config.legend_show ? void a.updateLegendWithDefaults() : (a.legend.style("visibility", "hidden"), void(a.hiddenLegendIds = a.mapToIds(a.data.targets)))
+ },f.updateLegendWithDefaults = function () {
+ var a = this;
+ a.updateLegend(a.mapToIds(a.data.targets), {
+ withTransform: !1,
+ withTransitionForTransform: !1,
+ withTransition: !1
+ })
+ },f.updateSizeForLegend = function (a, b) {
+ var c = this, d = c.config, e = {
+ top: c.isLegendTop ? c.getCurrentPaddingTop() + d.legend_inset_y + 5.5 : c.currentHeight - a - c.getCurrentPaddingBottom() - d.legend_inset_y,
+ left: c.isLegendLeft ? c.getCurrentPaddingLeft() + d.legend_inset_x + .5 : c.currentWidth - b - c.getCurrentPaddingRight() - d.legend_inset_x + .5
+ };
+ c.margin3 = {
+ top: c.isLegendRight ? 0 : c.isLegendInset ? e.top : c.currentHeight - a,
+ right: 0 / 0,
+ bottom: 0,
+ left: c.isLegendRight ? c.currentWidth - b : c.isLegendInset ? e.left : 0
+ }
+ },f.transformLegend = function (a) {
+ var b = this;
+ (a ? b.legend.transition() : b.legend).attr("transform", b.getTranslate("legend"))
+ },f.updateLegendStep = function (a) {
+ this.legendStep = a
+ },f.updateLegendItemWidth = function (a) {
+ this.legendItemWidth = a
+ },f.updateLegendItemHeight = function (a) {
+ this.legendItemHeight = a
+ },f.getLegendWidth = function () {
+ var a = this;
+ return a.config.legend_show ? a.isLegendRight || a.isLegendInset ? a.legendItemWidth * (a.legendStep + 1) : a.currentWidth : 0
+ },f.getLegendHeight = function () {
+ var a = this, b = 0;
+ return a.config.legend_show && (b = a.isLegendRight ? a.currentHeight : Math.max(20, a.legendItemHeight) * (a.legendStep + 1)), b
+ },f.opacityForLegend = function (a) {
+ return a.classed(i.legendItemHidden) ? null : 1
+ },f.opacityForUnfocusedLegend = function (a) {
+ return a.classed(i.legendItemHidden) ? null : .3
+ },f.toggleFocusLegend = function (a, b) {
+ var c = this;
+ a = c.mapToTargetIds(a), c.legend.selectAll("." + i.legendItem).filter(function (b) {
+ return a.indexOf(b) >= 0
+ }).classed(i.legendItemFocused, b).transition().duration(100).style("opacity", function () {
+ var a = b ? c.opacityForLegend : c.opacityForUnfocusedLegend;
+ return a.call(c, c.d3.select(this))
+ })
+ },f.revertLegend = function () {
+ var a = this, b = a.d3;
+ a.legend.selectAll("." + i.legendItem).classed(i.legendItemFocused, !1).transition().duration(100).style("opacity", function () {
+ return a.opacityForLegend(b.select(this))
+ })
+ },f.showLegend = function (a) {
+ var b = this, c = b.config;
+ c.legend_show || (c.legend_show = !0, b.legend.style("visibility", "visible"), b.legendHasRendered || b.updateLegendWithDefaults()), b.removeHiddenLegendIds(a), b.legend.selectAll(b.selectorLegends(a)).style("visibility", "visible").transition().style("opacity", function () {
+ return b.opacityForLegend(b.d3.select(this))
+ })
+ },f.hideLegend = function (a) {
+ var b = this, c = b.config;
+ c.legend_show && r(a) && (c.legend_show = !1, b.legend.style("visibility", "hidden")), b.addHiddenLegendIds(a), b.legend.selectAll(b.selectorLegends(a)).style("opacity", 0).style("visibility", "hidden")
+ };
+ var h = {};
+ f.clearLegendItemTextBoxCache = function () {
+ h = {}
+ }, f.updateLegend = function (a, b, c) {
+ function d(a, b) {
+ return h[b] || (h[b] = w.getTextRect(a.textContent, i.legendItem)), h[b]
+ }
+
+ function e(b, c, e) {
+ function f(a, b) {
+ b || (g = (o - E - n) / 2, C > g && (g = (o - n) / 2, E = 0, K++)), J[a] = K, I[K] = w.isLegendInset ? 10 : g, F[a] = E, E += n
+ }
+
+ var g, h, i = 0 === e, j = e === a.length - 1, k = d(b, c), l = k.width + D + (!j || w.isLegendRight || w.isLegendInset ? z : 0), m = k.height + y, n = w.isLegendRight || w.isLegendInset ? m : l, o = w.isLegendRight || w.isLegendInset ? w.getLegendHeight() : w.getLegendWidth();
+ return i && (E = 0, K = 0, A = 0, B = 0), x.legend_show && !w.isLegendToShow(c) ? void(G[c] = H[c] = J[c] = F[c] = 0) : (G[c] = l, H[c] = m, (!A || l >= A) && (A = l), (!B || m >= B) && (B = m), h = w.isLegendRight || w.isLegendInset ? B : A, void(x.legend_equally ? (Object.keys(G).forEach(function (a) {
+ G[a] = A
+ }), Object.keys(H).forEach(function (a) {
+ H[a] = B
+ }), g = (o - h * a.length) / 2, C > g ? (E = 0, K = 0, a.forEach(function (a) {
+ f(a)
+ })) : f(c, !0)) : f(c)))
+ }
+
+ var f, g, j, k, l, m, o, p, q, r, s, u, v, w = this, x = w.config, y = 4, z = 10, A = 0, B = 0, C = 10, D = 15, E = 0, F = {}, G = {}, H = {}, I = [0], J = {}, K = 0, L = w.legend.selectAll("." + i.legendItemFocused).size();
+ b = b || {}, p = t(b, "withTransition", !0), q = t(b, "withTransitionForTransform", !0), w.isLegendInset && (K = x.legend_inset_step ? x.legend_inset_step : a.length, w.updateLegendStep(K)), w.isLegendRight ? (f = function (a) {
+ return A * J[a]
+ }, k = function (a) {
+ return I[J[a]] + F[a]
+ }) : w.isLegendInset ? (f = function (a) {
+ return A * J[a] + 10
+ }, k = function (a) {
+ return I[J[a]] + F[a]
+ }) : (f = function (a) {
+ return I[J[a]] + F[a]
+ }, k = function (a) {
+ return B * J[a]
+ }), g = function (a, b) {
+ return f(a, b) + 14
+ }, l = function (a, b) {
+ return k(a, b) + 9
+ }, j = function (a, b) {
+ return f(a, b)
+ }, m = function (a, b) {
+ return k(a, b) - 5
+ }, o = w.legend.selectAll("." + i.legendItem).data(a).enter().append("g").attr("class", function (a) {
+ return w.generateClass(i.legendItem, a)
+ }).style("visibility", function (a) {
+ return w.isLegendToShow(a) ? "visible" : "hidden"
+ }).style("cursor", "pointer").on("click", function (a) {
+ x.legend_item_onclick ? x.legend_item_onclick.call(w, a) : w.d3.event.altKey ? (w.api.hide(), w.api.show(a)) : (w.api.toggle(a), w.isTargetToShow(a) ? w.api.focus(a) : w.api.revert())
+ }).on("mouseover", function (a) {
+ w.d3.select(this).classed(i.legendItemFocused, !0), !w.transiting && w.isTargetToShow(a) && w.api.focus(a), x.legend_item_onmouseover && x.legend_item_onmouseover.call(w, a)
+ }).on("mouseout", function (a) {
+ w.d3.select(this).classed(i.legendItemFocused, !1), w.api.revert(), x.legend_item_onmouseout && x.legend_item_onmouseout.call(w, a)
+ }), o.append("text").text(function (a) {
+ return n(x.data_names[a]) ? x.data_names[a] : a
+ }).each(function (a, b) {
+ e(this, a, b)
+ }).style("pointer-events", "none").attr("x", w.isLegendRight || w.isLegendInset ? g : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : l), o.append("rect").attr("class", i.legendItemEvent).style("fill-opacity", 0).attr("x", w.isLegendRight || w.isLegendInset ? j : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : m), o.append("rect").attr("class", i.legendItemTile).style("pointer-events", "none").style("fill", w.color).attr("x", w.isLegendRight || w.isLegendInset ? g : -200).attr("y", w.isLegendRight || w.isLegendInset ? -200 : k).attr("width", 10).attr("height", 10), v = w.legend.select("." + i.legendBackground + " rect"), w.isLegendInset && A > 0 && 0 === v.size() && (v = w.legend.insert("g", "." + i.legendItem).attr("class", i.legendBackground).append("rect")), r = w.legend.selectAll("text").data(a).text(function (a) {
+ return n(x.data_names[a]) ? x.data_names[a] : a
+ }).each(function (a, b) {
+ e(this, a, b)
+ }), (p ? r.transition() : r).attr("x", g).attr("y", l), s = w.legend.selectAll("rect." + i.legendItemEvent).data(a), (p ? s.transition() : s).attr("width", function (a) {
+ return G[a]
+ }).attr("height", function (a) {
+ return H[a]
+ }).attr("x", j).attr("y", m), u = w.legend.selectAll("rect." + i.legendItemTile).data(a), (p ? u.transition() : u).style("fill", w.color).attr("x", f).attr("y", k), v && (p ? v.transition() : v).attr("height", w.getLegendHeight() - 12).attr("width", A * (K + 1) + 10), w.legend.selectAll("." + i.legendItem).classed(i.legendItemHidden, function (a) {
+ return !w.isTargetToShow(a)
+ }).transition().style("opacity", function (a) {
+ var b = w.d3.select(this);
+ return w.isTargetToShow(a) ? !L || b.classed(i.legendItemFocused) ? w.opacityForLegend(b) : w.opacityForUnfocusedLegend(b) : null
+ }), w.updateLegendItemWidth(A), w.updateLegendItemHeight(B), w.updateLegendStep(K), w.updateSizes(), w.updateScales(), w.updateSvgSize(), w.transformAll(q, c), w.legendHasRendered = !0
+ }, f.initAxis = function () {
+ var a = this, b = a.config, c = a.main;
+ a.axes.x = c.append("g").attr("class", i.axis + " " + i.axisX).attr("clip-path", a.clipPathForXAxis).attr("transform", a.getTranslate("x")).style("visibility", b.axis_x_show ? "visible" : "hidden"), a.axes.x.append("text").attr("class", i.axisXLabel).attr("transform", b.axis_rotated ? "rotate(-90)" : "").style("text-anchor", a.textAnchorForXAxisLabel.bind(a)), a.axes.y = c.append("g").attr("class", i.axis + " " + i.axisY).attr("clip-path", b.axis_y_inner ? "" : a.clipPathForYAxis).attr("transform", a.getTranslate("y")).style("visibility", b.axis_y_show ? "visible" : "hidden"), a.axes.y.append("text").attr("class", i.axisYLabel).attr("transform", b.axis_rotated ? "" : "rotate(-90)").style("text-anchor", a.textAnchorForYAxisLabel.bind(a)), a.axes.y2 = c.append("g").attr("class", i.axis + " " + i.axisY2).attr("transform", a.getTranslate("y2")).style("visibility", b.axis_y2_show ? "visible" : "hidden"), a.axes.y2.append("text").attr("class", i.axisY2Label).attr("transform", b.axis_rotated ? "" : "rotate(-90)").style("text-anchor", a.textAnchorForY2AxisLabel.bind(a))
+ }, f.getXAxis = function (a, b, c, e, f) {
+ var g = this, h = g.config, i = {
+ isCategory: g.isCategorized(),
+ withOuterTick: f,
+ tickMultiline: h.axis_x_tick_multiline,
+ tickWidth: h.axis_x_tick_width
+ }, j = d(g.d3, i).scale(a).orient(b);
+ return g.isTimeSeries() && e && (e = e.map(function (a) {
+ return g.parseDate(a)
+ })), j.tickFormat(c).tickValues(e), g.isCategorized() ? (j.tickCentered(h.axis_x_tick_centered), r(h.axis_x_tick_culling) && (h.axis_x_tick_culling = !1)) : j.tickOffset = function () {
+ var a = this.scale(), b = g.getEdgeX(g.data.targets), c = a(b[1]) - a(b[0]), d = c ? c : h.axis_rotated ? g.height : g.width;
+ return d / g.getMaxDataCount() / 2
+ }, j
+ }, f.getYAxis = function (a, b, c, e, f) {
+ var g = {withOuterTick: f}, h = d(this.d3, g).scale(a).orient(b).tickFormat(c);
+ return this.isTimeSeriesY() ? h.ticks(this.d3.time[this.config.axis_y_tick_time_value], this.config.axis_y_tick_time_interval) : h.tickValues(e), h
+ }, f.getAxisId = function (a) {
+ var b = this.config;
+ return a in b.data_axes ? b.data_axes[a] : "y"
+ }, f.getXAxisTickFormat = function () {
+ var a = this, b = a.config, c = a.isTimeSeries() ? a.defaultAxisTimeFormat : a.isCategorized() ? a.categoryName : function (a) {
+ return 0 > a ? a.toFixed(0) : a
+ };
+ return b.axis_x_tick_format && (k(b.axis_x_tick_format) ? c = b.axis_x_tick_format : a.isTimeSeries() && (c = function (c) {
+ return c ? a.axisTimeFormat(b.axis_x_tick_format)(c) : ""
+ })), k(c) ? function (b) {
+ return c.call(a, b)
+ } : c
+ }, f.getAxisTickValues = function (a, b) {
+ return a ? a : b ? b.tickValues() : void 0
+ }, f.getXAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_x_tick_values, this.xAxis)
+ }, f.getYAxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y_tick_values, this.yAxis)
+ }, f.getY2AxisTickValues = function () {
+ return this.getAxisTickValues(this.config.axis_y2_tick_values, this.y2Axis)
+ }, f.getAxisLabelOptionByAxisId = function (a) {
+ var b, c = this, d = c.config;
+ return "y" === a ? b = d.axis_y_label : "y2" === a ? b = d.axis_y2_label : "x" === a && (b = d.axis_x_label), b
+ }, f.getAxisLabelText = function (a) {
+ var b = this.getAxisLabelOptionByAxisId(a);
+ return l(b) ? b : b ? b.text : null
+ }, f.setAxisLabelText = function (a, b) {
+ var c = this, d = c.config, e = c.getAxisLabelOptionByAxisId(a);
+ l(e) ? "y" === a ? d.axis_y_label = b : "y2" === a ? d.axis_y2_label = b : "x" === a && (d.axis_x_label = b) : e && (e.text = b)
+ }, f.getAxisLabelPosition = function (a, b) {
+ var c = this.getAxisLabelOptionByAxisId(a), d = c && "object" == typeof c && c.position ? c.position : b;
+ return {
+ isInner: d.indexOf("inner") >= 0,
+ isOuter: d.indexOf("outer") >= 0,
+ isLeft: d.indexOf("left") >= 0,
+ isCenter: d.indexOf("center") >= 0,
+ isRight: d.indexOf("right") >= 0,
+ isTop: d.indexOf("top") >= 0,
+ isMiddle: d.indexOf("middle") >= 0,
+ isBottom: d.indexOf("bottom") >= 0
+ }
+ }, f.getXAxisLabelPosition = function () {
+ return this.getAxisLabelPosition("x", this.config.axis_rotated ? "inner-top" : "inner-right")
+ }, f.getYAxisLabelPosition = function () {
+ return this.getAxisLabelPosition("y", this.config.axis_rotated ? "inner-right" : "inner-top")
+ }, f.getY2AxisLabelPosition = function () {
+ return this.getAxisLabelPosition("y2", this.config.axis_rotated ? "inner-right" : "inner-top")
+ }, f.getAxisLabelPositionById = function (a) {
+ return "y2" === a ? this.getY2AxisLabelPosition() : "y" === a ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition()
+ }, f.textForXAxisLabel = function () {
+ return this.getAxisLabelText("x")
+ }, f.textForYAxisLabel = function () {
+ return this.getAxisLabelText("y")
+ }, f.textForY2AxisLabel = function () {
+ return this.getAxisLabelText("y2")
+ }, f.xForAxisLabel = function (a, b) {
+ var c = this;
+ return a ? b.isLeft ? 0 : b.isCenter ? c.width / 2 : c.width : b.isBottom ? -c.height : b.isMiddle ? -c.height / 2 : 0
+ }, f.dxForAxisLabel = function (a, b) {
+ return a ? b.isLeft ? "0.5em" : b.isRight ? "-0.5em" : "0" : b.isTop ? "-0.5em" : b.isBottom ? "0.5em" : "0"
+ }, f.textAnchorForAxisLabel = function (a, b) {
+ return a ? b.isLeft ? "start" : b.isCenter ? "middle" : "end" : b.isBottom ? "start" : b.isMiddle ? "middle" : "end"
+ }, f.xForXAxisLabel = function () {
+ return this.xForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition())
+ }, f.xForYAxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition())
+ }, f.xForY2AxisLabel = function () {
+ return this.xForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition())
+ }, f.dxForXAxisLabel = function () {
+ return this.dxForAxisLabel(!this.config.axis_rotated, this.getXAxisLabelPosition())
+ }, f.dxForYAxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getYAxisLabelPosition())
+ }, f.dxForY2AxisLabel = function () {
+ return this.dxForAxisLabel(this.config.axis_rotated, this.getY2AxisLabelPosition())
+ }, f.dyForXAxisLabel = function () {
+ var a = this, b = a.config, c = a.getXAxisLabelPosition();
+ return b.axis_rotated ? c.isInner ? "1.2em" : -25 - a.getMaxTickWidth("x") : c.isInner ? "-0.5em" : b.axis_x_height ? b.axis_x_height - 10 : "3em"
+ }, f.dyForYAxisLabel = function () {
+ var a = this, b = a.getYAxisLabelPosition();
+ return a.config.axis_rotated ? b.isInner ? "-0.5em" : "3em" : b.isInner ? "1.2em" : -10 - (a.config.axis_y_inner ? 0 : a.getMaxTickWidth("y") + 10)
+ }, f.dyForY2AxisLabel = function () {
+ var a = this, b = a.getY2AxisLabelPosition();
+ return a.config.axis_rotated ? b.isInner ? "1.2em" : "-2.2em" : b.isInner ? "-0.5em" : 15 + (a.config.axis_y2_inner ? 0 : this.getMaxTickWidth("y2") + 15)
+ }, f.textAnchorForXAxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(!a.config.axis_rotated, a.getXAxisLabelPosition())
+ }, f.textAnchorForYAxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(a.config.axis_rotated, a.getYAxisLabelPosition())
+ }, f.textAnchorForY2AxisLabel = function () {
+ var a = this;
+ return a.textAnchorForAxisLabel(a.config.axis_rotated, a.getY2AxisLabelPosition())
+ }, f.xForRotatedTickText = function (a) {
+ return 8 * Math.sin(Math.PI * (a / 180))
+ }, f.yForRotatedTickText = function (a) {
+ return 11.5 - 2.5 * (a / 15) * (a > 0 ? 1 : -1)
+ }, f.rotateTickText = function (a, b, c) {
+ a.selectAll(".tick text").style("text-anchor", c > 0 ? "start" : "end"), b.selectAll(".tick text").attr("y", this.yForRotatedTickText(c)).attr("transform", "rotate(" + c + ")").selectAll("tspan").attr("dx", this.xForRotatedTickText(c))
+ }, f.getMaxTickWidth = function (a, b) {
+ var c, d, e, f = this, g = f.config, h = 0;
+ return b && f.currentMaxTickWidths[a] ? f.currentMaxTickWidths[a] : (f.svg && (c = f.filterTargetsToShow(f.data.targets), "y" === a ? (d = f.y.copy().domain(f.getYDomain(c, "y")), e = f.getYAxis(d, f.yOrient, g.axis_y_tick_format, f.yAxisTickValues)) : "y2" === a ? (d = f.y2.copy().domain(f.getYDomain(c, "y2")), e = f.getYAxis(d, f.y2Orient, g.axis_y2_tick_format, f.y2AxisTickValues)) : (d = f.x.copy().domain(f.getXDomain(c)), e = f.getXAxis(d, f.xOrient, f.xAxisTickFormat, f.xAxisTickValues)), f.d3.select("body").append("g").style("visibility", "hidden").call(e).each(function () {
+ f.d3.select(this).selectAll("text tspan").each(function () {
+ var a = this.getBoundingClientRect();
+ a.left > 0 && h < a.width && (h = a.width)
+ })
+ }).remove()), f.currentMaxTickWidths[a] = 0 >= h ? f.currentMaxTickWidths[a] : h, f.currentMaxTickWidths[a])
+ }, f.updateAxisLabels = function (a) {
+ var b = this, c = b.main.select("." + i.axisX + " ." + i.axisXLabel), d = b.main.select("." + i.axisY + " ." + i.axisYLabel), e = b.main.select("." + i.axisY2 + " ." + i.axisY2Label);
+ (a ? c.transition() : c).attr("x", b.xForXAxisLabel.bind(b)).attr("dx", b.dxForXAxisLabel.bind(b)).attr("dy", b.dyForXAxisLabel.bind(b)).text(b.textForXAxisLabel.bind(b)), (a ? d.transition() : d).attr("x", b.xForYAxisLabel.bind(b)).attr("dx", b.dxForYAxisLabel.bind(b)).attr("dy", b.dyForYAxisLabel.bind(b)).text(b.textForYAxisLabel.bind(b)), (a ? e.transition() : e).attr("x", b.xForY2AxisLabel.bind(b)).attr("dx", b.dxForY2AxisLabel.bind(b)).attr("dy", b.dyForY2AxisLabel.bind(b)).text(b.textForY2AxisLabel.bind(b))
+ }, f.getAxisPadding = function (a, b, c, d) {
+ return j(a[b]) ? "ratio" === a.unit ? a[b] * d : this.convertPixelsToAxisPadding(a[b], d) : c
+ }, f.convertPixelsToAxisPadding = function (a, b) {
+ var c = this.config.axis_rotated ? this.width : this.height;
+ return b * (a / c)
+ }, f.generateTickValues = function (a, b, c) {
+ var d, e, f, g, h, i, j, l = a;
+ if (b)if (d = k(b) ? b() : b, 1 === d)l = [a[0]]; else if (2 === d)l = [a[0], a[a.length - 1]]; else if (d > 2) {
+ for (g = d - 2, e = a[0], f = a[a.length - 1], h = (f - e) / (g + 1), l = [e], i = 0; g > i; i++)j = +e + h * (i + 1), l.push(c ? new Date(j) : j);
+ l.push(f)
+ }
+ return c || (l = l.sort(function (a, b) {
+ return a - b
+ })), l
+ }, f.generateAxisTransitions = function (a) {
+ var b = this, c = b.axes;
+ return {
+ axisX: a ? c.x.transition().duration(a) : c.x,
+ axisY: a ? c.y.transition().duration(a) : c.y,
+ axisY2: a ? c.y2.transition().duration(a) : c.y2,
+ axisSubX: a ? c.subx.transition().duration(a) : c.subx
+ }
+ }, f.redrawAxis = function (a, b) {
+ var c = this, d = c.config;
+ c.axes.x.style("opacity", b ? 0 : 1), c.axes.y.style("opacity", b ? 0 : 1), c.axes.y2.style("opacity", b ? 0 : 1), c.axes.subx.style("opacity", b ? 0 : 1), a.axisX.call(c.xAxis), a.axisY.call(c.yAxis), a.axisY2.call(c.y2Axis), a.axisSubX.call(c.subXAxis), !d.axis_rotated && d.axis_x_tick_rotate && (c.rotateTickText(c.axes.x, a.axisX, d.axis_x_tick_rotate), c.rotateTickText(c.axes.subx, a.axisSubX, d.axis_x_tick_rotate))
+ }, f.getClipPath = function (b) {
+ var c = a.navigator.appVersion.toLowerCase().indexOf("msie 9.") >= 0;
+ return "url(" + (c ? "" : document.URL.split("#")[0]) + "#" + b + ")"
+ }, f.appendClip = function (a, b) {
+ return a.append("clipPath").attr("id", b).append("rect")
+ }, f.getAxisClipX = function (a) {
+ var b = Math.max(30, this.margin.left);
+ return a ? -(1 + b) : -(b - 1)
+ }, f.getAxisClipY = function (a) {
+ return a ? -20 : -this.margin.top
+ }, f.getXAxisClipX = function () {
+ var a = this;
+ return a.getAxisClipX(!a.config.axis_rotated)
+ }, f.getXAxisClipY = function () {
+ var a = this;
+ return a.getAxisClipY(!a.config.axis_rotated)
+ }, f.getYAxisClipX = function () {
+ var a = this;
+ return a.config.axis_y_inner ? -1 : a.getAxisClipX(a.config.axis_rotated)
+ }, f.getYAxisClipY = function () {
+ var a = this;
+ return a.getAxisClipY(a.config.axis_rotated)
+ }, f.getAxisClipWidth = function (a) {
+ var b = this, c = Math.max(30, b.margin.left), d = Math.max(30, b.margin.right);
+ return a ? b.width + 2 + c + d : b.margin.left + 20
+ }, f.getAxisClipHeight = function (a) {
+ return (a ? this.margin.bottom : this.margin.top + this.height) + 20
+ }, f.getXAxisClipWidth = function () {
+ var a = this;
+ return a.getAxisClipWidth(!a.config.axis_rotated)
+ }, f.getXAxisClipHeight = function () {
+ var a = this;
+ return a.getAxisClipHeight(!a.config.axis_rotated)
+ }, f.getYAxisClipWidth = function () {
+ var a = this;
+ return a.getAxisClipWidth(a.config.axis_rotated) + (a.config.axis_y_inner ? 20 : 0)
+ }, f.getYAxisClipHeight = function () {
+ var a = this;
+ return a.getAxisClipHeight(a.config.axis_rotated)
+ }, f.initPie = function () {
+ var a = this, b = a.d3, c = a.config;
+ a.pie = b.layout.pie().value(function (a) {
+ return a.values.reduce(function (a, b) {
+ return a + b.value
+ }, 0)
+ }), c.data_order || a.pie.sort(null)
+ }, f.updateRadius = function () {
+ var a = this, b = a.config, c = b.gauge_width || b.donut_width;
+ a.radiusExpanded = Math.min(a.arcWidth, a.arcHeight) / 2, a.radius = .95 * a.radiusExpanded, a.innerRadiusRatio = c ? (a.radius - c) / a.radius : .6, a.innerRadius = a.hasType("donut") || a.hasType("gauge") ? a.radius * a.innerRadiusRatio : 0
+ }, f.updateArc = function () {
+ var a = this;
+ a.svgArc = a.getSvgArc(), a.svgArcExpanded = a.getSvgArcExpanded(), a.svgArcExpandedSub = a.getSvgArcExpanded(.98)
+ }, f.updateAngle = function (a) {
+ var b, c, d = this, e = d.config, f = !1, g = 0, h = e.gauge_min, i = e.gauge_max;
+ return d.pie(d.filterTargetsToShow(d.data.targets)).forEach(function (b) {
+ f || b.data.id !== a.data.id || (f = !0, a = b, a.index = g), g++
+ }), isNaN(a.endAngle) && (a.endAngle = a.startAngle), d.isGaugeType(a.data) && (b = Math.PI / (i - h), c = a.value < h ? 0 : a.value < i ? a.value - h : i - h, a.startAngle = -1 * (Math.PI / 2), a.endAngle = a.startAngle + b * c), f ? a : null
+ }, f.getSvgArc = function () {
+ var a = this, b = a.d3.svg.arc().outerRadius(a.radius).innerRadius(a.innerRadius), c = function (c, d) {
+ var e;
+ return d ? b(c) : (e = a.updateAngle(c), e ? b(e) : "M 0 0")
+ };
+ return c.centroid = b.centroid, c
+ }, f.getSvgArcExpanded = function (a) {
+ var b = this, c = b.d3.svg.arc().outerRadius(b.radiusExpanded * (a ? a : 1)).innerRadius(b.innerRadius);
+ return function (a) {
+ var d = b.updateAngle(a);
+ return d ? c(d) : "M 0 0"
+ }
+ }, f.getArc = function (a, b, c) {
+ return c || this.isArcType(a.data) ? this.svgArc(a, b) : "M 0 0"
+ }, f.transformForArcLabel = function (a) {
+ var b, c, d, e, f, g = this, h = g.updateAngle(a), i = "";
+ return h && !g.hasType("gauge") && (b = this.svgArc.centroid(h), c = isNaN(b[0]) ? 0 : b[0], d = isNaN(b[1]) ? 0 : b[1], e = Math.sqrt(c * c + d * d), f = g.radius && e ? (36 / g.radius > .375 ? 1.175 - 36 / g.radius : .8) * g.radius / e : 0, i = "translate(" + c * f + "," + d * f + ")"), i
+ }, f.getArcRatio = function (a) {
+ var b = this, c = b.hasType("gauge") ? Math.PI : 2 * Math.PI;
+ return a ? (a.endAngle - a.startAngle) / c : null
+ }, f.convertToArcData = function (a) {
+ return this.addName({id: a.data.id, value: a.value, ratio: this.getArcRatio(a), index: a.index})
+ }, f.textForArcLabel = function (a) {
+ var b, c, d, e, f, g = this;
+ return g.shouldShowArcLabel() ? (b = g.updateAngle(a), c = b ? b.value : null, d = g.getArcRatio(b), e = a.data.id, g.hasType("gauge") || g.meetsArcLabelThreshold(d) ? (f = g.getArcLabelFormat(), f ? f(c, d, e) : g.defaultArcValueFormat(c, d)) : "") : ""
+ }, f.expandArc = function (b) {
+ var c, d = this;
+ return d.transiting ? void(c = a.setInterval(function () {
+ d.transiting || (a.clearInterval(c), d.legend.selectAll(".c3-legend-item-focused").size() > 0 && d.expandArc(b))
+ }, 10)) : (b = d.mapToTargetIds(b), void d.svg.selectAll(d.selectorTargets(b, "." + i.chartArc)).each(function (a) {
+ d.shouldExpand(a.data.id) && d.d3.select(this).selectAll("path").transition().duration(50).attr("d", d.svgArcExpanded).transition().duration(100).attr("d", d.svgArcExpandedSub).each(function (a) {
+ d.isDonutType(a.data)
+ })
+ }))
+ }, f.unexpandArc = function (a) {
+ var b = this;
+ b.transiting || (a = b.mapToTargetIds(a), b.svg.selectAll(b.selectorTargets(a, "." + i.chartArc)).selectAll("path").transition().duration(50).attr("d", b.svgArc), b.svg.selectAll("." + i.arc).style("opacity", 1))
+ }, f.shouldExpand = function (a) {
+ var b = this, c = b.config;
+ return b.isDonutType(a) && c.donut_expand || b.isGaugeType(a) && c.gauge_expand || b.isPieType(a) && c.pie_expand
+ }, f.shouldShowArcLabel = function () {
+ var a = this, b = a.config, c = !0;
+ return a.hasType("donut") ? c = b.donut_label_show : a.hasType("pie") && (c = b.pie_label_show), c
+ }, f.meetsArcLabelThreshold = function (a) {
+ var b = this, c = b.config, d = b.hasType("donut") ? c.donut_label_threshold : c.pie_label_threshold;
+ return a >= d
+ }, f.getArcLabelFormat = function () {
+ var a = this, b = a.config, c = b.pie_label_format;
+ return a.hasType("gauge") ? c = b.gauge_label_format : a.hasType("donut") && (c = b.donut_label_format), c
+ }, f.getArcTitle = function () {
+ var a = this;
+ return a.hasType("donut") ? a.config.donut_title : ""
+ }, f.updateTargetsForArc = function (a) {
+ var b, c, d = this, e = d.main, f = d.classChartArc.bind(d), g = d.classArcs.bind(d), h = d.classFocus.bind(d);
+ b = e.select("." + i.chartArcs).selectAll("." + i.chartArc).data(d.pie(a)).attr("class", function (a) {
+ return f(a) + h(a.data)
+ }), c = b.enter().append("g").attr("class", f), c.append("g").attr("class", g), c.append("text").attr("dy", d.hasType("gauge") ? "-.1em" : ".35em").style("opacity", 0).style("text-anchor", "middle").style("pointer-events", "none")
+ }, f.initArc = function () {
+ var a = this;
+ a.arcs = a.main.select("." + i.chart).append("g").attr("class", i.chartArcs).attr("transform", a.getTranslate("arc")), a.arcs.append("text").attr("class", i.chartArcsTitle).style("text-anchor", "middle").text(a.getArcTitle())
+ }, f.redrawArc = function (a, b, c) {
+ var d, e = this, f = e.d3, g = e.config, h = e.main;
+ d = h.selectAll("." + i.arcs).selectAll("." + i.arc).data(e.arcData.bind(e)), d.enter().append("path").attr("class", e.classArc.bind(e)).style("fill", function (a) {
+ return e.color(a.data)
+ }).style("cursor", function (a) {
+ return g.interaction_enabled && g.data_selection_isselectable(a) ? "pointer" : null
+ }).style("opacity", 0).each(function (a) {
+ e.isGaugeType(a.data) && (a.startAngle = a.endAngle = -1 * (Math.PI / 2)), this._current = a
+ }), d.attr("transform", function (a) {
+ return !e.isGaugeType(a.data) && c ? "scale(0)" : ""
+ }).style("opacity", function (a) {
+ return a === this._current ? 0 : 1
+ }).on("mouseover", g.interaction_enabled ? function (a) {
+ var b, c;
+ e.transiting || (b = e.updateAngle(a), c = e.convertToArcData(b), e.expandArc(b.data.id), e.api.focus(b.data.id), e.toggleFocusLegend(b.data.id, !0), e.config.data_onmouseover(c, this))
+ } : null).on("mousemove", g.interaction_enabled ? function (a) {
+ var b = e.updateAngle(a), c = e.convertToArcData(b), d = [c];
+ e.showTooltip(d, f.mouse(this))
+ } : null).on("mouseout", g.interaction_enabled ? function (a) {
+ var b, c;
+ e.transiting || (b = e.updateAngle(a), c = e.convertToArcData(b), e.unexpandArc(b.data.id), e.api.revert(), e.revertLegend(), e.hideTooltip(), e.config.data_onmouseout(c, this))
+ } : null).on("click", g.interaction_enabled ? function (a, b) {
+ var c = e.updateAngle(a), d = e.convertToArcData(c);
+ e.toggleShape && e.toggleShape(this, d, b), e.config.data_onclick.call(e.api, d, this)
+ } : null).each(function () {
+ e.transiting = !0
+ }).transition().duration(a).attrTween("d", function (a) {
+ var b, c = e.updateAngle(a);
+ return c ? (isNaN(this._current.endAngle) && (this._current.endAngle = this._current.startAngle), b = f.interpolate(this._current, c), this._current = b(0), function (c) {
+ var d = b(c);
+ return d.data = a.data, e.getArc(d, !0)
+ }) : function () {
+ return "M 0 0"
+ }
+ }).attr("transform", c ? "scale(1)" : "").style("fill", function (a) {
+ return e.levelColor ? e.levelColor(a.data.values[0].value) : e.color(a.data.id)
+ }).style("opacity", 1).call(e.endall, function () {
+ e.transiting = !1
+ }), d.exit().transition().duration(b).style("opacity", 0).remove(), h.selectAll("." + i.chartArc).select("text").style("opacity", 0).attr("class", function (a) {
+ return e.isGaugeType(a.data) ? i.gaugeValue : ""
+ }).text(e.textForArcLabel.bind(e)).attr("transform", e.transformForArcLabel.bind(e)).style("font-size", function (a) {
+ return e.isGaugeType(a.data) ? Math.round(e.radius / 5) + "px" : ""
+ }).transition().duration(a).style("opacity", function (a) {
+ return e.isTargetToShow(a.data.id) && e.isArcType(a.data) ? 1 : 0
+ }), h.select("." + i.chartArcsTitle).style("opacity", e.hasType("donut") || e.hasType("gauge") ? 1 : 0), e.hasType("gauge") && (e.arcs.select("." + i.chartArcsBackground).attr("d", function () {
+ var a = {data: [{value: g.gauge_max}], startAngle: -1 * (Math.PI / 2), endAngle: Math.PI / 2};
+ return e.getArc(a, !0, !0)
+ }), e.arcs.select("." + i.chartArcsGaugeUnit).attr("dy", ".75em").text(g.gauge_label_show ? g.gauge_units : ""), e.arcs.select("." + i.chartArcsGaugeMin).attr("dx", -1 * (e.innerRadius + (e.radius - e.innerRadius) / 2) + "px").attr("dy", "1.2em").text(g.gauge_label_show ? g.gauge_min : ""), e.arcs.select("." + i.chartArcsGaugeMax).attr("dx", e.innerRadius + (e.radius - e.innerRadius) / 2 + "px").attr("dy", "1.2em").text(g.gauge_label_show ? g.gauge_max : ""))
+ }, f.initGauge = function () {
+ var a = this.arcs;
+ this.hasType("gauge") && (a.append("path").attr("class", i.chartArcsBackground), a.append("text").attr("class", i.chartArcsGaugeUnit).style("text-anchor", "middle").style("pointer-events", "none"), a.append("text").attr("class", i.chartArcsGaugeMin).style("text-anchor", "middle").style("pointer-events", "none"), a.append("text").attr("class", i.chartArcsGaugeMax).style("text-anchor", "middle").style("pointer-events", "none"))
+ }, f.getGaugeLabelHeight = function () {
+ return this.config.gauge_label_show ? 20 : 0
+ }, f.initRegion = function () {
+ var a = this;
+ a.region = a.main.append("g").attr("clip-path", a.clipPath).attr("class", i.regions)
+ }, f.redrawRegion = function (a) {
+ var b = this, c = b.config;
+ b.region.style("visibility", b.hasArcType() ? "hidden" : "visible"), b.mainRegion = b.main.select("." + i.regions).selectAll("." + i.region).data(c.regions), b.mainRegion.enter().append("g").attr("class", b.classRegion.bind(b)).append("rect").style("fill-opacity", 0), b.mainRegion.exit().transition().duration(a).style("opacity", 0).remove()
+ }, f.addTransitionForRegion = function (a) {
+ var b = this, c = b.regionX.bind(b), d = b.regionY.bind(b), e = b.regionWidth.bind(b), f = b.regionHeight.bind(b);
+ a.push(b.mainRegion.selectAll("rect").transition().attr("x", c).attr("y", d).attr("width", e).attr("height", f).style("fill-opacity", function (a) {
+ return j(a.opacity) ? a.opacity : .1
+ }))
+ }, f.regionX = function (a) {
+ var b, c = this, d = c.config, e = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated && "start"in a ? e(a.start) : 0 : d.axis_rotated ? 0 : "start"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.start) : a.start) : 0
+ }, f.regionY = function (a) {
+ var b, c = this, d = c.config, e = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated ? 0 : "end"in a ? e(a.end) : 0 : d.axis_rotated && "start"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.start) : a.start) : 0
+ }, f.regionWidth = function (a) {
+ var b, c = this, d = c.config, e = c.regionX(a), f = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated && "end"in a ? f(a.end) : c.width : d.axis_rotated ? c.width : "end"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.end) : a.end) : c.width, e > b ? 0 : b - e
+ }, f.regionHeight = function (a) {
+ var b, c = this, d = c.config, e = this.regionY(a), f = "y" === a.axis ? c.y : c.y2;
+ return b = "y" === a.axis || "y2" === a.axis ? d.axis_rotated ? c.height : "start"in a ? f(a.start) : c.height : d.axis_rotated && "end"in a ? c.x(c.isTimeSeries() ? c.parseDate(a.end) : a.end) : c.height, e > b ? 0 : b - e
+ }, f.isRegionOnX = function (a) {
+ return !a.axis || "x" === a.axis
+ }, f.drag = function (a) {
+ var b, c, d, e, f, g, h, j, k = this, l = k.config, m = k.main, n = k.d3;
+ k.hasArcType() || l.data_selection_enabled && (!l.zoom_enabled || k.zoom.altDomain) && l.data_selection_multiple && (b = k.dragStart[0], c = k.dragStart[1], d = a[0], e = a[1], f = Math.min(b, d), g = Math.max(b, d), h = l.data_selection_grouped ? k.margin.top : Math.min(c, e), j = l.data_selection_grouped ? k.height : Math.max(c, e), m.select("." + i.dragarea).attr("x", f).attr("y", h).attr("width", g - f).attr("height", j - h), m.selectAll("." + i.shapes).selectAll("." + i.shape).filter(function (a) {
+ return l.data_selection_isselectable(a)
+ }).each(function (a, b) {
+ var c, d, e, l, m, o, p = n.select(this), q = p.classed(i.SELECTED), r = p.classed(i.INCLUDED), s = !1;
+ if (p.classed(i.circle))c = 1 * p.attr("cx"), d = 1 * p.attr("cy"), m = k.togglePoint, s = c > f && g > c && d > h && j > d; else {
+ if (!p.classed(i.bar))return;
+ o = v(this), c = o.x, d = o.y, e = o.width, l = o.height, m = k.togglePath, s = !(c > g || f > c + e || d > j || h > d + l)
+ }
+ s ^ r && (p.classed(i.INCLUDED, !r), p.classed(i.SELECTED, !q), m.call(k, !q, p, a, b))
+ }))
+ }, f.dragstart = function (a) {
+ var b = this, c = b.config;
+ b.hasArcType() || c.data_selection_enabled && (b.dragStart = a, b.main.select("." + i.chart).append("rect").attr("class", i.dragarea).style("opacity", .1), b.dragging = !0, b.config.data_ondragstart.call(b.api))
+ }, f.dragend = function () {
+ var a = this, b = a.config;
+ a.hasArcType() || b.data_selection_enabled && (a.main.select("." + i.dragarea).transition().duration(100).style("opacity", 0).remove(), a.main.selectAll("." + i.shape).classed(i.INCLUDED, !1), a.dragging = !1, a.config.data_ondragend.call(a.api))
+ }, f.selectPoint = function (a, b, c) {
+ var d = this, e = d.config, f = (e.axis_rotated ? d.circleY : d.circleX).bind(d), g = (e.axis_rotated ? d.circleX : d.circleY).bind(d), h = d.pointSelectR.bind(d);
+ e.data_onselected.call(d.api, b, a.node()), d.main.select("." + i.selectedCircles + d.getTargetSelectorSuffix(b.id)).selectAll("." + i.selectedCircle + "-" + c).data([b]).enter().append("circle").attr("class", function () {
+ return d.generateClass(i.selectedCircle, c)
+ }).attr("cx", f).attr("cy", g).attr("stroke", function () {
+ return d.color(b)
+ }).attr("r", function (a) {
+ return 1.4 * d.pointSelectR(a)
+ }).transition().duration(100).attr("r", h)
+ }, f.unselectPoint = function (a, b, c) {
+ var d = this;
+ d.config.data_onunselected(b, a.node()), d.main.select("." + i.selectedCircles + d.getTargetSelectorSuffix(b.id)).selectAll("." + i.selectedCircle + "-" + c).transition().duration(100).attr("r", 0).remove()
+ }, f.togglePoint = function (a, b, c, d) {
+ a ? this.selectPoint(b, c, d) : this.unselectPoint(b, c, d)
+ }, f.selectPath = function (a, b) {
+ var c = this;
+ c.config.data_onselected.call(c, b, a.node()), a.transition().duration(100).style("fill", function () {
+ return c.d3.rgb(c.color(b)).brighter(.75)
+ })
+ }, f.unselectPath = function (a, b) {
+ var c = this;
+ c.config.data_onunselected.call(c, b, a.node()), a.transition().duration(100).style("fill", function () {
+ return c.color(b)
+ })
+ }, f.togglePath = function (a, b, c, d) {
+ a ? this.selectPath(b, c, d) : this.unselectPath(b, c, d)
+ },f.getToggle = function (a, b) {
+ var c, d = this;
+ return "circle" === a.nodeName ? c = d.isStepType(b) ? function () {
+ } : d.togglePoint : "path" === a.nodeName && (c = d.togglePath), c
+ },f.toggleShape = function (a, b, c) {
+ var d = this, e = d.d3, f = d.config, g = e.select(a), h = g.classed(i.SELECTED), j = d.getToggle(a, b).bind(d);
+ f.data_selection_enabled && f.data_selection_isselectable(b) && (f.data_selection_multiple || d.main.selectAll("." + i.shapes + (f.data_selection_grouped ? d.getTargetSelectorSuffix(b.id) : "")).selectAll("." + i.shape).each(function (a, b) {
+ var c = e.select(this);
+ c.classed(i.SELECTED) && j(!1, c.classed(i.SELECTED, !1), a, b)
+ }), g.classed(i.SELECTED, !h), j(!h, g, b, c))
+ },f.initBrush = function () {
+ var a = this, b = a.d3;
+ a.brush = b.svg.brush().on("brush", function () {
+ a.redrawForBrush()
+ }), a.brush.update = function () {
+ return a.context && a.context.select("." + i.brush).call(this), this
+ }, a.brush.scale = function (b) {
+ return a.config.axis_rotated ? this.y(b) : this.x(b)
+ }
+ },f.initSubchart = function () {
+ var a = this, b = a.config, c = a.context = a.svg.append("g").attr("transform", a.getTranslate("context"));
+ b.subchart_show || c.style("visibility", "hidden"), c.append("g").attr("clip-path", a.clipPathForSubchart).attr("class", i.chart), c.select("." + i.chart).append("g").attr("class", i.chartBars), c.select("." + i.chart).append("g").attr("class", i.chartLines), c.append("g").attr("clip-path", a.clipPath).attr("class", i.brush).call(a.brush).selectAll("rect").attr(b.axis_rotated ? "width" : "height", b.axis_rotated ? a.width2 : a.height2), a.axes.subx = c.append("g").attr("class", i.axisX).attr("transform", a.getTranslate("subx")).attr("clip-path", b.axis_rotated ? "" : a.clipPathForXAxis)
+ },f.updateTargetsForSubchart = function (a) {
+ var b, c, d, e, f = this, g = f.context, h = f.config, j = f.classChartBar.bind(f), k = f.classBars.bind(f), l = f.classChartLine.bind(f), m = f.classLines.bind(f), n = f.classAreas.bind(f);
+ h.subchart_show && (e = g.select("." + i.chartBars).selectAll("." + i.chartBar).data(a).attr("class", j), d = e.enter().append("g").style("opacity", 0).attr("class", j), d.append("g").attr("class", k), c = g.select("." + i.chartLines).selectAll("." + i.chartLine).data(a).attr("class", l), b = c.enter().append("g").style("opacity", 0).attr("class", l), b.append("g").attr("class", m), b.append("g").attr("class", n))
+ },f.redrawSubchart = function (a, b, c, d, e, f, g) {
+ var h, j, k, l, m, n, o = this, p = o.d3, q = o.context, r = o.config, s = o.barData.bind(o), t = o.lineData.bind(o), u = o.classBar.bind(o), v = o.classLine.bind(o), w = o.classArea.bind(o), x = o.initialOpacity.bind(o);
+ r.subchart_show && (p.event && "zoom" === p.event.type && o.brush.extent(o.x.orgDomain()).update(), a && (o.brush.empty() || o.brush.extent(o.x.orgDomain()).update(), l = o.generateDrawArea(e, !0), m = o.generateDrawBar(f, !0), n = o.generateDrawLine(g, !0), k = q.selectAll("." + i.bars).selectAll("." + i.bar).data(s), k.enter().append("path").attr("class", u).style("stroke", "none").style("fill", o.color), k.style("opacity", x).transition().duration(c).attr("d", m).style("opacity", 1), k.exit().transition().duration(c).style("opacity", 0).remove(), h = q.selectAll("." + i.lines).selectAll("." + i.line).data(t), h.enter().append("path").attr("class", v).style("stroke", o.color), h.style("opacity", x).transition().duration(c).attr("d", n).style("opacity", 1), h.exit().transition().duration(c).style("opacity", 0).remove(), j = q.selectAll("." + i.areas).selectAll("." + i.area).data(t), j.enter().append("path").attr("class", w).style("fill", o.color).style("opacity", function () {
+ return o.orgAreaOpacity = +p.select(this).style("opacity"), 0
+ }), j.style("opacity", 0).transition().duration(c).attr("d", l).style("fill", o.color).style("opacity", o.orgAreaOpacity), j.exit().transition().duration(d).style("opacity", 0).remove()))
+ },f.redrawForBrush = function () {
+ var a = this, b = a.x;
+ a.redraw({
+ withTransition: !1,
+ withY: a.config.zoom_rescale,
+ withSubchart: !1,
+ withUpdateXDomain: !0,
+ withDimension: !1
+ }), a.config.subchart_onbrush.call(a.api, b.orgDomain())
+ },f.transformContext = function (a, b) {
+ var c, d = this;
+ b && b.axisSubX ? c = b.axisSubX : (c = d.context.select("." + i.axisX), a && (c = c.transition())), d.context.attr("transform", d.getTranslate("context")), c.attr("transform", d.getTranslate("subx"))
+ },f.getDefaultExtent = function () {
+ var a = this, b = a.config, c = k(b.axis_x_extent) ? b.axis_x_extent(a.getXDomain(a.data.targets)) : b.axis_x_extent;
+ return a.isTimeSeries() && (c = [a.parseDate(c[0]), a.parseDate(c[1])]), c
+ },f.initZoom = function () {
+ var a, b = this, c = b.d3, d = b.config;
+ b.zoom = c.behavior.zoom().on("zoomstart", function () {
+ a = c.event.sourceEvent, b.zoom.altDomain = c.event.sourceEvent.altKey ? b.x.orgDomain() : null, d.zoom_onzoomstart.call(b.api, c.event.sourceEvent)
+ }).on("zoom", function () {
+ b.redrawForZoom.call(b)
+ }).on("zoomend", function () {
+ var e = c.event.sourceEvent;
+ e && a.clientX === e.clientX && a.clientY === e.clientY || (b.redrawEventRect(), b.updateZoom(), d.zoom_onzoomend.call(b.api, b.x.orgDomain()))
+ }), b.zoom.scale = function (a) {
+ return d.axis_rotated ? this.y(a) : this.x(a)
+ }, b.zoom.orgScaleExtent = function () {
+ var a = d.zoom_extent ? d.zoom_extent : [1, 10];
+ return [a[0], Math.max(b.getMaxDataCount() / a[1], a[1])]
+ }, b.zoom.updateScaleExtent = function () {
+ var a = q(b.x.orgDomain()) / q(b.orgXDomain), c = this.orgScaleExtent();
+ return this.scaleExtent([c[0] * a, c[1] * a]), this
+ }
+ },f.updateZoom = function () {
+ var a = this, b = a.config.zoom_enabled ? a.zoom : function () {
+ };
+ a.main.select("." + i.zoomRect).call(b).on("dblclick.zoom", null), a.main.selectAll("." + i.eventRect).call(b).on("dblclick.zoom", null)
+ },f.redrawForZoom = function () {
+ var a = this, b = a.d3, c = a.config, d = a.zoom, e = a.x;
+ if (c.zoom_enabled && 0 !== a.filterTargetsToShow(a.data.targets).length) {
+ if ("mousemove" === b.event.sourceEvent.type && d.altDomain)return e.domain(d.altDomain), void d.scale(e).updateScaleExtent();
+ a.isCategorized() && e.orgDomain()[0] === a.orgXDomain[0] && e.domain([a.orgXDomain[0] - 1e-10, e.orgDomain()[1]]), a.redraw({
+ withTransition: !1,
+ withY: c.zoom_rescale,
+ withSubchart: !1,
+ withEventRect: !1,
+ withDimension: !1
+ }), "mousemove" === b.event.sourceEvent.type && (a.cancelClick = !0), c.zoom_onzoom.call(a.api, e.orgDomain())
+ }
+ },f.generateColor = function () {
+ var a = this, b = a.config, c = a.d3, d = b.data_colors, e = s(b.color_pattern) ? b.color_pattern : c.scale.category10().range(), f = b.data_color, g = [];
+ return function (a) {
+ var b, c = a.id || a;
+ return d[c]instanceof Function ? b = d[c](a) : d[c] ? b = d[c] : (g.indexOf(c) < 0 && g.push(c), b = e[g.indexOf(c) % e.length], d[c] = b), f instanceof Function ? f(b, a) : b
+ }
+ },f.generateLevelColor = function () {
+ var a = this, b = a.config, c = b.color_pattern, d = b.color_threshold, e = "value" === d.unit, f = d.values && d.values.length ? d.values : [], g = d.max || 100;
+ return s(b.color_threshold) ? function (a) {
+ var b, d, h = c[c.length - 1];
+ for (b = 0; b < f.length; b++)if (d = e ? a : 100 * a / g, d < f[b]) {
+ h = c[b];
+ break
+ }
+ return h
+ } : null
+ },f.getYFormat = function (a) {
+ var b = this, c = a && !b.hasType("gauge") ? b.defaultArcValueFormat : b.yFormat, d = a && !b.hasType("gauge") ? b.defaultArcValueFormat : b.y2Format;
+ return function (a, e, f) {
+ var g = "y2" === b.getAxisId(f) ? d : c;
+ return g.call(b, a, e)
+ }
+ },f.yFormat = function (a) {
+ var b = this, c = b.config, d = c.axis_y_tick_format ? c.axis_y_tick_format : b.defaultValueFormat;
+ return d(a)
+ },f.y2Format = function (a) {
+ var b = this, c = b.config, d = c.axis_y2_tick_format ? c.axis_y2_tick_format : b.defaultValueFormat;
+ return d(a)
+ },f.defaultValueFormat = function (a) {
+ return j(a) ? +a : ""
+ },f.defaultArcValueFormat = function (a, b) {
+ return (100 * b).toFixed(1) + "%"
+ },f.formatByAxisId = function (a) {
+ var b = this, c = b.config.data_labels, d = function (a) {
+ return j(a) ? +a : ""
+ };
+ return "function" == typeof c.format ? d = c.format : "object" == typeof c.format && c.format[a] && (d = c.format[a]), d
+ },f.hasCaches = function (a) {
+ for (var b = 0; b < a.length; b++)if (!(a[b]in this.cache))return !1;
+ return !0
+ },f.addCache = function (a, b) {
+ this.cache[a] = this.cloneTarget(b)
+ },f.getCaches = function (a) {
+ var b, c = [];
+ for (b = 0; b < a.length; b++)a[b]in this.cache && c.push(this.cloneTarget(this.cache[a[b]]));
+ return c
+ };
+ var i = f.CLASS = {
+ target: "c3-target",
+ chart: "c3-chart",
+ chartLine: "c3-chart-line",
+ chartLines: "c3-chart-lines",
+ chartBar: "c3-chart-bar",
+ chartBars: "c3-chart-bars",
+ chartText: "c3-chart-text",
+ chartTexts: "c3-chart-texts",
+ chartArc: "c3-chart-arc",
+ chartArcs: "c3-chart-arcs",
+ chartArcsTitle: "c3-chart-arcs-title",
+ chartArcsBackground: "c3-chart-arcs-background",
+ chartArcsGaugeUnit: "c3-chart-arcs-gauge-unit",
+ chartArcsGaugeMax: "c3-chart-arcs-gauge-max",
+ chartArcsGaugeMin: "c3-chart-arcs-gauge-min",
+ selectedCircle: "c3-selected-circle",
+ selectedCircles: "c3-selected-circles",
+ eventRect: "c3-event-rect",
+ eventRects: "c3-event-rects",
+ eventRectsSingle: "c3-event-rects-single",
+ eventRectsMultiple: "c3-event-rects-multiple",
+ zoomRect: "c3-zoom-rect",
+ brush: "c3-brush",
+ focused: "c3-focused",
+ defocused: "c3-defocused",
+ region: "c3-region",
+ regions: "c3-regions",
+ tooltipContainer: "c3-tooltip-container",
+ tooltip: "c3-tooltip",
+ tooltipName: "c3-tooltip-name",
+ shape: "c3-shape",
+ shapes: "c3-shapes",
+ line: "c3-line",
+ lines: "c3-lines",
+ bar: "c3-bar",
+ bars: "c3-bars",
+ circle: "c3-circle",
+ circles: "c3-circles",
+ arc: "c3-arc",
+ arcs: "c3-arcs",
+ area: "c3-area",
+ areas: "c3-areas",
+ empty: "c3-empty",
+ text: "c3-text",
+ texts: "c3-texts",
+ gaugeValue: "c3-gauge-value",
+ grid: "c3-grid",
+ gridLines: "c3-grid-lines",
+ xgrid: "c3-xgrid",
+ xgrids: "c3-xgrids",
+ xgridLine: "c3-xgrid-line",
+ xgridLines: "c3-xgrid-lines",
+ xgridFocus: "c3-xgrid-focus",
+ ygrid: "c3-ygrid",
+ ygrids: "c3-ygrids",
+ ygridLine: "c3-ygrid-line",
+ ygridLines: "c3-ygrid-lines",
+ axis: "c3-axis",
+ axisX: "c3-axis-x",
+ axisXLabel: "c3-axis-x-label",
+ axisY: "c3-axis-y",
+ axisYLabel: "c3-axis-y-label",
+ axisY2: "c3-axis-y2",
+ axisY2Label: "c3-axis-y2-label",
+ legendBackground: "c3-legend-background",
+ legendItem: "c3-legend-item",
+ legendItemEvent: "c3-legend-item-event",
+ legendItemTile: "c3-legend-item-tile",
+ legendItemHidden: "c3-legend-item-hidden",
+ legendItemFocused: "c3-legend-item-focused",
+ dragarea: "c3-dragarea",
+ EXPANDED: "_expanded_",
+ SELECTED: "_selected_",
+ INCLUDED: "_included_"
+ };
+ f.generateClass = function (a, b) {
+ return " " + a + " " + a + this.getTargetSelectorSuffix(b)
+ }, f.classText = function (a) {
+ return this.generateClass(i.text, a.index)
+ }, f.classTexts = function (a) {
+ return this.generateClass(i.texts, a.id)
+ }, f.classShape = function (a) {
+ return this.generateClass(i.shape, a.index)
+ }, f.classShapes = function (a) {
+ return this.generateClass(i.shapes, a.id)
+ }, f.classLine = function (a) {
+ return this.classShape(a) + this.generateClass(i.line, a.id)
+ }, f.classLines = function (a) {
+ return this.classShapes(a) + this.generateClass(i.lines, a.id)
+ }, f.classCircle = function (a) {
+ return this.classShape(a) + this.generateClass(i.circle, a.index)
+ }, f.classCircles = function (a) {
+ return this.classShapes(a) + this.generateClass(i.circles, a.id)
+ }, f.classBar = function (a) {
+ return this.classShape(a) + this.generateClass(i.bar, a.index)
+ }, f.classBars = function (a) {
+ return this.classShapes(a) + this.generateClass(i.bars, a.id)
+ }, f.classArc = function (a) {
+ return this.classShape(a.data) + this.generateClass(i.arc, a.data.id)
+ }, f.classArcs = function (a) {
+ return this.classShapes(a.data) + this.generateClass(i.arcs, a.data.id)
+ }, f.classArea = function (a) {
+ return this.classShape(a) + this.generateClass(i.area, a.id)
+ }, f.classAreas = function (a) {
+ return this.classShapes(a) + this.generateClass(i.areas, a.id)
+ }, f.classRegion = function (a, b) {
+ return this.generateClass(i.region, b) + " " + ("class"in a ? a["class"] : "")
+ }, f.classEvent = function (a) {
+ return this.generateClass(i.eventRect, a.index)
+ }, f.classTarget = function (a) {
+ var b = this, c = b.config.data_classes[a], d = "";
+ return c && (d = " " + i.target + "-" + c), b.generateClass(i.target, a) + d
+ }, f.classFocus = function (a) {
+ return this.classFocused(a) + this.classDefocused(a)
+ }, f.classFocused = function (a) {
+ return " " + (this.focusedTargetIds.indexOf(a.id) >= 0 ? i.focused : "")
+ }, f.classDefocused = function (a) {
+ return " " + (this.defocusedTargetIds.indexOf(a.id) >= 0 ? i.defocused : "")
+ }, f.classChartText = function (a) {
+ return i.chartText + this.classTarget(a.id)
+ }, f.classChartLine = function (a) {
+ return i.chartLine + this.classTarget(a.id)
+ }, f.classChartBar = function (a) {
+ return i.chartBar + this.classTarget(a.id)
+ }, f.classChartArc = function (a) {
+ return i.chartArc + this.classTarget(a.data.id)
+ }, f.getTargetSelectorSuffix = function (a) {
+ return a || 0 === a ? ("-" + a).replace(/[\s?!@#$%^&*()_=+,.<>'":;\[\]\/|~`{}\\]/g, "-") : ""
+ }, f.selectorTarget = function (a, b) {
+ return (b || "") + "." + i.target + this.getTargetSelectorSuffix(a)
+ }, f.selectorTargets = function (a, b) {
+ var c = this;
+ return a = a || [], a.length ? a.map(function (a) {
+ return c.selectorTarget(a, b)
+ }) : null
+ }, f.selectorLegend = function (a) {
+ return "." + i.legendItem + this.getTargetSelectorSuffix(a)
+ }, f.selectorLegends = function (a) {
+ var b = this;
+ return a && a.length ? a.map(function (a) {
+ return b.selectorLegend(a)
+ }) : null
+ };
+ var j = f.isValue = function (a) {
+ return a || 0 === a
+ }, k = f.isFunction = function (a) {
+ return "function" == typeof a
+ }, l = f.isString = function (a) {
+ return "string" == typeof a
+ }, m = f.isUndefined = function (a) {
+ return "undefined" == typeof a
+ }, n = f.isDefined = function (a) {
+ return "undefined" != typeof a
+ }, o = f.ceil10 = function (a) {
+ return 10 * Math.ceil(a / 10)
+ }, p = f.asHalfPixel = function (a) {
+ return Math.ceil(a) + .5
+ }, q = f.diffDomain = function (a) {
+ return a[1] - a[0]
+ }, r = f.isEmpty = function (a) {
+ return !a || l(a) && 0 === a.length || "object" == typeof a && 0 === Object.keys(a).length
+ }, s = f.notEmpty = function (a) {
+ return Object.keys(a).length > 0
+ }, t = f.getOption = function (a, b, c) {
+ return n(a[b]) ? a[b] : c
+ }, u = f.hasValue = function (a, b) {
+ var c = !1;
+ return Object.keys(a).forEach(function (d) {
+ a[d] === b && (c = !0)
+ }), c
+ }, v = f.getPathBox = function (a) {
+ var b = a.getBoundingClientRect(), c = [a.pathSegList.getItem(0), a.pathSegList.getItem(1)], d = c[0].x, e = Math.min(c[0].y, c[1].y);
+ return {x: d, y: e, width: b.width, height: b.height}
+ };
+ e.focus = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow, c))), this.revert(), this.defocus(), b.classed(i.focused, !0).classed(i.defocused, !1), c.hasArcType() && c.expandArc(a), c.toggleFocusLegend(a, !0), c.focusedTargetIds = a, c.defocusedTargetIds = c.defocusedTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ })
+ }, e.defocus = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a.filter(c.isTargetToShow, c))), this.revert(), b.classed(i.focused, !1).classed(i.defocused, !0), c.hasArcType() && c.unexpandArc(a), c.toggleFocusLegend(a, !1), c.focusedTargetIds = c.focusedTargetIds.filter(function (b) {
+ return a.indexOf(b) < 0
+ }), c.defocusedTargetIds = a
+ }, e.revert = function (a) {
+ var b, c = this.internal;
+ a = c.mapToTargetIds(a), b = c.svg.selectAll(c.selectorTargets(a)), b.classed(i.focused, !1).classed(i.defocused, !1), c.hasArcType() && c.unexpandArc(a), c.config.legend_show && c.showLegend(a.filter(c.isLegendToShow.bind(c))), c.focusedTargetIds = [], c.defocusedTargetIds = []
+ }, e.show = function (a, b) {
+ var c, d = this.internal;
+ a = d.mapToTargetIds(a), b = b || {}, d.removeHiddenTargetIds(a), c = d.svg.selectAll(d.selectorTargets(a)), c.transition().style("opacity", 1, "important").call(d.endall, function () {
+ c.style("opacity", null).style("opacity", 1)
+ }), b.withLegend && d.showLegend(a), d.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0})
+ }, e.hide = function (a, b) {
+ var c, d = this.internal;
+ a = d.mapToTargetIds(a), b = b || {}, d.addHiddenTargetIds(a), c = d.svg.selectAll(d.selectorTargets(a)), c.transition().style("opacity", 0, "important").call(d.endall, function () {
+ c.style("opacity", null).style("opacity", 0)
+ }), b.withLegend && d.hideLegend(a), d.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0})
+ }, e.toggle = function (a) {
+ var b = this, c = this.internal;
+ c.mapToTargetIds(a).forEach(function (a) {
+ c.isTargetToShow(a) ? b.hide(a) : b.show(a)
+ })
+ }, e.zoom = function (a) {
+ var b = this.internal;
+ return a && (b.isTimeSeries() && (a = a.map(function (a) {
+ return b.parseDate(a)
+ })), b.brush.extent(a), b.redraw({
+ withUpdateXDomain: !0,
+ withY: b.config.zoom_rescale
+ }), b.config.zoom_onzoom.call(this, b.x.orgDomain())), b.brush.extent()
+ }, e.zoom.enable = function (a) {
+ var b = this.internal;
+ b.config.zoom_enabled = a, b.updateAndRedraw()
+ }, e.unzoom = function () {
+ var a = this.internal;
+ a.brush.clear().update(), a.redraw({withUpdateXDomain: !0})
+ }, e.load = function (a) {
+ var b = this.internal, c = b.config;
+ return a.xs && b.addXs(a.xs), "classes"in a && Object.keys(a.classes).forEach(function (b) {
+ c.data_classes[b] = a.classes[b]
+ }), "categories"in a && b.isCategorized() && (c.axis_x_categories = a.categories), "axes"in a && Object.keys(a.axes).forEach(function (b) {
+ c.data_axes[b] = a.axes[b]
+ }), "cacheIds"in a && b.hasCaches(a.cacheIds) ? void b.load(b.getCaches(a.cacheIds), a.done) : void("unload"in a ? b.unload(b.mapToTargetIds("boolean" == typeof a.unload && a.unload ? null : a.unload), function () {
+ b.loadFromArgs(a)
+ }) : b.loadFromArgs(a))
+ }, e.unload = function (a) {
+ var b = this.internal;
+ a = a || {}, a instanceof Array ? a = {ids: a} : "string" == typeof a && (a = {ids: [a]}), b.unload(b.mapToTargetIds(a.ids), function () {
+ b.redraw({withUpdateOrgXDomain: !0, withUpdateXDomain: !0, withLegend: !0}), a.done && a.done()
+ })
+ }, e.flow = function (a) {
+ var b, c, d, e, f, g, h, i, k = this.internal, l = [], m = k.getMaxDataCount(), o = 0, p = 0;
+ if (a.json)c = k.convertJsonToData(a.json, a.keys); else if (a.rows)c = k.convertRowsToData(a.rows); else {
+ if (!a.columns)return;
+ c = k.convertColumnsToData(a.columns)
+ }
+ b = k.convertDataToTargets(c, !0), k.data.targets.forEach(function (a) {
+ var c, d, e = !1;
+ for (c = 0; c < b.length; c++)if (a.id === b[c].id) {
+ for (e = !0, a.values[a.values.length - 1] && (p = a.values[a.values.length - 1].index + 1), o = b[c].values.length, d = 0; o > d; d++)b[c].values[d].index = p + d, k.isTimeSeries() || (b[c].values[d].x = p + d);
+ a.values = a.values.concat(b[c].values), b.splice(c, 1);
+ break
+ }
+ e || l.push(a.id)
+ }), k.data.targets.forEach(function (a) {
+ var b, c;
+ for (b = 0; b < l.length; b++)if (a.id === l[b])for (p = a.values[a.values.length - 1].index + 1, c = 0; o > c; c++)a.values.push({
+ id: a.id,
+ index: p + c,
+ x: k.isTimeSeries() ? k.getOtherTargetX(p + c) : p + c,
+ value: null
+ })
+ }), k.data.targets.length && b.forEach(function (a) {
+ var b, c = [];
+ for (b = k.data.targets[0].values[0].index; p > b; b++)c.push({
+ id: a.id,
+ index: b,
+ x: k.isTimeSeries() ? k.getOtherTargetX(b) : b,
+ value: null
+ });
+ a.values.forEach(function (a) {
+ a.index += p, k.isTimeSeries() || (a.x += p)
+ }), a.values = c.concat(a.values)
+ }), k.data.targets = k.data.targets.concat(b), d = k.getMaxDataCount(), f = k.data.targets[0], g = f.values[0], n(a.to) ? (o = 0, i = k.isTimeSeries() ? k.parseDate(a.to) : a.to, f.values.forEach(function (a) {
+ a.x < i && o++
+ })) : n(a.length) && (o = a.length), m ? 1 === m && k.isTimeSeries() && (h = (f.values[f.values.length - 1].x - g.x) / 2, e = [new Date(+g.x - h), new Date(+g.x + h)], k.updateXDomain(null, !0, !0, !1, e)) : (h = k.isTimeSeries() ? f.values.length > 1 ? f.values[f.values.length - 1].x - g.x : g.x - k.getXDomain(k.data.targets)[0] : 1, e = [g.x - h, g.x], k.updateXDomain(null, !0, !0, !1, e)), k.updateTargets(k.data.targets), k.redraw({
+ flow: {
+ index: g.index,
+ length: o,
+ duration: j(a.duration) ? a.duration : k.config.transition_duration,
+ done: a.done,
+ orgDataCount: m
+ }, withLegend: !0, withTransition: m > 1, withTrimXDomain: !1, withUpdateXAxis: !0
+ })
+ }, f.generateFlow = function (a) {
+ var b = this, c = b.config, d = b.d3;
+ return function () {
+ var e, f, g, h = a.targets, j = a.flow, k = a.drawBar, l = a.drawLine, m = a.drawArea, n = a.cx, o = a.cy, p = a.xv, r = a.xForText, s = a.yForText, t = a.duration, u = 1, v = j.index, w = j.length, x = b.getValueOnIndex(b.data.targets[0].values, v), y = b.getValueOnIndex(b.data.targets[0].values, v + w), z = b.x.domain(), A = j.duration || t, B = j.done || function () {
+ }, C = b.generateWait(), D = b.xgrid || d.selectAll([]), E = b.xgridLines || d.selectAll([]), F = b.mainRegion || d.selectAll([]), G = b.mainText || d.selectAll([]), H = b.mainBar || d.selectAll([]), I = b.mainLine || d.selectAll([]), J = b.mainArea || d.selectAll([]), K = b.mainCircle || d.selectAll([]);
+ b.flowing = !0, b.data.targets.forEach(function (a) {
+ a.values.splice(0, w)
+ }), g = b.updateXDomain(h, !0, !0), b.updateXGrid && b.updateXGrid(!0), j.orgDataCount ? e = 1 === j.orgDataCount || x.x === y.x ? b.x(z[0]) - b.x(g[0]) : b.isTimeSeries() ? b.x(z[0]) - b.x(g[0]) : b.x(x.x) - b.x(y.x) : 1 !== b.data.targets[0].values.length ? e = b.x(z[0]) - b.x(g[0]) : b.isTimeSeries() ? (x = b.getValueOnIndex(b.data.targets[0].values, 0), y = b.getValueOnIndex(b.data.targets[0].values, b.data.targets[0].values.length - 1), e = b.x(x.x) - b.x(y.x)) : e = q(g) / 2, u = q(z) / q(g), f = "translate(" + e + ",0) scale(" + u + ",1)", b.hideXGridFocus(), b.hideTooltip(), d.transition().ease("linear").duration(A).each(function () {
+ C.add(b.axes.x.transition().call(b.xAxis)), C.add(H.transition().attr("transform", f)), C.add(I.transition().attr("transform", f)), C.add(J.transition().attr("transform", f)), C.add(K.transition().attr("transform", f)), C.add(G.transition().attr("transform", f)), C.add(F.filter(b.isRegionOnX).transition().attr("transform", f)), C.add(D.transition().attr("transform", f)), C.add(E.transition().attr("transform", f))
+ }).call(C, function () {
+ var a, d = [], e = [], f = [];
+ if (w) {
+ for (a = 0; w > a; a++)d.push("." + i.shape + "-" + (v + a)), e.push("." + i.text + "-" + (v + a)), f.push("." + i.eventRect + "-" + (v + a));
+ b.svg.selectAll("." + i.shapes).selectAll(d).remove(), b.svg.selectAll("." + i.texts).selectAll(e).remove(), b.svg.selectAll("." + i.eventRects).selectAll(f).remove(), b.svg.select("." + i.xgrid).remove()
+ }
+ D.attr("transform", null).attr(b.xgridAttr), E.attr("transform", null), E.select("line").attr("x1", c.axis_rotated ? 0 : p).attr("x2", c.axis_rotated ? b.width : p), E.select("text").attr("x", c.axis_rotated ? b.width : 0).attr("y", p), H.attr("transform", null).attr("d", k), I.attr("transform", null).attr("d", l), J.attr("transform", null).attr("d", m), K.attr("transform", null).attr("cx", n).attr("cy", o), G.attr("transform", null).attr("x", r).attr("y", s).style("fill-opacity", b.opacityForText.bind(b)), F.attr("transform", null), F.select("rect").filter(b.isRegionOnX).attr("x", b.regionX.bind(b)).attr("width", b.regionWidth.bind(b)), c.interaction_enabled && b.redrawEventRect(), B(), b.flowing = !1
+ })
+ }
+ }, e.selected = function (a) {
+ var b = this.internal, c = b.d3;
+ return c.merge(b.main.selectAll("." + i.shapes + b.getTargetSelectorSuffix(a)).selectAll("." + i.shape).filter(function () {
+ return c.select(this).classed(i.SELECTED)
+ }).map(function (a) {
+ return a.map(function (a) {
+ var b = a.__data__;
+ return b.data ? b.data : b
+ })
+ }))
+ }, e.select = function (a, b, c) {
+ var d = this.internal, e = d.d3, f = d.config;
+ f.data_selection_enabled && d.main.selectAll("." + i.shapes).selectAll("." + i.shape).each(function (g, h) {
+ var j = e.select(this), k = g.data ? g.data.id : g.id, l = d.getToggle(this, g).bind(d), m = f.data_selection_grouped || !a || a.indexOf(k) >= 0, o = !b || b.indexOf(h) >= 0, p = j.classed(i.SELECTED);
+ j.classed(i.line) || j.classed(i.area) || (m && o ? f.data_selection_isselectable(g) && !p && l(!0, j.classed(i.SELECTED, !0), g, h) : n(c) && c && p && l(!1, j.classed(i.SELECTED, !1), g, h))
+ })
+ }, e.unselect = function (a, b) {
+ var c = this.internal, d = c.d3, e = c.config;
+ e.data_selection_enabled && c.main.selectAll("." + i.shapes).selectAll("." + i.shape).each(function (f, g) {
+ var h = d.select(this), j = f.data ? f.data.id : f.id, k = c.getToggle(this, f).bind(c), l = e.data_selection_grouped || !a || a.indexOf(j) >= 0, m = !b || b.indexOf(g) >= 0, n = h.classed(i.SELECTED);
+ h.classed(i.line) || h.classed(i.area) || l && m && e.data_selection_isselectable(f) && n && k(!1, h.classed(i.SELECTED, !1), f, g)
+ })
+ }, e.transform = function (a, b) {
+ var c = this.internal, d = ["pie", "donut"].indexOf(a) >= 0 ? {withTransform: !0} : null;
+ c.transformTo(b, a, d)
+ }, f.transformTo = function (a, b, c) {
+ var d = this, e = !d.hasArcType(), f = c || {withTransitionForAxis: e};
+ f.withTransitionForTransform = !1, d.transiting = !1, d.setTargetType(a, b), d.updateAndRedraw(f)
+ }, e.groups = function (a) {
+ var b = this.internal, c = b.config;
+ return m(a) ? c.data_groups : (c.data_groups = a, b.redraw(), c.data_groups)
+ }, e.xgrids = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.grid_x_lines = a, b.redrawWithoutRescale(), c.grid_x_lines) : c.grid_x_lines
+ }, e.xgrids.add = function (a) {
+ var b = this.internal;
+ return this.xgrids(b.config.grid_x_lines.concat(a ? a : []))
+ }, e.xgrids.remove = function (a) {
+ var b = this.internal;
+ b.removeGridLines(a, !0)
+ }, e.ygrids = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.grid_y_lines = a, b.redrawWithoutRescale(), c.grid_y_lines) : c.grid_y_lines
+ }, e.ygrids.add = function (a) {
+ var b = this.internal;
+ return this.ygrids(b.config.grid_y_lines.concat(a ? a : []))
+ }, e.ygrids.remove = function (a) {
+ var b = this.internal;
+ b.removeGridLines(a, !1)
+ }, e.regions = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.regions = a, b.redrawWithoutRescale(), c.regions) : c.regions
+ }, e.regions.add = function (a) {
+ var b = this.internal, c = b.config;
+ return a ? (c.regions = c.regions.concat(a), b.redrawWithoutRescale(), c.regions) : c.regions
+ }, e.regions.remove = function (a) {
+ var b, c, d, e = this.internal, f = e.config;
+ return a = a || {}, b = e.getOption(a, "duration", f.transition_duration), c = e.getOption(a, "classes", [i.region]), d = e.main.select("." + i.regions).selectAll(c.map(function (a) {
+ return "." + a
+ })), (b ? d.transition().duration(b) : d).style("opacity", 0).remove(), f.regions = f.regions.filter(function (a) {
+ var b = !1;
+ return a["class"] ? (a["class"].split(" ").forEach(function (a) {
+ c.indexOf(a) >= 0 && (b = !0)
+ }), !b) : !0
+ }), f.regions
+ }, e.data = function (a) {
+ var b = this.internal.data.targets;
+ return "undefined" == typeof a ? b : b.filter(function (b) {
+ return [].concat(a).indexOf(b.id) >= 0
+ })
+ }, e.data.shown = function (a) {
+ return this.internal.filterTargetsToShow(this.data(a))
+ }, e.data.values = function (a) {
+ var b, c = null;
+ return a && (b = this.data(a), c = b[0] ? b[0].values.map(function (a) {
+ return a.value
+ }) : null), c
+ }, e.data.names = function (a) {
+ return this.internal.clearLegendItemTextBoxCache(), this.internal.updateDataAttributes("names", a)
+ }, e.data.colors = function (a) {
+ return this.internal.updateDataAttributes("colors", a)
+ }, e.data.axes = function (a) {
+ return this.internal.updateDataAttributes("axes", a)
+ }, e.category = function (a, b) {
+ var c = this.internal, d = c.config;
+ return arguments.length > 1 && (d.axis_x_categories[a] = b, c.redraw()), d.axis_x_categories[a]
+ }, e.categories = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? (c.axis_x_categories = a, b.redraw(), c.axis_x_categories) : c.axis_x_categories
+ }, e.color = function (a) {
+ var b = this.internal;
+ return b.color(a)
+ }, e.x = function (a) {
+ var b = this.internal;
+ return arguments.length && (b.updateTargetX(b.data.targets, a), b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })), b.data.xs
+ }, e.xs = function (a) {
+ var b = this.internal;
+ return arguments.length && (b.updateTargetXs(b.data.targets, a), b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })), b.data.xs
+ }, e.axis = function () {
+ }, e.axis.labels = function (a) {
+ var b = this.internal;
+ arguments.length && (Object.keys(a).forEach(function (c) {
+ b.setAxisLabelText(c, a[c])
+ }), b.updateAxisLabels())
+ }, e.axis.max = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? ("object" == typeof a ? (j(a.x) && (c.axis_x_max = a.x), j(a.y) && (c.axis_y_max = a.y), j(a.y2) && (c.axis_y2_max = a.y2)) : c.axis_y_max = c.axis_y2_max = a, void b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })) : {x: c.axis_x_max, y: c.axis_y_max, y2: c.axis_y2_max}
+ }, e.axis.min = function (a) {
+ var b = this.internal, c = b.config;
+ return arguments.length ? ("object" == typeof a ? (j(a.x) && (c.axis_x_min = a.x), j(a.y) && (c.axis_y_min = a.y), j(a.y2) && (c.axis_y2_min = a.y2)) : c.axis_y_min = c.axis_y2_min = a, void b.redraw({
+ withUpdateOrgXDomain: !0,
+ withUpdateXDomain: !0
+ })) : {x: c.axis_x_min, y: c.axis_y_min, y2: c.axis_y2_min}
+ }, e.axis.range = function (a) {
+ return arguments.length ? (n(a.max) && this.axis.max(a.max), void(n(a.min) && this.axis.min(a.min))) : {
+ max: this.axis.max(),
+ min: this.axis.min()
+ }
+ }, e.legend = function () {
+ }, e.legend.show = function (a) {
+ var b = this.internal;
+ b.showLegend(b.mapToTargetIds(a)), b.updateAndRedraw({withLegend: !0})
+ }, e.legend.hide = function (a) {
+ var b = this.internal;
+ b.hideLegend(b.mapToTargetIds(a)), b.updateAndRedraw({withLegend: !0})
+ }, e.resize = function (a) {
+ var b = this.internal, c = b.config;
+ c.size_width = a ? a.width : null, c.size_height = a ? a.height : null, this.flush()
+ }, e.flush = function () {
+ var a = this.internal;
+ a.updateAndRedraw({withLegend: !0, withTransition: !1, withTransitionForTransform: !1})
+ }, e.destroy = function () {
+ var b = this.internal;
+ b.data.targets = void 0, b.data.xs = {}, b.selectChart.classed("c3", !1).html(""), a.clearInterval(b.intervalForObserveInserted), a.onresize = null
+ }, e.tooltip = function () {
+ }, e.tooltip.show = function (a) {
+ var b, c, d = this.internal;
+ a.mouse && (c = a.mouse), a.data ? d.isMultipleX() ? (c = [d.x(a.data.x), d.getYScale(a.data.id)(a.data.value)], b = null) : b = j(a.data.index) ? a.data.index : d.getIndexByX(a.data.x) : "undefined" != typeof a.x ? b = d.getIndexByX(a.x) : "undefined" != typeof a.index && (b = a.index), d.dispatchEvent("mouseover", b, c), d.dispatchEvent("mousemove", b, c)
+ }, e.tooltip.hide = function () {
+ this.internal.dispatchEvent("mouseout", 0)
+ };
+ var w;
+ "function" == typeof define && define.amd ? define("c3", ["d3"], g) : "undefined" != typeof exports && "undefined" != typeof module ? module.exports = g : a.c3 = g
+}(window); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/d3.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/d3.min.js
new file mode 100644
index 00000000..3ff71133
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/d3.min.js
@@ -0,0 +1,6152 @@
+!function () {
+ function n(n, t) {
+ return t > n ? -1 : n > t ? 1 : n >= t ? 0 : 0 / 0
+ }
+
+ function t(n) {
+ return null === n ? 0 / 0 : +n
+ }
+
+ function e(n) {
+ return !isNaN(n)
+ }
+
+ function r(n) {
+ return {
+ left: function (t, e, r, u) {
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) < 0 ? r = i + 1 : u = i
+ }
+ return r
+ }, right: function (t, e, r, u) {
+ for (arguments.length < 3 && (r = 0), arguments.length < 4 && (u = t.length); u > r;) {
+ var i = r + u >>> 1;
+ n(t[i], e) > 0 ? u = i : r = i + 1
+ }
+ return r
+ }
+ }
+ }
+
+ function u(n) {
+ return n.length
+ }
+
+ function i(n) {
+ for (var t = 1; n * t % 1;)t *= 10;
+ return t
+ }
+
+ function o(n, t) {
+ for (var e in t)Object.defineProperty(n.prototype, e, {value: t[e], enumerable: !1})
+ }
+
+ function a() {
+ this._ = Object.create(null)
+ }
+
+ function c(n) {
+ return (n += "") === la || n[0] === sa ? sa + n : n
+ }
+
+ function l(n) {
+ return (n += "")[0] === sa ? n.slice(1) : n
+ }
+
+ function s(n) {
+ return c(n)in this._
+ }
+
+ function f(n) {
+ return (n = c(n))in this._ && delete this._[n]
+ }
+
+ function h() {
+ var n = [];
+ for (var t in this._)n.push(l(t));
+ return n
+ }
+
+ function g() {
+ var n = 0;
+ for (var t in this._)++n;
+ return n
+ }
+
+ function p() {
+ for (var n in this._)return !1;
+ return !0
+ }
+
+ function v() {
+ this._ = Object.create(null)
+ }
+
+ function d(n, t, e) {
+ return function () {
+ var r = e.apply(t, arguments);
+ return r === t ? n : r
+ }
+ }
+
+ function m(n, t) {
+ if (t in n)return t;
+ t = t.charAt(0).toUpperCase() + t.slice(1);
+ for (var e = 0, r = fa.length; r > e; ++e) {
+ var u = fa[e] + t;
+ if (u in n)return u
+ }
+ }
+
+ function y() {
+ }
+
+ function x() {
+ }
+
+ function M(n) {
+ function t() {
+ for (var t, r = e, u = -1, i = r.length; ++u < i;)(t = r[u].on) && t.apply(this, arguments);
+ return n
+ }
+
+ var e = [], r = new a;
+ return t.on = function (t, u) {
+ var i, o = r.get(t);
+ return arguments.length < 2 ? o && o.on : (o && (o.on = null, e = e.slice(0, i = e.indexOf(o)).concat(e.slice(i + 1)), r.remove(t)), u && e.push(r.set(t, {on: u})), n)
+ }, t
+ }
+
+ function _() {
+ Bo.event.preventDefault()
+ }
+
+ function b() {
+ for (var n, t = Bo.event; n = t.sourceEvent;)t = n;
+ return t
+ }
+
+ function w(n) {
+ for (var t = new x, e = 0, r = arguments.length; ++e < r;)t[arguments[e]] = M(t);
+ return t.of = function (e, r) {
+ return function (u) {
+ try {
+ var i = u.sourceEvent = Bo.event;
+ u.target = n, Bo.event = u, t[u.type].apply(e, r)
+ } finally {
+ Bo.event = i
+ }
+ }
+ }, t
+ }
+
+ function S(n) {
+ return ga(n, ya), n
+ }
+
+ function k(n) {
+ return "function" == typeof n ? n : function () {
+ return pa(n, this)
+ }
+ }
+
+ function E(n) {
+ return "function" == typeof n ? n : function () {
+ return va(n, this)
+ }
+ }
+
+ function A(n, t) {
+ function e() {
+ this.removeAttribute(n)
+ }
+
+ function r() {
+ this.removeAttributeNS(n.space, n.local)
+ }
+
+ function u() {
+ this.setAttribute(n, t)
+ }
+
+ function i() {
+ this.setAttributeNS(n.space, n.local, t)
+ }
+
+ function o() {
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttribute(n) : this.setAttribute(n, e)
+ }
+
+ function a() {
+ var e = t.apply(this, arguments);
+ null == e ? this.removeAttributeNS(n.space, n.local) : this.setAttributeNS(n.space, n.local, e)
+ }
+
+ return n = Bo.ns.qualify(n), null == t ? n.local ? r : e : "function" == typeof t ? n.local ? a : o : n.local ? i : u
+ }
+
+ function C(n) {
+ return n.trim().replace(/\s+/g, " ")
+ }
+
+ function N(n) {
+ return new RegExp("(?:^|\\s+)" + Bo.requote(n) + "(?:\\s+|$)", "g")
+ }
+
+ function z(n) {
+ return (n + "").trim().split(/^|\s+/)
+ }
+
+ function L(n, t) {
+ function e() {
+ for (var e = -1; ++e < u;)n[e](this, t)
+ }
+
+ function r() {
+ for (var e = -1, r = t.apply(this, arguments); ++e < u;)n[e](this, r)
+ }
+
+ n = z(n).map(T);
+ var u = n.length;
+ return "function" == typeof t ? r : e
+ }
+
+ function T(n) {
+ var t = N(n);
+ return function (e, r) {
+ if (u = e.classList)return r ? u.add(n) : u.remove(n);
+ var u = e.getAttribute("class") || "";
+ r ? (t.lastIndex = 0, t.test(u) || e.setAttribute("class", C(u + " " + n))) : e.setAttribute("class", C(u.replace(t, " ")))
+ }
+ }
+
+ function q(n, t, e) {
+ function r() {
+ this.style.removeProperty(n)
+ }
+
+ function u() {
+ this.style.setProperty(n, t, e)
+ }
+
+ function i() {
+ var r = t.apply(this, arguments);
+ null == r ? this.style.removeProperty(n) : this.style.setProperty(n, r, e)
+ }
+
+ return null == t ? r : "function" == typeof t ? i : u
+ }
+
+ function R(n, t) {
+ function e() {
+ delete this[n]
+ }
+
+ function r() {
+ this[n] = t
+ }
+
+ function u() {
+ var e = t.apply(this, arguments);
+ null == e ? delete this[n] : this[n] = e
+ }
+
+ return null == t ? e : "function" == typeof t ? u : r
+ }
+
+ function D(n) {
+ return "function" == typeof n ? n : (n = Bo.ns.qualify(n)).local ? function () {
+ return this.ownerDocument.createElementNS(n.space, n.local)
+ } : function () {
+ return this.ownerDocument.createElementNS(this.namespaceURI, n)
+ }
+ }
+
+ function P(n) {
+ return {__data__: n}
+ }
+
+ function U(n) {
+ return function () {
+ return ma(this, n)
+ }
+ }
+
+ function j(t) {
+ return arguments.length || (t = n), function (n, e) {
+ return n && e ? t(n.__data__, e.__data__) : !n - !e
+ }
+ }
+
+ function F(n, t) {
+ for (var e = 0, r = n.length; r > e; e++)for (var u, i = n[e], o = 0, a = i.length; a > o; o++)(u = i[o]) && t(u, o, e);
+ return n
+ }
+
+ function H(n) {
+ return ga(n, Ma), n
+ }
+
+ function O(n) {
+ var t, e;
+ return function (r, u, i) {
+ var o, a = n[i].update, c = a.length;
+ for (i != e && (e = i, t = 0), u >= t && (t = u + 1); !(o = a[t]) && ++t < c;);
+ return o
+ }
+ }
+
+ function Y() {
+ var n = this.__transition__;
+ n && ++n.active
+ }
+
+ function I(n, t, e) {
+ function r() {
+ var t = this[o];
+ t && (this.removeEventListener(n, t, t.$), delete this[o])
+ }
+
+ function u() {
+ var u = c(t, Jo(arguments));
+ r.call(this), this.addEventListener(n, this[o] = u, u.$ = e), u._ = t
+ }
+
+ function i() {
+ var t, e = new RegExp("^__on([^.]+)" + Bo.requote(n) + "$");
+ for (var r in this)if (t = r.match(e)) {
+ var u = this[r];
+ this.removeEventListener(t[1], u, u.$), delete this[r]
+ }
+ }
+
+ var o = "__on" + n, a = n.indexOf("."), c = Z;
+ a > 0 && (n = n.slice(0, a));
+ var l = ba.get(n);
+ return l && (n = l, c = V), a ? t ? u : r : t ? y : i
+ }
+
+ function Z(n, t) {
+ return function (e) {
+ var r = Bo.event;
+ Bo.event = e, t[0] = this.__data__;
+ try {
+ n.apply(this, t)
+ } finally {
+ Bo.event = r
+ }
+ }
+ }
+
+ function V(n, t) {
+ var e = Z(n, t);
+ return function (n) {
+ var t = this, r = n.relatedTarget;
+ r && (r === t || 8 & r.compareDocumentPosition(t)) || e.call(t, n)
+ }
+ }
+
+ function X() {
+ var n = ".dragsuppress-" + ++Sa, t = "click" + n, e = Bo.select(Qo).on("touchmove" + n, _).on("dragstart" + n, _).on("selectstart" + n, _);
+ if (wa) {
+ var r = Ko.style, u = r[wa];
+ r[wa] = "none"
+ }
+ return function (i) {
+ function o() {
+ e.on(t, null)
+ }
+
+ e.on(n, null), wa && (r[wa] = u), i && (e.on(t, function () {
+ _(), o()
+ }, !0), setTimeout(o, 0))
+ }
+ }
+
+ function $(n, t) {
+ t.changedTouches && (t = t.changedTouches[0]);
+ var e = n.ownerSVGElement || n;
+ if (e.createSVGPoint) {
+ var r = e.createSVGPoint();
+ if (0 > ka && (Qo.scrollX || Qo.scrollY)) {
+ e = Bo.select("body").append("svg").style({
+ position: "absolute",
+ top: 0,
+ left: 0,
+ margin: 0,
+ padding: 0,
+ border: "none"
+ }, "important");
+ var u = e[0][0].getScreenCTM();
+ ka = !(u.f || u.e), e.remove()
+ }
+ return ka ? (r.x = t.pageX, r.y = t.pageY) : (r.x = t.clientX, r.y = t.clientY), r = r.matrixTransform(n.getScreenCTM().inverse()), [r.x, r.y]
+ }
+ var i = n.getBoundingClientRect();
+ return [t.clientX - i.left - n.clientLeft, t.clientY - i.top - n.clientTop]
+ }
+
+ function B() {
+ return Bo.event.changedTouches[0].identifier
+ }
+
+ function W() {
+ return Bo.event.target
+ }
+
+ function J() {
+ return Qo
+ }
+
+ function G(n) {
+ return n > 0 ? 1 : 0 > n ? -1 : 0
+ }
+
+ function K(n, t, e) {
+ return (t[0] - n[0]) * (e[1] - n[1]) - (t[1] - n[1]) * (e[0] - n[0])
+ }
+
+ function Q(n) {
+ return n > 1 ? 0 : -1 > n ? Ea : Math.acos(n)
+ }
+
+ function nt(n) {
+ return n > 1 ? Ca : -1 > n ? -Ca : Math.asin(n)
+ }
+
+ function tt(n) {
+ return ((n = Math.exp(n)) - 1 / n) / 2
+ }
+
+ function et(n) {
+ return ((n = Math.exp(n)) + 1 / n) / 2
+ }
+
+ function rt(n) {
+ return ((n = Math.exp(2 * n)) - 1) / (n + 1)
+ }
+
+ function ut(n) {
+ return (n = Math.sin(n / 2)) * n
+ }
+
+ function it() {
+ }
+
+ function ot(n, t, e) {
+ return this instanceof ot ? (this.h = +n, this.s = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ot ? new ot(n.h, n.s, n.l) : Mt("" + n, _t, ot) : new ot(n, t, e)
+ }
+
+ function at(n, t, e) {
+ function r(n) {
+ return n > 360 ? n -= 360 : 0 > n && (n += 360), 60 > n ? i + (o - i) * n / 60 : 180 > n ? o : 240 > n ? i + (o - i) * (240 - n) / 60 : i
+ }
+
+ function u(n) {
+ return Math.round(255 * r(n))
+ }
+
+ var i, o;
+ return n = isNaN(n) ? 0 : (n %= 360) < 0 ? n + 360 : n, t = isNaN(t) ? 0 : 0 > t ? 0 : t > 1 ? 1 : t, e = 0 > e ? 0 : e > 1 ? 1 : e, o = .5 >= e ? e * (1 + t) : e + t - e * t, i = 2 * e - o, new dt(u(n + 120), u(n), u(n - 120))
+ }
+
+ function ct(n, t, e) {
+ return this instanceof ct ? (this.h = +n, this.c = +t, void(this.l = +e)) : arguments.length < 2 ? n instanceof ct ? new ct(n.h, n.c, n.l) : n instanceof st ? ht(n.l, n.a, n.b) : ht((n = bt((n = Bo.rgb(n)).r, n.g, n.b)).l, n.a, n.b) : new ct(n, t, e)
+ }
+
+ function lt(n, t, e) {
+ return isNaN(n) && (n = 0), isNaN(t) && (t = 0), new st(e, Math.cos(n *= La) * t, Math.sin(n) * t)
+ }
+
+ function st(n, t, e) {
+ return this instanceof st ? (this.l = +n, this.a = +t, void(this.b = +e)) : arguments.length < 2 ? n instanceof st ? new st(n.l, n.a, n.b) : n instanceof ct ? lt(n.h, n.c, n.l) : bt((n = dt(n)).r, n.g, n.b) : new st(n, t, e)
+ }
+
+ function ft(n, t, e) {
+ var r = (n + 16) / 116, u = r + t / 500, i = r - e / 200;
+ return u = gt(u) * Ya, r = gt(r) * Ia, i = gt(i) * Za, new dt(vt(3.2404542 * u - 1.5371385 * r - .4985314 * i), vt(-.969266 * u + 1.8760108 * r + .041556 * i), vt(.0556434 * u - .2040259 * r + 1.0572252 * i))
+ }
+
+ function ht(n, t, e) {
+ return n > 0 ? new ct(Math.atan2(e, t) * Ta, Math.sqrt(t * t + e * e), n) : new ct(0 / 0, 0 / 0, n)
+ }
+
+ function gt(n) {
+ return n > .206893034 ? n * n * n : (n - 4 / 29) / 7.787037
+ }
+
+ function pt(n) {
+ return n > .008856 ? Math.pow(n, 1 / 3) : 7.787037 * n + 4 / 29
+ }
+
+ function vt(n) {
+ return Math.round(255 * (.00304 >= n ? 12.92 * n : 1.055 * Math.pow(n, 1 / 2.4) - .055))
+ }
+
+ function dt(n, t, e) {
+ return this instanceof dt ? (this.r = ~~n, this.g = ~~t, void(this.b = ~~e)) : arguments.length < 2 ? n instanceof dt ? new dt(n.r, n.g, n.b) : Mt("" + n, dt, at) : new dt(n, t, e)
+ }
+
+ function mt(n) {
+ return new dt(n >> 16, 255 & n >> 8, 255 & n)
+ }
+
+ function yt(n) {
+ return mt(n) + ""
+ }
+
+ function xt(n) {
+ return 16 > n ? "0" + Math.max(0, n).toString(16) : Math.min(255, n).toString(16)
+ }
+
+ function Mt(n, t, e) {
+ var r, u, i, o = 0, a = 0, c = 0;
+ if (r = /([a-z]+)\((.*)\)/i.exec(n))switch (u = r[2].split(","), r[1]) {
+ case"hsl":
+ return e(parseFloat(u[0]), parseFloat(u[1]) / 100, parseFloat(u[2]) / 100);
+ case"rgb":
+ return t(St(u[0]), St(u[1]), St(u[2]))
+ }
+ return (i = $a.get(n)) ? t(i.r, i.g, i.b) : (null == n || "#" !== n.charAt(0) || isNaN(i = parseInt(n.slice(1), 16)) || (4 === n.length ? (o = (3840 & i) >> 4, o = o >> 4 | o, a = 240 & i, a = a >> 4 | a, c = 15 & i, c = c << 4 | c) : 7 === n.length && (o = (16711680 & i) >> 16, a = (65280 & i) >> 8, c = 255 & i)), t(o, a, c))
+ }
+
+ function _t(n, t, e) {
+ var r, u, i = Math.min(n /= 255, t /= 255, e /= 255), o = Math.max(n, t, e), a = o - i, c = (o + i) / 2;
+ return a ? (u = .5 > c ? a / (o + i) : a / (2 - o - i), r = n == o ? (t - e) / a + (e > t ? 6 : 0) : t == o ? (e - n) / a + 2 : (n - t) / a + 4, r *= 60) : (r = 0 / 0, u = c > 0 && 1 > c ? 0 : r), new ot(r, u, c)
+ }
+
+ function bt(n, t, e) {
+ n = wt(n), t = wt(t), e = wt(e);
+ var r = pt((.4124564 * n + .3575761 * t + .1804375 * e) / Ya), u = pt((.2126729 * n + .7151522 * t + .072175 * e) / Ia), i = pt((.0193339 * n + .119192 * t + .9503041 * e) / Za);
+ return st(116 * u - 16, 500 * (r - u), 200 * (u - i))
+ }
+
+ function wt(n) {
+ return (n /= 255) <= .04045 ? n / 12.92 : Math.pow((n + .055) / 1.055, 2.4)
+ }
+
+ function St(n) {
+ var t = parseFloat(n);
+ return "%" === n.charAt(n.length - 1) ? Math.round(2.55 * t) : t
+ }
+
+ function kt(n) {
+ return "function" == typeof n ? n : function () {
+ return n
+ }
+ }
+
+ function Et(n) {
+ return n
+ }
+
+ function At(n) {
+ return function (t, e, r) {
+ return 2 === arguments.length && "function" == typeof e && (r = e, e = null), Ct(t, e, n, r)
+ }
+ }
+
+ function Ct(n, t, e, r) {
+ function u() {
+ var n, t = c.status;
+ if (!t && zt(c) || t >= 200 && 300 > t || 304 === t) {
+ try {
+ n = e.call(i, c)
+ } catch (r) {
+ return o.error.call(i, r), void 0
+ }
+ o.load.call(i, n)
+ } else o.error.call(i, c)
+ }
+
+ var i = {}, o = Bo.dispatch("beforesend", "progress", "load", "error"), a = {}, c = new XMLHttpRequest, l = null;
+ return !Qo.XDomainRequest || "withCredentials"in c || !/^(http(s)?:)?\/\//.test(n) || (c = new XDomainRequest), "onload"in c ? c.onload = c.onerror = u : c.onreadystatechange = function () {
+ c.readyState > 3 && u()
+ }, c.onprogress = function (n) {
+ var t = Bo.event;
+ Bo.event = n;
+ try {
+ o.progress.call(i, c)
+ } finally {
+ Bo.event = t
+ }
+ }, i.header = function (n, t) {
+ return n = (n + "").toLowerCase(), arguments.length < 2 ? a[n] : (null == t ? delete a[n] : a[n] = t + "", i)
+ }, i.mimeType = function (n) {
+ return arguments.length ? (t = null == n ? null : n + "", i) : t
+ }, i.responseType = function (n) {
+ return arguments.length ? (l = n, i) : l
+ }, i.response = function (n) {
+ return e = n, i
+ }, ["get", "post"].forEach(function (n) {
+ i[n] = function () {
+ return i.send.apply(i, [n].concat(Jo(arguments)))
+ }
+ }), i.send = function (e, r, u) {
+ if (2 === arguments.length && "function" == typeof r && (u = r, r = null), c.open(e, n, !0), null == t || "accept"in a || (a.accept = t + ",*/*"), c.setRequestHeader)for (var s in a)c.setRequestHeader(s, a[s]);
+ return null != t && c.overrideMimeType && c.overrideMimeType(t), null != l && (c.responseType = l), null != u && i.on("error", u).on("load", function (n) {
+ u(null, n)
+ }), o.beforesend.call(i, c), c.send(null == r ? null : r), i
+ }, i.abort = function () {
+ return c.abort(), i
+ }, Bo.rebind(i, o, "on"), null == r ? i : i.get(Nt(r))
+ }
+
+ function Nt(n) {
+ return 1 === n.length ? function (t, e) {
+ n(null == t ? e : null)
+ } : n
+ }
+
+ function zt(n) {
+ var t = n.responseType;
+ return t && "text" !== t ? n.response : n.responseText
+ }
+
+ function Lt() {
+ var n = Tt(), t = qt() - n;
+ t > 24 ? (isFinite(t) && (clearTimeout(Ga), Ga = setTimeout(Lt, t)), Ja = 0) : (Ja = 1, Qa(Lt))
+ }
+
+ function Tt() {
+ var n = Date.now();
+ for (Ka = Ba; Ka;)n >= Ka.t && (Ka.f = Ka.c(n - Ka.t)), Ka = Ka.n;
+ return n
+ }
+
+ function qt() {
+ for (var n, t = Ba, e = 1 / 0; t;)t.f ? t = n ? n.n = t.n : Ba = t.n : (t.t < e && (e = t.t), t = (n = t).n);
+ return Wa = n, e
+ }
+
+ function Rt(n, t) {
+ return t - (n ? Math.ceil(Math.log(n) / Math.LN10) : 1)
+ }
+
+ function Dt(n, t) {
+ var e = Math.pow(10, 3 * ca(8 - t));
+ return {
+ scale: t > 8 ? function (n) {
+ return n / e
+ } : function (n) {
+ return n * e
+ }, symbol: n
+ }
+ }
+
+ function Pt(n) {
+ var t = n.decimal, e = n.thousands, r = n.grouping, u = n.currency, i = r && e ? function (n, t) {
+ for (var u = n.length, i = [], o = 0, a = r[0], c = 0; u > 0 && a > 0 && (c + a + 1 > t && (a = Math.max(1, t - c)), i.push(n.substring(u -= a, u + a)), !((c += a + 1) > t));)a = r[o = (o + 1) % r.length];
+ return i.reverse().join(e)
+ } : Et;
+ return function (n) {
+ var e = tc.exec(n), r = e[1] || " ", o = e[2] || ">", a = e[3] || "-", c = e[4] || "", l = e[5], s = +e[6], f = e[7], h = e[8], g = e[9], p = 1, v = "", d = "", m = !1, y = !0;
+ switch (h && (h = +h.substring(1)), (l || "0" === r && "=" === o) && (l = r = "0", o = "="), g) {
+ case"n":
+ f = !0, g = "g";
+ break;
+ case"%":
+ p = 100, d = "%", g = "f";
+ break;
+ case"p":
+ p = 100, d = "%", g = "r";
+ break;
+ case"b":
+ case"o":
+ case"x":
+ case"X":
+ "#" === c && (v = "0" + g.toLowerCase());
+ case"c":
+ y = !1;
+ case"d":
+ m = !0, h = 0;
+ break;
+ case"s":
+ p = -1, g = "r"
+ }
+ "$" === c && (v = u[0], d = u[1]), "r" != g || h || (g = "g"), null != h && ("g" == g ? h = Math.max(1, Math.min(21, h)) : ("e" == g || "f" == g) && (h = Math.max(0, Math.min(20, h)))), g = ec.get(g) || Ut;
+ var x = l && f;
+ return function (n) {
+ var e = d;
+ if (m && n % 1)return "";
+ var u = 0 > n || 0 === n && 0 > 1 / n ? (n = -n, "-") : "-" === a ? "" : a;
+ if (0 > p) {
+ var c = Bo.formatPrefix(n, h);
+ n = c.scale(n), e = c.symbol + d
+ } else n *= p;
+ n = g(n, h);
+ var M, _, b = n.lastIndexOf(".");
+ if (0 > b) {
+ var w = y ? n.lastIndexOf("e") : -1;
+ 0 > w ? (M = n, _ = "") : (M = n.substring(0, w), _ = n.substring(w))
+ } else M = n.substring(0, b), _ = t + n.substring(b + 1);
+ !l && f && (M = i(M, 1 / 0));
+ var S = v.length + M.length + _.length + (x ? 0 : u.length), k = s > S ? new Array(S = s - S + 1).join(r) : "";
+ return x && (M = i(k + M, k.length ? s - _.length : 1 / 0)), u += v, n = M + _, ("<" === o ? u + n + k : ">" === o ? k + u + n : "^" === o ? k.substring(0, S >>= 1) + u + n + k.substring(S) : u + (x ? n : k + n)) + e
+ }
+ }
+ }
+
+ function Ut(n) {
+ return n + ""
+ }
+
+ function jt() {
+ this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0])
+ }
+
+ function Ft(n, t, e) {
+ function r(t) {
+ var e = n(t), r = i(e, 1);
+ return r - t > t - e ? e : r
+ }
+
+ function u(e) {
+ return t(e = n(new uc(e - 1)), 1), e
+ }
+
+ function i(n, e) {
+ return t(n = new uc(+n), e), n
+ }
+
+ function o(n, r, i) {
+ var o = u(n), a = [];
+ if (i > 1)for (; r > o;)e(o) % i || a.push(new Date(+o)), t(o, 1); else for (; r > o;)a.push(new Date(+o)), t(o, 1);
+ return a
+ }
+
+ function a(n, t, e) {
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = n, o(r, t, e)
+ } finally {
+ uc = Date
+ }
+ }
+
+ n.floor = n, n.round = r, n.ceil = u, n.offset = i, n.range = o;
+ var c = n.utc = Ht(n);
+ return c.floor = c, c.round = Ht(r), c.ceil = Ht(u), c.offset = Ht(i), c.range = a, n
+ }
+
+ function Ht(n) {
+ return function (t, e) {
+ try {
+ uc = jt;
+ var r = new jt;
+ return r._ = t, n(r, e)._
+ } finally {
+ uc = Date
+ }
+ }
+ }
+
+ function Ot(n) {
+ function t(n) {
+ function t(t) {
+ for (var e, u, i, o = [], a = -1, c = 0; ++a < r;)37 === n.charCodeAt(a) && (o.push(n.slice(c, a)), null != (u = oc[e = n.charAt(++a)]) && (e = n.charAt(++a)), (i = C[e]) && (e = i(t, null == u ? "e" === e ? " " : "0" : u)), o.push(e), c = a + 1);
+ return o.push(n.slice(c, a)), o.join("")
+ }
+
+ var r = n.length;
+ return t.parse = function (t) {
+ var r = {y: 1900, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0, Z: null}, u = e(r, n, t, 0);
+ if (u != t.length)return null;
+ "p"in r && (r.H = r.H % 12 + 12 * r.p);
+ var i = null != r.Z && uc !== jt, o = new (i ? jt : uc);
+ return "j"in r ? o.setFullYear(r.y, 0, r.j) : "w"in r && ("W"in r || "U"in r) ? (o.setFullYear(r.y, 0, 1), o.setFullYear(r.y, 0, "W"in r ? (r.w + 6) % 7 + 7 * r.W - (o.getDay() + 5) % 7 : r.w + 7 * r.U - (o.getDay() + 6) % 7)) : o.setFullYear(r.y, r.m, r.d), o.setHours(r.H + (0 | r.Z / 100), r.M + r.Z % 100, r.S, r.L), i ? o._ : o
+ }, t.toString = function () {
+ return n
+ }, t
+ }
+
+ function e(n, t, e, r) {
+ for (var u, i, o, a = 0, c = t.length, l = e.length; c > a;) {
+ if (r >= l)return -1;
+ if (u = t.charCodeAt(a++), 37 === u) {
+ if (o = t.charAt(a++), i = N[o in oc ? t.charAt(a++) : o], !i || (r = i(n, e, r)) < 0)return -1
+ } else if (u != e.charCodeAt(r++))return -1
+ }
+ return r
+ }
+
+ function r(n, t, e) {
+ b.lastIndex = 0;
+ var r = b.exec(t.slice(e));
+ return r ? (n.w = w.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function u(n, t, e) {
+ M.lastIndex = 0;
+ var r = M.exec(t.slice(e));
+ return r ? (n.w = _.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function i(n, t, e) {
+ E.lastIndex = 0;
+ var r = E.exec(t.slice(e));
+ return r ? (n.m = A.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function o(n, t, e) {
+ S.lastIndex = 0;
+ var r = S.exec(t.slice(e));
+ return r ? (n.m = k.get(r[0].toLowerCase()), e + r[0].length) : -1
+ }
+
+ function a(n, t, r) {
+ return e(n, C.c.toString(), t, r)
+ }
+
+ function c(n, t, r) {
+ return e(n, C.x.toString(), t, r)
+ }
+
+ function l(n, t, r) {
+ return e(n, C.X.toString(), t, r)
+ }
+
+ function s(n, t, e) {
+ var r = x.get(t.slice(e, e += 2).toLowerCase());
+ return null == r ? -1 : (n.p = r, e)
+ }
+
+ var f = n.dateTime, h = n.date, g = n.time, p = n.periods, v = n.days, d = n.shortDays, m = n.months, y = n.shortMonths;
+ t.utc = function (n) {
+ function e(n) {
+ try {
+ uc = jt;
+ var t = new uc;
+ return t._ = n, r(t)
+ } finally {
+ uc = Date
+ }
+ }
+
+ var r = t(n);
+ return e.parse = function (n) {
+ try {
+ uc = jt;
+ var t = r.parse(n);
+ return t && t._
+ } finally {
+ uc = Date
+ }
+ }, e.toString = r.toString, e
+ }, t.multi = t.utc.multi = ae;
+ var x = Bo.map(), M = It(v), _ = Zt(v), b = It(d), w = Zt(d), S = It(m), k = Zt(m), E = It(y), A = Zt(y);
+ p.forEach(function (n, t) {
+ x.set(n.toLowerCase(), t)
+ });
+ var C = {
+ a: function (n) {
+ return d[n.getDay()]
+ }, A: function (n) {
+ return v[n.getDay()]
+ }, b: function (n) {
+ return y[n.getMonth()]
+ }, B: function (n) {
+ return m[n.getMonth()]
+ }, c: t(f), d: function (n, t) {
+ return Yt(n.getDate(), t, 2)
+ }, e: function (n, t) {
+ return Yt(n.getDate(), t, 2)
+ }, H: function (n, t) {
+ return Yt(n.getHours(), t, 2)
+ }, I: function (n, t) {
+ return Yt(n.getHours() % 12 || 12, t, 2)
+ }, j: function (n, t) {
+ return Yt(1 + rc.dayOfYear(n), t, 3)
+ }, L: function (n, t) {
+ return Yt(n.getMilliseconds(), t, 3)
+ }, m: function (n, t) {
+ return Yt(n.getMonth() + 1, t, 2)
+ }, M: function (n, t) {
+ return Yt(n.getMinutes(), t, 2)
+ }, p: function (n) {
+ return p[+(n.getHours() >= 12)]
+ }, S: function (n, t) {
+ return Yt(n.getSeconds(), t, 2)
+ }, U: function (n, t) {
+ return Yt(rc.sundayOfYear(n), t, 2)
+ }, w: function (n) {
+ return n.getDay()
+ }, W: function (n, t) {
+ return Yt(rc.mondayOfYear(n), t, 2)
+ }, x: t(h), X: t(g), y: function (n, t) {
+ return Yt(n.getFullYear() % 100, t, 2)
+ }, Y: function (n, t) {
+ return Yt(n.getFullYear() % 1e4, t, 4)
+ }, Z: ie, "%": function () {
+ return "%"
+ }
+ }, N = {
+ a: r,
+ A: u,
+ b: i,
+ B: o,
+ c: a,
+ d: Qt,
+ e: Qt,
+ H: te,
+ I: te,
+ j: ne,
+ L: ue,
+ m: Kt,
+ M: ee,
+ p: s,
+ S: re,
+ U: Xt,
+ w: Vt,
+ W: $t,
+ x: c,
+ X: l,
+ y: Wt,
+ Y: Bt,
+ Z: Jt,
+ "%": oe
+ };
+ return t
+ }
+
+ function Yt(n, t, e) {
+ var r = 0 > n ? "-" : "", u = (r ? -n : n) + "", i = u.length;
+ return r + (e > i ? new Array(e - i + 1).join(t) + u : u)
+ }
+
+ function It(n) {
+ return new RegExp("^(?:" + n.map(Bo.requote).join("|") + ")", "i")
+ }
+
+ function Zt(n) {
+ for (var t = new a, e = -1, r = n.length; ++e < r;)t.set(n[e].toLowerCase(), e);
+ return t
+ }
+
+ function Vt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 1));
+ return r ? (n.w = +r[0], e + r[0].length) : -1
+ }
+
+ function Xt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.U = +r[0], e + r[0].length) : -1
+ }
+
+ function $t(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e));
+ return r ? (n.W = +r[0], e + r[0].length) : -1
+ }
+
+ function Bt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 4));
+ return r ? (n.y = +r[0], e + r[0].length) : -1
+ }
+
+ function Wt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.y = Gt(+r[0]), e + r[0].length) : -1
+ }
+
+ function Jt(n, t, e) {
+ return /^[+-]\d{4}$/.test(t = t.slice(e, e + 5)) ? (n.Z = -t, e + 5) : -1
+ }
+
+ function Gt(n) {
+ return n + (n > 68 ? 1900 : 2e3)
+ }
+
+ function Kt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.m = r[0] - 1, e + r[0].length) : -1
+ }
+
+ function Qt(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.d = +r[0], e + r[0].length) : -1
+ }
+
+ function ne(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.j = +r[0], e + r[0].length) : -1
+ }
+
+ function te(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.H = +r[0], e + r[0].length) : -1
+ }
+
+ function ee(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.M = +r[0], e + r[0].length) : -1
+ }
+
+ function re(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 2));
+ return r ? (n.S = +r[0], e + r[0].length) : -1
+ }
+
+ function ue(n, t, e) {
+ ac.lastIndex = 0;
+ var r = ac.exec(t.slice(e, e + 3));
+ return r ? (n.L = +r[0], e + r[0].length) : -1
+ }
+
+ function ie(n) {
+ var t = n.getTimezoneOffset(), e = t > 0 ? "-" : "+", r = 0 | ca(t) / 60, u = ca(t) % 60;
+ return e + Yt(r, "0", 2) + Yt(u, "0", 2)
+ }
+
+ function oe(n, t, e) {
+ cc.lastIndex = 0;
+ var r = cc.exec(t.slice(e, e + 1));
+ return r ? e + r[0].length : -1
+ }
+
+ function ae(n) {
+ for (var t = n.length, e = -1; ++e < t;)n[e][0] = this(n[e][0]);
+ return function (t) {
+ for (var e = 0, r = n[e]; !r[1](t);)r = n[++e];
+ return r[0](t)
+ }
+ }
+
+ function ce() {
+ }
+
+ function le(n, t, e) {
+ var r = e.s = n + t, u = r - n, i = r - u;
+ e.t = n - i + (t - u)
+ }
+
+ function se(n, t) {
+ n && hc.hasOwnProperty(n.type) && hc[n.type](n, t)
+ }
+
+ function fe(n, t, e) {
+ var r, u = -1, i = n.length - e;
+ for (t.lineStart(); ++u < i;)r = n[u], t.point(r[0], r[1], r[2]);
+ t.lineEnd()
+ }
+
+ function he(n, t) {
+ var e = -1, r = n.length;
+ for (t.polygonStart(); ++e < r;)fe(n[e], t, 1);
+ t.polygonEnd()
+ }
+
+ function ge() {
+ function n(n, t) {
+ n *= La, t = t * La / 2 + Ea / 4;
+ var e = n - r, o = e >= 0 ? 1 : -1, a = o * e, c = Math.cos(t), l = Math.sin(t), s = i * l, f = u * c + s * Math.cos(a), h = s * o * Math.sin(a);
+ pc.add(Math.atan2(h, f)), r = n, u = c, i = l
+ }
+
+ var t, e, r, u, i;
+ vc.point = function (o, a) {
+ vc.point = n, r = (t = o) * La, u = Math.cos(a = (e = a) * La / 2 + Ea / 4), i = Math.sin(a)
+ }, vc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function pe(n) {
+ var t = n[0], e = n[1], r = Math.cos(e);
+ return [r * Math.cos(t), r * Math.sin(t), Math.sin(e)]
+ }
+
+ function ve(n, t) {
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2]
+ }
+
+ function de(n, t) {
+ return [n[1] * t[2] - n[2] * t[1], n[2] * t[0] - n[0] * t[2], n[0] * t[1] - n[1] * t[0]]
+ }
+
+ function me(n, t) {
+ n[0] += t[0], n[1] += t[1], n[2] += t[2]
+ }
+
+ function ye(n, t) {
+ return [n[0] * t, n[1] * t, n[2] * t]
+ }
+
+ function xe(n) {
+ var t = Math.sqrt(n[0] * n[0] + n[1] * n[1] + n[2] * n[2]);
+ n[0] /= t, n[1] /= t, n[2] /= t
+ }
+
+ function Me(n) {
+ return [Math.atan2(n[1], n[0]), nt(n[2])]
+ }
+
+ function _e(n, t) {
+ return ca(n[0] - t[0]) < Na && ca(n[1] - t[1]) < Na
+ }
+
+ function be(n, t) {
+ n *= La;
+ var e = Math.cos(t *= La);
+ we(e * Math.cos(n), e * Math.sin(n), Math.sin(t))
+ }
+
+ function we(n, t, e) {
+ ++dc, yc += (n - yc) / dc, xc += (t - xc) / dc, Mc += (e - Mc) / dc
+ }
+
+ function Se() {
+ function n(n, u) {
+ n *= La;
+ var i = Math.cos(u *= La), o = i * Math.cos(n), a = i * Math.sin(n), c = Math.sin(u), l = Math.atan2(Math.sqrt((l = e * c - r * a) * l + (l = r * o - t * c) * l + (l = t * a - e * o) * l), t * o + e * a + r * c);
+ mc += l, _c += l * (t + (t = o)), bc += l * (e + (e = a)), wc += l * (r + (r = c)), we(t, e, r)
+ }
+
+ var t, e, r;
+ Ac.point = function (u, i) {
+ u *= La;
+ var o = Math.cos(i *= La);
+ t = o * Math.cos(u), e = o * Math.sin(u), r = Math.sin(i), Ac.point = n, we(t, e, r)
+ }
+ }
+
+ function ke() {
+ Ac.point = be
+ }
+
+ function Ee() {
+ function n(n, t) {
+ n *= La;
+ var e = Math.cos(t *= La), o = e * Math.cos(n), a = e * Math.sin(n), c = Math.sin(t), l = u * c - i * a, s = i * o - r * c, f = r * a - u * o, h = Math.sqrt(l * l + s * s + f * f), g = r * o + u * a + i * c, p = h && -Q(g) / h, v = Math.atan2(h, g);
+ Sc += p * l, kc += p * s, Ec += p * f, mc += v, _c += v * (r + (r = o)), bc += v * (u + (u = a)), wc += v * (i + (i = c)), we(r, u, i)
+ }
+
+ var t, e, r, u, i;
+ Ac.point = function (o, a) {
+ t = o, e = a, Ac.point = n, o *= La;
+ var c = Math.cos(a *= La);
+ r = c * Math.cos(o), u = c * Math.sin(o), i = Math.sin(a), we(r, u, i)
+ }, Ac.lineEnd = function () {
+ n(t, e), Ac.lineEnd = ke, Ac.point = be
+ }
+ }
+
+ function Ae() {
+ return !0
+ }
+
+ function Ce(n, t, e, r, u) {
+ var i = [], o = [];
+ if (n.forEach(function (n) {
+ if (!((t = n.length - 1) <= 0)) {
+ var t, e = n[0], r = n[t];
+ if (_e(e, r)) {
+ u.lineStart();
+ for (var a = 0; t > a; ++a)u.point((e = n[a])[0], e[1]);
+ return u.lineEnd(), void 0
+ }
+ var c = new ze(e, n, null, !0), l = new ze(e, null, c, !1);
+ c.o = l, i.push(c), o.push(l), c = new ze(r, n, null, !1), l = new ze(r, null, c, !0), c.o = l, i.push(c), o.push(l)
+ }
+ }), o.sort(t), Ne(i), Ne(o), i.length) {
+ for (var a = 0, c = e, l = o.length; l > a; ++a)o[a].e = c = !c;
+ for (var s, f, h = i[0]; ;) {
+ for (var g = h, p = !0; g.v;)if ((g = g.n) === h)return;
+ s = g.z, u.lineStart();
+ do {
+ if (g.v = g.o.v = !0, g.e) {
+ if (p)for (var a = 0, l = s.length; l > a; ++a)u.point((f = s[a])[0], f[1]); else r(g.x, g.n.x, 1, u);
+ g = g.n
+ } else {
+ if (p) {
+ s = g.p.z;
+ for (var a = s.length - 1; a >= 0; --a)u.point((f = s[a])[0], f[1])
+ } else r(g.x, g.p.x, -1, u);
+ g = g.p
+ }
+ g = g.o, s = g.z, p = !p
+ } while (!g.v);
+ u.lineEnd()
+ }
+ }
+ }
+
+ function Ne(n) {
+ if (t = n.length) {
+ for (var t, e, r = 0, u = n[0]; ++r < t;)u.n = e = n[r], e.p = u, u = e;
+ u.n = e = n[0], e.p = u
+ }
+ }
+
+ function ze(n, t, e, r) {
+ this.x = n, this.z = t, this.o = e, this.e = r, this.v = !1, this.n = this.p = null
+ }
+
+ function Le(n, t, e, r) {
+ return function (u, i) {
+ function o(t, e) {
+ var r = u(t, e);
+ n(t = r[0], e = r[1]) && i.point(t, e)
+ }
+
+ function a(n, t) {
+ var e = u(n, t);
+ d.point(e[0], e[1])
+ }
+
+ function c() {
+ y.point = a, d.lineStart()
+ }
+
+ function l() {
+ y.point = o, d.lineEnd()
+ }
+
+ function s(n, t) {
+ v.push([n, t]);
+ var e = u(n, t);
+ M.point(e[0], e[1])
+ }
+
+ function f() {
+ M.lineStart(), v = []
+ }
+
+ function h() {
+ s(v[0][0], v[0][1]), M.lineEnd();
+ var n, t = M.clean(), e = x.buffer(), r = e.length;
+ if (v.pop(), p.push(v), v = null, r)if (1 & t) {
+ n = e[0];
+ var u, r = n.length - 1, o = -1;
+ if (r > 0) {
+ for (_ || (i.polygonStart(), _ = !0), i.lineStart(); ++o < r;)i.point((u = n[o])[0], u[1]);
+ i.lineEnd()
+ }
+ } else r > 1 && 2 & t && e.push(e.pop().concat(e.shift())), g.push(e.filter(Te))
+ }
+
+ var g, p, v, d = t(i), m = u.invert(r[0], r[1]), y = {
+ point: o,
+ lineStart: c,
+ lineEnd: l,
+ polygonStart: function () {
+ y.point = s, y.lineStart = f, y.lineEnd = h, g = [], p = []
+ },
+ polygonEnd: function () {
+ y.point = o, y.lineStart = c, y.lineEnd = l, g = Bo.merge(g);
+ var n = je(m, p);
+ g.length ? (_ || (i.polygonStart(), _ = !0), Ce(g, Re, n, e, i)) : n && (_ || (i.polygonStart(), _ = !0), i.lineStart(), e(null, null, 1, i), i.lineEnd()), _ && (i.polygonEnd(), _ = !1), g = p = null
+ },
+ sphere: function () {
+ i.polygonStart(), i.lineStart(), e(null, null, 1, i), i.lineEnd(), i.polygonEnd()
+ }
+ }, x = qe(), M = t(x), _ = !1;
+ return y
+ }
+ }
+
+ function Te(n) {
+ return n.length > 1
+ }
+
+ function qe() {
+ var n, t = [];
+ return {
+ lineStart: function () {
+ t.push(n = [])
+ }, point: function (t, e) {
+ n.push([t, e])
+ }, lineEnd: y, buffer: function () {
+ var e = t;
+ return t = [], n = null, e
+ }, rejoin: function () {
+ t.length > 1 && t.push(t.pop().concat(t.shift()))
+ }
+ }
+ }
+
+ function Re(n, t) {
+ return ((n = n.x)[0] < 0 ? n[1] - Ca - Na : Ca - n[1]) - ((t = t.x)[0] < 0 ? t[1] - Ca - Na : Ca - t[1])
+ }
+
+ function De(n) {
+ var t, e = 0 / 0, r = 0 / 0, u = 0 / 0;
+ return {
+ lineStart: function () {
+ n.lineStart(), t = 1
+ }, point: function (i, o) {
+ var a = i > 0 ? Ea : -Ea, c = ca(i - e);
+ ca(c - Ea) < Na ? (n.point(e, r = (r + o) / 2 > 0 ? Ca : -Ca), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), n.point(i, r), t = 0) : u !== a && c >= Ea && (ca(e - u) < Na && (e -= u * Na), ca(i - a) < Na && (i -= a * Na), r = Pe(e, r, i, o), n.point(u, r), n.lineEnd(), n.lineStart(), n.point(a, r), t = 0), n.point(e = i, r = o), u = a
+ }, lineEnd: function () {
+ n.lineEnd(), e = r = 0 / 0
+ }, clean: function () {
+ return 2 - t
+ }
+ }
+ }
+
+ function Pe(n, t, e, r) {
+ var u, i, o = Math.sin(n - e);
+ return ca(o) > Na ? Math.atan((Math.sin(t) * (i = Math.cos(r)) * Math.sin(e) - Math.sin(r) * (u = Math.cos(t)) * Math.sin(n)) / (u * i * o)) : (t + r) / 2
+ }
+
+ function Ue(n, t, e, r) {
+ var u;
+ if (null == n)u = e * Ca, r.point(-Ea, u), r.point(0, u), r.point(Ea, u), r.point(Ea, 0), r.point(Ea, -u), r.point(0, -u), r.point(-Ea, -u), r.point(-Ea, 0), r.point(-Ea, u); else if (ca(n[0] - t[0]) > Na) {
+ var i = n[0] < t[0] ? Ea : -Ea;
+ u = e * i / 2, r.point(-i, u), r.point(0, u), r.point(i, u)
+ } else r.point(t[0], t[1])
+ }
+
+ function je(n, t) {
+ var e = n[0], r = n[1], u = [Math.sin(e), -Math.cos(e), 0], i = 0, o = 0;
+ pc.reset();
+ for (var a = 0, c = t.length; c > a; ++a) {
+ var l = t[a], s = l.length;
+ if (s)for (var f = l[0], h = f[0], g = f[1] / 2 + Ea / 4, p = Math.sin(g), v = Math.cos(g), d = 1; ;) {
+ d === s && (d = 0), n = l[d];
+ var m = n[0], y = n[1] / 2 + Ea / 4, x = Math.sin(y), M = Math.cos(y), _ = m - h, b = _ >= 0 ? 1 : -1, w = b * _, S = w > Ea, k = p * x;
+ if (pc.add(Math.atan2(k * b * Math.sin(w), v * M + k * Math.cos(w))), i += S ? _ + b * Aa : _, S ^ h >= e ^ m >= e) {
+ var E = de(pe(f), pe(n));
+ xe(E);
+ var A = de(u, E);
+ xe(A);
+ var C = (S ^ _ >= 0 ? -1 : 1) * nt(A[2]);
+ (r > C || r === C && (E[0] || E[1])) && (o += S ^ _ >= 0 ? 1 : -1)
+ }
+ if (!d++)break;
+ h = m, p = x, v = M, f = n
+ }
+ }
+ return (-Na > i || Na > i && 0 > pc) ^ 1 & o
+ }
+
+ function Fe(n) {
+ function t(n, t) {
+ return Math.cos(n) * Math.cos(t) > i
+ }
+
+ function e(n) {
+ var e, i, c, l, s;
+ return {
+ lineStart: function () {
+ l = c = !1, s = 1
+ }, point: function (f, h) {
+ var g, p = [f, h], v = t(f, h), d = o ? v ? 0 : u(f, h) : v ? u(f + (0 > f ? Ea : -Ea), h) : 0;
+ if (!e && (l = c = v) && n.lineStart(), v !== c && (g = r(e, p), (_e(e, g) || _e(p, g)) && (p[0] += Na, p[1] += Na, v = t(p[0], p[1]))), v !== c)s = 0, v ? (n.lineStart(), g = r(p, e), n.point(g[0], g[1])) : (g = r(e, p), n.point(g[0], g[1]), n.lineEnd()), e = g; else if (a && e && o ^ v) {
+ var m;
+ d & i || !(m = r(p, e, !0)) || (s = 0, o ? (n.lineStart(), n.point(m[0][0], m[0][1]), n.point(m[1][0], m[1][1]), n.lineEnd()) : (n.point(m[1][0], m[1][1]), n.lineEnd(), n.lineStart(), n.point(m[0][0], m[0][1])))
+ }
+ !v || e && _e(e, p) || n.point(p[0], p[1]), e = p, c = v, i = d
+ }, lineEnd: function () {
+ c && n.lineEnd(), e = null
+ }, clean: function () {
+ return s | (l && c) << 1
+ }
+ }
+ }
+
+ function r(n, t, e) {
+ var r = pe(n), u = pe(t), o = [1, 0, 0], a = de(r, u), c = ve(a, a), l = a[0], s = c - l * l;
+ if (!s)return !e && n;
+ var f = i * c / s, h = -i * l / s, g = de(o, a), p = ye(o, f), v = ye(a, h);
+ me(p, v);
+ var d = g, m = ve(p, d), y = ve(d, d), x = m * m - y * (ve(p, p) - 1);
+ if (!(0 > x)) {
+ var M = Math.sqrt(x), _ = ye(d, (-m - M) / y);
+ if (me(_, p), _ = Me(_), !e)return _;
+ var b, w = n[0], S = t[0], k = n[1], E = t[1];
+ w > S && (b = w, w = S, S = b);
+ var A = S - w, C = ca(A - Ea) < Na, N = C || Na > A;
+ if (!C && k > E && (b = k, k = E, E = b), N ? C ? k + E > 0 ^ _[1] < (ca(_[0] - w) < Na ? k : E) : k <= _[1] && _[1] <= E : A > Ea ^ (w <= _[0] && _[0] <= S)) {
+ var z = ye(d, (-m + M) / y);
+ return me(z, p), [_, Me(z)]
+ }
+ }
+ }
+
+ function u(t, e) {
+ var r = o ? n : Ea - n, u = 0;
+ return -r > t ? u |= 1 : t > r && (u |= 2), -r > e ? u |= 4 : e > r && (u |= 8), u
+ }
+
+ var i = Math.cos(n), o = i > 0, a = ca(i) > Na, c = gr(n, 6 * La);
+ return Le(t, e, c, o ? [0, -n] : [-Ea, n - Ea])
+ }
+
+ function He(n, t, e, r) {
+ return function (u) {
+ var i, o = u.a, a = u.b, c = o.x, l = o.y, s = a.x, f = a.y, h = 0, g = 1, p = s - c, v = f - l;
+ if (i = n - c, p || !(i > 0)) {
+ if (i /= p, 0 > p) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (p > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = e - c, p || !(0 > i)) {
+ if (i /= p, 0 > p) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (p > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ if (i = t - l, v || !(i > 0)) {
+ if (i /= v, 0 > v) {
+ if (h > i)return;
+ g > i && (g = i)
+ } else if (v > 0) {
+ if (i > g)return;
+ i > h && (h = i)
+ }
+ if (i = r - l, v || !(0 > i)) {
+ if (i /= v, 0 > v) {
+ if (i > g)return;
+ i > h && (h = i)
+ } else if (v > 0) {
+ if (h > i)return;
+ g > i && (g = i)
+ }
+ return h > 0 && (u.a = {x: c + h * p, y: l + h * v}), 1 > g && (u.b = {
+ x: c + g * p,
+ y: l + g * v
+ }), u
+ }
+ }
+ }
+ }
+ }
+ }
+
+ function Oe(n, t, e, r) {
+ function u(r, u) {
+ return ca(r[0] - n) < Na ? u > 0 ? 0 : 3 : ca(r[0] - e) < Na ? u > 0 ? 2 : 1 : ca(r[1] - t) < Na ? u > 0 ? 1 : 0 : u > 0 ? 3 : 2
+ }
+
+ function i(n, t) {
+ return o(n.x, t.x)
+ }
+
+ function o(n, t) {
+ var e = u(n, 1), r = u(t, 1);
+ return e !== r ? e - r : 0 === e ? t[1] - n[1] : 1 === e ? n[0] - t[0] : 2 === e ? n[1] - t[1] : t[0] - n[0]
+ }
+
+ return function (a) {
+ function c(n) {
+ for (var t = 0, e = d.length, r = n[1], u = 0; e > u; ++u)for (var i, o = 1, a = d[u], c = a.length, l = a[0]; c > o; ++o)i = a[o], l[1] <= r ? i[1] > r && K(l, i, n) > 0 && ++t : i[1] <= r && K(l, i, n) < 0 && --t, l = i;
+ return 0 !== t
+ }
+
+ function l(i, a, c, l) {
+ var s = 0, f = 0;
+ if (null == i || (s = u(i, c)) !== (f = u(a, c)) || o(i, a) < 0 ^ c > 0) {
+ do l.point(0 === s || 3 === s ? n : e, s > 1 ? r : t); while ((s = (s + c + 4) % 4) !== f)
+ } else l.point(a[0], a[1])
+ }
+
+ function s(u, i) {
+ return u >= n && e >= u && i >= t && r >= i
+ }
+
+ function f(n, t) {
+ s(n, t) && a.point(n, t)
+ }
+
+ function h() {
+ N.point = p, d && d.push(m = []), S = !0, w = !1, _ = b = 0 / 0
+ }
+
+ function g() {
+ v && (p(y, x), M && w && A.rejoin(), v.push(A.buffer())), N.point = f, w && a.lineEnd()
+ }
+
+ function p(n, t) {
+ n = Math.max(-Nc, Math.min(Nc, n)), t = Math.max(-Nc, Math.min(Nc, t));
+ var e = s(n, t);
+ if (d && m.push([n, t]), S)y = n, x = t, M = e, S = !1, e && (a.lineStart(), a.point(n, t)); else if (e && w)a.point(n, t); else {
+ var r = {a: {x: _, y: b}, b: {x: n, y: t}};
+ C(r) ? (w || (a.lineStart(), a.point(r.a.x, r.a.y)), a.point(r.b.x, r.b.y), e || a.lineEnd(), k = !1) : e && (a.lineStart(), a.point(n, t), k = !1)
+ }
+ _ = n, b = t, w = e
+ }
+
+ var v, d, m, y, x, M, _, b, w, S, k, E = a, A = qe(), C = He(n, t, e, r), N = {
+ point: f,
+ lineStart: h,
+ lineEnd: g,
+ polygonStart: function () {
+ a = A, v = [], d = [], k = !0
+ },
+ polygonEnd: function () {
+ a = E, v = Bo.merge(v);
+ var t = c([n, r]), e = k && t, u = v.length;
+ (e || u) && (a.polygonStart(), e && (a.lineStart(), l(null, null, 1, a), a.lineEnd()), u && Ce(v, i, t, l, a), a.polygonEnd()), v = d = m = null
+ }
+ };
+ return N
+ }
+ }
+
+ function Ye(n, t) {
+ function e(e, r) {
+ return e = n(e, r), t(e[0], e[1])
+ }
+
+ return n.invert && t.invert && (e.invert = function (e, r) {
+ return e = t.invert(e, r), e && n.invert(e[0], e[1])
+ }), e
+ }
+
+ function Ie(n) {
+ var t = 0, e = Ea / 3, r = ir(n), u = r(t, e);
+ return u.parallels = function (n) {
+ return arguments.length ? r(t = n[0] * Ea / 180, e = n[1] * Ea / 180) : [180 * (t / Ea), 180 * (e / Ea)]
+ }, u
+ }
+
+ function Ze(n, t) {
+ function e(n, t) {
+ var e = Math.sqrt(i - 2 * u * Math.sin(t)) / u;
+ return [e * Math.sin(n *= u), o - e * Math.cos(n)]
+ }
+
+ var r = Math.sin(n), u = (r + Math.sin(t)) / 2, i = 1 + r * (2 * u - r), o = Math.sqrt(i) / u;
+ return e.invert = function (n, t) {
+ var e = o - t;
+ return [Math.atan2(n, e) / u, nt((i - (n * n + e * e) * u * u) / (2 * u))]
+ }, e
+ }
+
+ function Ve() {
+ function n(n, t) {
+ Lc += u * n - r * t, r = n, u = t
+ }
+
+ var t, e, r, u;
+ Pc.point = function (i, o) {
+ Pc.point = n, t = r = i, e = u = o
+ }, Pc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function Xe(n, t) {
+ Tc > n && (Tc = n), n > Rc && (Rc = n), qc > t && (qc = t), t > Dc && (Dc = t)
+ }
+
+ function $e() {
+ function n(n, t) {
+ o.push("M", n, ",", t, i)
+ }
+
+ function t(n, t) {
+ o.push("M", n, ",", t), a.point = e
+ }
+
+ function e(n, t) {
+ o.push("L", n, ",", t)
+ }
+
+ function r() {
+ a.point = n
+ }
+
+ function u() {
+ o.push("Z")
+ }
+
+ var i = Be(4.5), o = [], a = {
+ point: n, lineStart: function () {
+ a.point = t
+ }, lineEnd: r, polygonStart: function () {
+ a.lineEnd = u
+ }, polygonEnd: function () {
+ a.lineEnd = r, a.point = n
+ }, pointRadius: function (n) {
+ return i = Be(n), a
+ }, result: function () {
+ if (o.length) {
+ var n = o.join("");
+ return o = [], n
+ }
+ }
+ };
+ return a
+ }
+
+ function Be(n) {
+ return "m0," + n + "a" + n + "," + n + " 0 1,1 0," + -2 * n + "a" + n + "," + n + " 0 1,1 0," + 2 * n + "z"
+ }
+
+ function We(n, t) {
+ yc += n, xc += t, ++Mc
+ }
+
+ function Je() {
+ function n(n, r) {
+ var u = n - t, i = r - e, o = Math.sqrt(u * u + i * i);
+ _c += o * (t + n) / 2, bc += o * (e + r) / 2, wc += o, We(t = n, e = r)
+ }
+
+ var t, e;
+ jc.point = function (r, u) {
+ jc.point = n, We(t = r, e = u)
+ }
+ }
+
+ function Ge() {
+ jc.point = We
+ }
+
+ function Ke() {
+ function n(n, t) {
+ var e = n - r, i = t - u, o = Math.sqrt(e * e + i * i);
+ _c += o * (r + n) / 2, bc += o * (u + t) / 2, wc += o, o = u * n - r * t, Sc += o * (r + n), kc += o * (u + t), Ec += 3 * o, We(r = n, u = t)
+ }
+
+ var t, e, r, u;
+ jc.point = function (i, o) {
+ jc.point = n, We(t = r = i, e = u = o)
+ }, jc.lineEnd = function () {
+ n(t, e)
+ }
+ }
+
+ function Qe(n) {
+ function t(t, e) {
+ n.moveTo(t, e), n.arc(t, e, o, 0, Aa)
+ }
+
+ function e(t, e) {
+ n.moveTo(t, e), a.point = r
+ }
+
+ function r(t, e) {
+ n.lineTo(t, e)
+ }
+
+ function u() {
+ a.point = t
+ }
+
+ function i() {
+ n.closePath()
+ }
+
+ var o = 4.5, a = {
+ point: t, lineStart: function () {
+ a.point = e
+ }, lineEnd: u, polygonStart: function () {
+ a.lineEnd = i
+ }, polygonEnd: function () {
+ a.lineEnd = u, a.point = t
+ }, pointRadius: function (n) {
+ return o = n, a
+ }, result: y
+ };
+ return a
+ }
+
+ function nr(n) {
+ function t(n) {
+ return (a ? r : e)(n)
+ }
+
+ function e(t) {
+ return rr(t, function (e, r) {
+ e = n(e, r), t.point(e[0], e[1])
+ })
+ }
+
+ function r(t) {
+ function e(e, r) {
+ e = n(e, r), t.point(e[0], e[1])
+ }
+
+ function r() {
+ x = 0 / 0, S.point = i, t.lineStart()
+ }
+
+ function i(e, r) {
+ var i = pe([e, r]), o = n(e, r);
+ u(x, M, y, _, b, w, x = o[0], M = o[1], y = e, _ = i[0], b = i[1], w = i[2], a, t), t.point(x, M)
+ }
+
+ function o() {
+ S.point = e, t.lineEnd()
+ }
+
+ function c() {
+ r(), S.point = l, S.lineEnd = s
+ }
+
+ function l(n, t) {
+ i(f = n, h = t), g = x, p = M, v = _, d = b, m = w, S.point = i
+ }
+
+ function s() {
+ u(x, M, y, _, b, w, g, p, f, v, d, m, a, t), S.lineEnd = o, o()
+ }
+
+ var f, h, g, p, v, d, m, y, x, M, _, b, w, S = {
+ point: e,
+ lineStart: r,
+ lineEnd: o,
+ polygonStart: function () {
+ t.polygonStart(), S.lineStart = c
+ },
+ polygonEnd: function () {
+ t.polygonEnd(), S.lineStart = r
+ }
+ };
+ return S
+ }
+
+ function u(t, e, r, a, c, l, s, f, h, g, p, v, d, m) {
+ var y = s - t, x = f - e, M = y * y + x * x;
+ if (M > 4 * i && d--) {
+ var _ = a + g, b = c + p, w = l + v, S = Math.sqrt(_ * _ + b * b + w * w), k = Math.asin(w /= S), E = ca(ca(w) - 1) < Na || ca(r - h) < Na ? (r + h) / 2 : Math.atan2(b, _), A = n(E, k), C = A[0], N = A[1], z = C - t, L = N - e, T = x * z - y * L;
+ (T * T / M > i || ca((y * z + x * L) / M - .5) > .3 || o > a * g + c * p + l * v) && (u(t, e, r, a, c, l, C, N, E, _ /= S, b /= S, w, d, m), m.point(C, N), u(C, N, E, _, b, w, s, f, h, g, p, v, d, m))
+ }
+ }
+
+ var i = .5, o = Math.cos(30 * La), a = 16;
+ return t.precision = function (n) {
+ return arguments.length ? (a = (i = n * n) > 0 && 16, t) : Math.sqrt(i)
+ }, t
+ }
+
+ function tr(n) {
+ var t = nr(function (t, e) {
+ return n([t * Ta, e * Ta])
+ });
+ return function (n) {
+ return or(t(n))
+ }
+ }
+
+ function er(n) {
+ this.stream = n
+ }
+
+ function rr(n, t) {
+ return {
+ point: t, sphere: function () {
+ n.sphere()
+ }, lineStart: function () {
+ n.lineStart()
+ }, lineEnd: function () {
+ n.lineEnd()
+ }, polygonStart: function () {
+ n.polygonStart()
+ }, polygonEnd: function () {
+ n.polygonEnd()
+ }
+ }
+ }
+
+ function ur(n) {
+ return ir(function () {
+ return n
+ })()
+ }
+
+ function ir(n) {
+ function t(n) {
+ return n = a(n[0] * La, n[1] * La), [n[0] * h + c, l - n[1] * h]
+ }
+
+ function e(n) {
+ return n = a.invert((n[0] - c) / h, (l - n[1]) / h), n && [n[0] * Ta, n[1] * Ta]
+ }
+
+ function r() {
+ a = Ye(o = lr(m, y, x), i);
+ var n = i(v, d);
+ return c = g - n[0] * h, l = p + n[1] * h, u()
+ }
+
+ function u() {
+ return s && (s.valid = !1, s = null), t
+ }
+
+ var i, o, a, c, l, s, f = nr(function (n, t) {
+ return n = i(n, t), [n[0] * h + c, l - n[1] * h]
+ }), h = 150, g = 480, p = 250, v = 0, d = 0, m = 0, y = 0, x = 0, M = Cc, _ = Et, b = null, w = null;
+ return t.stream = function (n) {
+ return s && (s.valid = !1), s = or(M(o, f(_(n)))), s.valid = !0, s
+ }, t.clipAngle = function (n) {
+ return arguments.length ? (M = null == n ? (b = n, Cc) : Fe((b = +n) * La), u()) : b
+ }, t.clipExtent = function (n) {
+ return arguments.length ? (w = n, _ = n ? Oe(n[0][0], n[0][1], n[1][0], n[1][1]) : Et, u()) : w
+ }, t.scale = function (n) {
+ return arguments.length ? (h = +n, r()) : h
+ }, t.translate = function (n) {
+ return arguments.length ? (g = +n[0], p = +n[1], r()) : [g, p]
+ }, t.center = function (n) {
+ return arguments.length ? (v = n[0] % 360 * La, d = n[1] % 360 * La, r()) : [v * Ta, d * Ta]
+ }, t.rotate = function (n) {
+ return arguments.length ? (m = n[0] % 360 * La, y = n[1] % 360 * La, x = n.length > 2 ? n[2] % 360 * La : 0, r()) : [m * Ta, y * Ta, x * Ta]
+ }, Bo.rebind(t, f, "precision"), function () {
+ return i = n.apply(this, arguments), t.invert = i.invert && e, r()
+ }
+ }
+
+ function or(n) {
+ return rr(n, function (t, e) {
+ n.point(t * La, e * La)
+ })
+ }
+
+ function ar(n, t) {
+ return [n, t]
+ }
+
+ function cr(n, t) {
+ return [n > Ea ? n - Aa : -Ea > n ? n + Aa : n, t]
+ }
+
+ function lr(n, t, e) {
+ return n ? t || e ? Ye(fr(n), hr(t, e)) : fr(n) : t || e ? hr(t, e) : cr
+ }
+
+ function sr(n) {
+ return function (t, e) {
+ return t += n, [t > Ea ? t - Aa : -Ea > t ? t + Aa : t, e]
+ }
+ }
+
+ function fr(n) {
+ var t = sr(n);
+ return t.invert = sr(-n), t
+ }
+
+ function hr(n, t) {
+ function e(n, t) {
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * r + a * u;
+ return [Math.atan2(c * i - s * o, a * r - l * u), nt(s * i + c * o)]
+ }
+
+ var r = Math.cos(n), u = Math.sin(n), i = Math.cos(t), o = Math.sin(t);
+ return e.invert = function (n, t) {
+ var e = Math.cos(t), a = Math.cos(n) * e, c = Math.sin(n) * e, l = Math.sin(t), s = l * i - c * o;
+ return [Math.atan2(c * i + l * o, a * r + s * u), nt(s * r - a * u)]
+ }, e
+ }
+
+ function gr(n, t) {
+ var e = Math.cos(n), r = Math.sin(n);
+ return function (u, i, o, a) {
+ var c = o * t;
+ null != u ? (u = pr(e, u), i = pr(e, i), (o > 0 ? i > u : u > i) && (u += o * Aa)) : (u = n + o * Aa, i = n - .5 * c);
+ for (var l, s = u; o > 0 ? s > i : i > s; s -= c)a.point((l = Me([e, -r * Math.cos(s), -r * Math.sin(s)]))[0], l[1])
+ }
+ }
+
+ function pr(n, t) {
+ var e = pe(t);
+ e[0] -= n, xe(e);
+ var r = Q(-e[1]);
+ return ((-e[2] < 0 ? -r : r) + 2 * Math.PI - Na) % (2 * Math.PI)
+ }
+
+ function vr(n, t, e) {
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function (n) {
+ return r.map(function (t) {
+ return [n, t]
+ })
+ }
+ }
+
+ function dr(n, t, e) {
+ var r = Bo.range(n, t - Na, e).concat(t);
+ return function (n) {
+ return r.map(function (t) {
+ return [t, n]
+ })
+ }
+ }
+
+ function mr(n) {
+ return n.source
+ }
+
+ function yr(n) {
+ return n.target
+ }
+
+ function xr(n, t, e, r) {
+ var u = Math.cos(t), i = Math.sin(t), o = Math.cos(r), a = Math.sin(r), c = u * Math.cos(n), l = u * Math.sin(n), s = o * Math.cos(e), f = o * Math.sin(e), h = 2 * Math.asin(Math.sqrt(ut(r - t) + u * o * ut(e - n))), g = 1 / Math.sin(h), p = h ? function (n) {
+ var t = Math.sin(n *= h) * g, e = Math.sin(h - n) * g, r = e * c + t * s, u = e * l + t * f, o = e * i + t * a;
+ return [Math.atan2(u, r) * Ta, Math.atan2(o, Math.sqrt(r * r + u * u)) * Ta]
+ } : function () {
+ return [n * Ta, t * Ta]
+ };
+ return p.distance = h, p
+ }
+
+ function Mr() {
+ function n(n, u) {
+ var i = Math.sin(u *= La), o = Math.cos(u), a = ca((n *= La) - t), c = Math.cos(a);
+ Fc += Math.atan2(Math.sqrt((a = o * Math.sin(a)) * a + (a = r * i - e * o * c) * a), e * i + r * o * c), t = n, e = i, r = o
+ }
+
+ var t, e, r;
+ Hc.point = function (u, i) {
+ t = u * La, e = Math.sin(i *= La), r = Math.cos(i), Hc.point = n
+ }, Hc.lineEnd = function () {
+ Hc.point = Hc.lineEnd = y
+ }
+ }
+
+ function _r(n, t) {
+ function e(t, e) {
+ var r = Math.cos(t), u = Math.cos(e), i = n(r * u);
+ return [i * u * Math.sin(t), i * Math.sin(e)]
+ }
+
+ return e.invert = function (n, e) {
+ var r = Math.sqrt(n * n + e * e), u = t(r), i = Math.sin(u), o = Math.cos(u);
+ return [Math.atan2(n * i, r * o), Math.asin(r && e * i / r)]
+ }, e
+ }
+
+ function br(n, t) {
+ function e(n, t) {
+ o > 0 ? -Ca + Na > t && (t = -Ca + Na) : t > Ca - Na && (t = Ca - Na);
+ var e = o / Math.pow(u(t), i);
+ return [e * Math.sin(i * n), o - e * Math.cos(i * n)]
+ }
+
+ var r = Math.cos(n), u = function (n) {
+ return Math.tan(Ea / 4 + n / 2)
+ }, i = n === t ? Math.sin(n) : Math.log(r / Math.cos(t)) / Math.log(u(t) / u(n)), o = r * Math.pow(u(n), i) / i;
+ return i ? (e.invert = function (n, t) {
+ var e = o - t, r = G(i) * Math.sqrt(n * n + e * e);
+ return [Math.atan2(n, e) / i, 2 * Math.atan(Math.pow(o / r, 1 / i)) - Ca]
+ }, e) : Sr
+ }
+
+ function wr(n, t) {
+ function e(n, t) {
+ var e = i - t;
+ return [e * Math.sin(u * n), i - e * Math.cos(u * n)]
+ }
+
+ var r = Math.cos(n), u = n === t ? Math.sin(n) : (r - Math.cos(t)) / (t - n), i = r / u + n;
+ return ca(u) < Na ? ar : (e.invert = function (n, t) {
+ var e = i - t;
+ return [Math.atan2(n, e) / u, i - G(u) * Math.sqrt(n * n + e * e)]
+ }, e)
+ }
+
+ function Sr(n, t) {
+ return [n, Math.log(Math.tan(Ea / 4 + t / 2))]
+ }
+
+ function kr(n) {
+ var t, e = ur(n), r = e.scale, u = e.translate, i = e.clipExtent;
+ return e.scale = function () {
+ var n = r.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.translate = function () {
+ var n = u.apply(e, arguments);
+ return n === e ? t ? e.clipExtent(null) : e : n
+ }, e.clipExtent = function (n) {
+ var o = i.apply(e, arguments);
+ if (o === e) {
+ if (t = null == n) {
+ var a = Ea * r(), c = u();
+ i([[c[0] - a, c[1] - a], [c[0] + a, c[1] + a]])
+ }
+ } else t && (o = null);
+ return o
+ }, e.clipExtent(null)
+ }
+
+ function Er(n, t) {
+ return [Math.log(Math.tan(Ea / 4 + t / 2)), -n]
+ }
+
+ function Ar(n) {
+ return n[0]
+ }
+
+ function Cr(n) {
+ return n[1]
+ }
+
+ function Nr(n) {
+ for (var t = n.length, e = [0, 1], r = 2, u = 2; t > u; u++) {
+ for (; r > 1 && K(n[e[r - 2]], n[e[r - 1]], n[u]) <= 0;)--r;
+ e[r++] = u
+ }
+ return e.slice(0, r)
+ }
+
+ function zr(n, t) {
+ return n[0] - t[0] || n[1] - t[1]
+ }
+
+ function Lr(n, t, e) {
+ return (e[0] - t[0]) * (n[1] - t[1]) < (e[1] - t[1]) * (n[0] - t[0])
+ }
+
+ function Tr(n, t, e, r) {
+ var u = n[0], i = e[0], o = t[0] - u, a = r[0] - i, c = n[1], l = e[1], s = t[1] - c, f = r[1] - l, h = (a * (c - l) - f * (u - i)) / (f * o - a * s);
+ return [u + h * o, c + h * s]
+ }
+
+ function qr(n) {
+ var t = n[0], e = n[n.length - 1];
+ return !(t[0] - e[0] || t[1] - e[1])
+ }
+
+ function Rr() {
+ tu(this), this.edge = this.site = this.circle = null
+ }
+
+ function Dr(n) {
+ var t = Kc.pop() || new Rr;
+ return t.site = n, t
+ }
+
+ function Pr(n) {
+ Xr(n), Wc.remove(n), Kc.push(n), tu(n)
+ }
+
+ function Ur(n) {
+ var t = n.circle, e = t.x, r = t.cy, u = {x: e, y: r}, i = n.P, o = n.N, a = [n];
+ Pr(n);
+ for (var c = i; c.circle && ca(e - c.circle.x) < Na && ca(r - c.circle.cy) < Na;)i = c.P, a.unshift(c), Pr(c), c = i;
+ a.unshift(c), Xr(c);
+ for (var l = o; l.circle && ca(e - l.circle.x) < Na && ca(r - l.circle.cy) < Na;)o = l.N, a.push(l), Pr(l), l = o;
+ a.push(l), Xr(l);
+ var s, f = a.length;
+ for (s = 1; f > s; ++s)l = a[s], c = a[s - 1], Kr(l.edge, c.site, l.site, u);
+ c = a[0], l = a[f - 1], l.edge = Jr(c.site, l.site, null, u), Vr(c), Vr(l)
+ }
+
+ function jr(n) {
+ for (var t, e, r, u, i = n.x, o = n.y, a = Wc._; a;)if (r = Fr(a, o) - i, r > Na)a = a.L; else {
+ if (u = i - Hr(a, o), !(u > Na)) {
+ r > -Na ? (t = a.P, e = a) : u > -Na ? (t = a, e = a.N) : t = e = a;
+ break
+ }
+ if (!a.R) {
+ t = a;
+ break
+ }
+ a = a.R
+ }
+ var c = Dr(n);
+ if (Wc.insert(t, c), t || e) {
+ if (t === e)return Xr(t), e = Dr(t.site), Wc.insert(c, e), c.edge = e.edge = Jr(t.site, c.site), Vr(t), Vr(e), void 0;
+ if (!e)return c.edge = Jr(t.site, c.site), void 0;
+ Xr(t), Xr(e);
+ var l = t.site, s = l.x, f = l.y, h = n.x - s, g = n.y - f, p = e.site, v = p.x - s, d = p.y - f, m = 2 * (h * d - g * v), y = h * h + g * g, x = v * v + d * d, M = {
+ x: (d * y - g * x) / m + s,
+ y: (h * x - v * y) / m + f
+ };
+ Kr(e.edge, l, p, M), c.edge = Jr(l, n, null, M), e.edge = Jr(n, p, null, M), Vr(t), Vr(e)
+ }
+ }
+
+ function Fr(n, t) {
+ var e = n.site, r = e.x, u = e.y, i = u - t;
+ if (!i)return r;
+ var o = n.P;
+ if (!o)return -1 / 0;
+ e = o.site;
+ var a = e.x, c = e.y, l = c - t;
+ if (!l)return a;
+ var s = a - r, f = 1 / i - 1 / l, h = s / l;
+ return f ? (-h + Math.sqrt(h * h - 2 * f * (s * s / (-2 * l) - c + l / 2 + u - i / 2))) / f + r : (r + a) / 2
+ }
+
+ function Hr(n, t) {
+ var e = n.N;
+ if (e)return Fr(e, t);
+ var r = n.site;
+ return r.y === t ? r.x : 1 / 0
+ }
+
+ function Or(n) {
+ this.site = n, this.edges = []
+ }
+
+ function Yr(n) {
+ for (var t, e, r, u, i, o, a, c, l, s, f = n[0][0], h = n[1][0], g = n[0][1], p = n[1][1], v = Bc, d = v.length; d--;)if (i = v[d], i && i.prepare())for (a = i.edges, c = a.length, o = 0; c > o;)s = a[o].end(), r = s.x, u = s.y, l = a[++o % c].start(), t = l.x, e = l.y, (ca(r - t) > Na || ca(u - e) > Na) && (a.splice(o, 0, new Qr(Gr(i.site, s, ca(r - f) < Na && p - u > Na ? {
+ x: f,
+ y: ca(t - f) < Na ? e : p
+ } : ca(u - p) < Na && h - r > Na ? {x: ca(e - p) < Na ? t : h, y: p} : ca(r - h) < Na && u - g > Na ? {
+ x: h,
+ y: ca(t - h) < Na ? e : g
+ } : ca(u - g) < Na && r - f > Na ? {x: ca(e - g) < Na ? t : f, y: g} : null), i.site, null)), ++c)
+ }
+
+ function Ir(n, t) {
+ return t.angle - n.angle
+ }
+
+ function Zr() {
+ tu(this), this.x = this.y = this.arc = this.site = this.cy = null
+ }
+
+ function Vr(n) {
+ var t = n.P, e = n.N;
+ if (t && e) {
+ var r = t.site, u = n.site, i = e.site;
+ if (r !== i) {
+ var o = u.x, a = u.y, c = r.x - o, l = r.y - a, s = i.x - o, f = i.y - a, h = 2 * (c * f - l * s);
+ if (!(h >= -za)) {
+ var g = c * c + l * l, p = s * s + f * f, v = (f * g - l * p) / h, d = (c * p - s * g) / h, f = d + a, m = Qc.pop() || new Zr;
+ m.arc = n, m.site = u, m.x = v + o, m.y = f + Math.sqrt(v * v + d * d), m.cy = f, n.circle = m;
+ for (var y = null, x = Gc._; x;)if (m.y < x.y || m.y === x.y && m.x <= x.x) {
+ if (!x.L) {
+ y = x.P;
+ break
+ }
+ x = x.L
+ } else {
+ if (!x.R) {
+ y = x;
+ break
+ }
+ x = x.R
+ }
+ Gc.insert(y, m), y || (Jc = m)
+ }
+ }
+ }
+ }
+
+ function Xr(n) {
+ var t = n.circle;
+ t && (t.P || (Jc = t.N), Gc.remove(t), Qc.push(t), tu(t), n.circle = null)
+ }
+
+ function $r(n) {
+ for (var t, e = $c, r = He(n[0][0], n[0][1], n[1][0], n[1][1]), u = e.length; u--;)t = e[u], (!Br(t, n) || !r(t) || ca(t.a.x - t.b.x) < Na && ca(t.a.y - t.b.y) < Na) && (t.a = t.b = null, e.splice(u, 1))
+ }
+
+ function Br(n, t) {
+ var e = n.b;
+ if (e)return !0;
+ var r, u, i = n.a, o = t[0][0], a = t[1][0], c = t[0][1], l = t[1][1], s = n.l, f = n.r, h = s.x, g = s.y, p = f.x, v = f.y, d = (h + p) / 2, m = (g + v) / 2;
+ if (v === g) {
+ if (o > d || d >= a)return;
+ if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: d, y: c};
+ e = {x: d, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: d, y: l};
+ e = {x: d, y: c}
+ }
+ } else if (r = (h - p) / (v - g), u = m - r * d, -1 > r || r > 1)if (h > p) {
+ if (i) {
+ if (i.y >= l)return
+ } else i = {x: (c - u) / r, y: c};
+ e = {x: (l - u) / r, y: l}
+ } else {
+ if (i) {
+ if (i.y < c)return
+ } else i = {x: (l - u) / r, y: l};
+ e = {x: (c - u) / r, y: c}
+ } else if (v > g) {
+ if (i) {
+ if (i.x >= a)return
+ } else i = {x: o, y: r * o + u};
+ e = {x: a, y: r * a + u}
+ } else {
+ if (i) {
+ if (i.x < o)return
+ } else i = {x: a, y: r * a + u};
+ e = {x: o, y: r * o + u}
+ }
+ return n.a = i, n.b = e, !0
+ }
+
+ function Wr(n, t) {
+ this.l = n, this.r = t, this.a = this.b = null
+ }
+
+ function Jr(n, t, e, r) {
+ var u = new Wr(n, t);
+ return $c.push(u), e && Kr(u, n, t, e), r && Kr(u, t, n, r), Bc[n.i].edges.push(new Qr(u, n, t)), Bc[t.i].edges.push(new Qr(u, t, n)), u
+ }
+
+ function Gr(n, t, e) {
+ var r = new Wr(n, null);
+ return r.a = t, r.b = e, $c.push(r), r
+ }
+
+ function Kr(n, t, e, r) {
+ n.a || n.b ? n.l === e ? n.b = r : n.a = r : (n.a = r, n.l = t, n.r = e)
+ }
+
+ function Qr(n, t, e) {
+ var r = n.a, u = n.b;
+ this.edge = n, this.site = t, this.angle = e ? Math.atan2(e.y - t.y, e.x - t.x) : n.l === t ? Math.atan2(u.x - r.x, r.y - u.y) : Math.atan2(r.x - u.x, u.y - r.y)
+ }
+
+ function nu() {
+ this._ = null
+ }
+
+ function tu(n) {
+ n.U = n.C = n.L = n.R = n.P = n.N = null
+ }
+
+ function eu(n, t) {
+ var e = t, r = t.R, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.R = r.L, e.R && (e.R.U = e), r.L = e
+ }
+
+ function ru(n, t) {
+ var e = t, r = t.L, u = e.U;
+ u ? u.L === e ? u.L = r : u.R = r : n._ = r, r.U = u, e.U = r, e.L = r.R, e.L && (e.L.U = e), r.R = e
+ }
+
+ function uu(n) {
+ for (; n.L;)n = n.L;
+ return n
+ }
+
+ function iu(n, t) {
+ var e, r, u, i = n.sort(ou).pop();
+ for ($c = [], Bc = new Array(n.length), Wc = new nu, Gc = new nu; ;)if (u = Jc, i && (!u || i.y < u.y || i.y === u.y && i.x < u.x))(i.x !== e || i.y !== r) && (Bc[i.i] = new Or(i), jr(i), e = i.x, r = i.y), i = n.pop(); else {
+ if (!u)break;
+ Ur(u.arc)
+ }
+ t && ($r(t), Yr(t));
+ var o = {cells: Bc, edges: $c};
+ return Wc = Gc = $c = Bc = null, o
+ }
+
+ function ou(n, t) {
+ return t.y - n.y || t.x - n.x
+ }
+
+ function au(n, t, e) {
+ return (n.x - e.x) * (t.y - n.y) - (n.x - t.x) * (e.y - n.y)
+ }
+
+ function cu(n) {
+ return n.x
+ }
+
+ function lu(n) {
+ return n.y
+ }
+
+ function su() {
+ return {leaf: !0, nodes: [], point: null, x: null, y: null}
+ }
+
+ function fu(n, t, e, r, u, i) {
+ if (!n(t, e, r, u, i)) {
+ var o = .5 * (e + u), a = .5 * (r + i), c = t.nodes;
+ c[0] && fu(n, c[0], e, r, o, a), c[1] && fu(n, c[1], o, r, u, a), c[2] && fu(n, c[2], e, a, o, i), c[3] && fu(n, c[3], o, a, u, i)
+ }
+ }
+
+ function hu(n, t) {
+ n = Bo.rgb(n), t = Bo.rgb(t);
+ var e = n.r, r = n.g, u = n.b, i = t.r - e, o = t.g - r, a = t.b - u;
+ return function (n) {
+ return "#" + xt(Math.round(e + i * n)) + xt(Math.round(r + o * n)) + xt(Math.round(u + a * n))
+ }
+ }
+
+ function gu(n, t) {
+ var e, r = {}, u = {};
+ for (e in n)e in t ? r[e] = du(n[e], t[e]) : u[e] = n[e];
+ for (e in t)e in n || (u[e] = t[e]);
+ return function (n) {
+ for (e in r)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function pu(n, t) {
+ return n = +n, t = +t, function (e) {
+ return n * (1 - e) + t * e
+ }
+ }
+
+ function vu(n, t) {
+ var e, r, u, i = tl.lastIndex = el.lastIndex = 0, o = -1, a = [], c = [];
+ for (n += "", t += ""; (e = tl.exec(n)) && (r = el.exec(t));)(u = r.index) > i && (u = t.slice(i, u), a[o] ? a[o] += u : a[++o] = u), (e = e[0]) === (r = r[0]) ? a[o] ? a[o] += r : a[++o] = r : (a[++o] = null, c.push({
+ i: o,
+ x: pu(e, r)
+ })), i = el.lastIndex;
+ return i < t.length && (u = t.slice(i), a[o] ? a[o] += u : a[++o] = u), a.length < 2 ? c[0] ? (t = c[0].x, function (n) {
+ return t(n) + ""
+ }) : function () {
+ return t
+ } : (t = c.length, function (n) {
+ for (var e, r = 0; t > r; ++r)a[(e = c[r]).i] = e.x(n);
+ return a.join("")
+ })
+ }
+
+ function du(n, t) {
+ for (var e, r = Bo.interpolators.length; --r >= 0 && !(e = Bo.interpolators[r](n, t)););
+ return e
+ }
+
+ function mu(n, t) {
+ var e, r = [], u = [], i = n.length, o = t.length, a = Math.min(n.length, t.length);
+ for (e = 0; a > e; ++e)r.push(du(n[e], t[e]));
+ for (; i > e; ++e)u[e] = n[e];
+ for (; o > e; ++e)u[e] = t[e];
+ return function (n) {
+ for (e = 0; a > e; ++e)u[e] = r[e](n);
+ return u
+ }
+ }
+
+ function yu(n) {
+ return function (t) {
+ return 0 >= t ? 0 : t >= 1 ? 1 : n(t)
+ }
+ }
+
+ function xu(n) {
+ return function (t) {
+ return 1 - n(1 - t)
+ }
+ }
+
+ function Mu(n) {
+ return function (t) {
+ return .5 * (.5 > t ? n(2 * t) : 2 - n(2 - 2 * t))
+ }
+ }
+
+ function _u(n) {
+ return n * n
+ }
+
+ function bu(n) {
+ return n * n * n
+ }
+
+ function wu(n) {
+ if (0 >= n)return 0;
+ if (n >= 1)return 1;
+ var t = n * n, e = t * n;
+ return 4 * (.5 > n ? e : 3 * (n - t) + e - .75)
+ }
+
+ function Su(n) {
+ return function (t) {
+ return Math.pow(t, n)
+ }
+ }
+
+ function ku(n) {
+ return 1 - Math.cos(n * Ca)
+ }
+
+ function Eu(n) {
+ return Math.pow(2, 10 * (n - 1))
+ }
+
+ function Au(n) {
+ return 1 - Math.sqrt(1 - n * n)
+ }
+
+ function Cu(n, t) {
+ var e;
+ return arguments.length < 2 && (t = .45), arguments.length ? e = t / Aa * Math.asin(1 / n) : (n = 1, e = t / 4), function (r) {
+ return 1 + n * Math.pow(2, -10 * r) * Math.sin((r - e) * Aa / t)
+ }
+ }
+
+ function Nu(n) {
+ return n || (n = 1.70158), function (t) {
+ return t * t * ((n + 1) * t - n)
+ }
+ }
+
+ function zu(n) {
+ return 1 / 2.75 > n ? 7.5625 * n * n : 2 / 2.75 > n ? 7.5625 * (n -= 1.5 / 2.75) * n + .75 : 2.5 / 2.75 > n ? 7.5625 * (n -= 2.25 / 2.75) * n + .9375 : 7.5625 * (n -= 2.625 / 2.75) * n + .984375
+ }
+
+ function Lu(n, t) {
+ n = Bo.hcl(n), t = Bo.hcl(t);
+ var e = n.h, r = n.c, u = n.l, i = t.h - e, o = t.c - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.c : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
+ return lt(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Tu(n, t) {
+ n = Bo.hsl(n), t = Bo.hsl(t);
+ var e = n.h, r = n.s, u = n.l, i = t.h - e, o = t.s - r, a = t.l - u;
+ return isNaN(o) && (o = 0, r = isNaN(r) ? t.s : r), isNaN(i) ? (i = 0, e = isNaN(e) ? t.h : e) : i > 180 ? i -= 360 : -180 > i && (i += 360), function (n) {
+ return at(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function qu(n, t) {
+ n = Bo.lab(n), t = Bo.lab(t);
+ var e = n.l, r = n.a, u = n.b, i = t.l - e, o = t.a - r, a = t.b - u;
+ return function (n) {
+ return ft(e + i * n, r + o * n, u + a * n) + ""
+ }
+ }
+
+ function Ru(n, t) {
+ return t -= n, function (e) {
+ return Math.round(n + t * e)
+ }
+ }
+
+ function Du(n) {
+ var t = [n.a, n.b], e = [n.c, n.d], r = Uu(t), u = Pu(t, e), i = Uu(ju(e, t, -u)) || 0;
+ t[0] * e[1] < e[0] * t[1] && (t[0] *= -1, t[1] *= -1, r *= -1, u *= -1), this.rotate = (r ? Math.atan2(t[1], t[0]) : Math.atan2(-e[0], e[1])) * Ta, this.translate = [n.e, n.f], this.scale = [r, i], this.skew = i ? Math.atan2(u, i) * Ta : 0
+ }
+
+ function Pu(n, t) {
+ return n[0] * t[0] + n[1] * t[1]
+ }
+
+ function Uu(n) {
+ var t = Math.sqrt(Pu(n, n));
+ return t && (n[0] /= t, n[1] /= t), t
+ }
+
+ function ju(n, t, e) {
+ return n[0] += e * t[0], n[1] += e * t[1], n
+ }
+
+ function Fu(n, t) {
+ var e, r = [], u = [], i = Bo.transform(n), o = Bo.transform(t), a = i.translate, c = o.translate, l = i.rotate, s = o.rotate, f = i.skew, h = o.skew, g = i.scale, p = o.scale;
+ return a[0] != c[0] || a[1] != c[1] ? (r.push("translate(", null, ",", null, ")"), u.push({
+ i: 1,
+ x: pu(a[0], c[0])
+ }, {
+ i: 3,
+ x: pu(a[1], c[1])
+ })) : c[0] || c[1] ? r.push("translate(" + c + ")") : r.push(""), l != s ? (l - s > 180 ? s += 360 : s - l > 180 && (l += 360), u.push({
+ i: r.push(r.pop() + "rotate(", null, ")") - 2,
+ x: pu(l, s)
+ })) : s && r.push(r.pop() + "rotate(" + s + ")"), f != h ? u.push({
+ i: r.push(r.pop() + "skewX(", null, ")") - 2,
+ x: pu(f, h)
+ }) : h && r.push(r.pop() + "skewX(" + h + ")"), g[0] != p[0] || g[1] != p[1] ? (e = r.push(r.pop() + "scale(", null, ",", null, ")"), u.push({
+ i: e - 4,
+ x: pu(g[0], p[0])
+ }, {
+ i: e - 2,
+ x: pu(g[1], p[1])
+ })) : (1 != p[0] || 1 != p[1]) && r.push(r.pop() + "scale(" + p + ")"), e = u.length, function (n) {
+ for (var t, i = -1; ++i < e;)r[(t = u[i]).i] = t.x(n);
+ return r.join("")
+ }
+ }
+
+ function Hu(n, t) {
+ return t = (t -= n = +n) || 1 / t, function (e) {
+ return (e - n) / t
+ }
+ }
+
+ function Ou(n, t) {
+ return t = (t -= n = +n) || 1 / t, function (e) {
+ return Math.max(0, Math.min(1, (e - n) / t))
+ }
+ }
+
+ function Yu(n) {
+ for (var t = n.source, e = n.target, r = Zu(t, e), u = [t]; t !== r;)t = t.parent, u.push(t);
+ for (var i = u.length; e !== r;)u.splice(i, 0, e), e = e.parent;
+ return u
+ }
+
+ function Iu(n) {
+ for (var t = [], e = n.parent; null != e;)t.push(n), n = e, e = e.parent;
+ return t.push(n), t
+ }
+
+ function Zu(n, t) {
+ if (n === t)return n;
+ for (var e = Iu(n), r = Iu(t), u = e.pop(), i = r.pop(), o = null; u === i;)o = u, u = e.pop(), i = r.pop();
+ return o
+ }
+
+ function Vu(n) {
+ n.fixed |= 2
+ }
+
+ function Xu(n) {
+ n.fixed &= -7
+ }
+
+ function $u(n) {
+ n.fixed |= 4, n.px = n.x, n.py = n.y
+ }
+
+ function Bu(n) {
+ n.fixed &= -5
+ }
+
+ function Wu(n, t, e) {
+ var r = 0, u = 0;
+ if (n.charge = 0, !n.leaf)for (var i, o = n.nodes, a = o.length, c = -1; ++c < a;)i = o[c], null != i && (Wu(i, t, e), n.charge += i.charge, r += i.charge * i.cx, u += i.charge * i.cy);
+ if (n.point) {
+ n.leaf || (n.point.x += Math.random() - .5, n.point.y += Math.random() - .5);
+ var l = t * e[n.point.index];
+ n.charge += n.pointCharge = l, r += l * n.point.x, u += l * n.point.y
+ }
+ n.cx = r / n.charge, n.cy = u / n.charge
+ }
+
+ function Ju(n, t) {
+ return Bo.rebind(n, t, "sort", "children", "value"), n.nodes = n, n.links = ei, n
+ }
+
+ function Gu(n, t) {
+ for (var e = [n]; null != (n = e.pop());)if (t(n), (u = n.children) && (r = u.length))for (var r, u; --r >= 0;)e.push(u[r])
+ }
+
+ function Ku(n, t) {
+ for (var e = [n], r = []; null != (n = e.pop());)if (r.push(n), (i = n.children) && (u = i.length))for (var u, i, o = -1; ++o < u;)e.push(i[o]);
+ for (; null != (n = r.pop());)t(n)
+ }
+
+ function Qu(n) {
+ return n.children
+ }
+
+ function ni(n) {
+ return n.value
+ }
+
+ function ti(n, t) {
+ return t.value - n.value
+ }
+
+ function ei(n) {
+ return Bo.merge(n.map(function (n) {
+ return (n.children || []).map(function (t) {
+ return {source: n, target: t}
+ })
+ }))
+ }
+
+ function ri(n) {
+ return n.x
+ }
+
+ function ui(n) {
+ return n.y
+ }
+
+ function ii(n, t, e) {
+ n.y0 = t, n.y = e
+ }
+
+ function oi(n) {
+ return Bo.range(n.length)
+ }
+
+ function ai(n) {
+ for (var t = -1, e = n[0].length, r = []; ++t < e;)r[t] = 0;
+ return r
+ }
+
+ function ci(n) {
+ for (var t, e = 1, r = 0, u = n[0][1], i = n.length; i > e; ++e)(t = n[e][1]) > u && (r = e, u = t);
+ return r
+ }
+
+ function li(n) {
+ return n.reduce(si, 0)
+ }
+
+ function si(n, t) {
+ return n + t[1]
+ }
+
+ function fi(n, t) {
+ return hi(n, Math.ceil(Math.log(t.length) / Math.LN2 + 1))
+ }
+
+ function hi(n, t) {
+ for (var e = -1, r = +n[0], u = (n[1] - r) / t, i = []; ++e <= t;)i[e] = u * e + r;
+ return i
+ }
+
+ function gi(n) {
+ return [Bo.min(n), Bo.max(n)]
+ }
+
+ function pi(n, t) {
+ return n.value - t.value
+ }
+
+ function vi(n, t) {
+ var e = n._pack_next;
+ n._pack_next = t, t._pack_prev = n, t._pack_next = e, e._pack_prev = t
+ }
+
+ function di(n, t) {
+ n._pack_next = t, t._pack_prev = n
+ }
+
+ function mi(n, t) {
+ var e = t.x - n.x, r = t.y - n.y, u = n.r + t.r;
+ return .999 * u * u > e * e + r * r
+ }
+
+ function yi(n) {
+ function t(n) {
+ s = Math.min(n.x - n.r, s), f = Math.max(n.x + n.r, f), h = Math.min(n.y - n.r, h), g = Math.max(n.y + n.r, g)
+ }
+
+ if ((e = n.children) && (l = e.length)) {
+ var e, r, u, i, o, a, c, l, s = 1 / 0, f = -1 / 0, h = 1 / 0, g = -1 / 0;
+ if (e.forEach(xi), r = e[0], r.x = -r.r, r.y = 0, t(r), l > 1 && (u = e[1], u.x = u.r, u.y = 0, t(u), l > 2))for (i = e[2], bi(r, u, i), t(i), vi(r, i), r._pack_prev = i, vi(i, u), u = r._pack_next, o = 3; l > o; o++) {
+ bi(r, u, i = e[o]);
+ var p = 0, v = 1, d = 1;
+ for (a = u._pack_next; a !== u; a = a._pack_next, v++)if (mi(a, i)) {
+ p = 1;
+ break
+ }
+ if (1 == p)for (c = r._pack_prev; c !== a._pack_prev && !mi(c, i); c = c._pack_prev, d++);
+ p ? (d > v || v == d && u.r < r.r ? di(r, u = a) : di(r = c, u), o--) : (vi(r, i), u = i, t(i))
+ }
+ var m = (s + f) / 2, y = (h + g) / 2, x = 0;
+ for (o = 0; l > o; o++)i = e[o], i.x -= m, i.y -= y, x = Math.max(x, i.r + Math.sqrt(i.x * i.x + i.y * i.y));
+ n.r = x, e.forEach(Mi)
+ }
+ }
+
+ function xi(n) {
+ n._pack_next = n._pack_prev = n
+ }
+
+ function Mi(n) {
+ delete n._pack_next, delete n._pack_prev
+ }
+
+ function _i(n, t, e, r) {
+ var u = n.children;
+ if (n.x = t += r * n.x, n.y = e += r * n.y, n.r *= r, u)for (var i = -1, o = u.length; ++i < o;)_i(u[i], t, e, r)
+ }
+
+ function bi(n, t, e) {
+ var r = n.r + e.r, u = t.x - n.x, i = t.y - n.y;
+ if (r && (u || i)) {
+ var o = t.r + e.r, a = u * u + i * i;
+ o *= o, r *= r;
+ var c = .5 + (r - o) / (2 * a), l = Math.sqrt(Math.max(0, 2 * o * (r + a) - (r -= a) * r - o * o)) / (2 * a);
+ e.x = n.x + c * u + l * i, e.y = n.y + c * i - l * u
+ } else e.x = n.x + r, e.y = n.y
+ }
+
+ function wi(n, t) {
+ return n.parent == t.parent ? 1 : 2
+ }
+
+ function Si(n) {
+ var t = n.children;
+ return t.length ? t[0] : n.t
+ }
+
+ function ki(n) {
+ var t, e = n.children;
+ return (t = e.length) ? e[t - 1] : n.t
+ }
+
+ function Ei(n, t, e) {
+ var r = e / (t.i - n.i);
+ t.c -= r, t.s += e, n.c += r, t.z += e, t.m += e
+ }
+
+ function Ai(n) {
+ for (var t, e = 0, r = 0, u = n.children, i = u.length; --i >= 0;)t = u[i], t.z += e, t.m += e, e += t.s + (r += t.c)
+ }
+
+ function Ci(n, t, e) {
+ return n.a.parent === t.parent ? n.a : e
+ }
+
+ function Ni(n) {
+ return 1 + Bo.max(n, function (n) {
+ return n.y
+ })
+ }
+
+ function zi(n) {
+ return n.reduce(function (n, t) {
+ return n + t.x
+ }, 0) / n.length
+ }
+
+ function Li(n) {
+ var t = n.children;
+ return t && t.length ? Li(t[0]) : n
+ }
+
+ function Ti(n) {
+ var t, e = n.children;
+ return e && (t = e.length) ? Ti(e[t - 1]) : n
+ }
+
+ function qi(n) {
+ return {x: n.x, y: n.y, dx: n.dx, dy: n.dy}
+ }
+
+ function Ri(n, t) {
+ var e = n.x + t[3], r = n.y + t[0], u = n.dx - t[1] - t[3], i = n.dy - t[0] - t[2];
+ return 0 > u && (e += u / 2, u = 0), 0 > i && (r += i / 2, i = 0), {x: e, y: r, dx: u, dy: i}
+ }
+
+ function Di(n) {
+ var t = n[0], e = n[n.length - 1];
+ return e > t ? [t, e] : [e, t]
+ }
+
+ function Pi(n) {
+ return n.rangeExtent ? n.rangeExtent() : Di(n.range())
+ }
+
+ function Ui(n, t, e, r) {
+ var u = e(n[0], n[1]), i = r(t[0], t[1]);
+ return function (n) {
+ return i(u(n))
+ }
+ }
+
+ function ji(n, t) {
+ var e, r = 0, u = n.length - 1, i = n[r], o = n[u];
+ return i > o && (e = r, r = u, u = e, e = i, i = o, o = e), n[r] = t.floor(i), n[u] = t.ceil(o), n
+ }
+
+ function Fi(n) {
+ return n ? {
+ floor: function (t) {
+ return Math.floor(t / n) * n
+ }, ceil: function (t) {
+ return Math.ceil(t / n) * n
+ }
+ } : gl
+ }
+
+ function Hi(n, t, e, r) {
+ var u = [], i = [], o = 0, a = Math.min(n.length, t.length) - 1;
+ for (n[a] < n[0] && (n = n.slice().reverse(), t = t.slice().reverse()); ++o <= a;)u.push(e(n[o - 1], n[o])), i.push(r(t[o - 1], t[o]));
+ return function (t) {
+ var e = Bo.bisect(n, t, 1, a) - 1;
+ return i[e](u[e](t))
+ }
+ }
+
+ function Oi(n, t, e, r) {
+ function u() {
+ var u = Math.min(n.length, t.length) > 2 ? Hi : Ui, c = r ? Ou : Hu;
+ return o = u(n, t, c, e), a = u(t, n, c, du), i
+ }
+
+ function i(n) {
+ return o(n)
+ }
+
+ var o, a;
+ return i.invert = function (n) {
+ return a(n)
+ }, i.domain = function (t) {
+ return arguments.length ? (n = t.map(Number), u()) : n
+ }, i.range = function (n) {
+ return arguments.length ? (t = n, u()) : t
+ }, i.rangeRound = function (n) {
+ return i.range(n).interpolate(Ru)
+ }, i.clamp = function (n) {
+ return arguments.length ? (r = n, u()) : r
+ }, i.interpolate = function (n) {
+ return arguments.length ? (e = n, u()) : e
+ }, i.ticks = function (t) {
+ return Vi(n, t)
+ }, i.tickFormat = function (t, e) {
+ return Xi(n, t, e)
+ }, i.nice = function (t) {
+ return Ii(n, t), u()
+ }, i.copy = function () {
+ return Oi(n, t, e, r)
+ }, u()
+ }
+
+ function Yi(n, t) {
+ return Bo.rebind(n, t, "range", "rangeRound", "interpolate", "clamp")
+ }
+
+ function Ii(n, t) {
+ return ji(n, Fi(Zi(n, t)[2]))
+ }
+
+ function Zi(n, t) {
+ null == t && (t = 10);
+ var e = Di(n), r = e[1] - e[0], u = Math.pow(10, Math.floor(Math.log(r / t) / Math.LN10)), i = t / r * u;
+ return .15 >= i ? u *= 10 : .35 >= i ? u *= 5 : .75 >= i && (u *= 2), e[0] = Math.ceil(e[0] / u) * u, e[1] = Math.floor(e[1] / u) * u + .5 * u, e[2] = u, e
+ }
+
+ function Vi(n, t) {
+ return Bo.range.apply(Bo, Zi(n, t))
+ }
+
+ function Xi(n, t, e) {
+ var r = Zi(n, t);
+ if (e) {
+ var u = tc.exec(e);
+ if (u.shift(), "s" === u[8]) {
+ var i = Bo.formatPrefix(Math.max(ca(r[0]), ca(r[1])));
+ return u[7] || (u[7] = "." + $i(i.scale(r[2]))), u[8] = "f", e = Bo.format(u.join("")), function (n) {
+ return e(i.scale(n)) + i.symbol
+ }
+ }
+ u[7] || (u[7] = "." + Bi(u[8], r)), e = u.join("")
+ } else e = ",." + $i(r[2]) + "f";
+ return Bo.format(e)
+ }
+
+ function $i(n) {
+ return -Math.floor(Math.log(n) / Math.LN10 + .01)
+ }
+
+ function Bi(n, t) {
+ var e = $i(t[2]);
+ return n in pl ? Math.abs(e - $i(Math.max(ca(t[0]), ca(t[1])))) + +("e" !== n) : e - 2 * ("%" === n)
+ }
+
+ function Wi(n, t, e, r) {
+ function u(n) {
+ return (e ? Math.log(0 > n ? 0 : n) : -Math.log(n > 0 ? 0 : -n)) / Math.log(t)
+ }
+
+ function i(n) {
+ return e ? Math.pow(t, n) : -Math.pow(t, -n)
+ }
+
+ function o(t) {
+ return n(u(t))
+ }
+
+ return o.invert = function (t) {
+ return i(n.invert(t))
+ }, o.domain = function (t) {
+ return arguments.length ? (e = t[0] >= 0, n.domain((r = t.map(Number)).map(u)), o) : r
+ }, o.base = function (e) {
+ return arguments.length ? (t = +e, n.domain(r.map(u)), o) : t
+ }, o.nice = function () {
+ var t = ji(r.map(u), e ? Math : dl);
+ return n.domain(t), r = t.map(i), o
+ }, o.ticks = function () {
+ var n = Di(r), o = [], a = n[0], c = n[1], l = Math.floor(u(a)), s = Math.ceil(u(c)), f = t % 1 ? 2 : t;
+ if (isFinite(s - l)) {
+ if (e) {
+ for (; s > l; l++)for (var h = 1; f > h; h++)o.push(i(l) * h);
+ o.push(i(l))
+ } else for (o.push(i(l)); l++ < s;)for (var h = f - 1; h > 0; h--)o.push(i(l) * h);
+ for (l = 0; o[l] < a; l++);
+ for (s = o.length; o[s - 1] > c; s--);
+ o = o.slice(l, s)
+ }
+ return o
+ }, o.tickFormat = function (n, t) {
+ if (!arguments.length)return vl;
+ arguments.length < 2 ? t = vl : "function" != typeof t && (t = Bo.format(t));
+ var r, a = Math.max(.1, n / o.ticks().length), c = e ? (r = 1e-12, Math.ceil) : (r = -1e-12, Math.floor);
+ return function (n) {
+ return n / i(c(u(n) + r)) <= a ? t(n) : ""
+ }
+ }, o.copy = function () {
+ return Wi(n.copy(), t, e, r)
+ }, Yi(o, n)
+ }
+
+ function Ji(n, t, e) {
+ function r(t) {
+ return n(u(t))
+ }
+
+ var u = Gi(t), i = Gi(1 / t);
+ return r.invert = function (t) {
+ return i(n.invert(t))
+ }, r.domain = function (t) {
+ return arguments.length ? (n.domain((e = t.map(Number)).map(u)), r) : e
+ }, r.ticks = function (n) {
+ return Vi(e, n)
+ }, r.tickFormat = function (n, t) {
+ return Xi(e, n, t)
+ }, r.nice = function (n) {
+ return r.domain(Ii(e, n))
+ }, r.exponent = function (o) {
+ return arguments.length ? (u = Gi(t = o), i = Gi(1 / t), n.domain(e.map(u)), r) : t
+ }, r.copy = function () {
+ return Ji(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Gi(n) {
+ return function (t) {
+ return 0 > t ? -Math.pow(-t, n) : Math.pow(t, n)
+ }
+ }
+
+ function Ki(n, t) {
+ function e(e) {
+ return i[((u.get(e) || ("range" === t.t ? u.set(e, n.push(e)) : 0 / 0)) - 1) % i.length]
+ }
+
+ function r(t, e) {
+ return Bo.range(n.length).map(function (n) {
+ return t + e * n
+ })
+ }
+
+ var u, i, o;
+ return e.domain = function (r) {
+ if (!arguments.length)return n;
+ n = [], u = new a;
+ for (var i, o = -1, c = r.length; ++o < c;)u.has(i = r[o]) || u.set(i, n.push(i));
+ return e[t.t].apply(e, t.a)
+ }, e.range = function (n) {
+ return arguments.length ? (i = n, o = 0, t = {t: "range", a: arguments}, e) : i
+ }, e.rangePoints = function (u, a) {
+ arguments.length < 2 && (a = 0);
+ var c = u[0], l = u[1], s = (l - c) / (Math.max(1, n.length - 1) + a);
+ return i = r(n.length < 2 ? (c + l) / 2 : c + s * a / 2, s), o = 0, t = {t: "rangePoints", a: arguments}, e
+ }, e.rangeBands = function (u, a, c) {
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = (f - s) / (n.length - a + 2 * c);
+ return i = r(s + h * c, h), l && i.reverse(), o = h * (1 - a), t = {t: "rangeBands", a: arguments}, e
+ }, e.rangeRoundBands = function (u, a, c) {
+ arguments.length < 2 && (a = 0), arguments.length < 3 && (c = a);
+ var l = u[1] < u[0], s = u[l - 0], f = u[1 - l], h = Math.floor((f - s) / (n.length - a + 2 * c)), g = f - s - (n.length - a) * h;
+ return i = r(s + Math.round(g / 2), h), l && i.reverse(), o = Math.round(h * (1 - a)), t = {
+ t: "rangeRoundBands",
+ a: arguments
+ }, e
+ }, e.rangeBand = function () {
+ return o
+ }, e.rangeExtent = function () {
+ return Di(t.a[0])
+ }, e.copy = function () {
+ return Ki(n, t)
+ }, e.domain(n)
+ }
+
+ function Qi(r, u) {
+ function i() {
+ var n = 0, t = u.length;
+ for (a = []; ++n < t;)a[n - 1] = Bo.quantile(r, n / t);
+ return o
+ }
+
+ function o(n) {
+ return isNaN(n = +n) ? void 0 : u[Bo.bisect(a, n)]
+ }
+
+ var a;
+ return o.domain = function (u) {
+ return arguments.length ? (r = u.map(t).filter(e).sort(n), i()) : r
+ }, o.range = function (n) {
+ return arguments.length ? (u = n, i()) : u
+ }, o.quantiles = function () {
+ return a
+ }, o.invertExtent = function (n) {
+ return n = u.indexOf(n), 0 > n ? [0 / 0, 0 / 0] : [n > 0 ? a[n - 1] : r[0], n < a.length ? a[n] : r[r.length - 1]]
+ }, o.copy = function () {
+ return Qi(r, u)
+ }, i()
+ }
+
+ function no(n, t, e) {
+ function r(t) {
+ return e[Math.max(0, Math.min(o, Math.floor(i * (t - n))))]
+ }
+
+ function u() {
+ return i = e.length / (t - n), o = e.length - 1, r
+ }
+
+ var i, o;
+ return r.domain = function (e) {
+ return arguments.length ? (n = +e[0], t = +e[e.length - 1], u()) : [n, t]
+ }, r.range = function (n) {
+ return arguments.length ? (e = n, u()) : e
+ }, r.invertExtent = function (t) {
+ return t = e.indexOf(t), t = 0 > t ? 0 / 0 : t / i + n, [t, t + 1 / i]
+ }, r.copy = function () {
+ return no(n, t, e)
+ }, u()
+ }
+
+ function to(n, t) {
+ function e(e) {
+ return e >= e ? t[Bo.bisect(n, e)] : void 0
+ }
+
+ return e.domain = function (t) {
+ return arguments.length ? (n = t, e) : n
+ }, e.range = function (n) {
+ return arguments.length ? (t = n, e) : t
+ }, e.invertExtent = function (e) {
+ return e = t.indexOf(e), [n[e - 1], n[e]]
+ }, e.copy = function () {
+ return to(n, t)
+ }, e
+ }
+
+ function eo(n) {
+ function t(n) {
+ return +n
+ }
+
+ return t.invert = t, t.domain = t.range = function (e) {
+ return arguments.length ? (n = e.map(t), t) : n
+ }, t.ticks = function (t) {
+ return Vi(n, t)
+ }, t.tickFormat = function (t, e) {
+ return Xi(n, t, e)
+ }, t.copy = function () {
+ return eo(n)
+ }, t
+ }
+
+ function ro(n) {
+ return n.innerRadius
+ }
+
+ function uo(n) {
+ return n.outerRadius
+ }
+
+ function io(n) {
+ return n.startAngle
+ }
+
+ function oo(n) {
+ return n.endAngle
+ }
+
+ function ao(n) {
+ function t(t) {
+ function o() {
+ l.push("M", i(n(s), a))
+ }
+
+ for (var c, l = [], s = [], f = -1, h = t.length, g = kt(e), p = kt(r); ++f < h;)u.call(this, c = t[f], f) ? s.push([+g.call(this, c, f), +p.call(this, c, f)]) : s.length && (o(), s = []);
+ return s.length && o(), l.length ? l.join("") : null
+ }
+
+ var e = Ar, r = Cr, u = Ae, i = co, o = i.key, a = .7;
+ return t.x = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t.defined = function (n) {
+ return arguments.length ? (u = n, t) : u
+ }, t.interpolate = function (n) {
+ return arguments.length ? (o = "function" == typeof n ? i = n : (i = wl.get(n) || co).key, t) : o
+ }, t.tension = function (n) {
+ return arguments.length ? (a = n, t) : a
+ }, t
+ }
+
+ function co(n) {
+ return n.join("L")
+ }
+
+ function lo(n) {
+ return co(n) + "Z"
+ }
+
+ function so(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r[0] + (r = n[t])[0]) / 2, "V", r[1]);
+ return e > 1 && u.push("H", r[0]), u.join("")
+ }
+
+ function fo(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("V", (r = n[t])[1], "H", r[0]);
+ return u.join("")
+ }
+
+ function ho(n) {
+ for (var t = 0, e = n.length, r = n[0], u = [r[0], ",", r[1]]; ++t < e;)u.push("H", (r = n[t])[0], "V", r[1]);
+ return u.join("")
+ }
+
+ function go(n, t) {
+ return n.length < 4 ? co(n) : n[1] + mo(n.slice(1, n.length - 1), yo(n, t))
+ }
+
+ function po(n, t) {
+ return n.length < 3 ? co(n) : n[0] + mo((n.push(n[0]), n), yo([n[n.length - 2]].concat(n, [n[1]]), t))
+ }
+
+ function vo(n, t) {
+ return n.length < 3 ? co(n) : n[0] + mo(n, yo(n, t))
+ }
+
+ function mo(n, t) {
+ if (t.length < 1 || n.length != t.length && n.length != t.length + 2)return co(n);
+ var e = n.length != t.length, r = "", u = n[0], i = n[1], o = t[0], a = o, c = 1;
+ if (e && (r += "Q" + (i[0] - 2 * o[0] / 3) + "," + (i[1] - 2 * o[1] / 3) + "," + i[0] + "," + i[1], u = n[1], c = 2), t.length > 1) {
+ a = t[1], i = n[c], c++, r += "C" + (u[0] + o[0]) + "," + (u[1] + o[1]) + "," + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1];
+ for (var l = 2; l < t.length; l++, c++)i = n[c], a = t[l], r += "S" + (i[0] - a[0]) + "," + (i[1] - a[1]) + "," + i[0] + "," + i[1]
+ }
+ if (e) {
+ var s = n[c];
+ r += "Q" + (i[0] + 2 * a[0] / 3) + "," + (i[1] + 2 * a[1] / 3) + "," + s[0] + "," + s[1]
+ }
+ return r
+ }
+
+ function yo(n, t) {
+ for (var e, r = [], u = (1 - t) / 2, i = n[0], o = n[1], a = 1, c = n.length; ++a < c;)e = i, i = o, o = n[a], r.push([u * (o[0] - e[0]), u * (o[1] - e[1])]);
+ return r
+ }
+
+ function xo(n) {
+ if (n.length < 3)return co(n);
+ var t = 1, e = n.length, r = n[0], u = r[0], i = r[1], o = [u, u, u, (r = n[1])[0]], a = [i, i, i, r[1]], c = [u, ",", i, "L", wo(El, o), ",", wo(El, a)];
+ for (n.push(n[e - 1]); ++t <= e;)r = n[t], o.shift(), o.push(r[0]), a.shift(), a.push(r[1]), So(c, o, a);
+ return n.pop(), c.push("L", r), c.join("")
+ }
+
+ function Mo(n) {
+ if (n.length < 4)return co(n);
+ for (var t, e = [], r = -1, u = n.length, i = [0], o = [0]; ++r < 3;)t = n[r], i.push(t[0]), o.push(t[1]);
+ for (e.push(wo(El, i) + "," + wo(El, o)), --r; ++r < u;)t = n[r], i.shift(), i.push(t[0]), o.shift(), o.push(t[1]), So(e, i, o);
+ return e.join("")
+ }
+
+ function _o(n) {
+ for (var t, e, r = -1, u = n.length, i = u + 4, o = [], a = []; ++r < 4;)e = n[r % u], o.push(e[0]), a.push(e[1]);
+ for (t = [wo(El, o), ",", wo(El, a)], --r; ++r < i;)e = n[r % u], o.shift(), o.push(e[0]), a.shift(), a.push(e[1]), So(t, o, a);
+ return t.join("")
+ }
+
+ function bo(n, t) {
+ var e = n.length - 1;
+ if (e)for (var r, u, i = n[0][0], o = n[0][1], a = n[e][0] - i, c = n[e][1] - o, l = -1; ++l <= e;)r = n[l], u = l / e, r[0] = t * r[0] + (1 - t) * (i + u * a), r[1] = t * r[1] + (1 - t) * (o + u * c);
+ return xo(n)
+ }
+
+ function wo(n, t) {
+ return n[0] * t[0] + n[1] * t[1] + n[2] * t[2] + n[3] * t[3]
+ }
+
+ function So(n, t, e) {
+ n.push("C", wo(Sl, t), ",", wo(Sl, e), ",", wo(kl, t), ",", wo(kl, e), ",", wo(El, t), ",", wo(El, e))
+ }
+
+ function ko(n, t) {
+ return (t[1] - n[1]) / (t[0] - n[0])
+ }
+
+ function Eo(n) {
+ for (var t = 0, e = n.length - 1, r = [], u = n[0], i = n[1], o = r[0] = ko(u, i); ++t < e;)r[t] = (o + (o = ko(u = i, i = n[t + 1]))) / 2;
+ return r[t] = o, r
+ }
+
+ function Ao(n) {
+ for (var t, e, r, u, i = [], o = Eo(n), a = -1, c = n.length - 1; ++a < c;)t = ko(n[a], n[a + 1]), ca(t) < Na ? o[a] = o[a + 1] = 0 : (e = o[a] / t, r = o[a + 1] / t, u = e * e + r * r, u > 9 && (u = 3 * t / Math.sqrt(u), o[a] = u * e, o[a + 1] = u * r));
+ for (a = -1; ++a <= c;)u = (n[Math.min(c, a + 1)][0] - n[Math.max(0, a - 1)][0]) / (6 * (1 + o[a] * o[a])), i.push([u || 0, o[a] * u || 0]);
+ return i
+ }
+
+ function Co(n) {
+ return n.length < 3 ? co(n) : n[0] + mo(n, Ao(n))
+ }
+
+ function No(n) {
+ for (var t, e, r, u = -1, i = n.length; ++u < i;)t = n[u], e = t[0], r = t[1] + _l, t[0] = e * Math.cos(r), t[1] = e * Math.sin(r);
+ return n
+ }
+
+ function zo(n) {
+ function t(t) {
+ function c() {
+ v.push("M", a(n(m), f), s, l(n(d.reverse()), f), "Z")
+ }
+
+ for (var h, g, p, v = [], d = [], m = [], y = -1, x = t.length, M = kt(e), _ = kt(u), b = e === r ? function () {
+ return g
+ } : kt(r), w = u === i ? function () {
+ return p
+ } : kt(i); ++y < x;)o.call(this, h = t[y], y) ? (d.push([g = +M.call(this, h, y), p = +_.call(this, h, y)]), m.push([+b.call(this, h, y), +w.call(this, h, y)])) : d.length && (c(), d = [], m = []);
+ return d.length && c(), v.length ? v.join("") : null
+ }
+
+ var e = Ar, r = Ar, u = 0, i = Cr, o = Ae, a = co, c = a.key, l = a, s = "L", f = .7;
+ return t.x = function (n) {
+ return arguments.length ? (e = r = n, t) : r
+ }, t.x0 = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.x1 = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t.y = function (n) {
+ return arguments.length ? (u = i = n, t) : i
+ }, t.y0 = function (n) {
+ return arguments.length ? (u = n, t) : u
+ }, t.y1 = function (n) {
+ return arguments.length ? (i = n, t) : i
+ }, t.defined = function (n) {
+ return arguments.length ? (o = n, t) : o
+ }, t.interpolate = function (n) {
+ return arguments.length ? (c = "function" == typeof n ? a = n : (a = wl.get(n) || co).key, l = a.reverse || a, s = a.closed ? "M" : "L", t) : c
+ }, t.tension = function (n) {
+ return arguments.length ? (f = n, t) : f
+ }, t
+ }
+
+ function Lo(n) {
+ return n.radius
+ }
+
+ function To(n) {
+ return [n.x, n.y]
+ }
+
+ function qo(n) {
+ return function () {
+ var t = n.apply(this, arguments), e = t[0], r = t[1] + _l;
+ return [e * Math.cos(r), e * Math.sin(r)]
+ }
+ }
+
+ function Ro() {
+ return 64
+ }
+
+ function Do() {
+ return "circle"
+ }
+
+ function Po(n) {
+ var t = Math.sqrt(n / Ea);
+ return "M0," + t + "A" + t + "," + t + " 0 1,1 0," + -t + "A" + t + "," + t + " 0 1,1 0," + t + "Z"
+ }
+
+ function Uo(n, t) {
+ return ga(n, Tl), n.id = t, n
+ }
+
+ function jo(n, t, e, r) {
+ var u = n.id;
+ return F(n, "function" == typeof e ? function (n, i, o) {
+ n.__transition__[u].tween.set(t, r(e.call(n, n.__data__, i, o)))
+ } : (e = r(e), function (n) {
+ n.__transition__[u].tween.set(t, e)
+ }))
+ }
+
+ function Fo(n) {
+ return null == n && (n = ""), function () {
+ this.textContent = n
+ }
+ }
+
+ function Ho(n, t, e, r) {
+ var u = n.__transition__ || (n.__transition__ = {active: 0, count: 0}), i = u[e];
+ if (!i) {
+ var o = r.time;
+ i = u[e] = {
+ tween: new a,
+ time: o,
+ ease: r.ease,
+ delay: r.delay,
+ duration: r.duration
+ }, ++u.count, Bo.timer(function (r) {
+ function a(r) {
+ return u.active > e ? l() : (u.active = e, i.event && i.event.start.call(n, s, t), i.tween.forEach(function (e, r) {
+ (r = r.call(n, s, t)) && v.push(r)
+ }), Bo.timer(function () {
+ return p.c = c(r || 1) ? Ae : c, 1
+ }, 0, o), void 0)
+ }
+
+ function c(r) {
+ if (u.active !== e)return l();
+ for (var o = r / g, a = f(o), c = v.length; c > 0;)v[--c].call(n, a);
+ return o >= 1 ? (i.event && i.event.end.call(n, s, t), l()) : void 0
+ }
+
+ function l() {
+ return --u.count ? delete u[e] : delete n.__transition__, 1
+ }
+
+ var s = n.__data__, f = i.ease, h = i.delay, g = i.duration, p = Ka, v = [];
+ return p.t = h + o, r >= h ? a(r - h) : (p.c = a, void 0)
+ }, 0, o)
+ }
+ }
+
+ function Oo(n, t, e) {
+ n.attr("transform", function (n) {
+ var r = t(n);
+ return "translate(" + (isFinite(r) ? r : e(n)) + ",0)"
+ })
+ }
+
+ function Yo(n, t, e) {
+ n.attr("transform", function (n) {
+ var r = t(n);
+ return "translate(0," + (isFinite(r) ? r : e(n)) + ")"
+ })
+ }
+
+ function Io(n) {
+ return n.toISOString()
+ }
+
+ function Zo(n, t, e) {
+ function r(t) {
+ return n(t)
+ }
+
+ function u(n, e) {
+ var r = n[1] - n[0], u = r / e, i = Bo.bisect(Ol, u);
+ return i == Ol.length ? [t.year, Zi(n.map(function (n) {
+ return n / 31536e6
+ }), e)[2]] : i ? t[u / Ol[i - 1] < Ol[i] / u ? i - 1 : i] : [Zl, Zi(n, e)[2]]
+ }
+
+ return r.invert = function (t) {
+ return Vo(n.invert(t))
+ }, r.domain = function (t) {
+ return arguments.length ? (n.domain(t), r) : n.domain().map(Vo)
+ }, r.nice = function (n, t) {
+ function e(e) {
+ return !isNaN(e) && !n.range(e, Vo(+e + 1), t).length
+ }
+
+ var i = r.domain(), o = Di(i), a = null == n ? u(o, 10) : "number" == typeof n && u(o, n);
+ return a && (n = a[0], t = a[1]), r.domain(ji(i, t > 1 ? {
+ floor: function (t) {
+ for (; e(t = n.floor(t));)t = Vo(t - 1);
+ return t
+ }, ceil: function (t) {
+ for (; e(t = n.ceil(t));)t = Vo(+t + 1);
+ return t
+ }
+ } : n))
+ }, r.ticks = function (n, t) {
+ var e = Di(r.domain()), i = null == n ? u(e, 10) : "number" == typeof n ? u(e, n) : !n.range && [{range: n}, t];
+ return i && (n = i[0], t = i[1]), n.range(e[0], Vo(+e[1] + 1), 1 > t ? 1 : t)
+ }, r.tickFormat = function () {
+ return e
+ }, r.copy = function () {
+ return Zo(n.copy(), t, e)
+ }, Yi(r, n)
+ }
+
+ function Vo(n) {
+ return new Date(n)
+ }
+
+ function Xo(n) {
+ return JSON.parse(n.responseText)
+ }
+
+ function $o(n) {
+ var t = Go.createRange();
+ return t.selectNode(Go.body), t.createContextualFragment(n.responseText)
+ }
+
+ var Bo = {version: "3.4.13"};
+ Date.now || (Date.now = function () {
+ return +new Date
+ });
+ var Wo = [].slice, Jo = function (n) {
+ return Wo.call(n)
+ }, Go = document, Ko = Go.documentElement, Qo = window;
+ try {
+ Jo(Ko.childNodes)[0].nodeType
+ } catch (na) {
+ Jo = function (n) {
+ for (var t = n.length, e = new Array(t); t--;)e[t] = n[t];
+ return e
+ }
+ }
+ try {
+ Go.createElement("div").style.setProperty("opacity", 0, "")
+ } catch (ta) {
+ var ea = Qo.Element.prototype, ra = ea.setAttribute, ua = ea.setAttributeNS, ia = Qo.CSSStyleDeclaration.prototype, oa = ia.setProperty;
+ ea.setAttribute = function (n, t) {
+ ra.call(this, n, t + "")
+ }, ea.setAttributeNS = function (n, t, e) {
+ ua.call(this, n, t, e + "")
+ }, ia.setProperty = function (n, t, e) {
+ oa.call(this, n, t + "", e)
+ }
+ }
+ Bo.ascending = n, Bo.descending = function (n, t) {
+ return n > t ? -1 : t > n ? 1 : t >= n ? 0 : 0 / 0
+ }, Bo.min = function (n, t) {
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && e > r && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && e > r && (e = r)
+ }
+ return e
+ }, Bo.max = function (n, t) {
+ var e, r, u = -1, i = n.length;
+ if (1 === arguments.length) {
+ for (; ++u < i && !(null != (e = n[u]) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = n[u]) && r > e && (e = r)
+ } else {
+ for (; ++u < i && !(null != (e = t.call(n, n[u], u)) && e >= e);)e = void 0;
+ for (; ++u < i;)null != (r = t.call(n, n[u], u)) && r > e && (e = r)
+ }
+ return e
+ }, Bo.extent = function (n, t) {
+ var e, r, u, i = -1, o = n.length;
+ if (1 === arguments.length) {
+ for (; ++i < o && !(null != (e = u = n[i]) && e >= e);)e = u = void 0;
+ for (; ++i < o;)null != (r = n[i]) && (e > r && (e = r), r > u && (u = r))
+ } else {
+ for (; ++i < o && !(null != (e = u = t.call(n, n[i], i)) && e >= e);)e = void 0;
+ for (; ++i < o;)null != (r = t.call(n, n[i], i)) && (e > r && (e = r), r > u && (u = r))
+ }
+ return [e, u]
+ }, Bo.sum = function (n, t) {
+ var r, u = 0, i = n.length, o = -1;
+ if (1 === arguments.length)for (; ++o < i;)e(r = +n[o]) && (u += r); else for (; ++o < i;)e(r = +t.call(n, n[o], o)) && (u += r);
+ return u
+ }, Bo.mean = function (n, r) {
+ var u, i = 0, o = n.length, a = -1, c = o;
+ if (1 === arguments.length)for (; ++a < o;)e(u = t(n[a])) ? i += u : --c; else for (; ++a < o;)e(u = t(r.call(n, n[a], a))) ? i += u : --c;
+ return c ? i / c : void 0
+ }, Bo.quantile = function (n, t) {
+ var e = (n.length - 1) * t + 1, r = Math.floor(e), u = +n[r - 1], i = e - r;
+ return i ? u + i * (n[r] - u) : u
+ }, Bo.median = function (r, u) {
+ var i, o = [], a = r.length, c = -1;
+ if (1 === arguments.length)for (; ++c < a;)e(i = t(r[c])) && o.push(i); else for (; ++c < a;)e(i = t(u.call(r, r[c], c))) && o.push(i);
+ return o.length ? Bo.quantile(o.sort(n), .5) : void 0
+ };
+ var aa = r(n);
+ Bo.bisectLeft = aa.left, Bo.bisect = Bo.bisectRight = aa.right, Bo.bisector = function (t) {
+ return r(1 === t.length ? function (e, r) {
+ return n(t(e), r)
+ } : t)
+ }, Bo.shuffle = function (n) {
+ for (var t, e, r = n.length; r;)e = 0 | Math.random() * r--, t = n[r], n[r] = n[e], n[e] = t;
+ return n
+ }, Bo.permute = function (n, t) {
+ for (var e = t.length, r = new Array(e); e--;)r[e] = n[t[e]];
+ return r
+ }, Bo.pairs = function (n) {
+ for (var t, e = 0, r = n.length - 1, u = n[0], i = new Array(0 > r ? 0 : r); r > e;)i[e] = [t = u, u = n[++e]];
+ return i
+ }, Bo.zip = function () {
+ if (!(r = arguments.length))return [];
+ for (var n = -1, t = Bo.min(arguments, u), e = new Array(t); ++n < t;)for (var r, i = -1, o = e[n] = new Array(r); ++i < r;)o[i] = arguments[i][n];
+ return e
+ }, Bo.transpose = function (n) {
+ return Bo.zip.apply(Bo, n)
+ }, Bo.keys = function (n) {
+ var t = [];
+ for (var e in n)t.push(e);
+ return t
+ }, Bo.values = function (n) {
+ var t = [];
+ for (var e in n)t.push(n[e]);
+ return t
+ }, Bo.entries = function (n) {
+ var t = [];
+ for (var e in n)t.push({key: e, value: n[e]});
+ return t
+ }, Bo.merge = function (n) {
+ for (var t, e, r, u = n.length, i = -1, o = 0; ++i < u;)o += n[i].length;
+ for (e = new Array(o); --u >= 0;)for (r = n[u], t = r.length; --t >= 0;)e[--o] = r[t];
+ return e
+ };
+ var ca = Math.abs;
+ Bo.range = function (n, t, e) {
+ if (arguments.length < 3 && (e = 1, arguments.length < 2 && (t = n, n = 0)), 1 / 0 === (t - n) / e)throw new Error("infinite range");
+ var r, u = [], o = i(ca(e)), a = -1;
+ if (n *= o, t *= o, e *= o, 0 > e)for (; (r = n + e * ++a) > t;)u.push(r / o); else for (; (r = n + e * ++a) < t;)u.push(r / o);
+ return u
+ }, Bo.map = function (n) {
+ var t = new a;
+ if (n instanceof a)n.forEach(function (n, e) {
+ t.set(n, e)
+ }); else for (var e in n)t.set(e, n[e]);
+ return t
+ };
+ var la = "__proto__", sa = "\x00";
+ o(a, {
+ has: s, get: function (n) {
+ return this._[c(n)]
+ }, set: function (n, t) {
+ return this._[c(n)] = t
+ }, remove: f, keys: h, values: function () {
+ var n = [];
+ for (var t in this._)n.push(this._[t]);
+ return n
+ }, entries: function () {
+ var n = [];
+ for (var t in this._)n.push({key: l(t), value: this._[t]});
+ return n
+ }, size: g, empty: p, forEach: function (n) {
+ for (var t in this._)n.call(this, l(t), this._[t])
+ }
+ }), Bo.nest = function () {
+ function n(t, o, c) {
+ if (c >= i.length)return r ? r.call(u, o) : e ? o.sort(e) : o;
+ for (var l, s, f, h, g = -1, p = o.length, v = i[c++], d = new a; ++g < p;)(h = d.get(l = v(s = o[g]))) ? h.push(s) : d.set(l, [s]);
+ return t ? (s = t(), f = function (e, r) {
+ s.set(e, n(t, r, c))
+ }) : (s = {}, f = function (e, r) {
+ s[e] = n(t, r, c)
+ }), d.forEach(f), s
+ }
+
+ function t(n, e) {
+ if (e >= i.length)return n;
+ var r = [], u = o[e++];
+ return n.forEach(function (n, u) {
+ r.push({key: n, values: t(u, e)})
+ }), u ? r.sort(function (n, t) {
+ return u(n.key, t.key)
+ }) : r
+ }
+
+ var e, r, u = {}, i = [], o = [];
+ return u.map = function (t, e) {
+ return n(e, t, 0)
+ }, u.entries = function (e) {
+ return t(n(Bo.map, e, 0), 0)
+ }, u.key = function (n) {
+ return i.push(n), u
+ }, u.sortKeys = function (n) {
+ return o[i.length - 1] = n, u
+ }, u.sortValues = function (n) {
+ return e = n, u
+ }, u.rollup = function (n) {
+ return r = n, u
+ }, u
+ }, Bo.set = function (n) {
+ var t = new v;
+ if (n)for (var e = 0, r = n.length; r > e; ++e)t.add(n[e]);
+ return t
+ }, o(v, {
+ has: s, add: function (n) {
+ return this._[c(n += "")] = !0, n
+ }, remove: f, values: h, size: g, empty: p, forEach: function (n) {
+ for (var t in this._)n.call(this, l(t))
+ }
+ }), Bo.behavior = {}, Bo.rebind = function (n, t) {
+ for (var e, r = 1, u = arguments.length; ++r < u;)n[e = arguments[r]] = d(n, t, t[e]);
+ return n
+ };
+ var fa = ["webkit", "ms", "moz", "Moz", "o", "O"];
+ Bo.dispatch = function () {
+ for (var n = new x, t = -1, e = arguments.length; ++t < e;)n[arguments[t]] = M(n);
+ return n
+ }, x.prototype.on = function (n, t) {
+ var e = n.indexOf("."), r = "";
+ if (e >= 0 && (r = n.slice(e + 1), n = n.slice(0, e)), n)return arguments.length < 2 ? this[n].on(r) : this[n].on(r, t);
+ if (2 === arguments.length) {
+ if (null == t)for (n in this)this.hasOwnProperty(n) && this[n].on(r, null);
+ return this
+ }
+ }, Bo.event = null, Bo.requote = function (n) {
+ return n.replace(ha, "\\$&")
+ };
+ var ha = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g, ga = {}.__proto__ ? function (n, t) {
+ n.__proto__ = t
+ } : function (n, t) {
+ for (var e in t)n[e] = t[e]
+ }, pa = function (n, t) {
+ return t.querySelector(n)
+ }, va = function (n, t) {
+ return t.querySelectorAll(n)
+ }, da = Ko.matches || Ko[m(Ko, "matchesSelector")], ma = function (n, t) {
+ return da.call(n, t)
+ };
+ "function" == typeof Sizzle && (pa = function (n, t) {
+ return Sizzle(n, t)[0] || null
+ }, va = Sizzle, ma = Sizzle.matchesSelector), Bo.selection = function () {
+ return _a
+ };
+ var ya = Bo.selection.prototype = [];
+ ya.select = function (n) {
+ var t, e, r, u, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []), t.parentNode = (r = this[o]).parentNode;
+ for (var c = -1, l = r.length; ++c < l;)(u = r[c]) ? (t.push(e = n.call(u, u.__data__, c, o)), e && "__data__"in u && (e.__data__ = u.__data__)) : t.push(null)
+ }
+ return S(i)
+ }, ya.selectAll = function (n) {
+ var t, e, r = [];
+ n = E(n);
+ for (var u = -1, i = this.length; ++u < i;)for (var o = this[u], a = -1, c = o.length; ++a < c;)(e = o[a]) && (r.push(t = Jo(n.call(e, e.__data__, a, u))), t.parentNode = e);
+ return S(r)
+ };
+ var xa = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: "http://www.w3.org/1999/xhtml",
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+ };
+ Bo.ns = {
+ prefix: xa, qualify: function (n) {
+ var t = n.indexOf(":"), e = n;
+ return t >= 0 && (e = n.slice(0, t), n = n.slice(t + 1)), xa.hasOwnProperty(e) ? {
+ space: xa[e],
+ local: n
+ } : n
+ }
+ }, ya.attr = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node();
+ return n = Bo.ns.qualify(n), n.local ? e.getAttributeNS(n.space, n.local) : e.getAttribute(n)
+ }
+ for (t in n)this.each(A(t, n[t]));
+ return this
+ }
+ return this.each(A(n, t))
+ }, ya.classed = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n) {
+ var e = this.node(), r = (n = z(n)).length, u = -1;
+ if (t = e.classList) {
+ for (; ++u < r;)if (!t.contains(n[u]))return !1
+ } else for (t = e.getAttribute("class"); ++u < r;)if (!N(n[u]).test(t))return !1;
+ return !0
+ }
+ for (t in n)this.each(L(t, n[t]));
+ return this
+ }
+ return this.each(L(n, t))
+ }, ya.style = function (n, t, e) {
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = "");
+ for (e in n)this.each(q(e, n[e], t));
+ return this
+ }
+ if (2 > r)return Qo.getComputedStyle(this.node(), null).getPropertyValue(n);
+ e = ""
+ }
+ return this.each(q(n, t, e))
+ }, ya.property = function (n, t) {
+ if (arguments.length < 2) {
+ if ("string" == typeof n)return this.node()[n];
+ for (t in n)this.each(R(t, n[t]));
+ return this
+ }
+ return this.each(R(n, t))
+ }, ya.text = function (n) {
+ return arguments.length ? this.each("function" == typeof n ? function () {
+ var t = n.apply(this, arguments);
+ this.textContent = null == t ? "" : t
+ } : null == n ? function () {
+ this.textContent = ""
+ } : function () {
+ this.textContent = n
+ }) : this.node().textContent
+ }, ya.html = function (n) {
+ return arguments.length ? this.each("function" == typeof n ? function () {
+ var t = n.apply(this, arguments);
+ this.innerHTML = null == t ? "" : t
+ } : null == n ? function () {
+ this.innerHTML = ""
+ } : function () {
+ this.innerHTML = n
+ }) : this.node().innerHTML
+ }, ya.append = function (n) {
+ return n = D(n), this.select(function () {
+ return this.appendChild(n.apply(this, arguments))
+ })
+ }, ya.insert = function (n, t) {
+ return n = D(n), t = k(t), this.select(function () {
+ return this.insertBefore(n.apply(this, arguments), t.apply(this, arguments) || null)
+ })
+ }, ya.remove = function () {
+ return this.each(function () {
+ var n = this.parentNode;
+ n && n.removeChild(this)
+ })
+ }, ya.data = function (n, t) {
+ function e(n, e) {
+ var r, u, i, o = n.length, f = e.length, h = Math.min(o, f), g = new Array(f), p = new Array(f), v = new Array(o);
+ if (t) {
+ var d, m = new a, y = new Array(o);
+ for (r = -1; ++r < o;)m.has(d = t.call(u = n[r], u.__data__, r)) ? v[r] = u : m.set(d, u), y[r] = d;
+ for (r = -1; ++r < f;)(u = m.get(d = t.call(e, i = e[r], r))) ? u !== !0 && (g[r] = u, u.__data__ = i) : p[r] = P(i), m.set(d, !0);
+ for (r = -1; ++r < o;)m.get(y[r]) !== !0 && (v[r] = n[r])
+ } else {
+ for (r = -1; ++r < h;)u = n[r], i = e[r], u ? (u.__data__ = i, g[r] = u) : p[r] = P(i);
+ for (; f > r; ++r)p[r] = P(e[r]);
+ for (; o > r; ++r)v[r] = n[r]
+ }
+ p.update = g, p.parentNode = g.parentNode = v.parentNode = n.parentNode, c.push(p), l.push(g), s.push(v)
+ }
+
+ var r, u, i = -1, o = this.length;
+ if (!arguments.length) {
+ for (n = new Array(o = (r = this[0]).length); ++i < o;)(u = r[i]) && (n[i] = u.__data__);
+ return n
+ }
+ var c = H([]), l = S([]), s = S([]);
+ if ("function" == typeof n)for (; ++i < o;)e(r = this[i], n.call(r, r.parentNode.__data__, i)); else for (; ++i < o;)e(r = this[i], n);
+ return l.enter = function () {
+ return c
+ }, l.exit = function () {
+ return s
+ }, l
+ }, ya.datum = function (n) {
+ return arguments.length ? this.property("__data__", n) : this.property("__data__")
+ }, ya.filter = function (n) {
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []), t.parentNode = (e = this[i]).parentNode;
+ for (var a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return S(u)
+ }, ya.order = function () {
+ for (var n = -1, t = this.length; ++n < t;)for (var e, r = this[n], u = r.length - 1, i = r[u]; --u >= 0;)(e = r[u]) && (i && i !== e.nextSibling && i.parentNode.insertBefore(e, i), i = e);
+ return this
+ }, ya.sort = function (n) {
+ n = j.apply(this, arguments);
+ for (var t = -1, e = this.length; ++t < e;)this[t].sort(n);
+ return this.order()
+ }, ya.each = function (n) {
+ return F(this, function (t, e, r) {
+ n.call(t, t.__data__, e, r)
+ })
+ }, ya.call = function (n) {
+ var t = Jo(arguments);
+ return n.apply(t[0] = this, t), this
+ }, ya.empty = function () {
+ return !this.node()
+ }, ya.node = function () {
+ for (var n = 0, t = this.length; t > n; n++)for (var e = this[n], r = 0, u = e.length; u > r; r++) {
+ var i = e[r];
+ if (i)return i
+ }
+ return null
+ }, ya.size = function () {
+ var n = 0;
+ return F(this, function () {
+ ++n
+ }), n
+ };
+ var Ma = [];
+ Bo.selection.enter = H, Bo.selection.enter.prototype = Ma, Ma.append = ya.append, Ma.empty = ya.empty, Ma.node = ya.node, Ma.call = ya.call, Ma.size = ya.size, Ma.select = function (n) {
+ for (var t, e, r, u, i, o = [], a = -1, c = this.length; ++a < c;) {
+ r = (u = this[a]).update, o.push(t = []), t.parentNode = u.parentNode;
+ for (var l = -1, s = u.length; ++l < s;)(i = u[l]) ? (t.push(r[l] = e = n.call(u.parentNode, i.__data__, l, a)), e.__data__ = i.__data__) : t.push(null)
+ }
+ return S(o)
+ }, Ma.insert = function (n, t) {
+ return arguments.length < 2 && (t = O(this)), ya.insert.call(this, n, t)
+ }, ya.transition = function () {
+ for (var n, t, e = Cl || ++ql, r = [], u = Nl || {
+ time: Date.now(),
+ ease: wu,
+ delay: 0,
+ duration: 250
+ }, i = -1, o = this.length; ++i < o;) {
+ r.push(n = []);
+ for (var a = this[i], c = -1, l = a.length; ++c < l;)(t = a[c]) && Ho(t, c, e, u), n.push(t)
+ }
+ return Uo(r, e)
+ }, ya.interrupt = function () {
+ return this.each(Y)
+ }, Bo.select = function (n) {
+ var t = ["string" == typeof n ? pa(n, Go) : n];
+ return t.parentNode = Ko, S([t])
+ }, Bo.selectAll = function (n) {
+ var t = Jo("string" == typeof n ? va(n, Go) : n);
+ return t.parentNode = Ko, S([t])
+ };
+ var _a = Bo.select(Ko);
+ ya.on = function (n, t, e) {
+ var r = arguments.length;
+ if (3 > r) {
+ if ("string" != typeof n) {
+ 2 > r && (t = !1);
+ for (e in n)this.each(I(e, n[e], t));
+ return this
+ }
+ if (2 > r)return (r = this.node()["__on" + n]) && r._;
+ e = !1
+ }
+ return this.each(I(n, t, e))
+ };
+ var ba = Bo.map({mouseenter: "mouseover", mouseleave: "mouseout"});
+ ba.forEach(function (n) {
+ "on" + n in Go && ba.remove(n)
+ });
+ var wa = "onselectstart"in Go ? null : m(Ko.style, "userSelect"), Sa = 0;
+ Bo.mouse = function (n) {
+ return $(n, b())
+ };
+ var ka = /WebKit/.test(Qo.navigator.userAgent) ? -1 : 0;
+ Bo.touch = function (n, t, e) {
+ if (arguments.length < 3 && (e = t, t = b().changedTouches), t)for (var r, u = 0, i = t.length; i > u; ++u)if ((r = t[u]).identifier === e)return $(n, r)
+ }, Bo.behavior.drag = function () {
+ function n() {
+ this.on("mousedown.drag", u).on("touchstart.drag", i)
+ }
+
+ function t(n, t, u, i, o) {
+ return function () {
+ function a() {
+ var n, e, r = t(h, v);
+ r && (n = r[0] - x[0], e = r[1] - x[1], p |= n | e, x = r, g({
+ type: "drag",
+ x: r[0] + l[0],
+ y: r[1] + l[1],
+ dx: n,
+ dy: e
+ }))
+ }
+
+ function c() {
+ t(h, v) && (m.on(i + d, null).on(o + d, null), y(p && Bo.event.target === f), g({type: "dragend"}))
+ }
+
+ var l, s = this, f = Bo.event.target, h = s.parentNode, g = e.of(s, arguments), p = 0, v = n(), d = ".drag" + (null == v ? "" : "-" + v), m = Bo.select(u()).on(i + d, a).on(o + d, c), y = X(), x = t(h, v);
+ r ? (l = r.apply(s, arguments), l = [l.x - x[0], l.y - x[1]]) : l = [0, 0], g({type: "dragstart"})
+ }
+ }
+
+ var e = w(n, "drag", "dragstart", "dragend"), r = null, u = t(y, Bo.mouse, J, "mousemove", "mouseup"), i = t(B, Bo.touch, W, "touchmove", "touchend");
+ return n.origin = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, Bo.rebind(n, e, "on")
+ }, Bo.touches = function (n, t) {
+ return arguments.length < 2 && (t = b().touches), t ? Jo(t).map(function (t) {
+ var e = $(n, t);
+ return e.identifier = t.identifier, e
+ }) : []
+ };
+ var Ea = Math.PI, Aa = 2 * Ea, Ca = Ea / 2, Na = 1e-6, za = Na * Na, La = Ea / 180, Ta = 180 / Ea, qa = Math.SQRT2, Ra = 2, Da = 4;
+ Bo.interpolateZoom = function (n, t) {
+ function e(n) {
+ var t = n * y;
+ if (m) {
+ var e = et(v), o = i / (Ra * h) * (e * rt(qa * t + v) - tt(v));
+ return [r + o * l, u + o * s, i * e / et(qa * t + v)]
+ }
+ return [r + n * l, u + n * s, i * Math.exp(qa * t)]
+ }
+
+ var r = n[0], u = n[1], i = n[2], o = t[0], a = t[1], c = t[2], l = o - r, s = a - u, f = l * l + s * s, h = Math.sqrt(f), g = (c * c - i * i + Da * f) / (2 * i * Ra * h), p = (c * c - i * i - Da * f) / (2 * c * Ra * h), v = Math.log(Math.sqrt(g * g + 1) - g), d = Math.log(Math.sqrt(p * p + 1) - p), m = d - v, y = (m || Math.log(c / i)) / qa;
+ return e.duration = 1e3 * y, e
+ }, Bo.behavior.zoom = function () {
+ function n(n) {
+ n.on(A, l).on(ja + ".zoom", f).on("dblclick.zoom", h).on(z, s)
+ }
+
+ function t(n) {
+ return [(n[0] - S.x) / S.k, (n[1] - S.y) / S.k]
+ }
+
+ function e(n) {
+ return [n[0] * S.k + S.x, n[1] * S.k + S.y]
+ }
+
+ function r(n) {
+ S.k = Math.max(E[0], Math.min(E[1], n))
+ }
+
+ function u(n, t) {
+ t = e(t), S.x += n[0] - t[0], S.y += n[1] - t[1]
+ }
+
+ function i() {
+ x && x.domain(y.range().map(function (n) {
+ return (n - S.x) / S.k
+ }).map(y.invert)), b && b.domain(M.range().map(function (n) {
+ return (n - S.y) / S.k
+ }).map(M.invert))
+ }
+
+ function o(n) {
+ n({type: "zoomstart"})
+ }
+
+ function a(n) {
+ i(), n({type: "zoom", scale: S.k, translate: [S.x, S.y]})
+ }
+
+ function c(n) {
+ n({type: "zoomend"})
+ }
+
+ function l() {
+ function n() {
+ s = 1, u(Bo.mouse(r), h), a(l)
+ }
+
+ function e() {
+ f.on(C, null).on(N, null), g(s && Bo.event.target === i), c(l)
+ }
+
+ var r = this, i = Bo.event.target, l = L.of(r, arguments), s = 0, f = Bo.select(Qo).on(C, n).on(N, e), h = t(Bo.mouse(r)), g = X();
+ Y.call(r), o(l)
+ }
+
+ function s() {
+ function n() {
+ var n = Bo.touches(g);
+ return h = S.k, n.forEach(function (n) {
+ n.identifier in v && (v[n.identifier] = t(n))
+ }), n
+ }
+
+ function e() {
+ var t = Bo.event.target;
+ Bo.select(t).on(x, i).on(M, f), b.push(t);
+ for (var e = Bo.event.changedTouches, o = 0, c = e.length; c > o; ++o)v[e[o].identifier] = null;
+ var l = n(), s = Date.now();
+ if (1 === l.length) {
+ if (500 > s - m) {
+ var h = l[0], g = v[h.identifier];
+ r(2 * S.k), u(h, g), _(), a(p)
+ }
+ m = s
+ } else if (l.length > 1) {
+ var h = l[0], y = l[1], w = h[0] - y[0], k = h[1] - y[1];
+ d = w * w + k * k
+ }
+ }
+
+ function i() {
+ for (var n, t, e, i, o = Bo.touches(g), c = 0, l = o.length; l > c; ++c, i = null)if (e = o[c], i = v[e.identifier]) {
+ if (t)break;
+ n = e, t = i
+ }
+ if (i) {
+ var s = (s = e[0] - n[0]) * s + (s = e[1] - n[1]) * s, f = d && Math.sqrt(s / d);
+ n = [(n[0] + e[0]) / 2, (n[1] + e[1]) / 2], t = [(t[0] + i[0]) / 2, (t[1] + i[1]) / 2], r(f * h)
+ }
+ m = null, u(n, t), a(p)
+ }
+
+ function f() {
+ if (Bo.event.touches.length) {
+ for (var t = Bo.event.changedTouches, e = 0, r = t.length; r > e; ++e)delete v[t[e].identifier];
+ for (var u in v)return void n()
+ }
+ Bo.selectAll(b).on(y, null), w.on(A, l).on(z, s), k(), c(p)
+ }
+
+ var h, g = this, p = L.of(g, arguments), v = {}, d = 0, y = ".zoom-" + Bo.event.changedTouches[0].identifier, x = "touchmove" + y, M = "touchend" + y, b = [], w = Bo.select(g), k = X();
+ Y.call(g), e(), o(p), w.on(A, null).on(z, e)
+ }
+
+ function f() {
+ var n = L.of(this, arguments);
+ d ? clearTimeout(d) : (g = t(p = v || Bo.mouse(this)), Y.call(this), o(n)), d = setTimeout(function () {
+ d = null, c(n)
+ }, 50), _(), r(Math.pow(2, .002 * Pa()) * S.k), u(p, g), a(n)
+ }
+
+ function h() {
+ var n = L.of(this, arguments), e = Bo.mouse(this), i = t(e), l = Math.log(S.k) / Math.LN2;
+ o(n), r(Math.pow(2, Bo.event.shiftKey ? Math.ceil(l) - 1 : Math.floor(l) + 1)), u(e, i), a(n), c(n)
+ }
+
+ var g, p, v, d, m, y, x, M, b, S = {
+ x: 0,
+ y: 0,
+ k: 1
+ }, k = [960, 500], E = Ua, A = "mousedown.zoom", C = "mousemove.zoom", N = "mouseup.zoom", z = "touchstart.zoom", L = w(n, "zoomstart", "zoom", "zoomend");
+ return n.event = function (n) {
+ n.each(function () {
+ var n = L.of(this, arguments), t = S;
+ Cl ? Bo.select(this).transition().each("start.zoom", function () {
+ S = this.__chart__ || {x: 0, y: 0, k: 1}, o(n)
+ }).tween("zoom:zoom", function () {
+ var e = k[0], r = k[1], u = e / 2, i = r / 2, o = Bo.interpolateZoom([(u - S.x) / S.k, (i - S.y) / S.k, e / S.k], [(u - t.x) / t.k, (i - t.y) / t.k, e / t.k]);
+ return function (t) {
+ var r = o(t), c = e / r[2];
+ this.__chart__ = S = {x: u - r[0] * c, y: i - r[1] * c, k: c}, a(n)
+ }
+ }).each("end.zoom", function () {
+ c(n)
+ }) : (this.__chart__ = S, o(n), a(n), c(n))
+ })
+ }, n.translate = function (t) {
+ return arguments.length ? (S = {x: +t[0], y: +t[1], k: S.k}, i(), n) : [S.x, S.y]
+ }, n.scale = function (t) {
+ return arguments.length ? (S = {x: S.x, y: S.y, k: +t}, i(), n) : S.k
+ }, n.scaleExtent = function (t) {
+ return arguments.length ? (E = null == t ? Ua : [+t[0], +t[1]], n) : E
+ }, n.center = function (t) {
+ return arguments.length ? (v = t && [+t[0], +t[1]], n) : v
+ }, n.size = function (t) {
+ return arguments.length ? (k = t && [+t[0], +t[1]], n) : k
+ }, n.x = function (t) {
+ return arguments.length ? (x = t, y = t.copy(), S = {x: 0, y: 0, k: 1}, n) : x
+ }, n.y = function (t) {
+ return arguments.length ? (b = t, M = t.copy(), S = {x: 0, y: 0, k: 1}, n) : b
+ }, Bo.rebind(n, L, "on")
+ };
+ var Pa, Ua = [0, 1 / 0], ja = "onwheel"in Go ? (Pa = function () {
+ return -Bo.event.deltaY * (Bo.event.deltaMode ? 120 : 1)
+ }, "wheel") : "onmousewheel"in Go ? (Pa = function () {
+ return Bo.event.wheelDelta
+ }, "mousewheel") : (Pa = function () {
+ return -Bo.event.detail
+ }, "MozMousePixelScroll");
+ Bo.color = it, it.prototype.toString = function () {
+ return this.rgb() + ""
+ }, Bo.hsl = ot;
+ var Fa = ot.prototype = new it;
+ Fa.brighter = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, this.l / n)
+ }, Fa.darker = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new ot(this.h, this.s, n * this.l)
+ }, Fa.rgb = function () {
+ return at(this.h, this.s, this.l)
+ }, Bo.hcl = ct;
+ var Ha = ct.prototype = new it;
+ Ha.brighter = function (n) {
+ return new ct(this.h, this.c, Math.min(100, this.l + Oa * (arguments.length ? n : 1)))
+ }, Ha.darker = function (n) {
+ return new ct(this.h, this.c, Math.max(0, this.l - Oa * (arguments.length ? n : 1)))
+ }, Ha.rgb = function () {
+ return lt(this.h, this.c, this.l).rgb()
+ }, Bo.lab = st;
+ var Oa = 18, Ya = .95047, Ia = 1, Za = 1.08883, Va = st.prototype = new it;
+ Va.brighter = function (n) {
+ return new st(Math.min(100, this.l + Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.darker = function (n) {
+ return new st(Math.max(0, this.l - Oa * (arguments.length ? n : 1)), this.a, this.b)
+ }, Va.rgb = function () {
+ return ft(this.l, this.a, this.b)
+ }, Bo.rgb = dt;
+ var Xa = dt.prototype = new it;
+ Xa.brighter = function (n) {
+ n = Math.pow(.7, arguments.length ? n : 1);
+ var t = this.r, e = this.g, r = this.b, u = 30;
+ return t || e || r ? (t && u > t && (t = u), e && u > e && (e = u), r && u > r && (r = u), new dt(Math.min(255, t / n), Math.min(255, e / n), Math.min(255, r / n))) : new dt(u, u, u)
+ }, Xa.darker = function (n) {
+ return n = Math.pow(.7, arguments.length ? n : 1), new dt(n * this.r, n * this.g, n * this.b)
+ }, Xa.hsl = function () {
+ return _t(this.r, this.g, this.b)
+ }, Xa.toString = function () {
+ return "#" + xt(this.r) + xt(this.g) + xt(this.b)
+ };
+ var $a = Bo.map({
+ aliceblue: 15792383,
+ antiquewhite: 16444375,
+ aqua: 65535,
+ aquamarine: 8388564,
+ azure: 15794175,
+ beige: 16119260,
+ bisque: 16770244,
+ black: 0,
+ blanchedalmond: 16772045,
+ blue: 255,
+ blueviolet: 9055202,
+ brown: 10824234,
+ burlywood: 14596231,
+ cadetblue: 6266528,
+ chartreuse: 8388352,
+ chocolate: 13789470,
+ coral: 16744272,
+ cornflowerblue: 6591981,
+ cornsilk: 16775388,
+ crimson: 14423100,
+ cyan: 65535,
+ darkblue: 139,
+ darkcyan: 35723,
+ darkgoldenrod: 12092939,
+ darkgray: 11119017,
+ darkgreen: 25600,
+ darkgrey: 11119017,
+ darkkhaki: 12433259,
+ darkmagenta: 9109643,
+ darkolivegreen: 5597999,
+ darkorange: 16747520,
+ darkorchid: 10040012,
+ darkred: 9109504,
+ darksalmon: 15308410,
+ darkseagreen: 9419919,
+ darkslateblue: 4734347,
+ darkslategray: 3100495,
+ darkslategrey: 3100495,
+ darkturquoise: 52945,
+ darkviolet: 9699539,
+ deeppink: 16716947,
+ deepskyblue: 49151,
+ dimgray: 6908265,
+ dimgrey: 6908265,
+ dodgerblue: 2003199,
+ firebrick: 11674146,
+ floralwhite: 16775920,
+ forestgreen: 2263842,
+ fuchsia: 16711935,
+ gainsboro: 14474460,
+ ghostwhite: 16316671,
+ gold: 16766720,
+ goldenrod: 14329120,
+ gray: 8421504,
+ green: 32768,
+ greenyellow: 11403055,
+ grey: 8421504,
+ honeydew: 15794160,
+ hotpink: 16738740,
+ indianred: 13458524,
+ indigo: 4915330,
+ ivory: 16777200,
+ khaki: 15787660,
+ lavender: 15132410,
+ lavenderblush: 16773365,
+ lawngreen: 8190976,
+ lemonchiffon: 16775885,
+ lightblue: 11393254,
+ lightcoral: 15761536,
+ lightcyan: 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray: 13882323,
+ lightgreen: 9498256,
+ lightgrey: 13882323,
+ lightpink: 16758465,
+ lightsalmon: 16752762,
+ lightseagreen: 2142890,
+ lightskyblue: 8900346,
+ lightslategray: 7833753,
+ lightslategrey: 7833753,
+ lightsteelblue: 11584734,
+ lightyellow: 16777184,
+ lime: 65280,
+ limegreen: 3329330,
+ linen: 16445670,
+ magenta: 16711935,
+ maroon: 8388608,
+ mediumaquamarine: 6737322,
+ mediumblue: 205,
+ mediumorchid: 12211667,
+ mediumpurple: 9662683,
+ mediumseagreen: 3978097,
+ mediumslateblue: 8087790,
+ mediumspringgreen: 64154,
+ mediumturquoise: 4772300,
+ mediumvioletred: 13047173,
+ midnightblue: 1644912,
+ mintcream: 16121850,
+ mistyrose: 16770273,
+ moccasin: 16770229,
+ navajowhite: 16768685,
+ navy: 128,
+ oldlace: 16643558,
+ olive: 8421376,
+ olivedrab: 7048739,
+ orange: 16753920,
+ orangered: 16729344,
+ orchid: 14315734,
+ palegoldenrod: 15657130,
+ palegreen: 10025880,
+ paleturquoise: 11529966,
+ palevioletred: 14381203,
+ papayawhip: 16773077,
+ peachpuff: 16767673,
+ peru: 13468991,
+ pink: 16761035,
+ plum: 14524637,
+ powderblue: 11591910,
+ purple: 8388736,
+ red: 16711680,
+ rosybrown: 12357519,
+ royalblue: 4286945,
+ saddlebrown: 9127187,
+ salmon: 16416882,
+ sandybrown: 16032864,
+ seagreen: 3050327,
+ seashell: 16774638,
+ sienna: 10506797,
+ silver: 12632256,
+ skyblue: 8900331,
+ slateblue: 6970061,
+ slategray: 7372944,
+ slategrey: 7372944,
+ snow: 16775930,
+ springgreen: 65407,
+ steelblue: 4620980,
+ tan: 13808780,
+ teal: 32896,
+ thistle: 14204888,
+ tomato: 16737095,
+ turquoise: 4251856,
+ violet: 15631086,
+ wheat: 16113331,
+ white: 16777215,
+ whitesmoke: 16119285,
+ yellow: 16776960,
+ yellowgreen: 10145074
+ });
+ $a.forEach(function (n, t) {
+ $a.set(n, mt(t))
+ }), Bo.functor = kt, Bo.xhr = At(Et), Bo.dsv = function (n, t) {
+ function e(n, e, i) {
+ arguments.length < 3 && (i = e, e = null);
+ var o = Ct(n, t, null == e ? r : u(e), i);
+ return o.row = function (n) {
+ return arguments.length ? o.response(null == (e = n) ? r : u(n)) : e
+ }, o
+ }
+
+ function r(n) {
+ return e.parse(n.responseText)
+ }
+
+ function u(n) {
+ return function (t) {
+ return e.parse(t.responseText, n)
+ }
+ }
+
+ function i(t) {
+ return t.map(o).join(n)
+ }
+
+ function o(n) {
+ return a.test(n) ? '"' + n.replace(/\"/g, '""') + '"' : n
+ }
+
+ var a = new RegExp('["' + n + "\n]"), c = n.charCodeAt(0);
+ return e.parse = function (n, t) {
+ var r;
+ return e.parseRows(n, function (n, e) {
+ if (r)return r(n, e - 1);
+ var u = new Function("d", "return {" + n.map(function (n, t) {
+ return JSON.stringify(n) + ": d[" + t + "]"
+ }).join(",") + "}");
+ r = t ? function (n, e) {
+ return t(u(n), e)
+ } : u
+ })
+ }, e.parseRows = function (n, t) {
+ function e() {
+ if (s >= l)return o;
+ if (u)return u = !1, i;
+ var t = s;
+ if (34 === n.charCodeAt(t)) {
+ for (var e = t; e++ < l;)if (34 === n.charCodeAt(e)) {
+ if (34 !== n.charCodeAt(e + 1))break;
+ ++e
+ }
+ s = e + 2;
+ var r = n.charCodeAt(e + 1);
+ return 13 === r ? (u = !0, 10 === n.charCodeAt(e + 2) && ++s) : 10 === r && (u = !0), n.slice(t + 1, e).replace(/""/g, '"')
+ }
+ for (; l > s;) {
+ var r = n.charCodeAt(s++), a = 1;
+ if (10 === r)u = !0; else if (13 === r)u = !0, 10 === n.charCodeAt(s) && (++s, ++a); else if (r !== c)continue;
+ return n.slice(t, s - a)
+ }
+ return n.slice(t)
+ }
+
+ for (var r, u, i = {}, o = {}, a = [], l = n.length, s = 0, f = 0; (r = e()) !== o;) {
+ for (var h = []; r !== i && r !== o;)h.push(r), r = e();
+ t && null == (h = t(h, f++)) || a.push(h)
+ }
+ return a
+ }, e.format = function (t) {
+ if (Array.isArray(t[0]))return e.formatRows(t);
+ var r = new v, u = [];
+ return t.forEach(function (n) {
+ for (var t in n)r.has(t) || u.push(r.add(t))
+ }), [u.map(o).join(n)].concat(t.map(function (t) {
+ return u.map(function (n) {
+ return o(t[n])
+ }).join(n)
+ })).join("\n")
+ }, e.formatRows = function (n) {
+ return n.map(i).join("\n")
+ }, e
+ }, Bo.csv = Bo.dsv(",", "text/csv"), Bo.tsv = Bo.dsv(" ", "text/tab-separated-values");
+ var Ba, Wa, Ja, Ga, Ka, Qa = Qo[m(Qo, "requestAnimationFrame")] || function (n) {
+ setTimeout(n, 17)
+ };
+ Bo.timer = function (n, t, e) {
+ var r = arguments.length;
+ 2 > r && (t = 0), 3 > r && (e = Date.now());
+ var u = e + t, i = {c: n, t: u, f: !1, n: null};
+ Wa ? Wa.n = i : Ba = i, Wa = i, Ja || (Ga = clearTimeout(Ga), Ja = 1, Qa(Lt))
+ }, Bo.timer.flush = function () {
+ Tt(), qt()
+ }, Bo.round = function (n, t) {
+ return t ? Math.round(n * (t = Math.pow(10, t))) / t : Math.round(n)
+ };
+ var nc = ["y", "z", "a", "f", "p", "n", "\xb5", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"].map(Dt);
+ Bo.formatPrefix = function (n, t) {
+ var e = 0;
+ return n && (0 > n && (n *= -1), t && (n = Bo.round(n, Rt(n, t))), e = 1 + Math.floor(1e-12 + Math.log(n) / Math.LN10), e = Math.max(-24, Math.min(24, 3 * Math.floor((e - 1) / 3)))), nc[8 + e / 3]
+ };
+ var tc = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i, ec = Bo.map({
+ b: function (n) {
+ return n.toString(2)
+ }, c: function (n) {
+ return String.fromCharCode(n)
+ }, o: function (n) {
+ return n.toString(8)
+ }, x: function (n) {
+ return n.toString(16)
+ }, X: function (n) {
+ return n.toString(16).toUpperCase()
+ }, g: function (n, t) {
+ return n.toPrecision(t)
+ }, e: function (n, t) {
+ return n.toExponential(t)
+ }, f: function (n, t) {
+ return n.toFixed(t)
+ }, r: function (n, t) {
+ return (n = Bo.round(n, Rt(n, t))).toFixed(Math.max(0, Math.min(20, Rt(n * (1 + 1e-15), t))))
+ }
+ }), rc = Bo.time = {}, uc = Date;
+ jt.prototype = {
+ getDate: function () {
+ return this._.getUTCDate()
+ }, getDay: function () {
+ return this._.getUTCDay()
+ }, getFullYear: function () {
+ return this._.getUTCFullYear()
+ }, getHours: function () {
+ return this._.getUTCHours()
+ }, getMilliseconds: function () {
+ return this._.getUTCMilliseconds()
+ }, getMinutes: function () {
+ return this._.getUTCMinutes()
+ }, getMonth: function () {
+ return this._.getUTCMonth()
+ }, getSeconds: function () {
+ return this._.getUTCSeconds()
+ }, getTime: function () {
+ return this._.getTime()
+ }, getTimezoneOffset: function () {
+ return 0
+ }, valueOf: function () {
+ return this._.valueOf()
+ }, setDate: function () {
+ ic.setUTCDate.apply(this._, arguments)
+ }, setDay: function () {
+ ic.setUTCDay.apply(this._, arguments)
+ }, setFullYear: function () {
+ ic.setUTCFullYear.apply(this._, arguments)
+ }, setHours: function () {
+ ic.setUTCHours.apply(this._, arguments)
+ }, setMilliseconds: function () {
+ ic.setUTCMilliseconds.apply(this._, arguments)
+ }, setMinutes: function () {
+ ic.setUTCMinutes.apply(this._, arguments)
+ }, setMonth: function () {
+ ic.setUTCMonth.apply(this._, arguments)
+ }, setSeconds: function () {
+ ic.setUTCSeconds.apply(this._, arguments)
+ }, setTime: function () {
+ ic.setTime.apply(this._, arguments)
+ }
+ };
+ var ic = Date.prototype;
+ rc.year = Ft(function (n) {
+ return n = rc.day(n), n.setMonth(0, 1), n
+ }, function (n, t) {
+ n.setFullYear(n.getFullYear() + t)
+ }, function (n) {
+ return n.getFullYear()
+ }), rc.years = rc.year.range, rc.years.utc = rc.year.utc.range, rc.day = Ft(function (n) {
+ var t = new uc(2e3, 0);
+ return t.setFullYear(n.getFullYear(), n.getMonth(), n.getDate()), t
+ }, function (n, t) {
+ n.setDate(n.getDate() + t)
+ }, function (n) {
+ return n.getDate() - 1
+ }), rc.days = rc.day.range, rc.days.utc = rc.day.utc.range, rc.dayOfYear = function (n) {
+ var t = rc.year(n);
+ return Math.floor((n - t - 6e4 * (n.getTimezoneOffset() - t.getTimezoneOffset())) / 864e5)
+ }, ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"].forEach(function (n, t) {
+ t = 7 - t;
+ var e = rc[n] = Ft(function (n) {
+ return (n = rc.day(n)).setDate(n.getDate() - (n.getDay() + t) % 7), n
+ }, function (n, t) {
+ n.setDate(n.getDate() + 7 * Math.floor(t))
+ }, function (n) {
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7) - (e !== t)
+ });
+ rc[n + "s"] = e.range, rc[n + "s"].utc = e.utc.range, rc[n + "OfYear"] = function (n) {
+ var e = rc.year(n).getDay();
+ return Math.floor((rc.dayOfYear(n) + (e + t) % 7) / 7)
+ }
+ }), rc.week = rc.sunday, rc.weeks = rc.sunday.range, rc.weeks.utc = rc.sunday.utc.range, rc.weekOfYear = rc.sundayOfYear;
+ var oc = {"-": "", _: " ", 0: "0"}, ac = /^\s*\d+/, cc = /^%/;
+ Bo.locale = function (n) {
+ return {numberFormat: Pt(n), timeFormat: Ot(n)}
+ };
+ var lc = Bo.locale({
+ decimal: ".",
+ thousands: ",",
+ grouping: [3],
+ currency: ["$", ""],
+ dateTime: "%a %b %e %X %Y",
+ date: "%m/%d/%Y",
+ time: "%H:%M:%S",
+ periods: ["AM", "PM"],
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+ });
+ Bo.format = lc.numberFormat, Bo.geo = {}, ce.prototype = {
+ s: 0, t: 0, add: function (n) {
+ le(n, this.t, sc), le(sc.s, this.s, this), this.s ? this.t += sc.t : this.s = sc.t
+ }, reset: function () {
+ this.s = this.t = 0
+ }, valueOf: function () {
+ return this.s
+ }
+ };
+ var sc = new ce;
+ Bo.geo.stream = function (n, t) {
+ n && fc.hasOwnProperty(n.type) ? fc[n.type](n, t) : se(n, t)
+ };
+ var fc = {
+ Feature: function (n, t) {
+ se(n.geometry, t)
+ }, FeatureCollection: function (n, t) {
+ for (var e = n.features, r = -1, u = e.length; ++r < u;)se(e[r].geometry, t)
+ }
+ }, hc = {
+ Sphere: function (n, t) {
+ t.sphere()
+ }, Point: function (n, t) {
+ n = n.coordinates, t.point(n[0], n[1], n[2])
+ }, MultiPoint: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)n = e[r], t.point(n[0], n[1], n[2])
+ }, LineString: function (n, t) {
+ fe(n.coordinates, t, 0)
+ }, MultiLineString: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)fe(e[r], t, 0)
+ }, Polygon: function (n, t) {
+ he(n.coordinates, t)
+ }, MultiPolygon: function (n, t) {
+ for (var e = n.coordinates, r = -1, u = e.length; ++r < u;)he(e[r], t)
+ }, GeometryCollection: function (n, t) {
+ for (var e = n.geometries, r = -1, u = e.length; ++r < u;)se(e[r], t)
+ }
+ };
+ Bo.geo.area = function (n) {
+ return gc = 0, Bo.geo.stream(n, vc), gc
+ };
+ var gc, pc = new ce, vc = {
+ sphere: function () {
+ gc += 4 * Ea
+ }, point: y, lineStart: y, lineEnd: y, polygonStart: function () {
+ pc.reset(), vc.lineStart = ge
+ }, polygonEnd: function () {
+ var n = 2 * pc;
+ gc += 0 > n ? 4 * Ea + n : n, vc.lineStart = vc.lineEnd = vc.point = y
+ }
+ };
+ Bo.geo.bounds = function () {
+ function n(n, t) {
+ x.push(M = [s = n, h = n]), f > t && (f = t), t > g && (g = t)
+ }
+
+ function t(t, e) {
+ var r = pe([t * La, e * La]);
+ if (m) {
+ var u = de(m, r), i = [u[1], -u[0], 0], o = de(i, u);
+ xe(o), o = Me(o);
+ var c = t - p, l = c > 0 ? 1 : -1, v = o[0] * Ta * l, d = ca(c) > 180;
+ if (d ^ (v > l * p && l * t > v)) {
+ var y = o[1] * Ta;
+ y > g && (g = y)
+ } else if (v = (v + 360) % 360 - 180, d ^ (v > l * p && l * t > v)) {
+ var y = -o[1] * Ta;
+ f > y && (f = y)
+ } else f > e && (f = e), e > g && (g = e);
+ d ? p > t ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t) : h >= s ? (s > t && (s = t), t > h && (h = t)) : t > p ? a(s, t) > a(s, h) && (h = t) : a(t, h) > a(s, h) && (s = t)
+ } else n(t, e);
+ m = r, p = t
+ }
+
+ function e() {
+ _.point = t
+ }
+
+ function r() {
+ M[0] = s, M[1] = h, _.point = n, m = null
+ }
+
+ function u(n, e) {
+ if (m) {
+ var r = n - p;
+ y += ca(r) > 180 ? r + (r > 0 ? 360 : -360) : r
+ } else v = n, d = e;
+ vc.point(n, e), t(n, e)
+ }
+
+ function i() {
+ vc.lineStart()
+ }
+
+ function o() {
+ u(v, d), vc.lineEnd(), ca(y) > Na && (s = -(h = 180)), M[0] = s, M[1] = h, m = null
+ }
+
+ function a(n, t) {
+ return (t -= n) < 0 ? t + 360 : t
+ }
+
+ function c(n, t) {
+ return n[0] - t[0]
+ }
+
+ function l(n, t) {
+ return t[0] <= t[1] ? t[0] <= n && n <= t[1] : n < t[0] || t[1] < n
+ }
+
+ var s, f, h, g, p, v, d, m, y, x, M, _ = {
+ point: n, lineStart: e, lineEnd: r, polygonStart: function () {
+ _.point = u, _.lineStart = i, _.lineEnd = o, y = 0, vc.polygonStart()
+ }, polygonEnd: function () {
+ vc.polygonEnd(), _.point = n, _.lineStart = e, _.lineEnd = r, 0 > pc ? (s = -(h = 180), f = -(g = 90)) : y > Na ? g = 90 : -Na > y && (f = -90), M[0] = s, M[1] = h
+ }
+ };
+ return function (n) {
+ g = h = -(s = f = 1 / 0), x = [], Bo.geo.stream(n, _);
+ var t = x.length;
+ if (t) {
+ x.sort(c);
+ for (var e, r = 1, u = x[0], i = [u]; t > r; ++r)e = x[r], l(e[0], u) || l(e[1], u) ? (a(u[0], e[1]) > a(u[0], u[1]) && (u[1] = e[1]), a(e[0], u[1]) > a(u[0], u[1]) && (u[0] = e[0])) : i.push(u = e);
+ for (var o, e, p = -1 / 0, t = i.length - 1, r = 0, u = i[t]; t >= r; u = e, ++r)e = i[r], (o = a(u[1], e[0])) > p && (p = o, s = e[0], h = u[1])
+ }
+ return x = M = null, 1 / 0 === s || 1 / 0 === f ? [[0 / 0, 0 / 0], [0 / 0, 0 / 0]] : [[s, f], [h, g]]
+ }
+ }(), Bo.geo.centroid = function (n) {
+ dc = mc = yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, Ac);
+ var t = Sc, e = kc, r = Ec, u = t * t + e * e + r * r;
+ return za > u && (t = _c, e = bc, r = wc, Na > mc && (t = yc, e = xc, r = Mc), u = t * t + e * e + r * r, za > u) ? [0 / 0, 0 / 0] : [Math.atan2(e, t) * Ta, nt(r / Math.sqrt(u)) * Ta]
+ };
+ var dc, mc, yc, xc, Mc, _c, bc, wc, Sc, kc, Ec, Ac = {
+ sphere: y,
+ point: be,
+ lineStart: Se,
+ lineEnd: ke,
+ polygonStart: function () {
+ Ac.lineStart = Ee
+ },
+ polygonEnd: function () {
+ Ac.lineStart = Se
+ }
+ }, Cc = Le(Ae, De, Ue, [-Ea, -Ea / 2]), Nc = 1e9;
+ Bo.geo.clipExtent = function () {
+ var n, t, e, r, u, i, o = {
+ stream: function (n) {
+ return u && (u.valid = !1), u = i(n), u.valid = !0, u
+ }, extent: function (a) {
+ return arguments.length ? (i = Oe(n = +a[0][0], t = +a[0][1], e = +a[1][0], r = +a[1][1]), u && (u.valid = !1, u = null), o) : [[n, t], [e, r]]
+ }
+ };
+ return o.extent([[0, 0], [960, 500]])
+ }, (Bo.geo.conicEqualArea = function () {
+ return Ie(Ze)
+ }).raw = Ze, Bo.geo.albers = function () {
+ return Bo.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070)
+ }, Bo.geo.albersUsa = function () {
+ function n(n) {
+ var i = n[0], o = n[1];
+ return t = null, e(i, o), t || (r(i, o), t) || u(i, o), t
+ }
+
+ var t, e, r, u, i = Bo.geo.albers(), o = Bo.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), a = Bo.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), c = {
+ point: function (n, e) {
+ t = [n, e]
+ }
+ };
+ return n.invert = function (n) {
+ var t = i.scale(), e = i.translate(), r = (n[0] - e[0]) / t, u = (n[1] - e[1]) / t;
+ return (u >= .12 && .234 > u && r >= -.425 && -.214 > r ? o : u >= .166 && .234 > u && r >= -.214 && -.115 > r ? a : i).invert(n)
+ }, n.stream = function (n) {
+ var t = i.stream(n), e = o.stream(n), r = a.stream(n);
+ return {
+ point: function (n, u) {
+ t.point(n, u), e.point(n, u), r.point(n, u)
+ }, sphere: function () {
+ t.sphere(), e.sphere(), r.sphere()
+ }, lineStart: function () {
+ t.lineStart(), e.lineStart(), r.lineStart()
+ }, lineEnd: function () {
+ t.lineEnd(), e.lineEnd(), r.lineEnd()
+ }, polygonStart: function () {
+ t.polygonStart(), e.polygonStart(), r.polygonStart()
+ }, polygonEnd: function () {
+ t.polygonEnd(), e.polygonEnd(), r.polygonEnd()
+ }
+ }
+ }, n.precision = function (t) {
+ return arguments.length ? (i.precision(t), o.precision(t), a.precision(t), n) : i.precision()
+ }, n.scale = function (t) {
+ return arguments.length ? (i.scale(t), o.scale(.35 * t), a.scale(t), n.translate(i.translate())) : i.scale()
+ }, n.translate = function (t) {
+ if (!arguments.length)return i.translate();
+ var l = i.scale(), s = +t[0], f = +t[1];
+ return e = i.translate(t).clipExtent([[s - .455 * l, f - .238 * l], [s + .455 * l, f + .238 * l]]).stream(c).point, r = o.translate([s - .307 * l, f + .201 * l]).clipExtent([[s - .425 * l + Na, f + .12 * l + Na], [s - .214 * l - Na, f + .234 * l - Na]]).stream(c).point, u = a.translate([s - .205 * l, f + .212 * l]).clipExtent([[s - .214 * l + Na, f + .166 * l + Na], [s - .115 * l - Na, f + .234 * l - Na]]).stream(c).point, n
+ }, n.scale(1070)
+ };
+ var zc, Lc, Tc, qc, Rc, Dc, Pc = {
+ point: y, lineStart: y, lineEnd: y, polygonStart: function () {
+ Lc = 0, Pc.lineStart = Ve
+ }, polygonEnd: function () {
+ Pc.lineStart = Pc.lineEnd = Pc.point = y, zc += ca(Lc / 2)
+ }
+ }, Uc = {point: Xe, lineStart: y, lineEnd: y, polygonStart: y, polygonEnd: y}, jc = {
+ point: We,
+ lineStart: Je,
+ lineEnd: Ge,
+ polygonStart: function () {
+ jc.lineStart = Ke
+ },
+ polygonEnd: function () {
+ jc.point = We, jc.lineStart = Je, jc.lineEnd = Ge
+ }
+ };
+ Bo.geo.path = function () {
+ function n(n) {
+ return n && ("function" == typeof a && i.pointRadius(+a.apply(this, arguments)), o && o.valid || (o = u(i)), Bo.geo.stream(n, o)), i.result()
+ }
+
+ function t() {
+ return o = null, n
+ }
+
+ var e, r, u, i, o, a = 4.5;
+ return n.area = function (n) {
+ return zc = 0, Bo.geo.stream(n, u(Pc)), zc
+ }, n.centroid = function (n) {
+ return yc = xc = Mc = _c = bc = wc = Sc = kc = Ec = 0, Bo.geo.stream(n, u(jc)), Ec ? [Sc / Ec, kc / Ec] : wc ? [_c / wc, bc / wc] : Mc ? [yc / Mc, xc / Mc] : [0 / 0, 0 / 0]
+ }, n.bounds = function (n) {
+ return Rc = Dc = -(Tc = qc = 1 / 0), Bo.geo.stream(n, u(Uc)), [[Tc, qc], [Rc, Dc]]
+ }, n.projection = function (n) {
+ return arguments.length ? (u = (e = n) ? n.stream || tr(n) : Et, t()) : e
+ }, n.context = function (n) {
+ return arguments.length ? (i = null == (r = n) ? new $e : new Qe(n), "function" != typeof a && i.pointRadius(a), t()) : r
+ }, n.pointRadius = function (t) {
+ return arguments.length ? (a = "function" == typeof t ? t : (i.pointRadius(+t), +t), n) : a
+ }, n.projection(Bo.geo.albersUsa()).context(null)
+ }, Bo.geo.transform = function (n) {
+ return {
+ stream: function (t) {
+ var e = new er(t);
+ for (var r in n)e[r] = n[r];
+ return e
+ }
+ }
+ }, er.prototype = {
+ point: function (n, t) {
+ this.stream.point(n, t)
+ }, sphere: function () {
+ this.stream.sphere()
+ }, lineStart: function () {
+ this.stream.lineStart()
+ }, lineEnd: function () {
+ this.stream.lineEnd()
+ }, polygonStart: function () {
+ this.stream.polygonStart()
+ }, polygonEnd: function () {
+ this.stream.polygonEnd()
+ }
+ }, Bo.geo.projection = ur, Bo.geo.projectionMutator = ir, (Bo.geo.equirectangular = function () {
+ return ur(ar)
+ }).raw = ar.invert = ar, Bo.geo.rotation = function (n) {
+ function t(t) {
+ return t = n(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }
+
+ return n = lr(n[0] % 360 * La, n[1] * La, n.length > 2 ? n[2] * La : 0), t.invert = function (t) {
+ return t = n.invert(t[0] * La, t[1] * La), t[0] *= Ta, t[1] *= Ta, t
+ }, t
+ }, cr.invert = ar, Bo.geo.circle = function () {
+ function n() {
+ var n = "function" == typeof r ? r.apply(this, arguments) : r, t = lr(-n[0] * La, -n[1] * La, 0).invert, u = [];
+ return e(null, null, 1, {
+ point: function (n, e) {
+ u.push(n = t(n, e)), n[0] *= Ta, n[1] *= Ta
+ }
+ }), {type: "Polygon", coordinates: [u]}
+ }
+
+ var t, e, r = [0, 0], u = 6;
+ return n.origin = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.angle = function (r) {
+ return arguments.length ? (e = gr((t = +r) * La, u * La), n) : t
+ }, n.precision = function (r) {
+ return arguments.length ? (e = gr(t * La, (u = +r) * La), n) : u
+ }, n.angle(90)
+ }, Bo.geo.distance = function (n, t) {
+ var e, r = (t[0] - n[0]) * La, u = n[1] * La, i = t[1] * La, o = Math.sin(r), a = Math.cos(r), c = Math.sin(u), l = Math.cos(u), s = Math.sin(i), f = Math.cos(i);
+ return Math.atan2(Math.sqrt((e = f * o) * e + (e = l * s - c * f * a) * e), c * s + l * f * a)
+ }, Bo.geo.graticule = function () {
+ function n() {
+ return {type: "MultiLineString", coordinates: t()}
+ }
+
+ function t() {
+ return Bo.range(Math.ceil(i / d) * d, u, d).map(h).concat(Bo.range(Math.ceil(l / m) * m, c, m).map(g)).concat(Bo.range(Math.ceil(r / p) * p, e, p).filter(function (n) {
+ return ca(n % d) > Na
+ }).map(s)).concat(Bo.range(Math.ceil(a / v) * v, o, v).filter(function (n) {
+ return ca(n % m) > Na
+ }).map(f))
+ }
+
+ var e, r, u, i, o, a, c, l, s, f, h, g, p = 10, v = p, d = 90, m = 360, y = 2.5;
+ return n.lines = function () {
+ return t().map(function (n) {
+ return {type: "LineString", coordinates: n}
+ })
+ }, n.outline = function () {
+ return {
+ type: "Polygon",
+ coordinates: [h(i).concat(g(c).slice(1), h(u).reverse().slice(1), g(l).reverse().slice(1))]
+ }
+ }, n.extent = function (t) {
+ return arguments.length ? n.majorExtent(t).minorExtent(t) : n.minorExtent()
+ }, n.majorExtent = function (t) {
+ return arguments.length ? (i = +t[0][0], u = +t[1][0], l = +t[0][1], c = +t[1][1], i > u && (t = i, i = u, u = t), l > c && (t = l, l = c, c = t), n.precision(y)) : [[i, l], [u, c]]
+ }, n.minorExtent = function (t) {
+ return arguments.length ? (r = +t[0][0], e = +t[1][0], a = +t[0][1], o = +t[1][1], r > e && (t = r, r = e, e = t), a > o && (t = a, a = o, o = t), n.precision(y)) : [[r, a], [e, o]]
+ }, n.step = function (t) {
+ return arguments.length ? n.majorStep(t).minorStep(t) : n.minorStep()
+ }, n.majorStep = function (t) {
+ return arguments.length ? (d = +t[0], m = +t[1], n) : [d, m]
+ }, n.minorStep = function (t) {
+ return arguments.length ? (p = +t[0], v = +t[1], n) : [p, v]
+ }, n.precision = function (t) {
+ return arguments.length ? (y = +t, s = vr(a, o, 90), f = dr(r, e, y), h = vr(l, c, 90), g = dr(i, u, y), n) : y
+ }, n.majorExtent([[-180, -90 + Na], [180, 90 - Na]]).minorExtent([[-180, -80 - Na], [180, 80 + Na]])
+ }, Bo.geo.greatArc = function () {
+ function n() {
+ return {type: "LineString", coordinates: [t || r.apply(this, arguments), e || u.apply(this, arguments)]}
+ }
+
+ var t, e, r = mr, u = yr;
+ return n.distance = function () {
+ return Bo.geo.distance(t || r.apply(this, arguments), e || u.apply(this, arguments))
+ }, n.source = function (e) {
+ return arguments.length ? (r = e, t = "function" == typeof e ? null : e, n) : r
+ }, n.target = function (t) {
+ return arguments.length ? (u = t, e = "function" == typeof t ? null : t, n) : u
+ }, n.precision = function () {
+ return arguments.length ? n : 0
+ }, n
+ }, Bo.geo.interpolate = function (n, t) {
+ return xr(n[0] * La, n[1] * La, t[0] * La, t[1] * La)
+ }, Bo.geo.length = function (n) {
+ return Fc = 0, Bo.geo.stream(n, Hc), Fc
+ };
+ var Fc, Hc = {
+ sphere: y,
+ point: y,
+ lineStart: Mr,
+ lineEnd: y,
+ polygonStart: y,
+ polygonEnd: y
+ }, Oc = _r(function (n) {
+ return Math.sqrt(2 / (1 + n))
+ }, function (n) {
+ return 2 * Math.asin(n / 2)
+ });
+ (Bo.geo.azimuthalEqualArea = function () {
+ return ur(Oc)
+ }).raw = Oc;
+ var Yc = _r(function (n) {
+ var t = Math.acos(n);
+ return t && t / Math.sin(t)
+ }, Et);
+ (Bo.geo.azimuthalEquidistant = function () {
+ return ur(Yc)
+ }).raw = Yc, (Bo.geo.conicConformal = function () {
+ return Ie(br)
+ }).raw = br, (Bo.geo.conicEquidistant = function () {
+ return Ie(wr)
+ }).raw = wr;
+ var Ic = _r(function (n) {
+ return 1 / n
+ }, Math.atan);
+ (Bo.geo.gnomonic = function () {
+ return ur(Ic)
+ }).raw = Ic, Sr.invert = function (n, t) {
+ return [n, 2 * Math.atan(Math.exp(t)) - Ca]
+ }, (Bo.geo.mercator = function () {
+ return kr(Sr)
+ }).raw = Sr;
+ var Zc = _r(function () {
+ return 1
+ }, Math.asin);
+ (Bo.geo.orthographic = function () {
+ return ur(Zc)
+ }).raw = Zc;
+ var Vc = _r(function (n) {
+ return 1 / (1 + n)
+ }, function (n) {
+ return 2 * Math.atan(n)
+ });
+ (Bo.geo.stereographic = function () {
+ return ur(Vc)
+ }).raw = Vc, Er.invert = function (n, t) {
+ return [-t, 2 * Math.atan(Math.exp(n)) - Ca]
+ }, (Bo.geo.transverseMercator = function () {
+ var n = kr(Er), t = n.center, e = n.rotate;
+ return n.center = function (n) {
+ return n ? t([-n[1], n[0]]) : (n = t(), [n[1], -n[0]])
+ }, n.rotate = function (n) {
+ return n ? e([n[0], n[1], n.length > 2 ? n[2] + 90 : 90]) : (n = e(), [n[0], n[1], n[2] - 90])
+ }, e([0, 0, 90])
+ }).raw = Er, Bo.geom = {}, Bo.geom.hull = function (n) {
+ function t(n) {
+ if (n.length < 3)return [];
+ var t, u = kt(e), i = kt(r), o = n.length, a = [], c = [];
+ for (t = 0; o > t; t++)a.push([+u.call(this, n[t], t), +i.call(this, n[t], t), t]);
+ for (a.sort(zr), t = 0; o > t; t++)c.push([a[t][0], -a[t][1]]);
+ var l = Nr(a), s = Nr(c), f = s[0] === l[0], h = s[s.length - 1] === l[l.length - 1], g = [];
+ for (t = l.length - 1; t >= 0; --t)g.push(n[a[l[t]][2]]);
+ for (t = +f; t < s.length - h; ++t)g.push(n[a[s[t]][2]]);
+ return g
+ }
+
+ var e = Ar, r = Cr;
+ return arguments.length ? t(n) : (t.x = function (n) {
+ return arguments.length ? (e = n, t) : e
+ }, t.y = function (n) {
+ return arguments.length ? (r = n, t) : r
+ }, t)
+ }, Bo.geom.polygon = function (n) {
+ return ga(n, Xc), n
+ };
+ var Xc = Bo.geom.polygon.prototype = [];
+ Xc.area = function () {
+ for (var n, t = -1, e = this.length, r = this[e - 1], u = 0; ++t < e;)n = r, r = this[t], u += n[1] * r[0] - n[0] * r[1];
+ return .5 * u
+ }, Xc.centroid = function (n) {
+ var t, e, r = -1, u = this.length, i = 0, o = 0, a = this[u - 1];
+ for (arguments.length || (n = -1 / (6 * this.area())); ++r < u;)t = a, a = this[r], e = t[0] * a[1] - a[0] * t[1], i += (t[0] + a[0]) * e, o += (t[1] + a[1]) * e;
+ return [i * n, o * n]
+ }, Xc.clip = function (n) {
+ for (var t, e, r, u, i, o, a = qr(n), c = -1, l = this.length - qr(this), s = this[l - 1]; ++c < l;) {
+ for (t = n.slice(), n.length = 0, u = this[c], i = t[(r = t.length - a) - 1], e = -1; ++e < r;)o = t[e], Lr(o, s, u) ? (Lr(i, s, u) || n.push(Tr(i, o, s, u)), n.push(o)) : Lr(i, s, u) && n.push(Tr(i, o, s, u)), i = o;
+ a && n.push(n[0]), s = u
+ }
+ return n
+ };
+ var $c, Bc, Wc, Jc, Gc, Kc = [], Qc = [];
+ Or.prototype.prepare = function () {
+ for (var n, t = this.edges, e = t.length; e--;)n = t[e].edge, n.b && n.a || t.splice(e, 1);
+ return t.sort(Ir), t.length
+ }, Qr.prototype = {
+ start: function () {
+ return this.edge.l === this.site ? this.edge.a : this.edge.b
+ }, end: function () {
+ return this.edge.l === this.site ? this.edge.b : this.edge.a
+ }
+ }, nu.prototype = {
+ insert: function (n, t) {
+ var e, r, u;
+ if (n) {
+ if (t.P = n, t.N = n.N, n.N && (n.N.P = t), n.N = t, n.R) {
+ for (n = n.R; n.L;)n = n.L;
+ n.L = t
+ } else n.R = t;
+ e = n
+ } else this._ ? (n = uu(this._), t.P = null, t.N = n, n.P = n.L = t, e = n) : (t.P = t.N = null, this._ = t, e = null);
+ for (t.L = t.R = null, t.U = e, t.C = !0, n = t; e && e.C;)r = e.U, e === r.L ? (u = r.R, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.R && (eu(this, e), n = e, e = n.U), e.C = !1, r.C = !0, ru(this, r))) : (u = r.L, u && u.C ? (e.C = u.C = !1, r.C = !0, n = r) : (n === e.L && (ru(this, e), n = e, e = n.U), e.C = !1, r.C = !0, eu(this, r))), e = n.U;
+ this._.C = !1
+ }, remove: function (n) {
+ n.N && (n.N.P = n.P), n.P && (n.P.N = n.N), n.N = n.P = null;
+ var t, e, r, u = n.U, i = n.L, o = n.R;
+ if (e = i ? o ? uu(o) : i : o, u ? u.L === n ? u.L = e : u.R = e : this._ = e, i && o ? (r = e.C, e.C = n.C, e.L = i, i.U = e, e !== o ? (u = e.U, e.U = n.U, n = e.R, u.L = n, e.R = o, o.U = e) : (e.U = u, u = e, n = e.R)) : (r = n.C, n = e), n && (n.U = u), !r) {
+ if (n && n.C)return n.C = !1, void 0;
+ do {
+ if (n === this._)break;
+ if (n === u.L) {
+ if (t = u.R, t.C && (t.C = !1, u.C = !0, eu(this, u), t = u.R), t.L && t.L.C || t.R && t.R.C) {
+ t.R && t.R.C || (t.L.C = !1, t.C = !0, ru(this, t), t = u.R), t.C = u.C, u.C = t.R.C = !1, eu(this, u), n = this._;
+ break
+ }
+ } else if (t = u.L, t.C && (t.C = !1, u.C = !0, ru(this, u), t = u.L), t.L && t.L.C || t.R && t.R.C) {
+ t.L && t.L.C || (t.R.C = !1, t.C = !0, eu(this, t), t = u.L), t.C = u.C, u.C = t.L.C = !1, ru(this, u), n = this._;
+ break
+ }
+ t.C = !0, n = u, u = u.U
+ } while (!n.C);
+ n && (n.C = !1)
+ }
+ }
+ }, Bo.geom.voronoi = function (n) {
+ function t(n) {
+ var t = new Array(n.length), r = a[0][0], u = a[0][1], i = a[1][0], o = a[1][1];
+ return iu(e(n), a).cells.forEach(function (e, a) {
+ var c = e.edges, l = e.site, s = t[a] = c.length ? c.map(function (n) {
+ var t = n.start();
+ return [t.x, t.y]
+ }) : l.x >= r && l.x <= i && l.y >= u && l.y <= o ? [[r, o], [i, o], [i, u], [r, u]] : [];
+ s.point = n[a]
+ }), t
+ }
+
+ function e(n) {
+ return n.map(function (n, t) {
+ return {x: Math.round(i(n, t) / Na) * Na, y: Math.round(o(n, t) / Na) * Na, i: t}
+ })
+ }
+
+ var r = Ar, u = Cr, i = r, o = u, a = nl;
+ return n ? t(n) : (t.links = function (n) {
+ return iu(e(n)).edges.filter(function (n) {
+ return n.l && n.r
+ }).map(function (t) {
+ return {source: n[t.l.i], target: n[t.r.i]}
+ })
+ }, t.triangles = function (n) {
+ var t = [];
+ return iu(e(n)).cells.forEach(function (e, r) {
+ for (var u, i, o = e.site, a = e.edges.sort(Ir), c = -1, l = a.length, s = a[l - 1].edge, f = s.l === o ? s.r : s.l; ++c < l;)u = s, i = f, s = a[c].edge, f = s.l === o ? s.r : s.l, r < i.i && r < f.i && au(o, i, f) < 0 && t.push([n[r], n[i.i], n[f.i]])
+ }), t
+ }, t.x = function (n) {
+ return arguments.length ? (i = kt(r = n), t) : r
+ }, t.y = function (n) {
+ return arguments.length ? (o = kt(u = n), t) : u
+ }, t.clipExtent = function (n) {
+ return arguments.length ? (a = null == n ? nl : n, t) : a === nl ? null : a
+ }, t.size = function (n) {
+ return arguments.length ? t.clipExtent(n && [[0, 0], n]) : a === nl ? null : a && a[1]
+ }, t)
+ };
+ var nl = [[-1e6, -1e6], [1e6, 1e6]];
+ Bo.geom.delaunay = function (n) {
+ return Bo.geom.voronoi().triangles(n)
+ }, Bo.geom.quadtree = function (n, t, e, r, u) {
+ function i(n) {
+ function i(n, t, e, r, u, i, o, a) {
+ if (!isNaN(e) && !isNaN(r))if (n.leaf) {
+ var c = n.x, s = n.y;
+ if (null != c)if (ca(c - e) + ca(s - r) < .01)l(n, t, e, r, u, i, o, a); else {
+ var f = n.point;
+ n.x = n.y = n.point = null, l(n, f, c, s, u, i, o, a), l(n, t, e, r, u, i, o, a)
+ } else n.x = e, n.y = r, n.point = t
+ } else l(n, t, e, r, u, i, o, a)
+ }
+
+ function l(n, t, e, r, u, o, a, c) {
+ var l = .5 * (u + a), s = .5 * (o + c), f = e >= l, h = r >= s, g = (h << 1) + f;
+ n.leaf = !1, n = n.nodes[g] || (n.nodes[g] = su()), f ? u = l : a = l, h ? o = s : c = s, i(n, t, e, r, u, o, a, c)
+ }
+
+ var s, f, h, g, p, v, d, m, y, x = kt(a), M = kt(c);
+ if (null != t)v = t, d = e, m = r, y = u; else if (m = y = -(v = d = 1 / 0), f = [], h = [], p = n.length, o)for (g = 0; p > g; ++g)s = n[g], s.x < v && (v = s.x), s.y < d && (d = s.y), s.x > m && (m = s.x), s.y > y && (y = s.y), f.push(s.x), h.push(s.y); else for (g = 0; p > g; ++g) {
+ var _ = +x(s = n[g], g), b = +M(s, g);
+ v > _ && (v = _), d > b && (d = b), _ > m && (m = _), b > y && (y = b), f.push(_), h.push(b)
+ }
+ var w = m - v, S = y - d;
+ w > S ? y = d + w : m = v + S;
+ var k = su();
+ if (k.add = function (n) {
+ i(k, n, +x(n, ++g), +M(n, g), v, d, m, y)
+ }, k.visit = function (n) {
+ fu(n, k, v, d, m, y)
+ }, g = -1, null == t) {
+ for (; ++g < p;)i(k, n[g], f[g], h[g], v, d, m, y);
+ --g
+ } else n.forEach(k.add);
+ return f = h = n = s = null, k
+ }
+
+ var o, a = Ar, c = Cr;
+ return (o = arguments.length) ? (a = cu, c = lu, 3 === o && (u = e, r = t, e = t = 0), i(n)) : (i.x = function (n) {
+ return arguments.length ? (a = n, i) : a
+ }, i.y = function (n) {
+ return arguments.length ? (c = n, i) : c
+ }, i.extent = function (n) {
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = +n[0][0], e = +n[0][1], r = +n[1][0], u = +n[1][1]), i) : null == t ? null : [[t, e], [r, u]]
+ }, i.size = function (n) {
+ return arguments.length ? (null == n ? t = e = r = u = null : (t = e = 0, r = +n[0], u = +n[1]), i) : null == t ? null : [r - t, u - e]
+ }, i)
+ }, Bo.interpolateRgb = hu, Bo.interpolateObject = gu, Bo.interpolateNumber = pu, Bo.interpolateString = vu;
+ var tl = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, el = new RegExp(tl.source, "g");
+ Bo.interpolate = du, Bo.interpolators = [function (n, t) {
+ var e = typeof t;
+ return ("string" === e ? $a.has(t) || /^(#|rgb\(|hsl\()/.test(t) ? hu : vu : t instanceof it ? hu : Array.isArray(t) ? mu : "object" === e && isNaN(t) ? gu : pu)(n, t)
+ }], Bo.interpolateArray = mu;
+ var rl = function () {
+ return Et
+ }, ul = Bo.map({
+ linear: rl, poly: Su, quad: function () {
+ return _u
+ }, cubic: function () {
+ return bu
+ }, sin: function () {
+ return ku
+ }, exp: function () {
+ return Eu
+ }, circle: function () {
+ return Au
+ }, elastic: Cu, back: Nu, bounce: function () {
+ return zu
+ }
+ }), il = Bo.map({
+ "in": Et, out: xu, "in-out": Mu, "out-in": function (n) {
+ return Mu(xu(n))
+ }
+ });
+ Bo.ease = function (n) {
+ var t = n.indexOf("-"), e = t >= 0 ? n.slice(0, t) : n, r = t >= 0 ? n.slice(t + 1) : "in";
+ return e = ul.get(e) || rl, r = il.get(r) || Et, yu(r(e.apply(null, Wo.call(arguments, 1))))
+ }, Bo.interpolateHcl = Lu, Bo.interpolateHsl = Tu, Bo.interpolateLab = qu, Bo.interpolateRound = Ru, Bo.transform = function (n) {
+ var t = Go.createElementNS(Bo.ns.prefix.svg, "g");
+ return (Bo.transform = function (n) {
+ if (null != n) {
+ t.setAttribute("transform", n);
+ var e = t.transform.baseVal.consolidate()
+ }
+ return new Du(e ? e.matrix : ol)
+ })(n)
+ }, Du.prototype.toString = function () {
+ return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")"
+ };
+ var ol = {a: 1, b: 0, c: 0, d: 1, e: 0, f: 0};
+ Bo.interpolateTransform = Fu, Bo.layout = {}, Bo.layout.bundle = function () {
+ return function (n) {
+ for (var t = [], e = -1, r = n.length; ++e < r;)t.push(Yu(n[e]));
+ return t
+ }
+ }, Bo.layout.chord = function () {
+ function n() {
+ var n, l, f, h, g, p = {}, v = [], d = Bo.range(i), m = [];
+ for (e = [], r = [], n = 0, h = -1; ++h < i;) {
+ for (l = 0, g = -1; ++g < i;)l += u[h][g];
+ v.push(l), m.push(Bo.range(i)), n += l
+ }
+ for (o && d.sort(function (n, t) {
+ return o(v[n], v[t])
+ }), a && m.forEach(function (n, t) {
+ n.sort(function (n, e) {
+ return a(u[t][n], u[t][e])
+ })
+ }), n = (Aa - s * i) / n, l = 0, h = -1; ++h < i;) {
+ for (f = l, g = -1; ++g < i;) {
+ var y = d[h], x = m[y][g], M = u[y][x], _ = l, b = l += M * n;
+ p[y + "-" + x] = {index: y, subindex: x, startAngle: _, endAngle: b, value: M}
+ }
+ r[y] = {index: y, startAngle: f, endAngle: l, value: (l - f) / n}, l += s
+ }
+ for (h = -1; ++h < i;)for (g = h - 1; ++g < i;) {
+ var w = p[h + "-" + g], S = p[g + "-" + h];
+ (w.value || S.value) && e.push(w.value < S.value ? {source: S, target: w} : {source: w, target: S})
+ }
+ c && t()
+ }
+
+ function t() {
+ e.sort(function (n, t) {
+ return c((n.source.value + n.target.value) / 2, (t.source.value + t.target.value) / 2)
+ })
+ }
+
+ var e, r, u, i, o, a, c, l = {}, s = 0;
+ return l.matrix = function (n) {
+ return arguments.length ? (i = (u = n) && u.length, e = r = null, l) : u
+ }, l.padding = function (n) {
+ return arguments.length ? (s = n, e = r = null, l) : s
+ }, l.sortGroups = function (n) {
+ return arguments.length ? (o = n, e = r = null, l) : o
+ }, l.sortSubgroups = function (n) {
+ return arguments.length ? (a = n, e = null, l) : a
+ }, l.sortChords = function (n) {
+ return arguments.length ? (c = n, e && t(), l) : c
+ }, l.chords = function () {
+ return e || n(), e
+ }, l.groups = function () {
+ return r || n(), r
+ }, l
+ }, Bo.layout.force = function () {
+ function n(n) {
+ return function (t, e, r, u) {
+ if (t.point !== n) {
+ var i = t.cx - n.x, o = t.cy - n.y, a = u - e, c = i * i + o * o;
+ if (c > a * a / d) {
+ if (p > c) {
+ var l = t.charge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ return !0
+ }
+ if (t.point && c && p > c) {
+ var l = t.pointCharge / c;
+ n.px -= i * l, n.py -= o * l
+ }
+ }
+ return !t.charge
+ }
+ }
+
+ function t(n) {
+ n.px = Bo.event.x, n.py = Bo.event.y, a.resume()
+ }
+
+ var e, r, u, i, o, a = {}, c = Bo.dispatch("start", "tick", "end"), l = [1, 1], s = .9, f = al, h = cl, g = -30, p = ll, v = .1, d = .64, m = [], y = [];
+ return a.tick = function () {
+ if ((r *= .99) < .005)return c.end({type: "end", alpha: r = 0}), !0;
+ var t, e, a, f, h, p, d, x, M, _ = m.length, b = y.length;
+ for (e = 0; b > e; ++e)a = y[e], f = a.source, h = a.target, x = h.x - f.x, M = h.y - f.y, (p = x * x + M * M) && (p = r * i[e] * ((p = Math.sqrt(p)) - u[e]) / p, x *= p, M *= p, h.x -= x * (d = f.weight / (h.weight + f.weight)), h.y -= M * d, f.x += x * (d = 1 - d), f.y += M * d);
+ if ((d = r * v) && (x = l[0] / 2, M = l[1] / 2, e = -1, d))for (; ++e < _;)a = m[e], a.x += (x - a.x) * d, a.y += (M - a.y) * d;
+ if (g)for (Wu(t = Bo.geom.quadtree(m), r, o), e = -1; ++e < _;)(a = m[e]).fixed || t.visit(n(a));
+ for (e = -1; ++e < _;)a = m[e], a.fixed ? (a.x = a.px, a.y = a.py) : (a.x -= (a.px - (a.px = a.x)) * s, a.y -= (a.py - (a.py = a.y)) * s);
+ c.tick({type: "tick", alpha: r})
+ }, a.nodes = function (n) {
+ return arguments.length ? (m = n, a) : m
+ }, a.links = function (n) {
+ return arguments.length ? (y = n, a) : y
+ }, a.size = function (n) {
+ return arguments.length ? (l = n, a) : l
+ }, a.linkDistance = function (n) {
+ return arguments.length ? (f = "function" == typeof n ? n : +n, a) : f
+ }, a.distance = a.linkDistance, a.linkStrength = function (n) {
+ return arguments.length ? (h = "function" == typeof n ? n : +n, a) : h
+ }, a.friction = function (n) {
+ return arguments.length ? (s = +n, a) : s
+ }, a.charge = function (n) {
+ return arguments.length ? (g = "function" == typeof n ? n : +n, a) : g
+ }, a.chargeDistance = function (n) {
+ return arguments.length ? (p = n * n, a) : Math.sqrt(p)
+ }, a.gravity = function (n) {
+ return arguments.length ? (v = +n, a) : v
+ }, a.theta = function (n) {
+ return arguments.length ? (d = n * n, a) : Math.sqrt(d)
+ }, a.alpha = function (n) {
+ return arguments.length ? (n = +n, r ? r = n > 0 ? n : 0 : n > 0 && (c.start({
+ type: "start",
+ alpha: r = n
+ }), Bo.timer(a.tick)), a) : r
+ }, a.start = function () {
+ function n(n, r) {
+ if (!e) {
+ for (e = new Array(c), a = 0; c > a; ++a)e[a] = [];
+ for (a = 0; l > a; ++a) {
+ var u = y[a];
+ e[u.source.index].push(u.target), e[u.target.index].push(u.source)
+ }
+ }
+ for (var i, o = e[t], a = -1, l = o.length; ++a < l;)if (!isNaN(i = o[a][n]))return i;
+ return Math.random() * r
+ }
+
+ var t, e, r, c = m.length, s = y.length, p = l[0], v = l[1];
+ for (t = 0; c > t; ++t)(r = m[t]).index = t, r.weight = 0;
+ for (t = 0; s > t; ++t)r = y[t], "number" == typeof r.source && (r.source = m[r.source]), "number" == typeof r.target && (r.target = m[r.target]), ++r.source.weight, ++r.target.weight;
+ for (t = 0; c > t; ++t)r = m[t], isNaN(r.x) && (r.x = n("x", p)), isNaN(r.y) && (r.y = n("y", v)), isNaN(r.px) && (r.px = r.x), isNaN(r.py) && (r.py = r.y);
+ if (u = [], "function" == typeof f)for (t = 0; s > t; ++t)u[t] = +f.call(this, y[t], t); else for (t = 0; s > t; ++t)u[t] = f;
+ if (i = [], "function" == typeof h)for (t = 0; s > t; ++t)i[t] = +h.call(this, y[t], t); else for (t = 0; s > t; ++t)i[t] = h;
+ if (o = [], "function" == typeof g)for (t = 0; c > t; ++t)o[t] = +g.call(this, m[t], t); else for (t = 0; c > t; ++t)o[t] = g;
+ return a.resume()
+ }, a.resume = function () {
+ return a.alpha(.1)
+ }, a.stop = function () {
+ return a.alpha(0)
+ }, a.drag = function () {
+ return e || (e = Bo.behavior.drag().origin(Et).on("dragstart.force", Vu).on("drag.force", t).on("dragend.force", Xu)), arguments.length ? (this.on("mouseover.force", $u).on("mouseout.force", Bu).call(e), void 0) : e
+ }, Bo.rebind(a, c, "on")
+ };
+ var al = 20, cl = 1, ll = 1 / 0;
+ Bo.layout.hierarchy = function () {
+ function n(u) {
+ var i, o = [u], a = [];
+ for (u.depth = 0; null != (i = o.pop());)if (a.push(i), (l = e.call(n, i, i.depth)) && (c = l.length)) {
+ for (var c, l, s; --c >= 0;)o.push(s = l[c]), s.parent = i, s.depth = i.depth + 1;
+ r && (i.value = 0), i.children = l
+ } else r && (i.value = +r.call(n, i, i.depth) || 0), delete i.children;
+ return Ku(u, function (n) {
+ var e, u;
+ t && (e = n.children) && e.sort(t), r && (u = n.parent) && (u.value += n.value)
+ }), a
+ }
+
+ var t = ti, e = Qu, r = ni;
+ return n.sort = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.children = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.value = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.revalue = function (t) {
+ return r && (Gu(t, function (n) {
+ n.children && (n.value = 0)
+ }), Ku(t, function (t) {
+ var e;
+ t.children || (t.value = +r.call(n, t, t.depth) || 0), (e = t.parent) && (e.value += t.value)
+ })), t
+ }, n
+ }, Bo.layout.partition = function () {
+ function n(t, e, r, u) {
+ var i = t.children;
+ if (t.x = e, t.y = t.depth * u, t.dx = r, t.dy = u, i && (o = i.length)) {
+ var o, a, c, l = -1;
+ for (r = t.value ? r / t.value : 0; ++l < o;)n(a = i[l], e, c = a.value * r, u), e += c
+ }
+ }
+
+ function t(n) {
+ var e = n.children, r = 0;
+ if (e && (u = e.length))for (var u, i = -1; ++i < u;)r = Math.max(r, t(e[i]));
+ return 1 + r
+ }
+
+ function e(e, i) {
+ var o = r.call(this, e, i);
+ return n(o[0], 0, u[0], u[1] / t(o[0])), o
+ }
+
+ var r = Bo.layout.hierarchy(), u = [1, 1];
+ return e.size = function (n) {
+ return arguments.length ? (u = n, e) : u
+ }, Ju(e, r)
+ }, Bo.layout.pie = function () {
+ function n(i) {
+ var o = i.map(function (e, r) {
+ return +t.call(n, e, r)
+ }), a = +("function" == typeof r ? r.apply(this, arguments) : r), c = (("function" == typeof u ? u.apply(this, arguments) : u) - a) / Bo.sum(o), l = Bo.range(i.length);
+ null != e && l.sort(e === sl ? function (n, t) {
+ return o[t] - o[n]
+ } : function (n, t) {
+ return e(i[n], i[t])
+ });
+ var s = [];
+ return l.forEach(function (n) {
+ var t;
+ s[n] = {data: i[n], value: t = o[n], startAngle: a, endAngle: a += t * c}
+ }), s
+ }
+
+ var t = Number, e = sl, r = 0, u = Aa;
+ return n.value = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.sort = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.startAngle = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n.endAngle = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var sl = {};
+ Bo.layout.stack = function () {
+ function n(a, c) {
+ if (!(h = a.length))return a;
+ var l = a.map(function (e, r) {
+ return t.call(n, e, r)
+ }), s = l.map(function (t) {
+ return t.map(function (t, e) {
+ return [i.call(n, t, e), o.call(n, t, e)]
+ })
+ }), f = e.call(n, s, c);
+ l = Bo.permute(l, f), s = Bo.permute(s, f);
+ var h, g, p, v, d = r.call(n, s, c), m = l[0].length;
+ for (p = 0; m > p; ++p)for (u.call(n, l[0][p], v = d[p], s[0][p][1]), g = 1; h > g; ++g)u.call(n, l[g][p], v += s[g - 1][p][1], s[g][p][1]);
+ return a
+ }
+
+ var t = Et, e = oi, r = ai, u = ii, i = ri, o = ui;
+ return n.values = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.order = function (t) {
+ return arguments.length ? (e = "function" == typeof t ? t : fl.get(t) || oi, n) : e
+ }, n.offset = function (t) {
+ return arguments.length ? (r = "function" == typeof t ? t : hl.get(t) || ai, n) : r
+ }, n.x = function (t) {
+ return arguments.length ? (i = t, n) : i
+ }, n.y = function (t) {
+ return arguments.length ? (o = t, n) : o
+ }, n.out = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n
+ };
+ var fl = Bo.map({
+ "inside-out": function (n) {
+ var t, e, r = n.length, u = n.map(ci), i = n.map(li), o = Bo.range(r).sort(function (n, t) {
+ return u[n] - u[t]
+ }), a = 0, c = 0, l = [], s = [];
+ for (t = 0; r > t; ++t)e = o[t], c > a ? (a += i[e], l.push(e)) : (c += i[e], s.push(e));
+ return s.reverse().concat(l)
+ }, reverse: function (n) {
+ return Bo.range(n.length).reverse()
+ }, "default": oi
+ }), hl = Bo.map({
+ silhouette: function (n) {
+ var t, e, r, u = n.length, i = n[0].length, o = [], a = 0, c = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ r > a && (a = r), o.push(r)
+ }
+ for (e = 0; i > e; ++e)c[e] = (a - o[e]) / 2;
+ return c
+ }, wiggle: function (n) {
+ var t, e, r, u, i, o, a, c, l, s = n.length, f = n[0], h = f.length, g = [];
+ for (g[0] = c = l = 0, e = 1; h > e; ++e) {
+ for (t = 0, u = 0; s > t; ++t)u += n[t][e][1];
+ for (t = 0, i = 0, a = f[e][0] - f[e - 1][0]; s > t; ++t) {
+ for (r = 0, o = (n[t][e][1] - n[t][e - 1][1]) / (2 * a); t > r; ++r)o += (n[r][e][1] - n[r][e - 1][1]) / a;
+ i += o * n[t][e][1]
+ }
+ g[e] = c -= u ? i / u * a : 0, l > c && (l = c)
+ }
+ for (e = 0; h > e; ++e)g[e] -= l;
+ return g
+ }, expand: function (n) {
+ var t, e, r, u = n.length, i = n[0].length, o = 1 / u, a = [];
+ for (e = 0; i > e; ++e) {
+ for (t = 0, r = 0; u > t; t++)r += n[t][e][1];
+ if (r)for (t = 0; u > t; t++)n[t][e][1] /= r; else for (t = 0; u > t; t++)n[t][e][1] = o
+ }
+ for (e = 0; i > e; ++e)a[e] = 0;
+ return a
+ }, zero: ai
+ });
+ Bo.layout.histogram = function () {
+ function n(n, i) {
+ for (var o, a, c = [], l = n.map(e, this), s = r.call(this, l, i), f = u.call(this, s, l, i), i = -1, h = l.length, g = f.length - 1, p = t ? 1 : 1 / h; ++i < g;)o = c[i] = [], o.dx = f[i + 1] - (o.x = f[i]), o.y = 0;
+ if (g > 0)for (i = -1; ++i < h;)a = l[i], a >= s[0] && a <= s[1] && (o = c[Bo.bisect(f, a, 1, g) - 1], o.y += p, o.push(n[i]));
+ return c
+ }
+
+ var t = !0, e = Number, r = gi, u = fi;
+ return n.value = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.range = function (t) {
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.bins = function (t) {
+ return arguments.length ? (u = "number" == typeof t ? function (n) {
+ return hi(n, t)
+ } : kt(t), n) : u
+ }, n.frequency = function (e) {
+ return arguments.length ? (t = !!e, n) : t
+ }, n
+ }, Bo.layout.pack = function () {
+ function n(n, i) {
+ var o = e.call(this, n, i), a = o[0], c = u[0], l = u[1], s = null == t ? Math.sqrt : "function" == typeof t ? t : function () {
+ return t
+ };
+ if (a.x = a.y = 0, Ku(a, function (n) {
+ n.r = +s(n.value)
+ }), Ku(a, yi), r) {
+ var f = r * (t ? 1 : Math.max(2 * a.r / c, 2 * a.r / l)) / 2;
+ Ku(a, function (n) {
+ n.r += f
+ }), Ku(a, yi), Ku(a, function (n) {
+ n.r -= f
+ })
+ }
+ return _i(a, c / 2, l / 2, t ? 1 : 1 / Math.max(2 * a.r / c, 2 * a.r / l)), o
+ }
+
+ var t, e = Bo.layout.hierarchy().sort(pi), r = 0, u = [1, 1];
+ return n.size = function (t) {
+ return arguments.length ? (u = t, n) : u
+ }, n.radius = function (e) {
+ return arguments.length ? (t = null == e || "function" == typeof e ? e : +e, n) : t
+ }, n.padding = function (t) {
+ return arguments.length ? (r = +t, n) : r
+ }, Ju(n, e)
+ }, Bo.layout.tree = function () {
+ function n(n, u) {
+ var s = o.call(this, n, u), f = s[0], h = t(f);
+ if (Ku(h, e), h.parent.m = -h.z, Gu(h, r), l)Gu(f, i); else {
+ var g = f, p = f, v = f;
+ Gu(f, function (n) {
+ n.x < g.x && (g = n), n.x > p.x && (p = n), n.depth > v.depth && (v = n)
+ });
+ var d = a(g, p) / 2 - g.x, m = c[0] / (p.x + a(p, g) / 2 + d), y = c[1] / (v.depth || 1);
+ Gu(f, function (n) {
+ n.x = (n.x + d) * m, n.y = n.depth * y
+ })
+ }
+ return s
+ }
+
+ function t(n) {
+ for (var t, e = {
+ A: null,
+ children: [n]
+ }, r = [e]; null != (t = r.pop());)for (var u, i = t.children, o = 0, a = i.length; a > o; ++o)r.push((i[o] = u = {
+ _: i[o],
+ parent: t,
+ children: (u = i[o].children) && u.slice() || [],
+ A: null,
+ a: null,
+ z: 0,
+ m: 0,
+ c: 0,
+ s: 0,
+ t: null,
+ i: o
+ }).a = u);
+ return e.children[0]
+ }
+
+ function e(n) {
+ var t = n.children, e = n.parent.children, r = n.i ? e[n.i - 1] : null;
+ if (t.length) {
+ Ai(n);
+ var i = (t[0].z + t[t.length - 1].z) / 2;
+ r ? (n.z = r.z + a(n._, r._), n.m = n.z - i) : n.z = i
+ } else r && (n.z = r.z + a(n._, r._));
+ n.parent.A = u(n, r, n.parent.A || e[0])
+ }
+
+ function r(n) {
+ n._.x = n.z + n.parent.m, n.m += n.parent.m
+ }
+
+ function u(n, t, e) {
+ if (t) {
+ for (var r, u = n, i = n, o = t, c = u.parent.children[0], l = u.m, s = i.m, f = o.m, h = c.m; o = ki(o), u = Si(u), o && u;)c = Si(c), i = ki(i), i.a = n, r = o.z + f - u.z - l + a(o._, u._), r > 0 && (Ei(Ci(o, n, e), n, r), l += r, s += r), f += o.m, l += u.m, h += c.m, s += i.m;
+ o && !ki(i) && (i.t = o, i.m += f - s), u && !Si(c) && (c.t = u, c.m += l - h, e = n)
+ }
+ return e
+ }
+
+ function i(n) {
+ n.x *= c[0], n.y = n.depth * c[1]
+ }
+
+ var o = Bo.layout.hierarchy().sort(null).value(null), a = wi, c = [1, 1], l = null;
+ return n.separation = function (t) {
+ return arguments.length ? (a = t, n) : a
+ }, n.size = function (t) {
+ return arguments.length ? (l = null == (c = t) ? i : null, n) : l ? null : c
+ }, n.nodeSize = function (t) {
+ return arguments.length ? (l = null == (c = t) ? null : i, n) : l ? c : null
+ }, Ju(n, o)
+ }, Bo.layout.cluster = function () {
+ function n(n, i) {
+ var o, a = t.call(this, n, i), c = a[0], l = 0;
+ Ku(c, function (n) {
+ var t = n.children;
+ t && t.length ? (n.x = zi(t), n.y = Ni(t)) : (n.x = o ? l += e(n, o) : 0, n.y = 0, o = n)
+ });
+ var s = Li(c), f = Ti(c), h = s.x - e(s, f) / 2, g = f.x + e(f, s) / 2;
+ return Ku(c, u ? function (n) {
+ n.x = (n.x - c.x) * r[0], n.y = (c.y - n.y) * r[1]
+ } : function (n) {
+ n.x = (n.x - h) / (g - h) * r[0], n.y = (1 - (c.y ? n.y / c.y : 1)) * r[1]
+ }), a
+ }
+
+ var t = Bo.layout.hierarchy().sort(null).value(null), e = wi, r = [1, 1], u = !1;
+ return n.separation = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.size = function (t) {
+ return arguments.length ? (u = null == (r = t), n) : u ? null : r
+ }, n.nodeSize = function (t) {
+ return arguments.length ? (u = null != (r = t), n) : u ? r : null
+ }, Ju(n, t)
+ }, Bo.layout.treemap = function () {
+ function n(n, t) {
+ for (var e, r, u = -1, i = n.length; ++u < i;)r = (e = n[u]).value * (0 > t ? 0 : t), e.area = isNaN(r) || 0 >= r ? 0 : r
+ }
+
+ function t(e) {
+ var i = e.children;
+ if (i && i.length) {
+ var o, a, c, l = f(e), s = [], h = i.slice(), p = 1 / 0, v = "slice" === g ? l.dx : "dice" === g ? l.dy : "slice-dice" === g ? 1 & e.depth ? l.dy : l.dx : Math.min(l.dx, l.dy);
+ for (n(h, l.dx * l.dy / e.value), s.area = 0; (c = h.length) > 0;)s.push(o = h[c - 1]), s.area += o.area, "squarify" !== g || (a = r(s, v)) <= p ? (h.pop(), p = a) : (s.area -= s.pop().area, u(s, v, l, !1), v = Math.min(l.dx, l.dy), s.length = s.area = 0, p = 1 / 0);
+ s.length && (u(s, v, l, !0), s.length = s.area = 0), i.forEach(t)
+ }
+ }
+
+ function e(t) {
+ var r = t.children;
+ if (r && r.length) {
+ var i, o = f(t), a = r.slice(), c = [];
+ for (n(a, o.dx * o.dy / t.value), c.area = 0; i = a.pop();)c.push(i), c.area += i.area, null != i.z && (u(c, i.z ? o.dx : o.dy, o, !a.length), c.length = c.area = 0);
+ r.forEach(e)
+ }
+ }
+
+ function r(n, t) {
+ for (var e, r = n.area, u = 0, i = 1 / 0, o = -1, a = n.length; ++o < a;)(e = n[o].area) && (i > e && (i = e), e > u && (u = e));
+ return r *= r, t *= t, r ? Math.max(t * u * p / r, r / (t * i * p)) : 1 / 0
+ }
+
+ function u(n, t, e, r) {
+ var u, i = -1, o = n.length, a = e.x, l = e.y, s = t ? c(n.area / t) : 0;
+ if (t == e.dx) {
+ for ((r || s > e.dy) && (s = e.dy); ++i < o;)u = n[i], u.x = a, u.y = l, u.dy = s, a += u.dx = Math.min(e.x + e.dx - a, s ? c(u.area / s) : 0);
+ u.z = !0, u.dx += e.x + e.dx - a, e.y += s, e.dy -= s
+ } else {
+ for ((r || s > e.dx) && (s = e.dx); ++i < o;)u = n[i], u.x = a, u.y = l, u.dx = s, l += u.dy = Math.min(e.y + e.dy - l, s ? c(u.area / s) : 0);
+ u.z = !1, u.dy += e.y + e.dy - l, e.x += s, e.dx -= s
+ }
+ }
+
+ function i(r) {
+ var u = o || a(r), i = u[0];
+ return i.x = 0, i.y = 0, i.dx = l[0], i.dy = l[1], o && a.revalue(i), n([i], i.dx * i.dy / i.value), (o ? e : t)(i), h && (o = u), u
+ }
+
+ var o, a = Bo.layout.hierarchy(), c = Math.round, l = [1, 1], s = null, f = qi, h = !1, g = "squarify", p = .5 * (1 + Math.sqrt(5));
+ return i.size = function (n) {
+ return arguments.length ? (l = n, i) : l
+ }, i.padding = function (n) {
+ function t(t) {
+ var e = n.call(i, t, t.depth);
+ return null == e ? qi(t) : Ri(t, "number" == typeof e ? [e, e, e, e] : e)
+ }
+
+ function e(t) {
+ return Ri(t, n)
+ }
+
+ if (!arguments.length)return s;
+ var r;
+ return f = null == (s = n) ? qi : "function" == (r = typeof n) ? t : "number" === r ? (n = [n, n, n, n], e) : e, i
+ }, i.round = function (n) {
+ return arguments.length ? (c = n ? Math.round : Number, i) : c != Number
+ }, i.sticky = function (n) {
+ return arguments.length ? (h = n, o = null, i) : h
+ }, i.ratio = function (n) {
+ return arguments.length ? (p = n, i) : p
+ }, i.mode = function (n) {
+ return arguments.length ? (g = n + "", i) : g
+ }, Ju(i, a)
+ }, Bo.random = {
+ normal: function (n, t) {
+ var e = arguments.length;
+ return 2 > e && (t = 1), 1 > e && (n = 0), function () {
+ var e, r, u;
+ do e = 2 * Math.random() - 1, r = 2 * Math.random() - 1, u = e * e + r * r; while (!u || u > 1);
+ return n + t * e * Math.sqrt(-2 * Math.log(u) / u)
+ }
+ }, logNormal: function () {
+ var n = Bo.random.normal.apply(Bo, arguments);
+ return function () {
+ return Math.exp(n())
+ }
+ }, bates: function (n) {
+ var t = Bo.random.irwinHall(n);
+ return function () {
+ return t() / n
+ }
+ }, irwinHall: function (n) {
+ return function () {
+ for (var t = 0, e = 0; n > e; e++)t += Math.random();
+ return t
+ }
+ }
+ }, Bo.scale = {};
+ var gl = {floor: Et, ceil: Et};
+ Bo.scale.linear = function () {
+ return Oi([0, 1], [0, 1], du, !1)
+ };
+ var pl = {s: 1, g: 1, p: 1, r: 1, e: 1};
+ Bo.scale.log = function () {
+ return Wi(Bo.scale.linear().domain([0, 1]), 10, !0, [1, 10])
+ };
+ var vl = Bo.format(".0e"), dl = {
+ floor: function (n) {
+ return -Math.ceil(-n)
+ }, ceil: function (n) {
+ return -Math.floor(-n)
+ }
+ };
+ Bo.scale.pow = function () {
+ return Ji(Bo.scale.linear(), 1, [0, 1])
+ }, Bo.scale.sqrt = function () {
+ return Bo.scale.pow().exponent(.5)
+ }, Bo.scale.ordinal = function () {
+ return Ki([], {t: "range", a: [[]]})
+ }, Bo.scale.category10 = function () {
+ return Bo.scale.ordinal().range(ml)
+ }, Bo.scale.category20 = function () {
+ return Bo.scale.ordinal().range(yl)
+ }, Bo.scale.category20b = function () {
+ return Bo.scale.ordinal().range(xl)
+ }, Bo.scale.category20c = function () {
+ return Bo.scale.ordinal().range(Ml)
+ };
+ var ml = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(yt), yl = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(yt), xl = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(yt), Ml = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(yt);
+ Bo.scale.quantile = function () {
+ return Qi([], [])
+ }, Bo.scale.quantize = function () {
+ return no(0, 1, [0, 1])
+ }, Bo.scale.threshold = function () {
+ return to([.5], [0, 1])
+ }, Bo.scale.identity = function () {
+ return eo([0, 1])
+ }, Bo.svg = {}, Bo.svg.arc = function () {
+ function n() {
+ var n = t.apply(this, arguments), i = e.apply(this, arguments), o = r.apply(this, arguments) + _l, a = u.apply(this, arguments) + _l, c = (o > a && (c = o, o = a, a = c), a - o), l = Ea > c ? "0" : "1", s = Math.cos(o), f = Math.sin(o), h = Math.cos(a), g = Math.sin(a);
+ return c >= bl ? n ? "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "M0," + n + "A" + n + "," + n + " 0 1,0 0," + -n + "A" + n + "," + n + " 0 1,0 0," + n + "Z" : "M0," + i + "A" + i + "," + i + " 0 1,1 0," + -i + "A" + i + "," + i + " 0 1,1 0," + i + "Z" : n ? "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L" + n * h + "," + n * g + "A" + n + "," + n + " 0 " + l + ",0 " + n * s + "," + n * f + "Z" : "M" + i * s + "," + i * f + "A" + i + "," + i + " 0 " + l + ",1 " + i * h + "," + i * g + "L0,0" + "Z"
+ }
+
+ var t = ro, e = uo, r = io, u = oo;
+ return n.innerRadius = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.outerRadius = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.startAngle = function (t) {
+ return arguments.length ? (r = kt(t), n) : r
+ }, n.endAngle = function (t) {
+ return arguments.length ? (u = kt(t), n) : u
+ }, n.centroid = function () {
+ var n = (t.apply(this, arguments) + e.apply(this, arguments)) / 2, i = (r.apply(this, arguments) + u.apply(this, arguments)) / 2 + _l;
+ return [Math.cos(i) * n, Math.sin(i) * n]
+ }, n
+ };
+ var _l = -Ca, bl = Aa - Na;
+ Bo.svg.line = function () {
+ return ao(Et)
+ };
+ var wl = Bo.map({
+ linear: co,
+ "linear-closed": lo,
+ step: so,
+ "step-before": fo,
+ "step-after": ho,
+ basis: xo,
+ "basis-open": Mo,
+ "basis-closed": _o,
+ bundle: bo,
+ cardinal: vo,
+ "cardinal-open": go,
+ "cardinal-closed": po,
+ monotone: Co
+ });
+ wl.forEach(function (n, t) {
+ t.key = n, t.closed = /-closed$/.test(n)
+ });
+ var Sl = [0, 2 / 3, 1 / 3, 0], kl = [0, 1 / 3, 2 / 3, 0], El = [0, 1 / 6, 2 / 3, 1 / 6];
+ Bo.svg.line.radial = function () {
+ var n = ao(No);
+ return n.radius = n.x, delete n.x, n.angle = n.y, delete n.y, n
+ }, fo.reverse = ho, ho.reverse = fo, Bo.svg.area = function () {
+ return zo(Et)
+ }, Bo.svg.area.radial = function () {
+ var n = zo(No);
+ return n.radius = n.x, delete n.x, n.innerRadius = n.x0, delete n.x0, n.outerRadius = n.x1, delete n.x1, n.angle = n.y, delete n.y, n.startAngle = n.y0, delete n.y0, n.endAngle = n.y1, delete n.y1, n
+ }, Bo.svg.chord = function () {
+ function n(n, a) {
+ var c = t(this, i, n, a), l = t(this, o, n, a);
+ return "M" + c.p0 + r(c.r, c.p1, c.a1 - c.a0) + (e(c, l) ? u(c.r, c.p1, c.r, c.p0) : u(c.r, c.p1, l.r, l.p0) + r(l.r, l.p1, l.a1 - l.a0) + u(l.r, l.p1, c.r, c.p0)) + "Z"
+ }
+
+ function t(n, t, e, r) {
+ var u = t.call(n, e, r), i = a.call(n, u, r), o = c.call(n, u, r) + _l, s = l.call(n, u, r) + _l;
+ return {r: i, a0: o, a1: s, p0: [i * Math.cos(o), i * Math.sin(o)], p1: [i * Math.cos(s), i * Math.sin(s)]}
+ }
+
+ function e(n, t) {
+ return n.a0 == t.a0 && n.a1 == t.a1
+ }
+
+ function r(n, t, e) {
+ return "A" + n + "," + n + " 0 " + +(e > Ea) + ",1 " + t
+ }
+
+ function u(n, t, e, r) {
+ return "Q 0,0 " + r
+ }
+
+ var i = mr, o = yr, a = Lo, c = io, l = oo;
+ return n.radius = function (t) {
+ return arguments.length ? (a = kt(t), n) : a
+ }, n.source = function (t) {
+ return arguments.length ? (i = kt(t), n) : i
+ }, n.target = function (t) {
+ return arguments.length ? (o = kt(t), n) : o
+ }, n.startAngle = function (t) {
+ return arguments.length ? (c = kt(t), n) : c
+ }, n.endAngle = function (t) {
+ return arguments.length ? (l = kt(t), n) : l
+ }, n
+ }, Bo.svg.diagonal = function () {
+ function n(n, u) {
+ var i = t.call(this, n, u), o = e.call(this, n, u), a = (i.y + o.y) / 2, c = [i, {x: i.x, y: a}, {
+ x: o.x,
+ y: a
+ }, o];
+ return c = c.map(r), "M" + c[0] + "C" + c[1] + " " + c[2] + " " + c[3]
+ }
+
+ var t = mr, e = yr, r = To;
+ return n.source = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.target = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n.projection = function (t) {
+ return arguments.length ? (r = t, n) : r
+ }, n
+ }, Bo.svg.diagonal.radial = function () {
+ var n = Bo.svg.diagonal(), t = To, e = n.projection;
+ return n.projection = function (n) {
+ return arguments.length ? e(qo(t = n)) : t
+ }, n
+ }, Bo.svg.symbol = function () {
+ function n(n, r) {
+ return (Al.get(t.call(this, n, r)) || Po)(e.call(this, n, r))
+ }
+
+ var t = Do, e = Ro;
+ return n.type = function (e) {
+ return arguments.length ? (t = kt(e), n) : t
+ }, n.size = function (t) {
+ return arguments.length ? (e = kt(t), n) : e
+ }, n
+ };
+ var Al = Bo.map({
+ circle: Po, cross: function (n) {
+ var t = Math.sqrt(n / 5) / 2;
+ return "M" + -3 * t + "," + -t + "H" + -t + "V" + -3 * t + "H" + t + "V" + -t + "H" + 3 * t + "V" + t + "H" + t + "V" + 3 * t + "H" + -t + "V" + t + "H" + -3 * t + "Z"
+ }, diamond: function (n) {
+ var t = Math.sqrt(n / (2 * Ll)), e = t * Ll;
+ return "M0," + -t + "L" + e + ",0" + " 0," + t + " " + -e + ",0" + "Z"
+ }, square: function (n) {
+ var t = Math.sqrt(n) / 2;
+ return "M" + -t + "," + -t + "L" + t + "," + -t + " " + t + "," + t + " " + -t + "," + t + "Z"
+ }, "triangle-down": function (n) {
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + e + "L" + t + "," + -e + " " + -t + "," + -e + "Z"
+ }, "triangle-up": function (n) {
+ var t = Math.sqrt(n / zl), e = t * zl / 2;
+ return "M0," + -e + "L" + t + "," + e + " " + -t + "," + e + "Z"
+ }
+ });
+ Bo.svg.symbolTypes = Al.keys();
+ var Cl, Nl, zl = Math.sqrt(3), Ll = Math.tan(30 * La), Tl = [], ql = 0;
+ Tl.call = ya.call, Tl.empty = ya.empty, Tl.node = ya.node, Tl.size = ya.size, Bo.transition = function (n) {
+ return arguments.length ? Cl ? n.transition() : n : _a.transition()
+ }, Bo.transition.prototype = Tl, Tl.select = function (n) {
+ var t, e, r, u = this.id, i = [];
+ n = k(n);
+ for (var o = -1, a = this.length; ++o < a;) {
+ i.push(t = []);
+ for (var c = this[o], l = -1, s = c.length; ++l < s;)(r = c[l]) && (e = n.call(r, r.__data__, l, o)) ? ("__data__"in r && (e.__data__ = r.__data__), Ho(e, l, u, r.__transition__[u]), t.push(e)) : t.push(null)
+ }
+ return Uo(i, u)
+ }, Tl.selectAll = function (n) {
+ var t, e, r, u, i, o = this.id, a = [];
+ n = E(n);
+ for (var c = -1, l = this.length; ++c < l;)for (var s = this[c], f = -1, h = s.length; ++f < h;)if (r = s[f]) {
+ i = r.__transition__[o], e = n.call(r, r.__data__, f, c), a.push(t = []);
+ for (var g = -1, p = e.length; ++g < p;)(u = e[g]) && Ho(u, g, o, i), t.push(u)
+ }
+ return Uo(a, o)
+ }, Tl.filter = function (n) {
+ var t, e, r, u = [];
+ "function" != typeof n && (n = U(n));
+ for (var i = 0, o = this.length; o > i; i++) {
+ u.push(t = []);
+ for (var e = this[i], a = 0, c = e.length; c > a; a++)(r = e[a]) && n.call(r, r.__data__, a, i) && t.push(r)
+ }
+ return Uo(u, this.id)
+ }, Tl.tween = function (n, t) {
+ var e = this.id;
+ return arguments.length < 2 ? this.node().__transition__[e].tween.get(n) : F(this, null == t ? function (t) {
+ t.__transition__[e].tween.remove(n)
+ } : function (r) {
+ r.__transition__[e].tween.set(n, t)
+ })
+ }, Tl.attr = function (n, t) {
+ function e() {
+ this.removeAttribute(a)
+ }
+
+ function r() {
+ this.removeAttributeNS(a.space, a.local)
+ }
+
+ function u(n) {
+ return null == n ? e : (n += "", function () {
+ var t, e = this.getAttribute(a);
+ return e !== n && (t = o(e, n), function (n) {
+ this.setAttribute(a, t(n))
+ })
+ })
+ }
+
+ function i(n) {
+ return null == n ? r : (n += "", function () {
+ var t, e = this.getAttributeNS(a.space, a.local);
+ return e !== n && (t = o(e, n), function (n) {
+ this.setAttributeNS(a.space, a.local, t(n))
+ })
+ })
+ }
+
+ if (arguments.length < 2) {
+ for (t in n)this.attr(t, n[t]);
+ return this
+ }
+ var o = "transform" == n ? Fu : du, a = Bo.ns.qualify(n);
+ return jo(this, "attr." + n, t, a.local ? i : u)
+ }, Tl.attrTween = function (n, t) {
+ function e(n, e) {
+ var r = t.call(this, n, e, this.getAttribute(u));
+ return r && function (n) {
+ this.setAttribute(u, r(n))
+ }
+ }
+
+ function r(n, e) {
+ var r = t.call(this, n, e, this.getAttributeNS(u.space, u.local));
+ return r && function (n) {
+ this.setAttributeNS(u.space, u.local, r(n))
+ }
+ }
+
+ var u = Bo.ns.qualify(n);
+ return this.tween("attr." + n, u.local ? r : e)
+ }, Tl.style = function (n, t, e) {
+ function r() {
+ this.style.removeProperty(n)
+ }
+
+ function u(t) {
+ return null == t ? r : (t += "", function () {
+ var r, u = Qo.getComputedStyle(this, null).getPropertyValue(n);
+ return u !== t && (r = du(u, t), function (t) {
+ this.style.setProperty(n, r(t), e)
+ })
+ })
+ }
+
+ var i = arguments.length;
+ if (3 > i) {
+ if ("string" != typeof n) {
+ 2 > i && (t = "");
+ for (e in n)this.style(e, n[e], t);
+ return this
+ }
+ e = ""
+ }
+ return jo(this, "style." + n, t, u)
+ }, Tl.styleTween = function (n, t, e) {
+ function r(r, u) {
+ var i = t.call(this, r, u, Qo.getComputedStyle(this, null).getPropertyValue(n));
+ return i && function (t) {
+ this.style.setProperty(n, i(t), e)
+ }
+ }
+
+ return arguments.length < 3 && (e = ""), this.tween("style." + n, r)
+ }, Tl.text = function (n) {
+ return jo(this, "text", n, Fo)
+ }, Tl.remove = function () {
+ return this.each("end.transition", function () {
+ var n;
+ this.__transition__.count < 2 && (n = this.parentNode) && n.removeChild(this)
+ })
+ }, Tl.ease = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].ease : ("function" != typeof n && (n = Bo.ease.apply(Bo, arguments)), F(this, function (e) {
+ e.__transition__[t].ease = n
+ }))
+ }, Tl.delay = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].delay : F(this, "function" == typeof n ? function (e, r, u) {
+ e.__transition__[t].delay = +n.call(e, e.__data__, r, u)
+ } : (n = +n, function (e) {
+ e.__transition__[t].delay = n
+ }))
+ }, Tl.duration = function (n) {
+ var t = this.id;
+ return arguments.length < 1 ? this.node().__transition__[t].duration : F(this, "function" == typeof n ? function (e, r, u) {
+ e.__transition__[t].duration = Math.max(1, n.call(e, e.__data__, r, u))
+ } : (n = Math.max(1, n), function (e) {
+ e.__transition__[t].duration = n
+ }))
+ }, Tl.each = function (n, t) {
+ var e = this.id;
+ if (arguments.length < 2) {
+ var r = Nl, u = Cl;
+ Cl = e, F(this, function (t, r, u) {
+ Nl = t.__transition__[e], n.call(t, t.__data__, r, u)
+ }), Nl = r, Cl = u
+ } else F(this, function (r) {
+ var u = r.__transition__[e];
+ (u.event || (u.event = Bo.dispatch("start", "end"))).on(n, t)
+ });
+ return this
+ }, Tl.transition = function () {
+ for (var n, t, e, r, u = this.id, i = ++ql, o = [], a = 0, c = this.length; c > a; a++) {
+ o.push(n = []);
+ for (var t = this[a], l = 0, s = t.length; s > l; l++)(e = t[l]) && (r = Object.create(e.__transition__[u]), r.delay += r.duration, Ho(e, l, i, r)), n.push(e)
+ }
+ return Uo(o, i)
+ }, Bo.svg.axis = function () {
+ function n(n) {
+ n.each(function () {
+ var n, l = Bo.select(this), s = this.__chart__ || e, f = this.__chart__ = e.copy(), h = null == c ? f.ticks ? f.ticks.apply(f, a) : f.domain() : c, g = null == t ? f.tickFormat ? f.tickFormat.apply(f, a) : Et : t, p = l.selectAll(".tick").data(h, f), v = p.enter().insert("g", ".domain").attr("class", "tick").style("opacity", Na), d = Bo.transition(p.exit()).style("opacity", Na).remove(), m = Bo.transition(p.order()).style("opacity", 1), y = Math.max(u, 0) + o, x = Pi(f), M = l.selectAll(".domain").data([0]), _ = (M.enter().append("path").attr("class", "domain"), Bo.transition(M));
+ v.append("line"), v.append("text");
+ var b, w, S, k, E = v.select("line"), A = m.select("line"), C = p.select("text").text(g), N = v.select("text"), z = m.select("text"), L = "top" === r || "left" === r ? -1 : 1;
+ if ("bottom" === r || "top" === r ? (n = Oo, b = "x", S = "y", w = "x2", k = "y2", C.attr("dy", 0 > L ? "0em" : ".71em").style("text-anchor", "middle"), _.attr("d", "M" + x[0] + "," + L * i + "V0H" + x[1] + "V" + L * i)) : (n = Yo, b = "y", S = "x", w = "y2", k = "x2", C.attr("dy", ".32em").style("text-anchor", 0 > L ? "end" : "start"), _.attr("d", "M" + L * i + "," + x[0] + "H0V" + x[1] + "H" + L * i)), E.attr(k, L * u), N.attr(S, L * y), A.attr(w, 0).attr(k, L * u), z.attr(b, 0).attr(S, L * y), f.rangeBand) {
+ var T = f, q = T.rangeBand() / 2;
+ s = f = function (n) {
+ return T(n) + q
+ }
+ } else s.rangeBand ? s = f : d.call(n, f, s);
+ v.call(n, s, f), m.call(n, f, f)
+ })
+ }
+
+ var t, e = Bo.scale.linear(), r = Rl, u = 6, i = 6, o = 3, a = [10], c = null;
+ return n.scale = function (t) {
+ return arguments.length ? (e = t, n) : e
+ }, n.orient = function (t) {
+ return arguments.length ? (r = t in Dl ? t + "" : Rl, n) : r
+ }, n.ticks = function () {
+ return arguments.length ? (a = arguments, n) : a
+ }, n.tickValues = function (t) {
+ return arguments.length ? (c = t, n) : c
+ }, n.tickFormat = function (e) {
+ return arguments.length ? (t = e, n) : t
+ }, n.tickSize = function (t) {
+ var e = arguments.length;
+ return e ? (u = +t, i = +arguments[e - 1], n) : u
+ }, n.innerTickSize = function (t) {
+ return arguments.length ? (u = +t, n) : u
+ }, n.outerTickSize = function (t) {
+ return arguments.length ? (i = +t, n) : i
+ }, n.tickPadding = function (t) {
+ return arguments.length ? (o = +t, n) : o
+ }, n.tickSubdivide = function () {
+ return arguments.length && n
+ }, n
+ };
+ var Rl = "bottom", Dl = {top: 1, right: 1, bottom: 1, left: 1};
+ Bo.svg.brush = function () {
+ function n(i) {
+ i.each(function () {
+ var i = Bo.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", u).on("touchstart.brush", u), o = i.selectAll(".background").data([0]);
+ o.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair"), i.selectAll(".extent").data([0]).enter().append("rect").attr("class", "extent").style("cursor", "move");
+ var a = i.selectAll(".resize").data(p, Et);
+ a.exit().remove(), a.enter().append("g").attr("class", function (n) {
+ return "resize " + n
+ }).style("cursor", function (n) {
+ return Pl[n]
+ }).append("rect").attr("x", function (n) {
+ return /[ew]$/.test(n) ? -3 : null
+ }).attr("y", function (n) {
+ return /^[ns]/.test(n) ? -3 : null
+ }).attr("width", 6).attr("height", 6).style("visibility", "hidden"), a.style("display", n.empty() ? "none" : null);
+ var s, f = Bo.transition(i), h = Bo.transition(o);
+ c && (s = Pi(c), h.attr("x", s[0]).attr("width", s[1] - s[0]), e(f)), l && (s = Pi(l), h.attr("y", s[0]).attr("height", s[1] - s[0]), r(f)), t(f)
+ })
+ }
+
+ function t(n) {
+ n.selectAll(".resize").attr("transform", function (n) {
+ return "translate(" + s[+/e$/.test(n)] + "," + f[+/^s/.test(n)] + ")"
+ })
+ }
+
+ function e(n) {
+ n.select(".extent").attr("x", s[0]), n.selectAll(".extent,.n>rect,.s>rect").attr("width", s[1] - s[0])
+ }
+
+ function r(n) {
+ n.select(".extent").attr("y", f[0]), n.selectAll(".extent,.e>rect,.w>rect").attr("height", f[1] - f[0])
+ }
+
+ function u() {
+ function u() {
+ 32 == Bo.event.keyCode && (C || (y = null, z[0] -= s[1], z[1] -= f[1], C = 2), _())
+ }
+
+ function p() {
+ 32 == Bo.event.keyCode && 2 == C && (z[0] += s[1], z[1] += f[1], C = 0, _())
+ }
+
+ function v() {
+ var n = Bo.mouse(M), u = !1;
+ x && (n[0] += x[0], n[1] += x[1]), C || (Bo.event.altKey ? (y || (y = [(s[0] + s[1]) / 2, (f[0] + f[1]) / 2]), z[0] = s[+(n[0] < y[0])], z[1] = f[+(n[1] < y[1])]) : y = null), E && d(n, c, 0) && (e(S), u = !0), A && d(n, l, 1) && (r(S), u = !0), u && (t(S), w({
+ type: "brush",
+ mode: C ? "move" : "resize"
+ }))
+ }
+
+ function d(n, t, e) {
+ var r, u, a = Pi(t), c = a[0], l = a[1], p = z[e], v = e ? f : s, d = v[1] - v[0];
+ return C && (c -= p, l -= d + p), r = (e ? g : h) ? Math.max(c, Math.min(l, n[e])) : n[e], C ? u = (r += p) + d : (y && (p = Math.max(c, Math.min(l, 2 * y[e] - r))), r > p ? (u = r, r = p) : u = p), v[0] != r || v[1] != u ? (e ? o = null : i = null, v[0] = r, v[1] = u, !0) : void 0
+ }
+
+ function m() {
+ v(), S.style("pointer-events", "all").selectAll(".resize").style("display", n.empty() ? "none" : null), Bo.select("body").style("cursor", null), L.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null), N(), w({type: "brushend"})
+ }
+
+ var y, x, M = this, b = Bo.select(Bo.event.target), w = a.of(M, arguments), S = Bo.select(M), k = b.datum(), E = !/^(n|s)$/.test(k) && c, A = !/^(e|w)$/.test(k) && l, C = b.classed("extent"), N = X(), z = Bo.mouse(M), L = Bo.select(Qo).on("keydown.brush", u).on("keyup.brush", p);
+ if (Bo.event.changedTouches ? L.on("touchmove.brush", v).on("touchend.brush", m) : L.on("mousemove.brush", v).on("mouseup.brush", m), S.interrupt().selectAll("*").interrupt(), C)z[0] = s[0] - z[0], z[1] = f[0] - z[1]; else if (k) {
+ var T = +/w$/.test(k), q = +/^n/.test(k);
+ x = [s[1 - T] - z[0], f[1 - q] - z[1]], z[0] = s[T], z[1] = f[q]
+ } else Bo.event.altKey && (y = z.slice());
+ S.style("pointer-events", "none").selectAll(".resize").style("display", null), Bo.select("body").style("cursor", b.style("cursor")), w({type: "brushstart"}), v()
+ }
+
+ var i, o, a = w(n, "brushstart", "brush", "brushend"), c = null, l = null, s = [0, 0], f = [0, 0], h = !0, g = !0, p = Ul[0];
+ return n.event = function (n) {
+ n.each(function () {
+ var n = a.of(this, arguments), t = {x: s, y: f, i: i, j: o}, e = this.__chart__ || t;
+ this.__chart__ = t, Cl ? Bo.select(this).transition().each("start.brush", function () {
+ i = e.i, o = e.j, s = e.x, f = e.y, n({type: "brushstart"})
+ }).tween("brush:brush", function () {
+ var e = mu(s, t.x), r = mu(f, t.y);
+ return i = o = null, function (u) {
+ s = t.x = e(u), f = t.y = r(u), n({type: "brush", mode: "resize"})
+ }
+ }).each("end.brush", function () {
+ i = t.i, o = t.j, n({type: "brush", mode: "resize"}), n({type: "brushend"})
+ }) : (n({type: "brushstart"}), n({type: "brush", mode: "resize"}), n({type: "brushend"}))
+ })
+ }, n.x = function (t) {
+ return arguments.length ? (c = t, p = Ul[!c << 1 | !l], n) : c
+ }, n.y = function (t) {
+ return arguments.length ? (l = t, p = Ul[!c << 1 | !l], n) : l
+ }, n.clamp = function (t) {
+ return arguments.length ? (c && l ? (h = !!t[0], g = !!t[1]) : c ? h = !!t : l && (g = !!t), n) : c && l ? [h, g] : c ? h : l ? g : null
+ }, n.extent = function (t) {
+ var e, r, u, a, h;
+ return arguments.length ? (c && (e = t[0], r = t[1], l && (e = e[0], r = r[0]), i = [e, r], c.invert && (e = c(e), r = c(r)), e > r && (h = e, e = r, r = h), (e != s[0] || r != s[1]) && (s = [e, r])), l && (u = t[0], a = t[1], c && (u = u[1], a = a[1]), o = [u, a], l.invert && (u = l(u), a = l(a)), u > a && (h = u, u = a, a = h), (u != f[0] || a != f[1]) && (f = [u, a])), n) : (c && (i ? (e = i[0], r = i[1]) : (e = s[0], r = s[1], c.invert && (e = c.invert(e), r = c.invert(r)), e > r && (h = e, e = r, r = h))), l && (o ? (u = o[0], a = o[1]) : (u = f[0], a = f[1], l.invert && (u = l.invert(u), a = l.invert(a)), u > a && (h = u, u = a, a = h))), c && l ? [[e, u], [r, a]] : c ? [e, r] : l && [u, a])
+ }, n.clear = function () {
+ return n.empty() || (s = [0, 0], f = [0, 0], i = o = null), n
+ }, n.empty = function () {
+ return !!c && s[0] == s[1] || !!l && f[0] == f[1]
+ }, Bo.rebind(n, a, "on")
+ };
+ var Pl = {
+ n: "ns-resize",
+ e: "ew-resize",
+ s: "ns-resize",
+ w: "ew-resize",
+ nw: "nwse-resize",
+ ne: "nesw-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+ }, Ul = [["n", "e", "s", "w", "nw", "ne", "se", "sw"], ["e", "w"], ["n", "s"], []], jl = rc.format = lc.timeFormat, Fl = jl.utc, Hl = Fl("%Y-%m-%dT%H:%M:%S.%LZ");
+ jl.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? Io : Hl, Io.parse = function (n) {
+ var t = new Date(n);
+ return isNaN(t) ? null : t
+ }, Io.toString = Hl.toString, rc.second = Ft(function (n) {
+ return new uc(1e3 * Math.floor(n / 1e3))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 1e3 * Math.floor(t))
+ }, function (n) {
+ return n.getSeconds()
+ }), rc.seconds = rc.second.range, rc.seconds.utc = rc.second.utc.range, rc.minute = Ft(function (n) {
+ return new uc(6e4 * Math.floor(n / 6e4))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 6e4 * Math.floor(t))
+ }, function (n) {
+ return n.getMinutes()
+ }), rc.minutes = rc.minute.range, rc.minutes.utc = rc.minute.utc.range, rc.hour = Ft(function (n) {
+ var t = n.getTimezoneOffset() / 60;
+ return new uc(36e5 * (Math.floor(n / 36e5 - t) + t))
+ }, function (n, t) {
+ n.setTime(n.getTime() + 36e5 * Math.floor(t))
+ }, function (n) {
+ return n.getHours()
+ }), rc.hours = rc.hour.range, rc.hours.utc = rc.hour.utc.range, rc.month = Ft(function (n) {
+ return n = rc.day(n), n.setDate(1), n
+ }, function (n, t) {
+ n.setMonth(n.getMonth() + t)
+ }, function (n) {
+ return n.getMonth()
+ }), rc.months = rc.month.range, rc.months.utc = rc.month.utc.range;
+ var Ol = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6], Yl = [[rc.second, 1], [rc.second, 5], [rc.second, 15], [rc.second, 30], [rc.minute, 1], [rc.minute, 5], [rc.minute, 15], [rc.minute, 30], [rc.hour, 1], [rc.hour, 3], [rc.hour, 6], [rc.hour, 12], [rc.day, 1], [rc.day, 2], [rc.week, 1], [rc.month, 1], [rc.month, 3], [rc.year, 1]], Il = jl.multi([[".%L", function (n) {
+ return n.getMilliseconds()
+ }], [":%S", function (n) {
+ return n.getSeconds()
+ }], ["%I:%M", function (n) {
+ return n.getMinutes()
+ }], ["%I %p", function (n) {
+ return n.getHours()
+ }], ["%a %d", function (n) {
+ return n.getDay() && 1 != n.getDate()
+ }], ["%b %d", function (n) {
+ return 1 != n.getDate()
+ }], ["%B", function (n) {
+ return n.getMonth()
+ }], ["%Y", Ae]]), Zl = {
+ range: function (n, t, e) {
+ return Bo.range(Math.ceil(n / e) * e, +t, e).map(Vo)
+ }, floor: Et, ceil: Et
+ };
+ Yl.year = rc.year, rc.scale = function () {
+ return Zo(Bo.scale.linear(), Yl, Il)
+ };
+ var Vl = Yl.map(function (n) {
+ return [n[0].utc, n[1]]
+ }), Xl = Fl.multi([[".%L", function (n) {
+ return n.getUTCMilliseconds()
+ }], [":%S", function (n) {
+ return n.getUTCSeconds()
+ }], ["%I:%M", function (n) {
+ return n.getUTCMinutes()
+ }], ["%I %p", function (n) {
+ return n.getUTCHours()
+ }], ["%a %d", function (n) {
+ return n.getUTCDay() && 1 != n.getUTCDate()
+ }], ["%b %d", function (n) {
+ return 1 != n.getUTCDate()
+ }], ["%B", function (n) {
+ return n.getUTCMonth()
+ }], ["%Y", Ae]]);
+ Vl.year = rc.year.utc, rc.scale.utc = function () {
+ return Zo(Bo.scale.linear(), Vl, Xl)
+ }, Bo.text = At(function (n) {
+ return n.responseText
+ }), Bo.json = function (n, t) {
+ return Ct(n, "application/json", Xo, t)
+ }, Bo.html = function (n, t) {
+ return Ct(n, "text/html", $o, t)
+ }, Bo.xml = At(function (n) {
+ return n.responseXML
+ }), "function" == typeof define && define.amd ? define(Bo) : "object" == typeof module && module.exports && (module.exports = Bo), this.d3 = Bo
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/facebox.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/facebox.js
new file mode 100644
index 00000000..cc6f138a
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/facebox.js
@@ -0,0 +1,388 @@
+/*
+ * Facebox (for jQuery)
+ * version: 1.3
+ * @requires jQuery v1.2 or later
+ * @homepage https://github.com/defunkt/facebox
+ *
+ * Licensed under the MIT:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Copyright Forever Chris Wanstrath, Kyle Neath
+ *
+ * Usage:
+ *
+ * jQuery(document).ready(function() {
+ * jQuery('a[rel*=facebox]').facebox()
+ * })
+ *
+ * <a href="#terms" rel="facebox">Terms</a>
+ * Loads the #terms div in the box
+ *
+ * <a href="terms.html" rel="facebox">Terms</a>
+ * Loads the terms.html page in the box
+ *
+ * <a href="terms.png" rel="facebox">Terms</a>
+ * Loads the terms.png image in the box
+ *
+ *
+ * You can also use it programmatically:
+ *
+ * jQuery.facebox('some html')
+ * jQuery.facebox('some html', 'my-groovy-style')
+ *
+ * The above will open a facebox with "some html" as the content.
+ *
+ * jQuery.facebox(function($) {
+ * $.get('blah.html', function(data) { $.facebox(data) })
+ * })
+ *
+ * The above will show a loading screen before the passed function is called,
+ * allowing for a better ajaxy experience.
+ *
+ * The facebox function can also display an ajax page, an image, or the contents of a div:
+ *
+ * jQuery.facebox({ ajax: 'remote.html' })
+ * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style')
+ * jQuery.facebox({ image: 'stairs.jpg' })
+ * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style')
+ * jQuery.facebox({ div: '#box' })
+ * jQuery.facebox({ div: '#box' }, 'my-groovy-style')
+ *
+ * Want to close the facebox? Trigger the 'close.facebox' document event:
+ *
+ * jQuery(document).trigger('close.facebox')
+ *
+ * Facebox also has a bunch of other hooks:
+ *
+ * loading.facebox
+ * beforeReveal.facebox
+ * reveal.facebox (aliased as 'afterReveal.facebox')
+ * init.facebox
+ * afterClose.facebox
+ *
+ * Simply bind a function to any of these hooks:
+ *
+ * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
+ *
+ */
+(function ($) {
+ /*
+ function cloneCanvas(oldCanvas) {
+
+ //create a new canvas
+ var newCanvas = document.createElement('canvas');
+ var context = newCanvas.getContext('2d');
+
+ //set dimensions
+ newCanvas.width = oldCanvas.width;
+ newCanvas.height = oldCanvas.height;
+
+ //apply the old canvas to the new one
+ context.drawImage(oldCanvas, 0, 0);
+
+ //return the new canvas
+ return newCanvas;
+ }
+ */
+ $.facebox = function (data, klass) {
+ $.facebox.loading(data.settings || [])
+
+ if (data.ajax) fillFaceboxFromAjax(data.ajax, klass)
+ else if (data.image) fillFaceboxFromImage(data.image, klass)
+ else if (data.div) fillFaceboxFromHref(data.div, klass)
+ else if ($.isFunction(data)) data.call($)
+ else $.facebox.reveal(data, klass)
+ }
+
+ /*
+ * Public, $.facebox methods
+ */
+
+ $.extend($.facebox, {
+ settings: {
+ opacity: 0.2,
+ overlay: true,
+ loadingImage: '/facebox/loading.gif',
+ closeImage: '/facebox/closelabel.png',
+ imageTypes: ['png', 'jpg', 'jpeg', 'gif'],
+ faceboxHtml: '\
+ <div id="facebox" style="display:none;"> \
+ <div class="popup"> \
+ <div class="content"> \
+ </div> \
+ <a href="#" class="close"></a> \
+ </div> \
+ </div>'
+ },
+
+ loading: function () {
+ init()
+ if ($('#facebox .loading').length == 1) return true
+ showOverlay()
+
+ $('#facebox .content').empty().
+ append('<div class="loading"><img src="' + $.facebox.settings.loadingImage + '"/></div>')
+
+ $('#facebox').show().css({
+ top: getPageScroll()[1] + (getPageHeight() / 10),
+ left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2)
+ })
+
+ $(document).bind('keydown.facebox', function (e) {
+ if (e.keyCode == 27) $.facebox.close()
+ return true
+ })
+ $(document).trigger('loading.facebox')
+ },
+
+ flotPlaceholderId: "",
+ //flotRedrawCallbackId: "",
+ flotRedrawCallback: {},
+ flotRedrawCallbackObjs: {},
+ intervals: {},
+ charts: {},
+
+ isExpand: function (placeholderFlotId) {
+ if (placeholderFlotId.indexOf("_expand") >= 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ clearContent: function (placeholderId) {
+ $('#facebox .content').empty().append('<div id="' + placeholderId + '_expand" class="flot-placeholder-expand">')
+ },
+
+ createChartExpand: function (callback) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ callback(this.flotPlaceholderId + "_expand");
+ },
+
+ createChartExpandObj: function (callbackObj) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ //callback(this.flotPlaceholderId + "_expand");
+ var args = callbackObj.arguments;
+ if (args.length > 0) {
+ args[0] = this.flotPlaceholderId + "_expand";
+ callbackObj.callback.apply(null, args);
+ }
+ },
+
+ reveal: function (data, klass) {
+ $(document).trigger('beforeReveal.facebox')
+ if (klass) $('#facebox .content').addClass(klass)
+ //$('#facebox .content').empty().append(data)
+ /////////////////////////////////////////////
+ //this.createChartExpand(this.flotRedrawCallback[this.flotPlaceholderId]);
+ this.createChartExpandObj(this.flotRedrawCallbackObjs[this.flotPlaceholderId]);
+ //////////////////////////////////////////////////////////////////////
+ $('#facebox .popup').children().fadeIn('normal')
+ $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2))
+ $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
+ },
+
+ close: function () {
+ $(document).trigger('close.facebox')
+ return false
+ }
+ })
+
+ /*
+ * Public, $.fn methods
+ */
+
+ $.fn.facebox = function (settings) {
+ if ($(this).length == 0) return
+
+ init(settings)
+
+ function clickHandler() {
+ $.facebox.loading(true)
+
+ // support for rel="facebox.inline_popup" syntax, to add a class
+ // also supports deprecated "facebox[.inline_popup]" syntax
+ var klass
+ if (this.rel) {
+ klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
+ } else {
+ klass = $(this).attr("rel").match(/facebox\[?\.(\w+)\]?/)
+ }
+ if (klass) klass = klass[1]
+
+ if (this.href) fillFaceboxFromHref(this.href, klass)
+ else fillFaceboxFromHref($(this).attr("href"), klass)
+ return false
+ }
+
+ return this.bind('click.facebox', clickHandler)
+ }
+
+ /*
+ * Private methods
+ */
+
+ // called one time to setup facebox on this page
+ function init(settings) {
+ if ($.facebox.settings.inited) return true
+ else $.facebox.settings.inited = true
+
+ $(document).trigger('init.facebox')
+ makeCompatible()
+
+ var imageTypes = $.facebox.settings.imageTypes.join('|')
+ $.facebox.settings.imageTypesRegexp = new RegExp('\\.(' + imageTypes + ')(\\?.*)?$', 'i')
+
+ if (settings) $.extend($.facebox.settings, settings)
+ $('body').append($.facebox.settings.faceboxHtml)
+
+ var preload = [new Image(), new Image()]
+ preload[0].src = $.facebox.settings.closeImage
+ preload[1].src = $.facebox.settings.loadingImage
+
+ $('#facebox').find('.b:first, .bl').each(function () {
+ preload.push(new Image())
+ preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
+ })
+
+ $('#facebox .close')
+ .click($.facebox.close)
+ .append('<img src="'
+ + $.facebox.settings.closeImage
+ + '" class="close_image" title="close">')
+
+ //$('#facebox .content').addClass('contentWide')
+ }
+
+ // getPageScroll() by quirksmode.com
+ function getPageScroll() {
+ var xScroll, yScroll;
+ if (self.pageYOffset) {
+ yScroll = self.pageYOffset;
+ xScroll = self.pageXOffset;
+ } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
+ yScroll = document.documentElement.scrollTop;
+ xScroll = document.documentElement.scrollLeft;
+ } else if (document.body) {// all other Explorers
+ yScroll = document.body.scrollTop;
+ xScroll = document.body.scrollLeft;
+ }
+ return new Array(xScroll, yScroll)
+ }
+
+ // Adapted from getPageSize() by quirksmode.com
+ function getPageHeight() {
+ var windowHeight
+ if (self.innerHeight) { // all except Explorer
+ windowHeight = self.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
+ windowHeight = document.documentElement.clientHeight;
+ } else if (document.body) { // other Explorers
+ windowHeight = document.body.clientHeight;
+ }
+ return windowHeight
+ }
+
+ // Backwards compatibility
+ function makeCompatible() {
+ var $s = $.facebox.settings
+
+ $s.loadingImage = $s.loading_image || $s.loadingImage
+ $s.closeImage = $s.close_image || $s.closeImage
+ $s.imageTypes = $s.image_types || $s.imageTypes
+ $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
+ }
+
+ // Figures out what you want to display and displays it
+ // formats are:
+ // div: #id
+ // image: blah.extension
+ // ajax: anything else
+ function fillFaceboxFromHref(href, klass) {
+ // div
+ if (href.match(/#/)) {
+ var url = window.location.href.split('#')[0]
+ var target = href.replace(url, '')
+ if (target == '#') return
+ //选择需要放大的图
+ $.facebox.flotPlaceholderId = $(target).attr("flot_id");
+ //$.facebox.flotRedrawCallbackId = $(target).attr("callback_id");
+ if ($(target).hasClass("flot-placeholder-wrapper-portlet-wide")) {
+ $('#facebox .content').addClass('contentWide');
+ }
+
+ $.facebox.reveal($(target).html(), klass)
+
+ // image
+ } else if (href.match($.facebox.settings.imageTypesRegexp)) {
+ fillFaceboxFromImage(href, klass)
+ // ajax
+ } else {
+ fillFaceboxFromAjax(href, klass)
+ }
+ }
+
+ function fillFaceboxFromImage(href, klass) {
+ var image = new Image()
+ image.onload = function () {
+ $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
+ }
+ image.src = href
+ }
+
+ function fillFaceboxFromAjax(href, klass) {
+ $.facebox.jqxhr = $.get(href, function (data) {
+ $.facebox.reveal(data, klass)
+ })
+ }
+
+ function skipOverlay() {
+ return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
+ }
+
+ function showOverlay() {
+ if (skipOverlay()) return
+
+ if ($('#facebox_overlay').length == 0)
+ $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
+
+ $('#facebox_overlay').hide().addClass("facebox_overlayBG")
+ .css('opacity', $.facebox.settings.opacity)
+ .click(function () {
+ $(document).trigger('close.facebox')
+ })
+ .fadeIn(200)
+ return false
+ }
+
+ function hideOverlay() {
+ if (skipOverlay()) return
+
+ $('#facebox_overlay').fadeOut(200, function () {
+ $("#facebox_overlay").removeClass("facebox_overlayBG")
+ $("#facebox_overlay").addClass("facebox_hide")
+ $("#facebox_overlay").remove()
+ })
+
+ return false
+ }
+
+ /*
+ * Bindings
+ */
+
+ $(document).bind('close.facebox', function () {
+ if ($.facebox.jqxhr) {
+ $.facebox.jqxhr.abort()
+ $.facebox.jqxhr = null
+ }
+ $(document).unbind('keydown.facebox')
+ $('#facebox').fadeOut(function () {
+ $('#facebox .content').removeClass().addClass('content')
+ $('#facebox .loading').remove()
+ $(document).trigger('afterClose.facebox')
+ })
+ hideOverlay()
+ })
+
+})(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/portlet-draggable-jq.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/portlet-draggable-jq.js
new file mode 100644
index 00000000..3afe3a6a
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/assets/js/portlet-draggable-jq.js
@@ -0,0 +1,66 @@
+var PortletDraggable = function () {
+
+ return {
+ //main function to initiate the module
+ init: function () {
+
+ if (!jQuery().sortable) {
+ return;
+ }
+
+ $(".column").sortable({
+ connectWith: ".column",
+ items: ".portlet",
+ opacity: 0.8,
+ forceHelperSize: true,
+ placeholder: 'portlet-sortable-placeholder',
+ forcePlaceholderSize: true,
+ tolerance: "pointer",
+ helper: "clone",
+ /* tolerance: "pointer",
+ forcePlaceholderSize: !0,
+ helper: "clone", */
+ cancel: ".portlet-sortable-empty, .portlet-fullscreen", // cancel dragging if portlet is in fullscreen mode
+ revert: 250, // animation in milliseconds
+ update: function (b, c) {
+ if (c.item.prev().hasClass("portlet-sortable-empty")) {
+ c.item.prev().before(c.item);
+ }
+ //换位置后重绘图例
+ var portlet = $(c.item);
+ /* var placeHolderId = $("a > div", portlet).attr("flot_id");
+ if(placeHolderId){
+ var itemCallbackObj = $.facebox.flotRedrawCallbackObjs[placeHolderId];
+ var args = itemCallbackObj.arguments;
+ $.facebox.isDragged = true;
+ var placeHolder = $("div[id=" + placeHolderId + "]");
+ if($(placeHolder).length > 0){
+ $(placeHolder).empty();
+ //eChart的情况需要去掉_echarts_instance_属性才能重绘
+ if($(placeHolder).attr("_echarts_instance_")){
+ $(placeHolder).removeAttr("_echarts_instance_");
+ }
+ if(itemCallbackObj.callback && args.length > 0){
+ args[0] = placeHolderId;
+ itemCallbackObj.callback.apply(null, args);
+ }
+ }
+ $.facebox.isDragged = false;
+ } */
+ //刷新图例大小
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ DashboardICT.removeYaxisScale();
+ //调整放大后的宽度
+ if ($(portlet).parent().hasClass("col-md-6")) {
+ $("a > div", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ } else {
+ $("a > div", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+ }
+ });
+ }
+ };
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/c3Chart.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/c3Chart.js
new file mode 100644
index 00000000..5a3326dc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/c3Chart.js
@@ -0,0 +1,59 @@
+/*
+ graphApp = angular.module('graphApp', []);
+
+ graphApp.controller('GraphCtrl', function ($scope) {
+ $scope.chart = null;
+ $scope.config={};
+ $scope.config.data1="30, 200, 100, 200, 150, 250";
+ $scope.config.data2="70, 30, 10, 240, 150, 125";
+
+ $scope.typeOptions=["line","bar","spline","step","area","area-step","area-spline"];
+
+ $scope.config.type1=$scope.typeOptions[0];
+ $scope.config.type2=$scope.typeOptions[1];
+
+ $scope.showGraph = function() {
+ var config = {};
+ config.bindto = '#placeholderC3';
+ config.data = {};
+ config.data.json = {};
+ config.data.json.data1 = $scope.config.data1.split(",");
+ config.data.json.data2 = $scope.config.data2.split(",");
+ config.axis = {"y":{"label":{"text":"Number of items","position":"outer-middle"}}};
+ config.data.types={"data1":$scope.config.type1,"data2":$scope.config.type2};
+ $scope.chart = c3.generate(config);
+ }
+
+ $scope.changeColor = function() {
+ d3.selectAll('path.c3-bar').style("fill", "red");
+ }
+ });
+ */
+
+var c3ChartDemo = function (placeholderC3, type) {
+ var $scopeX = {};
+ $scopeX.chart = null;
+ $scopeX.config = {};
+ $scopeX.config.data1 = "30, 200, 100, 200, 150, 250";
+ $scopeX.config.data2 = "70, 30, 10, 240, 150, 125";
+
+ $scopeX.typeOptions = ["line", "bar", "spline", "step", "area", "area-step", "area-spline"];
+
+ $scopeX.config.type1 = $scopeX.typeOptions[0];
+ $scopeX.config.type2 = $scopeX.typeOptions[1];
+ var config = {};
+ config.bindto = '#' + placeholderC3;
+ config.data = {};
+ config.data.json = {};
+ config.data.json.data1 = $scopeX.config.data1.split(",");
+ config.data.json.data2 = $scopeX.config.data2.split(",");
+ config.axis = {"y": {"label": {"text": "Number of items", "position": "outer-middle"}}};
+ config.data.types = {"data1": $scopeX.config.type1, "data2": $scopeX.config.type2};
+ if (type && type == "bar") {
+ config.data.types.data1 = $scopeX.config.type2;
+ }
+ if (type && type == "step") {
+ config.data.types.data1 = "step";
+ }
+ $.facebox.charts[placeholderC3] = c3.generate(config);
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-barchart-c3.js
new file mode 100644
index 00000000..6f332f1b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-barchart-c3.js
@@ -0,0 +1,29 @@
+var AlarmCount_BarChart_C3 = function (placeholdeC3) {
+
+ var callbackList = [];
+ var callback = function () {
+
+ }
+ callbackList.push(callback);
+
+ $.ajax({
+ "dataType": "json",
+ "type": "GET",
+ "url": "/web/rest/web/fm/count/total",
+ "data": null,
+ "Content-Type": "",
+ "success": function (json, textStatus, jqXHR) {
+ var alarmcount = json;
+ var inputData = [];
+ for (var i = 0; i < alarmcount.ackedCount.length; i++) {
+ inputData.push(alarmcount.unAckedCount[i] + alarmcount.ackedCount[i]);
+ }
+ //for test
+ inputData = [50, 10, 20, 40];
+ ICT_Bar_Chart_C3(placeholdeC3, inputData, callbackList);
+ },
+ "error": function () {
+ }
+ });
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-linechart-c3.js
new file mode 100644
index 00000000..2991a8b6
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/demo-linechart-c3.js
@@ -0,0 +1,41 @@
+var seriesCount = 3;
+var xMaxLength = 60;
+var colors = ["#d12610", "#37b7f3", "#52e136"];
+
+var ICT_CPU_UsageLine_C3 = function (placeholderC3) {
+
+ var c3Line = ICT_Line_C3(placeholderC3);
+
+ var data = {};
+ var maxNumber = 60;
+
+ function randomNumber() {
+ return Math.floor((Math.random() * maxNumber) + 1);
+ }
+
+ if (!$.facebox.isExpand(placeholderC3)) {
+ $.facebox.intervals[placeholderC3] = window.setInterval(function () {
+
+ //var newSeriesData = {};
+ var newSeriesData = [];
+
+ $.ajax({
+ dataType: "json",
+ "type": "GET",
+ url: "/web/rest/web/dm/dashboard/selfcpu/queryValues",
+ "data": JSON.stringify(data),
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ //newSeriesData.data1 = data.cpuUseRatios[0];
+ //newSeriesData.data2 = randomNumber();
+ newSeriesData.push({name: "data1", value: data.cpuUseRatios[0]});
+ newSeriesData.push({name: "data2", value: randomNumber()});
+ newSeriesData.push({name: "data3", value: randomNumber()});
+ c3Line.setC3Data(newSeriesData);
+ }
+ });
+
+ }, 3 * 1000);
+ }
+
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-barchart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-barchart-c3.js
new file mode 100644
index 00000000..ee1040ca
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-barchart-c3.js
@@ -0,0 +1,67 @@
+var ICT_Bar_Chart_C3 = function (placeholdeC3, inputData, callbackList) {
+
+ var language;
+ //取得国际化信息
+ $.ajax({
+ dataType: "json",
+ url: "/web/newict/framework/thirdparty/flotchart/i18n/ict-barchart-flot-" + getLanguage() + ".json",
+ async: false,
+ contentType: "application/json; charset=utf-8",
+ "success": function (data) {
+ language = data.language;
+ },
+ "error": function (xhr, info) {
+ alert("Communication Error! Error reason:" + info);
+ }
+ });
+
+ var config = {};
+ config.bindto = '#' + placeholdeC3;
+ config.data = {};
+ config.data.json = {};
+ config.data.json["告警"] = inputData;
+ config.axis = {"y": {"label": {"text": "Number of Alarms", "position": "outer-middle"}}};
+ config.axis.x = {
+ type: 'category',
+ categories: [language[0].value, language[1].value, language[2].value, language[3].value]
+ };
+ /* config.axis.y.tick = {
+ format: function(data){
+ return data + "%";
+ }
+ }; */
+ config.data.types = {};
+ config.data.types["告警"] = "bar";
+ config.data.color = function (inColor, data) {
+ if (data.index !== undefined) {
+ return language[data.index].color;
+ }
+ return inColor;
+ },
+ config.data.onclick = function (data, element) {
+ if (data.index !== undefined) {
+ var severity = data.index + 1;
+ window.open(
+ "/web/res/web-framework/default.html?showNav=false&severity="
+ + severity + "#uep-ict-fm-currentAlarm", "fm_portlet_page_title"
+ + severity, "");
+ }
+ },
+ //config.data.colors = ['red', 'green', 'blue', 'yellow'];
+ config.legend = {
+ show: false
+ };
+ $.facebox.charts[placeholdeC3] = c3.generate(config);
+
+ /* if($.facebox.isExpand(placeholdeC3)){
+ barChartData = $.facebox.barChartData;
+ }else{
+ $.facebox.barChartData = barChartData;
+ } */
+
+ $.each(callbackList, function (index, callback) {
+ callback();
+ });
+
+}
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-linechart-c3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-linechart-c3.js
new file mode 100644
index 00000000..5b6d22bc
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/ict-linechart-c3.js
@@ -0,0 +1,81 @@
+var ICT_Line_C3 = function (placeholderC3) {
+
+ //var dataSeries = [];
+ var xkeys = {"x": "x", "value": []};
+
+ //��ʼ�����
+ var config = {};
+ config.bindto = '#' + placeholderC3;
+ config.data = {};
+ config.data.keys = xkeys;
+ config.data.json = [];
+ //�Ŵ���ʾ�����ֱ��ȡ��������
+ if (($.facebox.isExpand(placeholderC3) || $.facebox.isDragged) && $.facebox.flotRealTimeData) {
+ config.data.json = $.facebox.flotRealTimeData;
+ config.data.keys = $.facebox.xkeys;
+ }
+ config.axis = {};
+ config.axis.x = {"type": "timeseries", "tick": {"format": "%S"}};
+ config.axis.y = {"label": {"text": "Ratio of CPUs", "position": "outer-middle"}};
+ config.axis.y.tick = {
+ format: function (data) {
+ return data + "%";
+ }
+ };
+ config.data.types = {"data1": "line", "data2": "spline"};
+ config.data.colors = {
+ data1: '#ff0000',
+ data2: '#00ff00',
+ data3: '#0000ff'
+ };
+ var c3Chart = c3.generate(config);
+ $.facebox.charts[placeholderC3] = c3Chart;
+
+ if (!$.facebox.isExpand(placeholderC3)) {
+
+ var dataService = function () {
+ var data = [];
+ var numDataPoints = 60;
+
+ this.loadData = function (callback, newSeriesData) {
+ if (data.length > numDataPoints) {
+ data.shift();
+ }
+ var newValue = {"x": new Date()};
+ for (var i = 0; i < newSeriesData.length; i++) {
+ newValue[newSeriesData[i].name] = newSeriesData[i].value;
+ }
+ //data.push({"x":new Date(),"data1":newSeriesData.data1,"data2":newSeriesData.data2});
+ data.push(newValue);
+ $.facebox.flotRealTimeData = data;
+ $.facebox.xkeys = xkeys;
+ callback(data);
+ };
+ return this;
+ }();
+
+ return {
+
+ setC3Data: function (newSeriesData) {
+ var values = [];
+ for (var i = 0; i < newSeriesData.length; i++) {
+ values.push(newSeriesData[i].name);
+ }
+ xkeys.value = values;
+ //dataSeries = recalculateSeries(dataSeries, newSeriesData);
+ dataService.loadData(function (newData) {
+ var data = {};
+ data.keys = xkeys;
+ data.json = newData;
+ c3Chart.load(data);
+ //c3Chart.resize();
+ }, newSeriesData);
+
+ //$.facebox.flotRealTimeData = dataSeries;
+ }
+
+ };
+
+ }
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/index3.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/index3.html
new file mode 100644
index 00000000..ad289ae0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/demo/index3.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html ng-app="graphApp">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title></title>
+ <SCRIPT SRC="debug.js"></SCRIPT>
+ <SCRIPT>
+ if (typeof(parent.loadJsFromIndex) == "undefined" || !parent.loadJsFromIndex) {
+ var jqueryJsPath = "/web/res/web-common/comp/jquery.js";
+ document.write("<" + "SCRIPT SRC=" + jqueryJsPath + "><" + "/SCRIPT>");
+ var frameworkJsPath = "/web/res/web-framework/js/framework.js";
+ document.write("<" + "SCRIPT SRC=" + frameworkJsPath + "><" + "/SCRIPT>");
+ }
+ </SCRIPT>
+ <SCRIPT>
+ if (typeof ($userFrameDir) == 'undefined') {
+ $userFrameDir = "/web/res/web-common/comp/";
+ }
+ var toolUrl = $userFrameDir + "tools.js";
+ document.write("<" + "SCRIPT SRC=" + toolUrl + "><" + "/SCRIPT>");
+ </SCRIPT>
+</head>
+<style>
+ body {
+ margin: 0;
+ padding: 0;
+ }
+</style>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.css">
+<link href="/web/newict/framework/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css">
+<link href="/web/newict/framework/thirdparty/facebox/facebox.css" media="screen" rel="stylesheet" type="text/css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/ict-chart-dashboard.css"
+ rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/components.css" rel="stylesheet">
+<link rel="stylesheet" href="/web/res/web-common/css/ZteIctIcons/style.css"/>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/font-awesome/css/font-awesome.min.css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/assets/css/transition.css" rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/DashboardICT.css" rel="stylesheet">
+<link href="/web/newict/framework/thirdparty/uniform/css/uniform.default.css" rel="stylesheet" type="text/css">
+<link href="/web/newict/framework/thirdparty/dashboard/assets/css/c3.css" rel="stylesheet" type="text/css">
+<body ng-controller="GraphCtrl">
+<div class="dashBoardHeader">
+ <div id="cf5" class="hover sidebar-toggler">
+ <img class="top shadow" src="images/open.png"/>
+ <img class="bottom shadow" src="images/shrink.png"/>
+ </div>
+ <button id="savePlots">Save</button>
+ <div id="deleteIcon" class="hover delete-icon">
+ <img class="top shadow" src="images/remove.png"/>
+ <img class="bottom shadow deleteIconHidden" src="images/remove_red.png"/>
+ </div>
+</div>
+<div class="plotItemsSelectionWrapper"></div>
+<div class="dashBoardBody">
+ <div class="contentWrapper">
+ <div class="plotsWrapper">
+ <div class="row ui-sortable" id="sortable_portlets_added">
+ <div class="col-md-6 column sortable col-padding-adjust">
+ <div id="droppable" class="portlet portlet-sortable light bg-inverse droppable"
+ style="display: block;"></div>
+ <div class="portlet portlet-sortable-empty"></div>
+ </div>
+ <div class="col-md-6 column sortable col-padding-adjust">
+ <div id="droppable1" class="portlet portlet-sortable light bg-inverse droppable"
+ style="display: block;"></div>
+ <div class="portlet portlet-sortable-empty"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+<!-- </div> -->
+<script type="text/javascript" src="/web/newict/framework/thirdparty/jquery-1.10.2.min.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.js"></script>
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/d3.min.js" charset="utf-8"></script>
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/c3.js"></script>
+<!--图例-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/ict-linechart-c3.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/ict-barchart-c3.js"></SCRIPT>
+<!--demo-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/demo-barchart-c3.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/dashboard/demo/demo-linechart-c3.js"></SCRIPT>
+<!--facebox-->
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/facebox.js"></script>
+<!--portlet-->
+<script src="/web/newict/framework/thirdparty/dashboard/assets/js/portlet-draggable-jq.js"
+ type="text/javascript"></script>
+<script src="/web/newict/framework/thirdparty/bootstrap/js/bootstrap.min.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-slimscroll/jquery.slimscroll.min.js"
+ type="text/javascript"></script>
+<!-- <script type="text/javascript" src="js/freewall.js"></script> -->
+<script src="/web/newict/framework/thirdparty/dashboard/demo/c3Chart.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/uniform/jquery.uniform.min.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/dashboard/DashboardICT-jq.js"></script>
+<script>
+ jQuery(document).ready(function () {
+
+ var c3ChartControlHtmlFrag =
+ '<div class="legendC3">' +
+ '<span id="c3-line" data-id="data1" style="background-color: rgb(31, 119, 180);">Line</span>' +
+ '<span id="c3-bar" data-id="data2" style="background-color: rgb(255, 127, 14);">Bar</span>' +
+ '<span id="c3-step" data-id="data3" style="background-color: rgb(44, 160, 44);">Step</span>' +
+ '</div>';
+ DashboardICT.addPlotControlHtmlFrags("c3Chart", c3ChartControlHtmlFrag);
+
+ var c3PlotControlCallback = function (plotCallback, placeholderId) {
+ $("#c3-line").click(function () {
+ plotCallback(placeholderId, "line");
+ var args = [placeholderId, "line"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ $("#c3-bar").click(function () {
+ plotCallback(placeholderId, "bar");
+ var args = [placeholderId, "bar"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ $("#c3-step").click(function () {
+ plotCallback(placeholderId, "step");
+ var args = [placeholderId, "step"];
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+ });
+ }
+ DashboardICT.addPlotControlCallbacks("c3Chart", c3PlotControlCallback);
+
+ DashboardICT.init();
+ $("#savePlots").click(function () {
+ var savedPlots = DashboardICT.saveSelectedPlots();
+ });
+
+ });
+</script>
+</body>
+</html>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.css
new file mode 100644
index 00000000..e9a9795b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.css
@@ -0,0 +1,293 @@
+.droppable {
+ height: 254px;
+ /*height: 600px;*/
+ opacity: 0.0;
+}
+
+.draggableItemsWrapper {
+ opacity: 0.8;
+ background: #F7F7F7;
+ position: fixed;
+ width: 100%;
+ height: 70px;
+ overflow: auto;
+ margin: 5px;
+ top: 0px;
+}
+
+.draggableItems {
+ display: inline-block;
+ /* width: 70px; */
+ color: black;
+ /*background-color: #4b8df8;*/
+ padding: 20px;
+ padding-bottom: 3px;
+ padding-left: 20px;
+ padding-right: 20px;
+ /*margin-right: 5px;*/
+ font-size: 1.8em;
+ /*margin-bottom: 10px;*/
+ /*border: 1px solid #e1e1e1 !important;*/
+ border-bottom: 1px solid #e1e1e1 !important;
+ cursor: pointer;
+ background-color: #fff;
+ opacity: 0.75;
+}
+
+.draggableItems:hover {
+ opacity: 1;
+}
+
+.droppedOver {
+ background-color: red;
+}
+
+/*.plotItemsSelectionWrapper{
+ width: 160px;
+ float: left;
+ position: relative;
+ margin-right: -100%;
+ height:600px;
+ margin-top: 10px;
+ overflow-y:auto;
+}*/
+.sideBarHeader {
+ float: left;
+ display: block;
+ width: 160px;
+ height: 75px;
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+.sideBarClose {
+ width: 0px !important;
+}
+
+.dashboardExpand {
+ margin-left: 1px !important;
+}
+
+.dashBoardWrapper {
+ overflow-x: auto;
+}
+
+.delete-icon {
+ float: right;
+ /*padding: 5px;*/
+ cursor: pointer;
+ position: relative;
+ display: inline-block;
+}
+
+.delete-icon img {
+ position: absolute;
+ right: 0px;
+}
+
+.deleteIconHidden {
+ opacity: 0;
+}
+
+.removeIcon {
+ width: 22px;
+ height: 22px;
+ float: right;
+ margin-right: -24px;
+ margin-top: -20px;
+ background: url(images/delete.png) no-repeat 0px 0px;
+ cursor: pointer;
+}
+
+.portletLabel {
+ color: #343434;
+ width: 100%;
+ height: 30px;
+ float: left;
+ border-bottom: 1px solid #e1e1e1;
+ font: 16px Microsoft yahei;
+}
+
+.col-md-6.column.sortable.ui-sortable {
+ padding-left: 5px !important;
+}
+
+.col-padding-adjust {
+ padding-right: 5px !important;
+}
+
+.dashBoardBody {
+ width: 100%;
+ height: 720px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.widePortlet {
+ width: 600px !important;
+}
+
+.freeDragBlock {
+ display: block;
+ width: 300px !important;
+ height: 270px !important;
+}
+
+.freeDragBlockWide {
+ display: block;
+ width: 600px !important;
+ height: 270px !important;
+}
+
+.brickDraggable {
+ float: left;
+ display: block;
+ cursor: default;
+ /*overflow: hidden;*/
+}
+
+.size11 {
+ height: 250px !important;
+ width: 280px !important;
+}
+
+/*
+.size21 {
+ height: 250px !important;
+ width: 566px !important;
+}
+.size22 {
+ height: 506px !important;
+ width: 566px !important;
+}
+*/
+.size21 {
+ height: 250px;
+ width: 566px;
+}
+
+.size22 {
+ height: 506px;
+ width: 566px;
+}
+
+/*
+.size11 {
+ height: 250px !important;
+ width: 25% !important;
+}
+.size21 {
+ height: 250px !important;
+ width: 51% !important;
+}
+.size22 {
+ height: 506px !important;
+ width: 51% !important;
+}*/
+.c3PlotTypes {
+ float: right;
+}
+
+.legendC3 {
+ width: 50%;
+ top: 20%;
+ position: absolute;
+ right: 5%;
+ z-index: 99;
+ font: 14px Microsoft yahei;
+ /* display: table; */
+}
+
+/* #htmlFrag{
+ display: table;
+} */
+.legendC3 span {
+ width: 33.333333%;
+ display: inline-block;
+ text-align: center;
+ cursor: pointer;
+ color: white;
+}
+
+.initBlock {
+ opacity: 0 !important;
+}
+
+.dashBoardHeader {
+ position: relative;
+ /*z-index: 99999;*/
+ /*padding-left: 5px;*/
+}
+
+.row.ui-sortable {
+ /*height:100%;*/
+}
+
+.column.sortable {
+ height: 100%;
+}
+
+.expandLink {
+ position: absolute;
+ right: 5%;
+}
+
+.dragItemLabel {
+ color: #000;
+ text-align: center;
+ position: relative;
+ /* height: 10px; */
+ /* display: inline-block; */
+ font-size: 0.5em;
+ font-family: Microsoft yahei;
+ /* padding: 0px; */
+ margin-top: 6px;
+ margin-bottom: 3px;
+ width: 108px;
+}
+
+#dashboardTest {
+ background-color: #F1F3FA;
+}
+
+#dashboardICT {
+ background-color: #F1F3FA;
+ height: 100%;
+ /*position: absolute;*/
+}
+
+.ui-droppable {
+ padding-left: 0px;
+}
+
+.ui-sortable {
+ margin-left: 0;
+ margin-right: 0;
+}
+
+.slimScrollDiv {
+ margin-top: 6px;
+ padding-left: 0;
+}
+
+.portlet-sortable {
+ margin-top: 6px;
+}
+
+.dashboardTest {
+ margin-top: 1px;
+}
+
+.plotItemsSelectionWrapper {
+ margin-right: 5px;
+ border: 1px solid #e1e1e1 !important;
+ border-radius: 8px !important;
+}
+
+.plotItemsSelectionWrapper.sideBarClose {
+ border: 0px solid #e1e1e1 !important;
+}
+
+.draggableItems:last-child {
+ border-bottom: 0 !important;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js
new file mode 100644
index 00000000..ff14d2a3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js
@@ -0,0 +1,435 @@
+var DashboardICT = function () {
+
+ var chartObjs;
+ var plotsSelected;
+ var plotControlCallbacks = {};
+ var plotControlHtmlFrags = {};
+
+ var addDroppableItem = function () {
+ $(".column.sortable").droppable({
+ accept: ".draggableItems",
+ drop: function (event, ui) {
+ //var dropLocation = $( ".plotsWrapper" );
+ var plotTypeId = $(ui.draggable).attr("id");
+ /* if($("#" + chartObjs[plotTypeId].placeholderId).length >0){
+ alert("Plot already exits!");
+ return;
+ } */
+ addDraggablePortlet(this, plotTypeId);
+ }
+ });
+ }
+
+ var addDraggablePortlet = function (droppableItem, plotTypeId) {
+
+ if (!chartObjs[plotTypeId].chartType || chartObjs[plotTypeId].chartType != "prototype") {
+ $("div#" + plotTypeId).remove();
+ }
+
+ var portletId = chartObjs[plotTypeId].typeId;
+ var portletLabel = chartObjs[plotTypeId].plotLabel;
+ var placeholderId = chartObjs[plotTypeId].placeholderId;
+ if ($("div[id^=" + placeholderId + "]").length > 0) {
+ var placeholderIdCount = $("div[id^=" + placeholderId + "]").length;
+ placeholderId = placeholderId + "_" + placeholderIdCount;
+ }
+ var plotCallback = eval(chartObjs[plotTypeId].plotCallbackName);
+ var plotSize = "size11";
+ if (chartObjs[plotTypeId].plotSize) {
+ plotSize = chartObjs[plotTypeId].plotSize;
+ }
+ plotSize = "";
+
+ var faceboxDivIndex = $("a[rel=facebox]").length + 1;
+ var portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox" class="expandLink"><img src="/ngict/iui/component/ict/ict-dashboard/images/zoom.png" /></a>' +
+ '<div class="removeflot"></div>' +
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ plotControlHtmlFrags[plotTypeId] +
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+ }
+
+ if (chartObjs[plotTypeId].htmlSrc) {
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox" class="expandLink"><img src="/ngict/iui/component/ict/ict-dashboard/images/zoom.png" /></a>' +
+ '<div class="removeflot"></div>' +
+ '<div id="htmlFrag" ></div>' +
+ /* '<div ms-include-src="' + chartObjs[plotTypeId].htmlSrc + '"></div>' + */
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+ }
+
+ //插入图例
+ //$(droppableItem).before(portletHtml);
+ $(droppableItem).prepend(portletHtml);
+ //$( ".plotsWrapper" ).append(portletHtml);
+ if (chartObjs[plotTypeId].htmlSrc) {
+ $.ajax({
+ async: false,
+ "dataType": "html",
+ "type": "GET",
+ "url": chartObjs[plotTypeId].htmlSrc,
+ "data": null,
+ "success": function (html, textStatus, jqXHR) {
+ $("div#htmlFrag").html(html);
+ },
+ "error": function () {
+ alert("Communication error!");
+ }
+ });
+ }
+
+ //添加图例控制回调
+ if (chartObjs[plotTypeId].plotControlCallback) {
+ plotControlCallbacks[plotTypeId](plotCallback, placeholderId);
+ }
+
+ var args = [placeholderId];
+ if (chartObjs[plotTypeId].arguments) {
+ var argsArray = chartObjs[plotTypeId].arguments.split(",");
+ args = args.concat(argsArray);
+ }
+ //plotCallback(placeholderId);
+ plotCallback.apply(null, args);
+
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback: plotCallback,
+ arguments: args
+ }
+
+ //调整放大后的宽度
+ var portlet = $("#" + portletId + ".portlet");
+ if ($(portlet).parent().hasClass("col-md-6")) {
+ $("div.flot-placeholder-wrapper-portlet", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ } else {
+ $("div.flot-placeholder-wrapper-portlet", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+
+ //添加点击范围
+ /* var graphToExpand = $("div#" + placeholderId + " > svg > g")[0];
+ $(graphToExpand).attr("id", "graphToExpand_" + placeholderId);
+ var gNode = d3.select("g#graphToExpand_" + placeholderId);
+ gNode.attr("href", "#faceboxDiv_" + faceboxDivIndex);
+ gNode.attr("rel", "facebox"); */
+
+ $.facebox.settings.closeImage = '/web/newict/framework/thirdparty/facebox/closelabel.png';
+ $.facebox.settings.loadingImage = '/web/newict/framework/thirdparty/facebox/loading.gif';
+ $('a[rel*=facebox]').facebox();
+
+ addDroppableItem();
+ }
+
+ var restoreDragItems = function (chartId) {
+ if (!chartObjs[chartId].chartType || chartObjs[chartId].chartType != "prototype") {
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ if ($("div#" + chartId, plotItemsSelectionDiv).length == 0) {
+ var chartSelectHtml =
+ '<div id="' + chartObjs[chartId].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartId].imageURL + '">' +
+ '<div class="dragItemLabel">' + chartObjs[chartId].plotLabel + '</div>' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ $(".draggableItems").draggable({
+ //containment:"body",
+ revert: false,
+ appendTo: "div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ }
+ }
+ }
+
+ var jsonTransformFromBackend = function (json) {
+ var charts = json;
+ var obj = {};
+ obj.chartTypes = {};
+ for (var i = 0; i < charts.length; i++) {
+ obj.chartTypes[charts[i].id] = charts[i];
+ obj.chartTypes[charts[i].id].typeId = charts[i].id;
+ }
+ //obj.initPlots = ["ictCPULineC3", "currentAlarm"];
+ return obj;
+ }
+
+ function sleep(numberMillis) {
+ var now = new Date();
+ var exitTime = now.getTime() + numberMillis;
+ while (true) {
+ now = new Date();
+ if (now.getTime() > exitTime)
+ return;
+ }
+ }
+
+ return {
+
+ init: function (restPath, dashboardDivId, dashboardHtmlPath) {
+
+ if (dashboardDivId && dashboardHtmlPath) {
+ $.ajax({
+ async: false,
+ "dataType": "html",
+ "type": "GET",
+ "url": dashboardHtmlPath,
+ "data": null,
+ "success": function (html, textStatus, jqXHR) {
+ $('div#' + dashboardDivId).html(html);
+ },
+ "error": function () {
+ alert("Communication error!");
+ }
+ });
+ }
+
+ //sleep(500);
+
+ $.ajax({
+ async: false,
+ "type": "GET",
+ url: "/ngict/rest/dashboard/charts",
+ dataType: "json",
+ "success": function (res, textStatus, jqXHR) {
+ res = jsonTransformFromBackend(res);
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ //初始化左边的图列类型列表
+ chartObjs = res.chartTypes;
+ var chartSelectHtml = "";
+ for (var chartObj in chartObjs) {
+ chartSelectHtml =
+ '<div id="' + chartObjs[chartObj].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartObj].imageURL + '">' +
+ '<div class="dragItemLabel">' + chartObjs[chartObj].plotLabel + '</div>' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ }
+ //初始化已选图例
+ //plotsSelected = res.initPlots;
+ },
+ "error": function () {
+ alert("Config file load error!");
+ }
+ });
+
+ PortletDraggable.init();
+ //Portlet
+ $(".draggableItems").draggable({
+ //containment:"body",
+ revert: false,
+ appendTo: "div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ $("#deleteIcon").droppable({
+ accept: ".portlet",
+ drop: function () {
+ if ($("#deleteIcon .top").hasClass("deleteIconHidden")) {
+ //$( "#droppableItem" ).removeClass("droppedOver");
+ var portletRemoveId = $(".ui-sortable-helper").attr("id");
+ if (portletRemoveId != "droppable") {
+ $("#" + portletRemoveId).remove();
+ restoreDragItems(portletRemoveId);
+ }
+ }
+ },
+ tolerance: "touch",
+ over: function (event, ui) {
+ //$( "#droppableItem" ).addClass("droppedOver");
+ }
+ });
+ addDroppableItem();
+ $(".sidebar-toggler").click(function () {
+ $("#cf5 img.top").toggleClass("scale");
+ $("#cf5 img.bottom").toggleClass("rotate");
+
+ $(".plotsWrapper").toggleClass("dashboardExpand", 300, "linear");
+ $(".plotItemsSelectionWrapper").toggleClass("sideBarClose", 300, "linear");
+
+ setTimeout(function () {
+ var charts = $.facebox.charts;
+ for (var chart in charts) {
+ charts[chart].resize();
+ }
+ DashboardICT.removeYaxisScale();
+ }, 300);
+ });
+ $('.plotItemsSelectionWrapper').slimScroll({
+ position: 'right',
+ distance: '-2px',
+ //width: '177px',
+ width: '158px',
+ //height:'630px',
+ //color:'rgb(100, 150, 240)',
+ color: "#F1F3FA",
+ //railColor: '#fff',
+ //railOpacity: 0.3,
+ railOpacity: 0,
+ railVisible: true,
+ allowPageScroll: true
+ });
+ $('.slimScrollDiv').css({
+ 'float': 'left',
+ 'margin-right': '-100%',
+ //'margin-top': '10px',
+ //'padding-left': '5px'
+ });
+
+ $("#deleteIcon").click(function () {
+ if ($("#deleteIcon .bottom").hasClass("deleteIconHidden")) {
+ $("#deleteIcon .top").addClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").removeClass("deleteIconHidden", 500);
+ //添加删除小图标
+ $(".removeflot").addClass("removeIcon");
+ $(".removeflot.removeIcon").click(function () {
+ var placeholderId = $(".flot-placeholder", $(this).parent()).attr("id");
+ if ($.facebox.intervals[placeholderId]) {
+ clearInterval($.facebox.intervals[placeholderId]);
+ }
+ $(this).parent().remove();
+ if ($(".flot-placeholder").length == 0) {
+ $("#deleteIcon").click();
+ }
+ //恢复左侧列表
+ var chartId = $(this).parent().attr("id");
+ restoreDragItems(chartId);
+ });
+ } else {
+ $("#deleteIcon .top").removeClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").addClass("deleteIconHidden", 500);
+ //去掉删除小图标
+ $(".removeflot.removeIcon").removeClass("removeIcon");
+ }
+ });
+ /*
+ $(window).unload(function(){
+ var savedPlots = DashboardICT.saveSelectedPlots();
+ //alert("Goodbye!" + savedPlots);
+ });
+
+ if ($.cookie && $.cookie('dashboard_selected')){
+ plotsSelected = $.cookie('dashboard_selected').split(",");
+ }
+ */
+ $.ajax({
+ async: false,
+ "type": "GET",
+ url: "/ngict/rest/dashboard/initcharts",
+ dataType: "json",
+ "success": function (res, textStatus, jqXHR) {
+ //初始化已选图例
+ plotsSelected = res;
+ },
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
+ alert(XMLHttpRequest.status);
+ alert(XMLHttpRequest.readyState);
+ alert(textStatus);
+ }
+ });
+
+ //初始化已选图例
+ if (plotsSelected && plotsSelected.length > 0) {
+ for (var i = 0; i < plotsSelected.length; i++) {
+ /* var portlets = $(".portlet-sortable");
+ var maxIndex = portlets.length -1;
+ addDraggablePortlet(portlets[maxIndex], plotsSelected[i]); */
+ addDraggablePortlet($(".column.sortable")[i % 3], plotsSelected[i]);
+ }
+ }
+
+ //$( ".sidebar-toggler" ).click();
+ $("#cf5 img.top").addClass("scale");
+ $("#cf5 img.bottom").addClass("rotate");
+ $(".plotsWrapper").addClass("dashboardExpand");
+ $(".plotItemsSelectionWrapper").addClass("sideBarClose");
+
+ $('.slimScrollBar').hide();
+ window.onresize = function () {
+ DashboardICT.removeYaxisScale();
+ }
+ },
+
+ saveSelectedPlots: function () {
+ var placeholders = [];
+ var plots = $(".flot-placeholder");
+ $.each(plots, function (index, plot) {
+ placeholders.push($(plot).attr('id'));
+ });
+ plotsSelected = [];
+ for (var chartObj in chartObjs) {
+ if (jQuery.inArray(chartObjs[chartObj].placeholderId, placeholders) > -1) {
+ plotsSelected.push(chartObj);
+ }
+ }
+ if ($.cookie) {
+ $.cookie('dashboard_selected', plotsSelected);
+ }
+ return plotsSelected;
+ },
+
+ addPlotControlCallbacks: function (plotId, callback) {
+ plotControlCallbacks[plotId] = callback;
+ },
+
+ addPlotControlHtmlFrags: function (plotId, htmlFrag) {
+ plotControlHtmlFrags[plotId] = htmlFrag;
+ },
+
+ graphChangeToExpand: function (placeholderId) {
+ var graphToExpand = $("div#" + placeholderId + " > svg > g")[0];
+ $(graphToExpand).attr("id", "graphToExpand_" + placeholderId);
+ var faceboxDivId = $($("div[flot_id=" + placeholderId + "]")[0]).attr("id");
+ var gNode = d3.select("g#graphToExpand_" + placeholderId);
+ gNode.attr("href", "#" + faceboxDivId);
+ gNode.attr("rel", "facebox");
+ $('g[rel*=facebox]').facebox();
+ },
+
+ setGraphChangeToExpand: function (placeholderId, callbackObj) {
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = callbackObj;
+ },
+
+ registerChartsToReDraw: function (placeholderId, chartObj) {
+ $.facebox.charts[placeholderId] = chartObj;
+ },
+
+ registerIntervalsToClear: function (placeholderId, intervalId) {
+ $.facebox.intervals[placeholderId] = intervalId;
+ },
+
+ graphIsExpanded: function (placeholderId) {
+ return $.facebox.isExpand(placeholderId);
+ },
+
+ removeYaxisScale: function () {
+ var lines = d3.selectAll(".c3-axis.c3-axis-y").selectAll(".tick line");
+ $(lines).each(function () {
+ $(this).attr("x2", "0");
+ });
+ }
+ }
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js.bak b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js.bak
new file mode 100644
index 00000000..ad8189e1
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/ict.dashboard.js.bak
@@ -0,0 +1,413 @@
+var DashboardICT = function(){
+
+ var chartObjs;
+ var plotsSelected;
+ var plotControlCallbacks = {};
+ var plotControlHtmlFrags = {};
+
+ var addDroppableItem = function(){
+ $( ".column.sortable" ).droppable({
+ accept: ".draggableItems",
+ drop: function(event, ui) {
+ //var dropLocation = $( ".plotsWrapper" );
+ var plotTypeId = $(ui.draggable).attr("id");
+ /* if($("#" + chartObjs[plotTypeId].placeholderId).length >0){
+ alert("Plot already exits!");
+ return;
+ } */
+ addDraggablePortlet(this, plotTypeId);
+ }
+ });
+ }
+
+ var addDraggablePortlet = function(droppableItem, plotTypeId){
+
+ if(!chartObjs[plotTypeId].chartType || chartObjs[plotTypeId].chartType != "prototype"){
+ $("div#" + plotTypeId).remove();
+ }
+
+ var portletId = chartObjs[plotTypeId].typeId;
+ var portletLabel = chartObjs[plotTypeId].plotLabel;
+ var placeholderId = chartObjs[plotTypeId].placeholderId;
+ if($("div[id^=" + placeholderId + "]").length >0){
+ var placeholderIdCount = $("div[id^=" + placeholderId + "]").length;
+ placeholderId = placeholderId + "_" + placeholderIdCount;
+ }
+ var plotCallback = eval(chartObjs[plotTypeId].plotCallbackName);
+ var plotSize = "size11";
+ if(chartObjs[plotTypeId].plotSize){
+ plotSize = chartObjs[plotTypeId].plotSize;
+ }
+ plotSize = "";
+
+ var faceboxDivIndex = $("g[rel=facebox]").length + 1;
+ var portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+
+ if(chartObjs[plotTypeId].plotControlCallback){
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ plotControlHtmlFrags[plotTypeId] +
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+ }
+
+ if(chartObjs[plotTypeId].htmlSrc){
+ portletHtml = '<div id="' + portletId + '" class="portlet portlet-sortable light bg-inverse ' + plotSize + '" style="position: relative;">' +
+ '<div class="portletLabel">' + portletLabel + '</div>' +
+ '<div class="removeflot"></div>' +
+ '<div id="htmlFrag" ></div>' +
+ /* '<div ms-include-src="' + chartObjs[plotTypeId].htmlSrc + '"></div>' + */
+ //'<a href="#faceboxDiv_' + faceboxDivIndex + '" rel="facebox">' +
+ '<div id="faceboxDiv_' + faceboxDivIndex + '" flot_id="' + placeholderId + '" class="flot-placeholder-wrapper-portlet">' +
+ '<div id="' + placeholderId + '" class="flot-placeholder flot-placeholder-high"></div>' +
+ '</div>' +
+ //'</a>' +
+ '</div>';
+ }
+
+ //插入图例
+ //$(droppableItem).before(portletHtml);
+ $(droppableItem).prepend(portletHtml);
+ //$( ".plotsWrapper" ).append(portletHtml);
+ if(chartObjs[plotTypeId].htmlSrc){
+ $.ajax({
+ async : false,
+ "dataType" : "html",
+ "type" : "GET",
+ "url" : chartObjs[plotTypeId].htmlSrc,
+ "data" : null,
+ "success" : function (html, textStatus, jqXHR) {
+ $("div#htmlFrag").html(html);
+ },
+ "error" : function () {
+ alert("Communication error!");
+ }
+ });
+ }
+
+ //添加图例控制回调
+ if(chartObjs[plotTypeId].plotControlCallback){
+ plotControlCallbacks[plotTypeId](plotCallback, placeholderId);
+ }
+
+ var args = [placeholderId];
+ if(chartObjs[plotTypeId].arguments){
+ var argsArray = chartObjs[plotTypeId].arguments.split(",");
+ args = args.concat(argsArray);
+ }
+ //plotCallback(placeholderId);
+ plotCallback.apply(null, args);
+
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = {
+ callback:plotCallback,
+ arguments:args
+ }
+
+ //调整放大后的宽度
+ var portlet = $("#" + portletId + ".portlet");
+ if($(portlet).parent().hasClass("col-md-6")){
+ $("div.flot-placeholder-wrapper-portlet", portlet).addClass("flot-placeholder-wrapper-portlet-wide");
+ }else{
+ $("div.flot-placeholder-wrapper-portlet", portlet).removeClass("flot-placeholder-wrapper-portlet-wide");
+ }
+
+ //添加点击范围
+ var graphToExpand = $("div#" + placeholderId + " > svg > g")[0];
+ $(graphToExpand).attr("id", "graphToExpand_" + placeholderId);
+ var gNode = d3.select("g#graphToExpand_" + placeholderId);
+ gNode.attr("href", "#faceboxDiv_" + faceboxDivIndex);
+ gNode.attr("rel", "facebox");
+
+ $.facebox.settings.closeImage = '/web/newict/framework/thirdparty/facebox/closelabel.png';
+ $.facebox.settings.loadingImage = '/web/newict/framework/thirdparty/facebox/loading.gif';
+ $('g[rel*=facebox]').facebox();
+
+ addDroppableItem();
+ }
+
+ var restoreDragItems = function(chartId){
+ if(!chartObjs[chartId].chartType || chartObjs[chartId].chartType != "prototype"){
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ if($("div#" + chartId, plotItemsSelectionDiv).length == 0){
+ var chartSelectHtml =
+ '<div id="' + chartObjs[chartId].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartId].imageURL + '">' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ $( ".draggableItems" ).draggable({
+ //containment:"body",
+ revert: false,
+ appendTo:"div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ }
+ }
+ }
+
+ var jsonTransformFromBackend = function(json){
+ var charts = json;
+ var obj = {};
+ obj.chartTypes = {};
+ for(var i=0;i<charts.length;i++){
+ obj.chartTypes[charts[i].id] = charts[i];
+ obj.chartTypes[charts[i].id].typeId = charts[i].id;
+ }
+ obj.initPlots = ["ictCPULineC3", "currentAlarm"];
+ return obj;
+ }
+
+ function sleep(numberMillis) {
+ var now = new Date();
+ var exitTime = now.getTime() + numberMillis;
+ while (true) {
+ now = new Date();
+ if (now.getTime() > exitTime)
+ return;
+ }
+ }
+
+ return {
+
+ init : function(restPath, dashboardDivId, dashboardHtmlPath){
+
+ if(dashboardDivId && dashboardHtmlPath){
+ $.ajax({
+ async : false,
+ "dataType" : "html",
+ "type" : "GET",
+ "url" : dashboardHtmlPath,
+ "data" : null,
+ "success" : function (html, textStatus, jqXHR) {
+ $('div#' + dashboardDivId).html(html);
+ },
+ "error" : function () {
+ alert("Communication error!");
+ }
+ });
+ }
+
+ //sleep(500);
+
+ $.ajax({
+ async:false,
+ "type" : "GET",
+ url: restPath,
+ dataType: "json",
+ "success" : function (res, textStatus, jqXHR) {
+ res = jsonTransformFromBackend(res);
+ var plotItemsSelectionDiv = $(".plotItemsSelectionWrapper");
+ //初始化左边的图列类型列表
+ chartObjs = res.chartTypes;
+ var chartSelectHtml = "";
+ for(var chartObj in chartObjs){
+ chartSelectHtml =
+ '<div id="' + chartObjs[chartObj].typeId + '" class="draggableItems">' +
+ '<img width="100%" height="100%" src="' + chartObjs[chartObj].imageURL + '">' +
+ '</div>';
+ $(plotItemsSelectionDiv).append(chartSelectHtml);
+ }
+ //初始化已选图例
+ //plotsSelected = res.initPlots;
+ },
+ "error" : function () {
+ alert("Config file load error!");
+ }
+ });
+
+ PortletDraggable.init();
+ //Portlet
+ $( ".draggableItems" ).draggable({
+ //containment:"body",
+ revert: false,
+ appendTo:"div.plotsWrapper",
+ scroll: false,
+ zIndex: 9999,
+ helper: "clone",
+ opacity: 0.75
+ });
+ $( "#deleteIcon" ).droppable({
+ accept: ".portlet",
+ drop: function() {
+ if($("#deleteIcon .top").hasClass("deleteIconHidden")){
+ //$( "#droppableItem" ).removeClass("droppedOver");
+ var portletRemoveId = $(".ui-sortable-helper").attr("id");
+ if(portletRemoveId != "droppable"){
+ $("#" + portletRemoveId).remove();
+ restoreDragItems(portletRemoveId);
+ }
+ }
+ },
+ tolerance: "touch",
+ over: function( event, ui ) {
+ //$( "#droppableItem" ).addClass("droppedOver");
+ }
+ });
+ addDroppableItem();
+ $( ".sidebar-toggler" ).click(function(){
+ $("#cf5 img.top").toggleClass("scale");
+ $("#cf5 img.bottom").toggleClass("rotate");
+
+ $(".plotsWrapper").toggleClass("dashboardExpand", 500, "linear");
+ $(".plotItemsSelectionWrapper").toggleClass("sideBarClose", 500, "linear");
+
+ setTimeout(function () {
+ var charts = $.facebox.charts;
+ for(var chart in charts){
+ charts[chart].resize();
+ }
+ }, 500);
+ });
+ $('.plotItemsSelectionWrapper').slimScroll({
+ position: 'right',
+ width: '177px',
+ height:'630px',
+ color:'rgb(100, 150, 240)',
+ railColor: '#fff',
+      railOpacity: 0.3,
+ railVisible: false
+ });
+ $('.slimScrollDiv').css({
+ 'float': 'left',
+ 'margin-right': '-100%',
+ 'margin-top': '10px',
+ 'padding-left': '5px'
+ });
+ $("#deleteIcon").click(function(){
+ if($("#deleteIcon .bottom").hasClass("deleteIconHidden")){
+ $("#deleteIcon .top").addClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").removeClass("deleteIconHidden", 500);
+ //添加删除小图标
+ $(".removeflot").addClass("removeIcon");
+ $(".removeflot.removeIcon").click(function(){
+ var placeholderId = $(".flot-placeholder", $(this).parent()).attr("id");
+ if($.facebox.intervals[placeholderId]){
+ clearInterval($.facebox.intervals[placeholderId]);
+ }
+ $(this).parent().remove();
+ if($(".flot-placeholder").length==0) {
+ $("#deleteIcon").click();
+ }
+ //恢复左侧列表
+ var chartId = $(this).parent().attr("id");
+ restoreDragItems(chartId);
+ });
+ }else{
+ $("#deleteIcon .top").removeClass("deleteIconHidden", 500);
+ $("#deleteIcon .bottom").addClass("deleteIconHidden", 500);
+ //去掉删除小图标
+ $(".removeflot.removeIcon").removeClass("removeIcon");
+ }
+ });
+/*
+ $(window).unload(function(){
+ var savedPlots = DashboardICT.saveSelectedPlots();
+ //alert("Goodbye!" + savedPlots);
+ });
+
+ if ($.cookie && $.cookie('dashboard_selected')){
+ plotsSelected = $.cookie('dashboard_selected').split(",");
+ }
+*/
+ $.ajax({
+ async:false,
+ "type" : "GET",
+ url: "/ngict/rest/dashboard/initcharts",
+ dataType: "json",
+ "success" : function (res, textStatus, jqXHR) {
+ //初始化已选图例
+ plotsSelected = res;
+ },
+ error: function(XMLHttpRequest, textStatus, errorThrown) {
+ alert(XMLHttpRequest.status);
+ alert(XMLHttpRequest.readyState);
+ alert(textStatus);
+ }
+ });
+
+ //初始化已选图例
+ if(plotsSelected && plotsSelected.length > 0){
+ for(var i=0;i<plotsSelected.length;i++){
+ /* var portlets = $(".portlet-sortable");
+ var maxIndex = portlets.length -1;
+ addDraggablePortlet(portlets[maxIndex], plotsSelected[i]); */
+ addDraggablePortlet($(".column.sortable")[i%2], plotsSelected[i]);
+ }
+ }
+
+ //$( ".sidebar-toggler" ).click();
+ $("#cf5 img.top").addClass("scale");
+ $("#cf5 img.bottom").addClass("rotate");
+ $(".plotsWrapper").addClass("dashboardExpand");
+ $(".plotItemsSelectionWrapper").addClass("sideBarClose");
+
+ },
+
+ saveSelectedPlots: function(){
+ var placeholders = [];
+ var plots = $(".flot-placeholder");
+ $.each( plots, function( index, plot ){
+ placeholders.push($(plot).attr('id'));
+ });
+ plotsSelected = [];
+ for(var chartObj in chartObjs){
+ if(jQuery.inArray(chartObjs[chartObj].placeholderId, placeholders) > -1){
+ plotsSelected.push(chartObj);
+ }
+ }
+ if ($.cookie){
+ $.cookie('dashboard_selected', plotsSelected);
+ }
+ return plotsSelected;
+ },
+
+ addPlotControlCallbacks: function(plotId, callback){
+ plotControlCallbacks[plotId] = callback;
+ },
+
+ addPlotControlHtmlFrags: function(plotId, htmlFrag){
+ plotControlHtmlFrags[plotId] = htmlFrag;
+ },
+
+ graphChangeToExpand : function(placeholderId){
+ var graphToExpand = $("div#" + placeholderId + " > svg > g")[0];
+ $(graphToExpand).attr("id", "graphToExpand_" + placeholderId);
+ var faceboxDivId = $($("div[flot_id=" + placeholderId + "]")[0]).attr("id");
+ var gNode = d3.select("g#graphToExpand_" + placeholderId);
+ gNode.attr("href", "#" + faceboxDivId);
+ gNode.attr("rel", "facebox");
+ $('g[rel*=facebox]').facebox();
+ },
+
+ setGraphChangeToExpand: function(placeholderId, callbackObj){
+ $.facebox.flotRedrawCallbackObjs[placeholderId] = callbackObj;
+ },
+
+ registerChartsToReDraw: function(placeholderId, chartObj){
+ $.facebox.charts[placeholderId] = chartObj;
+ },
+
+ registerIntervalsToClear: function(placeholderId, intervalId){
+ $.facebox.intervals[placeholderId] = intervalId;
+ },
+
+ graphIsExpanded: function(placeholderId){
+ return $.facebox.isExpand(placeholderId);
+ }
+ }
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/CPU统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/CPU统计.png
new file mode 100644
index 00000000..b001823f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/CPU统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/Thumbs.db b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/Thumbs.db
new file mode 100644
index 00000000..1f16b238
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/Thumbs.db
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/alarm.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/alarm.png
new file mode 100644
index 00000000..7850beaf
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/alarm.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/bar.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/bar.svg
new file mode 100644
index 00000000..8c8492f2
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/bar.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<rect x="14.592" y="70.416" fill="#F5AC3C" width="4.028" height="1.125"/>
+<rect x="20.436" y="46.99" fill="#F5AC3C" width="4.028" height="24.551"/>
+<rect x="26.281" y="33.323" fill="#F5AC3C" width="4.028" height="38.218"/>
+<rect x="32.126" y="21.909" fill="#F5AC3C" width="4.027" height="49.632"/>
+<rect x="37.97" y="33.746" fill="#F5AC3C" width="4.027" height="37.795"/>
+<rect x="43.815" y="20.22" fill="#F5AC3C" width="4.027" height="51.321"/>
+<rect x="55.504" y="8.667" fill="#F5AC3C" width="4.027" height="62.874"/>
+<rect x="49.66" y="59.105" fill="#F5AC3C" width="4.027" height="12.436"/>
+<rect x="61.349" y="21.065" fill="#F5AC3C" width="4.027" height="50.476"/>
+<rect x="67.194" y="46.427" fill="#F5AC3C" width="4.026" height="25.114"/>
+<rect x="73.039" y="46.427" fill="#F5AC3C" width="4.028" height="25.114"/>
+<rect x="78.883" y="33.888" fill="#F5AC3C" width="4.027" height="37.653"/>
+<rect x="84.727" y="46.284" fill="#F5AC3C" width="4.027" height="25.257"/>
+<rect x="90.572" y="46.284" fill="#F5AC3C" width="4.027" height="25.257"/>
+<rect x="96.418" y="58.402" fill="#F5AC3C" width="4.025" height="13.139"/>
+<rect x="102.967" y="51.304" fill="#F5AC3C" width="4.027" height="20.237"/>
+<rect x="108.813" y="46.427" fill="#F5AC3C" width="4.027" height="25.114"/>
+<rect x="114.656" y="29.824" fill="#F5AC3C" width="4.027" height="41.717"/>
+<rect x="120.5" y="46.284" fill="#F5AC3C" width="4.027" height="25.257"/>
+<rect x="126.346" y="49.129" fill="#F5AC3C" width="4.027" height="22.412"/>
+<rect x="132.191" y="58.402" fill="#F5AC3C" width="4.025" height="13.139"/>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/closelabel.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/closelabel.png
new file mode 100644
index 00000000..c339e593
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/closelabel.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/cpu.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/cpu.png
new file mode 100644
index 00000000..f47062a8
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/cpu.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/delete.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/delete.png
new file mode 100644
index 00000000..5947c7c9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/delete.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/gauge.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/gauge.svg
new file mode 100644
index 00000000..71d01003
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/gauge.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<path fill="#E94819" d="M76.229,39.364l-1.414-21.131L73.582,39.37c-0.916,0.483-1.549,1.432-1.549,2.542
+ c0,1.588,1.288,2.875,2.878,2.875c1.59,0,2.879-1.287,2.879-2.875C77.79,40.799,77.149,39.845,76.229,39.364z"/>
+<path fill="#E94819" d="M49.719,48.971l-10.656,3.292c3.281,9.209,10.057,16.76,18.737,21.049l1.643-11.916
+ C55.053,58.368,51.63,54.039,49.719,48.971z"/>
+<path fill="#86C6E0" d="M74.385,13.33c14.558,0,26.357,11.8,26.357,26.356c0,2.512-0.363,4.935-1.02,7.235l10.699,3.125
+ c0.946-3.291,1.454-6.766,1.454-10.36c0-20.705-16.785-37.491-37.492-37.491c-20.706,0-37.49,16.786-37.49,37.491
+ c0,3.507,0.486,6.899,1.387,10.116l10.648-3.289c-0.583-2.178-0.901-4.465-0.901-6.827C48.028,25.13,59.829,13.33,74.385,13.33z"/>
+<path fill="#E94819" d="M98.901,49.37c-1.938,4.898-5.298,9.077-9.575,12.026l1.644,11.915c8.604-4.251,15.341-11.708,18.653-20.81
+ L98.901,49.37z"/>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/line.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/line.svg
new file mode 100644
index 00000000..0b789c49
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/line.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<path fill="none" stroke="#42B1B3" stroke-miterlimit="10" d="M3.298,50.475l21.718,0.581c0,0,17.204-9.142,23.436-10.159
+ c6.235-1.016,20.861,3.193,26.877,4.937c6.021,1.74,22.152,2.756,23.872,2.321c1.715-0.436,17.848-4.357,23.005-3.339
+ c5.163,1.018,23.654,9.001,23.654,9.001"/>
+<path fill="none" stroke="#A695C2" stroke-miterlimit="10" d="M3.514,62.192c0,0,18.708,8.709,23.868,8.272
+ c5.16-0.435,18.276-9.001,22.148-10.308c3.87-1.304,18.276-8.998,26.445-8.271c8.173,0.726,22.15,5.516,23.655,5.662
+ c1.503,0.146,21.288,0.433,23.652,1.595c2.367,1.163,19.779,4.354,21.502,5.084"/>
+<circle fill="#41A9AA" cx="3.771" cy="50.483" r="2.134"/>
+<circle fill="#A695C2" cx="3.476" cy="62.219" r="2.133"/>
+<circle fill="#A695C2" cx="26.716" cy="70.178" r="2.132"/>
+<path fill="#A695C2" d="M76.11,50.271c1.177,0,2.132,0.957,2.132,2.133c0,1.18-0.955,2.135-2.132,2.135
+ c-1.18,0-2.135-0.955-2.135-2.135C73.978,51.229,74.931,50.271,76.11,50.271z"/>
+<circle fill="#A695C2" cx="100.521" cy="57.756" r="2.133"/>
+<circle fill="#A695C2" cx="123.39" cy="58.384" r="2.132"/>
+<circle fill="#41A9AA" cx="25.249" cy="51.207" r="2.134"/>
+<circle fill="#41A9AA" cx="47.878" cy="40.885" r="2.133"/>
+<circle fill="#41A9AA" cx="77.688" cy="46.231" r="2.133"/>
+<circle fill="#41A9AA" cx="98.658" cy="47.898" r="2.133"/>
+<circle fill="#41A9AA" cx="122.816" cy="45.533" r="2.132"/>
+<path fill="none" stroke="#E4C136" stroke-miterlimit="10" d="M3.298,34.542l19.214-1.999c0,0,21.716-12.35,27.952-13.365
+ c6.233-1.016,18.85,8.977,24.867,10.719c6.019,1.743,20.58,1.508,22.298,1.075c1.724-0.437,19.006-2.981,24.167-1.965
+ c5.159,1.015,24.063,8.874,24.063,8.874"/>
+<circle fill="#E4C136" cx="3.771" cy="34.552" r="2.133"/>
+<path fill="#E4C136" d="M24.063,30.06c1.178,0,2.132,0.955,2.132,2.135c0,1.175-0.954,2.133-2.132,2.133
+ c-1.177,0-2.133-0.958-2.133-2.133C21.93,31.015,22.886,30.06,24.063,30.06z"/>
+<circle fill="#E4C136" cx="48.812" cy="19.024" r="2.133"/>
+<circle fill="#E4C136" cx="78.095" cy="31.406" r="2.133"/>
+<circle fill="#E4C136" cx="145.167" cy="38.382" r="2.132"/>
+<circle fill="#E4C136" cx="121.394" cy="28.583" r="2.132"/>
+<circle fill="#A695C2" cx="143.334" cy="63.971" r="2.132"/>
+<circle fill="#41A9AA" cx="144.98" cy="53.35" r="2.132"/>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/lineBar.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/lineBar.svg
new file mode 100644
index 00000000..fae02500
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/lineBar.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<rect x="15.405" y="69.12" fill="#3AB9BB" width="4.028" height="2.421"/>
+<rect x="21.249" y="63.808" fill="#B09ECB" width="4.028" height="7.733"/>
+<rect x="27.094" y="59.502" fill="#3AB9BB" width="4.028" height="12.039"/>
+<rect x="32.939" y="44.729" fill="#B09ECB" width="4.027" height="26.812"/>
+<rect x="38.783" y="45.614" fill="#3AB9BB" width="4.027" height="25.927"/>
+<rect x="44.628" y="37.493" fill="#B09ECB" width="4.027" height="34.048"/>
+<rect x="56.317" y="13.543" fill="#B09ECB" width="4.027" height="57.998"/>
+<rect x="50.473" y="39.395" fill="#3AB9BB" width="4.027" height="32.146"/>
+<rect x="62.162" y="21.065" fill="#3AB9BB" width="4.027" height="50.476"/>
+<rect x="68.007" y="46.427" fill="#B09ECB" width="4.026" height="25.114"/>
+<rect x="73.852" y="46.427" fill="#3AB9BB" width="4.028" height="25.114"/>
+<rect x="79.696" y="33.888" fill="#B09ECB" width="4.027" height="37.653"/>
+<rect x="85.54" y="46.284" fill="#3AB9BB" width="4.027" height="25.257"/>
+<rect x="91.386" y="46.284" fill="#B09ECB" width="4.027" height="25.257"/>
+<rect x="97.231" y="58.402" fill="#3AB9BB" width="4.025" height="13.139"/>
+<rect x="103.78" y="51.304" fill="#B09ECB" width="4.027" height="20.237"/>
+<rect x="109.626" y="46.427" fill="#3AB9BB" width="4.027" height="25.114"/>
+<rect x="115.47" y="42.829" fill="#B09ECB" width="4.027" height="28.712"/>
+<rect x="121.313" y="46.284" fill="#3AB9BB" width="4.027" height="25.257"/>
+<rect x="127.159" y="49.129" fill="#B09ECB" width="4.027" height="22.412"/>
+<path fill="none" stroke="#81BBE6" stroke-miterlimit="10" d="M12.906,67.273l5.689-6.706l6.103-5.391l5.689-10.363l12.802-12.598
+ L56.6,6.206l20.93,15.646c0,0,17.38-1.597,19.101-2.032c1.715-0.436,15.443,4.268,15.443,4.268l18.695-4.674"/>
+<circle fill="#81BBE6" cx="13.562" cy="66.809" r="1.727"/>
+<circle fill="#81BBE6" cx="24.842" cy="55.602" r="1.727"/>
+<circle fill="#81BBE6" cx="30.532" cy="45.239" r="1.727"/>
+<circle fill="#81BBE6" cx="42.724" cy="32.03" r="1.727"/>
+<circle fill="#81BBE6" cx="56.745" cy="6.833" r="1.727"/>
+<circle fill="#81BBE6" cx="78.081" cy="21.87" r="1.727"/>
+<circle fill="#81BBE6" cx="97.183" cy="19.432" r="1.727"/>
+<circle fill="#81BBE6" cx="112.626" cy="24.105" r="1.727"/>
+<circle fill="#81BBE6" cx="130.915" cy="19.838" r="1.727"/>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/loading.gif b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/loading.gif
new file mode 100644
index 00000000..f864d5fd
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/loading.gif
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/map.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/map.svg
new file mode 100644
index 00000000..ea01bfa3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/map.svg
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<path fill="#D1D1D1" d="M113.703,10.244l1.203,2.233l-1.203,3.091l-1.889,1.89l-0.344,1.89v2.92l-0.348,2.918l-1.717-1.373
+ l-0.856,2.578l-2.231,0.342v2.406l-2.402,1.373l-0.855,0.516h-1.893l-0.171-0.855l-2.75,0.346l-0.517,1.375l-1.028,1.373
+ l-2.748,0.516v1.029l2.401,0.516l1.547,0.689l1.892-0.861h1.374l0.342,2.92l-2.059,1.203l-1.204,0.172l-0.688,2.063l0.52,1.891
+ l1.888,0.17l1.892,1.031l0.172,2.232l1.203,1.545l0.342,3.092l-0.514,4.123l-1.203,2.061v1.721l-1.031,1.548h-1.717l-0.859,2.747
+ l-1.717,1.545l-1.545,0.688l-0.346,2.23l-2.406,0.17l-1.717-0.344L90,69.501l-3.264-0.515l-1.2,1.201v1.545l-1.72,0.859H82.27
+ c0,0,0.002-2.063-0.514-2.063c-0.518,0-3.779,0.688-3.779,0.688l-1.201-1.546l-1.029-1.548l-1.202-0.17l-2.75,0.347
+ c0,0-0.858,0.515-1.375,0.515c-0.515,0-2.576-0.688-2.576,0.346S67.5,70.88,67.5,70.88l-1.203,1.373l-1.374-0.349l-0.687-2.573
+ l-1.545-2.747l-0.172-1.029l-2.75-3.265l1.375-3.095l1.545-1.545l-0.688-1.029l-5.152-0.688l-2.576,1.719l-1.031,1.031l-1.374,1.203
+ l-1.203-1.203l-0.172-1.55l-2.749-0.854l-1.717,0.688l-1.717-1.377l-2.063-0.515l-2.404,0.173l-1.89-1.721l-1.888-1.199
+ l-1.031-1.547l-0.86-1.891h-2.229l-1.373-1.72l-2.233-1.028l-1.546-2.404l2.92-0.858v-1.03v-3.436V37.21l-1.718-0.343l-1.888-1.204
+ l-0.516-1.544l0.172-2.92l0.17-1.374l-0.687-1.548l0.858-1.889l2.232-0.172l3.092,0.344l2.404-0.172l2.234-0.172l0.857-1.889
+ l0.172-2.063l1.202-2.061l0.515-1.546l2.406-1.375l2.403-0.859l1.546-1.202l2.405-1.546l1.546-0.516l3.09,1.203l0.688,2.92
+ l0.344,4.293l3.779,0.515l0.344,0.86l2.234,2.231l2.402,1.203l3.951,0.516l3.607,0.516l-0.345,1.889l4.468-0.343l0.856,0.171
+ l2.233,0.516h2.92l1.543-1.717l0.519-2.063l0.858-2.232l1.029-0.859h2.063l1.717-0.516L90,21.236l0.688-1.202l0.347-1.718h2.745
+ l0.519-1.203l-2.401-0.686h-2.922l0.344-1.89l0.516-1.546l1.202-1.202l1.718-1.203l0.857-2.404V3.889l1.891-0.858l0.171-1.546
+ l1.72,1.546l3.092,1.374l1.891,0.688v1.374l1.2,3.435l2.063-0.343l3.777,1.03l0.172,2.061l0.857,0.172l2.062-2.748L113.703,10.244z"
+ />
+<polygon fill="#D1D1D1" points="102.852,61.975 103.178,65.08 102.361,66.875 100.564,67.202 99.094,67.202 98.766,64.914
+ 99.746,62.955 101.218,61.975 "/>
+<circle fill="#FFFFFF" cx="92.875" cy="33.371" r="3.188"/>
+<g>
+ <path fill="#E94819" d="M92.877,30.867c-1.385,0-2.504,1.121-2.504,2.502c0,1.385,1.119,2.504,2.504,2.504
+ c1.381,0,2.502-1.119,2.502-2.504C95.379,31.988,94.258,30.867,92.877,30.867z M92.877,35.189c-1.006,0-1.82-0.814-1.82-1.82
+ c0-1.004,0.814-1.818,1.82-1.818c1.004,0,1.818,0.814,1.818,1.818C94.695,34.375,93.881,35.189,92.877,35.189z"/>
+ <circle fill="#E94819" cx="92.877" cy="33.371" r="1.023"/>
+</g>
+<circle fill="#FFFFFF" cx="47.68" cy="37.002" r="3.188"/>
+<g>
+ <path fill="#3FA8A9" d="M47.682,34.498c-1.385,0-2.504,1.121-2.504,2.502c0,1.385,1.119,2.504,2.504,2.504
+ c1.381,0,2.502-1.119,2.502-2.504C50.184,35.619,49.063,34.498,47.682,34.498z M47.682,38.82c-1.006,0-1.82-0.814-1.82-1.82
+ c0-1.004,0.814-1.818,1.82-1.818c1.004,0,1.818,0.814,1.818,1.818C49.5,38.006,48.686,38.82,47.682,38.82z"/>
+ <circle fill="#3FA8A9" cx="47.682" cy="37.002" r="1.023"/>
+</g>
+<circle fill="#FFFFFF" cx="83.998" cy="56" r="3.188"/>
+<g>
+ <path fill="#40A0A1" d="M84,53.496c-1.385,0-2.504,1.121-2.504,2.502c0,1.385,1.119,2.504,2.504,2.504
+ c1.381,0,2.502-1.119,2.502-2.504C86.502,54.617,85.381,53.496,84,53.496z M84,57.818c-1.006,0-1.82-0.814-1.82-1.82
+ c0-1.004,0.814-1.818,1.82-1.818c1.004,0,1.818,0.814,1.818,1.818C85.818,57.004,85.004,57.818,84,57.818z"/>
+ <circle fill="#40A0A1" cx="84" cy="56" r="1.023"/>
+</g>
+<circle fill="#FFFFFF" cx="70.498" cy="42.023" r="3.188"/>
+<g>
+ <path fill="#E94819" d="M70.5,39.52c-1.385,0-2.504,1.121-2.504,2.502c0,1.385,1.119,2.504,2.504,2.504
+ c1.381,0,2.502-1.116,2.502-2.504C73.002,40.641,71.881,39.52,70.5,39.52z M70.5,43.842c-1.006,0-1.82-0.814-1.82-1.82
+ c0-1.004,0.814-1.815,1.82-1.815c1.004,0,1.818,0.813,1.818,1.815C72.318,43.027,71.504,43.842,70.5,43.842z"/>
+ <circle fill="#E94819" cx="70.5" cy="42.023" r="1.023"/>
+</g>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/open.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/open.png
new file mode 100644
index 00000000..81b49921
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/open.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/pie.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/pie.svg
new file mode 100644
index 00000000..df7ca03c
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/pie.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<path fill="#E94819" d="M55.453,41.58c-0.472-3.018-0.24-6.193,0.827-9.286c3.346-9.698,13.614-15.02,23.372-12.388l5.015-14.534
+ C66.536-0.132,47.151,9.646,40.918,27.71c-1.985,5.751-2.396,11.661-1.473,17.27L55.453,41.58z"/>
+<path fill="#DDDDDD" d="M56.579,44.673L41.21,47.938c2.544,10.42,9.985,19.427,20.642,23.556l5.215-15.113
+ C61.848,54.168,58.129,49.786,56.579,44.673z"/>
+<g>
+ <path fill="#86C6E0" d="M86.147,8.532l-4.793,13.891c8.894,3.771,13.482,13.825,10.284,23.094S78.628,59.872,69.302,57.355
+ L64.087,72.47c17.329,5.261,35.854-4.085,41.812-21.349C111.854,33.857,103.034,15.076,86.147,8.532z"/>
+</g>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove.png
new file mode 100644
index 00000000..9e95c899
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove_red.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove_red.png
new file mode 100644
index 00000000..d8551fde
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/remove_red.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/shrink.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/shrink.png
new file mode 100644
index 00000000..7d74ce32
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/shrink.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/stacked.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/stacked.svg
new file mode 100644
index 00000000..525f73a9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/stacked.svg
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="150px" height="75px" viewBox="0 0 150 75" enable-background="new 0 0 150 75" xml:space="preserve">
+<polyline fill="#CBD8EF" stroke="#F4BB61" stroke-miterlimit="10" points="0,75.057 0,44.117 10.906,35.767 17.589,44.954
+ 27.085,34.695 35.529,34.236 53.118,14.635 62.965,34.39 68.594,34.542 79.499,24.436 84.5,29.5 93.753,12.999 111.861,34.39
+ 121.006,14.021 137.186,35.002 146.383,12.491 153.522,32.779 154.751,74.378 "/>
+<polyline fill="#A797C7" stroke="#F7F7F7" stroke-width="2" stroke-miterlimit="10" points="0,75 10.964,60.453 17.682,71.184
+ 27.229,59.201 35.717,58.665 53.399,35.772 63.299,58.843 68.958,59.023 79.921,47.218 86.284,47.04 94.25,33.863 112.455,58.843
+ 121.648,35.059 137.914,59.557 147.16,33.269 151.305,75 "/>
+</svg>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/zoom.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/zoom.png
new file mode 100644
index 00000000..6e2b74a3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/zoom.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/告警统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/告警统计.png
new file mode 100644
index 00000000..0120e90d
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/告警统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计A.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计A.png
new file mode 100644
index 00000000..bd67fa14
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计A.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计B.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计B.png
new file mode 100644
index 00000000..341bd0f1
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计B.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计C.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计C.png
new file mode 100644
index 00000000..f51faa24
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/性能统计C.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/日志统计.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/日志统计.png
new file mode 100644
index 00000000..c2c78b1f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/images/日志统计.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/index4.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/index4.html
new file mode 100644
index 00000000..3ff1d6e5
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/index4.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html ng-app="graphApp">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title></title>
+ <SCRIPT SRC="debug.js"></SCRIPT>
+ <SCRIPT>
+ if (typeof(parent.loadJsFromIndex) == "undefined" || !parent.loadJsFromIndex) {
+ var jqueryJsPath = "/web/res/web-common/comp/jquery.js";
+ document.write("<" + "SCRIPT SRC=" + jqueryJsPath + "><" + "/SCRIPT>");
+ var frameworkJsPath = "/web/res/web-framework/js/framework.js";
+ document.write("<" + "SCRIPT SRC=" + frameworkJsPath + "><" + "/SCRIPT>");
+ }
+ </SCRIPT>
+ <SCRIPT>
+ if (typeof ($userFrameDir) == 'undefined') {
+ $userFrameDir = "/web/res/web-common/comp/";
+ }
+ var toolUrl = $userFrameDir + "tools.js";
+ document.write("<" + "SCRIPT SRC=" + toolUrl + "><" + "/SCRIPT>");
+ </SCRIPT>
+</head>
+<style>
+ body {
+ margin: 0;
+ padding: 0;
+ }
+</style>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.css">
+<link href="/web/newict/framework/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css">
+<link href="/web/newict/framework/thirdparty/facebox/facebox.css" media="screen" rel="stylesheet" type="text/css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/flotchart/demo/css/ict-chart-flot.css" rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/flotchart/demo/css/components.css" rel="stylesheet">
+<link rel="stylesheet" href="/web/res/web-common/css/ZteIctIcons/style.css"/>
+<link rel="stylesheet" href="/web/newict/framework/thirdparty/font-awesome/css/font-awesome.min.css"/>
+<link type="text/css" href="/web/newict/framework/thirdparty/flotchart/demo/css/transition.css" rel="stylesheet">
+<link type="text/css" href="/web/newict/framework/thirdparty/dashboard/DashboardICT.css" rel="stylesheet">
+<link href="/web/newict/framework/thirdparty/uniform/css/uniform.default.css" rel="stylesheet" type="text/css">
+<link href="assets/css/c3.css" rel="stylesheet" type="text/css">
+<body ng-controller="GraphCtrl">
+<div class="dashBoardHeader">
+ <div id="cf5" class="hover sidebar-toggler">
+ <img class="top shadow" src="images/open.png"/>
+ <img class="bottom shadow" src="images/shrink.png"/>
+ </div>
+ <div id="deleteIcon" class="hover delete-icon">
+ <img class="top shadow" src="images/remove.png"/>
+ <img class="bottom shadow deleteIconHidden" src="images/remove_red.png"/>
+ </div>
+</div>
+<div class="plotItemsSelectionWrapper"></div>
+<div class="dashBoardBody">
+ <div class="contentWrapper">
+ <div id="freeDraggable" class="plotsWrapper" style="height:730px">
+ <div id="droppable" class="portlet portlet-sortable light bg-inverse droppable freeDragBlock initBlock">
+ </div>
+ </div>
+ </div>
+</div>
+<!-- </div> -->
+<script type="text/javascript" src="/web/newict/framework/thirdparty/jquery-1.10.2.min.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-ui/jquery-ui-1.10.3.custom.min.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/flot/jquery.flot.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/flot/jquery.flot.categories.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/flot/jquery.flot.pie.min.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/flot/jquery.flot.stack.min.js"></script>
+<script src="assets/js/d3.min.js" charset="utf-8"></script>
+<script src="assets/js/c3.js"></script>
+<!--图例-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/ict-linechart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/ict-barchart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/ict-piechart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/ict-stackchart-flot.js"></SCRIPT>
+<!--demo-->
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/demo/demo-barchart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/demo/demo-linechart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/demo/demo-piechart-flot.js"></SCRIPT>
+<SCRIPT SRC="/web/newict/framework/thirdparty/flotchart/demo/demo-stackchart-flot.js"></SCRIPT>
+<!--facebox-->
+<script src="js/facebox.js" type="text/javascript"></script>
+<!--portlet-->
+<script src="/web/newict/framework/thirdparty/flotchart/demo/portlet-draggable.js" type="text/javascript"></script>
+<script src="/web/newict/framework/thirdparty/bootstrap/js/bootstrap.min.js"></script>
+<script src="/web/newict/framework/thirdparty/flotchart/demo/esl.js"></script>
+<script src="/web/newict/framework/thirdparty/flotchart/demo/alarmCounts.js"></script>
+<script src="/web/newict/framework/thirdparty/jquery-slimscroll/jquery.slimscroll.min.js"
+ type="text/javascript"></script>
+<script type="text/javascript" src="js/freewall.js"></script>
+<!-- <script src="assets/js/angular.min.js"></script> -->
+<script src="/web/newict/framework/thirdparty/flotchart/demo/c3Chart.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/uniform/jquery.uniform.min.js"></script>
+<script type="text/javascript" src="/web/newict/framework/thirdparty/dashboard/DashboardICT.js"></script>
+<script>
+ jQuery(document).ready(function () {
+ DashboardICT.init();
+ });
+</script>
+</body>
+</html>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/avalon.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/avalon.js
new file mode 100644
index 00000000..17238e50
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/avalon.js
@@ -0,0 +1,5279 @@
+/*==================================================
+ Copyright (c) 2013-2015 司徒正美 and other contributors
+ http://www.cnblogs.com/rubylouvre/
+ https://github.com/RubyLouvre
+ http://weibo.com/jslouvre/
+
+ Released under the MIT license
+ avalon.js 1.39 build in 2015.1.21
+ _____________________________________
+ support IE6+ and other browsers
+ ==================================================*/
+(function (global, factory) {
+
+ if (typeof module === "object" && typeof module.exports === "object") {
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get avalon.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var avalon = require("avalon")(window);
+ module.exports = global.document ? factory(global, true) : function (w) {
+ if (!w.document) {
+ throw new Error("Avalon requires a window with a document")
+ }
+ return factory(w)
+ }
+ } else {
+ factory(global)
+ }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
+
+ /*********************************************************************
+ * 全局变量及方法 *
+ **********************************************************************/
+ var expose = new Date - 0
+//http://stackoverflow.com/questions/7290086/javascript-use-strict-and-nicks-find-global-function
+ var DOC = window.document
+ var head = DOC.getElementsByTagName("head")[0] //HEAD元素
+ var ifGroup = head.insertBefore(document.createElement("avalon"), head.firstChild) //避免IE6 base标签BUG
+ ifGroup.innerHTML = "X<style id='avalonStyle'>.avalonHide{ display: none!important }</style>"
+ ifGroup.setAttribute("ms-skip", "1")
+ var rnative = /\[native code\]/ //判定是否原生函数
+ function log() {
+ if (window.console && avalon.config.debug) {
+ // http://stackoverflow.com/questions/8785624/how-to-safely-wrap-console-log
+ Function.apply.call(console.log, console, arguments)
+ }
+ }
+
+
+ var subscribers = "$" + expose
+ var otherRequire = window.require
+ var otherDefine = window.define
+ var stopRepeatAssign = false
+ var rword = /[^, ]+/g //切割字符串为一个个小块,以空格或豆号分开它们,结合replace实现字符串的forEach
+ var rcomplexType = /^(?:object|array)$/
+ var rsvg = /^\[object SVG\w*Element\]$/
+ var rwindow = /^\[object (?:Window|DOMWindow|global)\]$/
+ var oproto = Object.prototype
+ var ohasOwn = oproto.hasOwnProperty
+ var serialize = oproto.toString
+ var ap = Array.prototype
+ var aslice = ap.slice
+ var Registry = {} //将函数曝光到此对象上,方便访问器收集依赖
+ var W3C = window.dispatchEvent
+ var root = DOC.documentElement
+ var hyperspace = DOC.createDocumentFragment()
+ var cinerator = DOC.createElement("div")
+ var class2type = {}
+ "Boolean Number String Function Array Date RegExp Object Error".replace(rword, function (name) {
+ class2type["[object " + name + "]"] = name.toLowerCase()
+ })
+
+
+ function noop() {
+ }
+
+
+ function oneObject(array, val) {
+ if (typeof array === "string") {
+ array = array.match(rword) || []
+ }
+ var result = {},
+ value = val !== void 0 ? val : 1
+ for (var i = 0, n = array.length; i < n; i++) {
+ result[array[i]] = value
+ }
+ return result
+ }
+
+ function createCache(maxLength) {
+ var keys = []
+
+ function cache(key, value) {
+ if (keys.push(key) > maxLength) {
+ delete cache[keys.shift()]
+ }
+ return cache[key] = value;
+ }
+
+ return cache;
+ }
+
+//生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
+ var generateID = function (prefix) {
+ prefix = prefix || "avalon"
+ return (prefix + Math.random() + Math.random()).replace(/0\./g, "")
+ }
+
+ function IE() {
+ if (window.VBArray) {
+ var mode = document.documentMode
+ return mode ? mode : window.XMLHttpRequest ? 7 : 6
+ } else {
+ return 0
+ }
+ }
+
+ var IEVersion = IE()
+ /*********************************************************************
+ * avalon的静态方法定义区 *
+ **********************************************************************/
+ avalon = function (el) { //创建jQuery式的无new 实例化结构
+ return new avalon.init(el)
+ }
+
+ avalon.init = function (el) {
+ this[0] = this.element = el
+ }
+ avalon.fn = avalon.prototype = avalon.init.prototype
+
+ avalon.type = function (obj) { //取得目标的类型
+ if (obj == null) {
+ return String(obj)
+ }
+ // 早期的webkit内核浏览器实现了已废弃的ecma262v4标准,可以将正则字面量当作函数使用,因此typeof在判定正则时会返回function
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[serialize.call(obj)] || "object" :
+ typeof obj
+ }
+
+ var isFunction = typeof alert === "object" ? function (fn) {
+ try {
+ return /^\s*\bfunction\b/.test(fn + "")
+ } catch (e) {
+ return false
+ }
+ } : function (fn) {
+ return serialize.call(fn) == "[object Function]"
+ }
+ avalon.isFunction = isFunction
+
+ avalon.isWindow = function (obj) {
+ if (!obj)
+ return false
+ // 利用IE678 window == document为true,document == window竟然为false的神奇特性
+ // 标准浏览器及IE9,IE10等使用 正则检测
+ return obj == obj.document && obj.document != obj
+ }
+
+ function isWindow(obj) {
+ return rwindow.test(serialize.call(obj))
+ }
+
+ if (isWindow(window)) {
+ avalon.isWindow = isWindow
+ }
+ var enu
+ for (enu in avalon({})) {
+ break
+ }
+ var enumerateBUG = enu !== "0" //IE6下为true, 其他为false
+ /*判定是否是一个朴素的javascript对象(Object),不是DOM对象,不是BOM对象,不是自定义类的实例*/
+ avalon.isPlainObject = function (obj, key) {
+ if (!obj || avalon.type(obj) !== "object" || obj.nodeType || avalon.isWindow(obj)) {
+ return false;
+ }
+ try { //IE内置对象没有constructor
+ if (obj.constructor && !ohasOwn.call(obj, "constructor") && !ohasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
+ return false;
+ }
+ } catch (e) { //IE8 9会在这里抛错
+ return false;
+ }
+ if (enumerateBUG) {
+ for (key in obj) {
+ return ohasOwn.call(obj, key)
+ }
+ }
+ for (key in obj) {
+ }
+ return key === void 0 || ohasOwn.call(obj, key);
+ }
+ if (rnative.test(Object.getPrototypeOf)) {
+ avalon.isPlainObject = function (obj) {
+ // 简单的 typeof obj === "object"检测,会致使用isPlainObject(window)在opera下通不过
+ return serialize.call(obj) === "[object Object]" && Object.getPrototypeOf(obj) === oproto
+ }
+ }
+//与jQuery.extend方法,可用于浅拷贝,深拷贝
+ avalon.mix = avalon.fn.mix = function () {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false
+
+ // 如果第一个参数为布尔,判定是否深拷贝
+ if (typeof target === "boolean") {
+ deep = target
+ target = arguments[1] || {}
+ i++
+ }
+
+ //确保接受方为一个复杂的数据类型
+ if (typeof target !== "object" && !isFunction(target)) {
+ target = {}
+ }
+
+ //如果只有一个参数,那么新成员添加于mix所在的对象上
+ if (i === length) {
+ target = this
+ i--
+ }
+
+ for (; i < length; i++) {
+ //只处理非空参数
+ if ((options = arguments[i]) != null) {
+ for (name in options) {
+ src = target[name]
+ try {
+ copy = options[name] //当options为VBS对象时报错
+ } catch (e) {
+ continue
+ }
+
+ // 防止环引用
+ if (target === copy) {
+ continue
+ }
+ if (deep && copy && (avalon.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
+
+ if (copyIsArray) {
+ copyIsArray = false
+ clone = src && Array.isArray(src) ? src : []
+
+ } else {
+ clone = src && avalon.isPlainObject(src) ? src : {}
+ }
+
+ target[name] = avalon.mix(deep, clone, copy)
+ } else if (copy !== void 0) {
+ target[name] = copy
+ }
+ }
+ }
+ }
+ return target
+ }
+
+ function _number(a, len) { //用于模拟slice, splice的效果
+ a = Math.floor(a) || 0
+ return a < 0 ? Math.max(len + a, 0) : Math.min(a, len);
+ }
+
+ avalon.mix({
+ rword: rword,
+ subscribers: subscribers,
+ version: 1.39,
+ ui: {},
+ log: log,
+ slice: W3C ? function (nodes, start, end) {
+ return aslice.call(nodes, start, end)
+ } : function (nodes, start, end) {
+ var ret = []
+ var len = nodes.length
+ if (end === void 0)
+ end = len
+ if (typeof end === "number" && isFinite(end)) {
+ start = _number(start, len)
+ end = _number(end, len)
+ for (var i = start; i < end; ++i) {
+ ret[i - start] = nodes[i]
+ }
+ }
+ return ret
+ },
+ noop: noop,
+ /*如果不用Error对象封装一下,str在控制台下可能会乱码*/
+ error: function (str, e) {
+ throw new (e || Error)(str)
+ },
+ /*将一个以空格或逗号隔开的字符串或数组,转换成一个键值都为1的对象*/
+ oneObject: oneObject,
+ /* avalon.range(10)
+ => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ avalon.range(1, 11)
+ => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ avalon.range(0, 30, 5)
+ => [0, 5, 10, 15, 20, 25]
+ avalon.range(0, -10, -1)
+ => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+ avalon.range(0)
+ => []*/
+ range: function (start, end, step) { // 用于生成整数数组
+ step || (step = 1)
+ if (end == null) {
+ end = start || 0
+ start = 0
+ }
+ var index = -1,
+ length = Math.max(0, Math.ceil((end - start) / step)),
+ result = Array(length)
+ while (++index < length) {
+ result[index] = start
+ start += step
+ }
+ return result
+ },
+ eventHooks: {},
+ /*绑定事件*/
+ bind: function (el, type, fn, phase) {
+ var hooks = avalon.eventHooks
+ var hook = hooks[type]
+ if (typeof hook === "object") {
+ type = hook.type
+ if (hook.deel) {
+ fn = hook.deel(el, fn)
+ }
+ }
+ var callback = W3C ? fn : function (e) {
+ fn.call(el, fixEvent(e));
+ }
+ if (W3C) {
+ el.addEventListener(type, callback, !!phase)
+ } else {
+ el.attachEvent("on" + type, callback)
+ }
+ return callback
+ },
+ /*卸载事件*/
+ unbind: function (el, type, fn, phase) {
+ var hooks = avalon.eventHooks
+ var hook = hooks[type]
+ var callback = fn || noop
+ if (typeof hook === "object") {
+ type = hook.type
+ }
+ if (W3C) {
+ el.removeEventListener(type, callback, !!phase)
+ } else {
+ el.detachEvent("on" + type, callback)
+ }
+ },
+ /*读写删除元素节点的样式*/
+ css: function (node, name, value) {
+ if (node instanceof avalon) {
+ node = node[0]
+ }
+ var prop = /[_-]/.test(name) ? camelize(name) : name
+ name = avalon.cssName(prop) || prop
+ if (value === void 0 || typeof value === "boolean") { //获取样式
+ var fn = cssHooks[prop + ":get"] || cssHooks["@:get"]
+ if (name === "background") {
+ name = "backgroundColor"
+ }
+ var val = fn(node, name)
+ return value === true ? parseFloat(val) || 0 : val
+ } else if (value === "") { //请除样式
+ node.style[name] = ""
+ } else { //设置样式
+ if (value == null || value !== value) {
+ return
+ }
+ if (isFinite(value) && !avalon.cssNumber[prop]) {
+ value += "px"
+ }
+ fn = cssHooks[prop + ":set"] || cssHooks["@:set"]
+ fn(node, name, value)
+ }
+ },
+ /*遍历数组与对象,回调的第一个参数为索引或键名,第二个或元素或键值*/
+ each: function (obj, fn) {
+ if (obj) { //排除null, undefined
+ var i = 0
+ if (isArrayLike(obj)) {
+ for (var n = obj.length; i < n; i++) {
+ fn(i, obj[i])
+ }
+ } else {
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ fn(i, obj[i])
+ }
+ }
+ }
+ }
+ },
+ //收集元素的data-{{prefix}}-*属性,并转换为对象
+ getWidgetData: function (elem, prefix) {
+ var raw = avalon(elem).data()
+ var result = {}
+ for (var i in raw) {
+ if (i.indexOf(prefix) === 0) {
+ result[i.replace(prefix, "").replace(/\w/, function (a) {
+ return a.toLowerCase()
+ })] = raw[i]
+ }
+ }
+ return result
+ },
+ Array: {
+ /*只有当前数组不存在此元素时只添加它*/
+ ensure: function (target, item) {
+ if (target.indexOf(item) === -1) {
+ return target.push(item)
+ }
+ },
+ /*移除数组中指定位置的元素,返回布尔表示成功与否*/
+ removeAt: function (target, index) {
+ return !!target.splice(index, 1).length
+ },
+ /*移除数组中第一个匹配传参的那个元素,返回布尔表示成功与否*/
+ remove: function (target, item) {
+ var index = target.indexOf(item)
+ if (~index)
+ return avalon.Array.removeAt(target, index)
+ return false
+ }
+ }
+ })
+
+ var bindingHandlers = avalon.bindingHandlers = {}
+ var bindingExecutors = avalon.bindingExecutors = {}
+
+ /*判定是否类数组,如节点集合,纯数组,arguments与拥有非负整数的length属性的纯JS对象*/
+
+ function isArrayLike(obj) {
+ if (obj && typeof obj === "object") {
+ var n = obj.length
+ if (n === (n >>> 0)) { //检测length属性是否为非负整数
+ try {
+ if ({}.propertyIsEnumerable.call(obj, "length") === false) { //如果是原生对象
+ return Array.isArray(obj) || /^\s?function/.test(obj.item || obj.callee)
+ }
+ return true
+ } catch (e) { //IE的NodeList直接抛错
+ return true
+ }
+ }
+ }
+ return false
+ }
+
+ /*视浏览器情况采用最快的异步回调(在avalon.ready里,还有一个分支,用于处理IE6-9)*/
+ avalon.nextTick = window.setImmediate ? setImmediate.bind(window) : function (callback) {
+ setTimeout(callback, 0) //IE10-11 or W3C
+ }
+
+ /*********************************************************************
+ * javascript 底层补丁 *
+ **********************************************************************/
+ if (!"司徒正美".trim) {
+ var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g
+ String.prototype.trim = function () {
+ return this.replace(rtrim, "")
+ }
+ }
+ var hasDontEnumBug = !({
+ 'toString': null
+ }).propertyIsEnumerable('toString'),
+ hasProtoEnumBug = (function () {
+ }).propertyIsEnumerable('prototype'),
+ dontEnums = [
+ "toString",
+ "toLocaleString",
+ "valueOf",
+ "hasOwnProperty",
+ "isPrototypeOf",
+ "propertyIsEnumerable",
+ "constructor"
+ ],
+ dontEnumsLength = dontEnums.length;
+ if (!Object.keys) {
+ Object.keys = function (object) { //ecma262v5 15.2.3.14
+ var theKeys = [];
+ var skipProto = hasProtoEnumBug && typeof object === "function"
+ if (typeof object === "string" || (object && object.callee)) {
+ for (var i = 0; i < object.length; ++i) {
+ theKeys.push(String(i))
+ }
+ } else {
+ for (var name in object) {
+ if (!(skipProto && name === "prototype") && ohasOwn.call(object, name)) {
+ theKeys.push(String(name))
+ }
+ }
+ }
+
+ if (hasDontEnumBug) {
+ var ctor = object.constructor,
+ skipConstructor = ctor && ctor.prototype === object;
+ for (var j = 0; j < dontEnumsLength; j++) {
+ var dontEnum = dontEnums[j]
+ if (!(skipConstructor && dontEnum === "constructor") && ohasOwn.call(object, dontEnum)) {
+ theKeys.push(dontEnum)
+ }
+ }
+ }
+ return theKeys
+ }
+ }
+ if (!Array.isArray) {
+ Array.isArray = function (a) {
+ return serialize.call(a) === "[object Array]"
+ }
+ }
+
+ if (!noop.bind) {
+ Function.prototype.bind = function (scope) {
+ if (arguments.length < 2 && scope === void 0)
+ return this
+ var fn = this,
+ argv = arguments
+ return function () {
+ var args = [],
+ i
+ for (i = 1; i < argv.length; i++)
+ args.push(argv[i])
+ for (i = 0; i < arguments.length; i++)
+ args.push(arguments[i])
+ return fn.apply(scope, args)
+ }
+ }
+ }
+
+ function iterator(vars, body, ret) {
+ var fun = 'for(var ' + vars + 'i=0,n = this.length; i < n; i++){' + body.replace('_', '((i in this) && fn.call(scope,this[i],i,this))') + '}' + ret
+ return Function("fn,scope", fun)
+ }
+
+ if (!rnative.test([].map)) {
+ avalon.mix(ap, {
+ //定位操作,返回数组中第一个等于给定参数的元素的索引值。
+ indexOf: function (item, index) {
+ var n = this.length,
+ i = ~~index
+ if (i < 0)
+ i += n
+ for (; i < n; i++)
+ if (this[i] === item)
+ return i
+ return -1
+ },
+ //定位操作,同上,不过是从后遍历。
+ lastIndexOf: function (item, index) {
+ var n = this.length,
+ i = index == null ? n - 1 : index
+ if (i < 0)
+ i = Math.max(0, n + i)
+ for (; i >= 0; i--)
+ if (this[i] === item)
+ return i
+ return -1
+ },
+ //迭代操作,将数组的元素挨个儿传入一个函数中执行。Prototype.js的对应名字为each。
+ forEach: iterator("", '_', ""),
+ //迭代类 在数组中的每个项上运行一个函数,如果此函数的值为真,则此元素作为新数组的元素收集起来,并返回新数组
+ filter: iterator('r=[],j=0,', 'if(_)r[j++]=this[i]', 'return r'),
+ //收集操作,将数组的元素挨个儿传入一个函数中执行,然后把它们的返回值组成一个新数组返回。Prototype.js的对应名字为collect。
+ map: iterator('r=[],', 'r[i]=_', 'return r'),
+ //只要数组中有一个元素满足条件(放进给定函数返回true),那么它就返回true。Prototype.js的对应名字为any。
+ some: iterator("", 'if(_)return true', 'return false'),
+ //只有数组中的元素都满足条件(放进给定函数返回true),它才返回true。Prototype.js的对应名字为all。
+ every: iterator("", 'if(!_)return false', 'return true')
+ })
+ }
+ /*********************************************************************
+ * DOM 底层补丁 *
+ **********************************************************************/
+
+ function fixContains(root, el) {
+ try { //IE6-8,游离于DOM树外的文本节点,访问parentNode有时会抛错
+ while ((el = el.parentNode))
+ if (el === root)
+ return true;
+ return false
+ } catch (e) {
+ return false
+ }
+ }
+
+ avalon.contains = fixContains
+//safari5+是把contains方法放在Element.prototype上而不是Node.prototype
+ if (!root.contains) {
+ Node.prototype.contains = function (arg) {
+ return !!(this.compareDocumentPosition(arg) & 16)
+ }
+ }
+//IE6-11的文档对象没有contains
+ if (!DOC.contains) {
+ DOC.contains = function (b) {
+ return fixContains(DOC, b)
+ }
+ }
+
+ function outerHTML() {
+ return new XMLSerializer().serializeToString(this)
+ }
+
+
+ if (window.SVGElement) {
+ var svgns = "http://www.w3.org/2000/svg"
+ var svg = DOC.createElementNS(svgns, "svg")
+ svg.innerHTML = '<circle cx="50" cy="50" r="40" fill="red" />'
+ if (!rsvg.test(svg.firstChild)) { // #409
+ function enumerateNode(node, targetNode) {
+ if (node && node.childNodes) {
+ var nodes = node.childNodes
+ for (var i = 0, el; el = nodes[i++];) {
+ if (el.tagName) {
+ var svg = DOC.createElementNS(svgns,
+ el.tagName.toLowerCase())
+ ap.forEach.call(el.attributes, function (attr) {
+ svg.setAttribute(attr.name, attr.value) //复制属性
+ })
+ // 递归处理子节点
+ enumerateNode(el, svg)
+ targetNode.appendChild(svg)
+ }
+ }
+ }
+ }
+
+ Object.defineProperties(SVGElement.prototype, {
+ "outerHTML": {//IE9-11,firefox不支持SVG元素的innerHTML,outerHTML属性
+ enumerable: true,
+ configurable: true,
+ get: outerHTML,
+ set: function (html) {
+ var tagName = this.tagName.toLowerCase(),
+ par = this.parentNode,
+ frag = avalon.parseHTML(html)
+ // 操作的svg,直接插入
+ if (tagName === "svg") {
+ par.insertBefore(frag, this)
+ // svg节点的子节点类似
+ } else {
+ var newFrag = DOC.createDocumentFragment()
+ enumerateNode(frag, newFrag)
+ par.insertBefore(newFrag, this)
+ }
+ par.removeChild(this)
+ }
+ },
+ "innerHTML": {
+ enumerable: true,
+ configurable: true,
+ get: function () {
+ var s = this.outerHTML
+ var ropen = new RegExp("<" + this.nodeName + '\\b(?:(["\'])[^"]*?(\\1)|[^>])*>', "i")
+ var rclose = new RegExp("<\/" + this.nodeName + ">$", "i")
+ return s.replace(ropen, "").replace(rclose, "")
+ },
+ set: function (html) {
+ if (avalon.clearHTML) {
+ avalon.clearHTML(this)
+ var frag = avalon.parseHTML(html)
+ enumerateNode(frag, this)
+ }
+ }
+ }
+ })
+ }
+ }
+ if (!root.outerHTML && window.HTMLElement) { //firefox 到11时才有outerHTML
+ HTMLElement.prototype.__defineGetter__("outerHTML", outerHTML);
+ }
+
+//============================= event binding =======================
+ var rmouseEvent = /^(?:mouse|contextmenu|drag)|click/
+
+ function fixEvent(event) {
+ var ret = {}
+ for (var i in event) {
+ ret[i] = event[i]
+ }
+ var target = ret.target = event.srcElement
+ if (event.type.indexOf("key") === 0) {
+ ret.which = event.charCode != null ? event.charCode : event.keyCode
+ } else if (rmouseEvent.test(event.type)) {
+ var doc = target.ownerDocument || DOC
+ var box = doc.compatMode === "BackCompat" ? doc.body : doc.documentElement
+ ret.pageX = event.clientX + (box.scrollLeft >> 0) - (box.clientLeft >> 0)
+ ret.pageY = event.clientY + (box.scrollTop >> 0) - (box.clientTop >> 0)
+ ret.wheelDeltaY = ret.wheelDelta
+ ret.wheelDeltaX = 0
+ }
+ ret.timeStamp = new Date - 0
+ ret.originalEvent = event
+ ret.preventDefault = function () { //阻止默认行为
+ event.returnValue = false
+ }
+ ret.stopPropagation = function () { //阻止事件在DOM树中的传播
+ event.cancelBubble = true
+ }
+ return ret
+ }
+
+ var eventHooks = avalon.eventHooks
+//针对firefox, chrome修正mouseenter, mouseleave
+ if (!("onmouseenter" in root)) {
+ avalon.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ }, function (origType, fixType) {
+ eventHooks[origType] = {
+ type: fixType,
+ deel: function (elem, fn) {
+ return function (e) {
+ var t = e.relatedTarget
+ if (!t || (t !== elem && !(elem.compareDocumentPosition(t) & 16))) {
+ delete e.type
+ e.type = origType
+ return fn.call(elem, e)
+ }
+ }
+ }
+ }
+ })
+ }
+//针对IE9+, w3c修正animationend
+ avalon.each({
+ AnimationEvent: "animationend",
+ WebKitAnimationEvent: "webkitAnimationEnd"
+ }, function (construct, fixType) {
+ if (window[construct] && !eventHooks.animationend) {
+ eventHooks.animationend = {
+ type: fixType
+ }
+ }
+ })
+//针对IE6-8修正input
+ if (!("oninput" in DOC.createElement("input"))) {
+ eventHooks.input = {
+ type: "propertychange",
+ deel: function (elem, fn) {
+ return function (e) {
+ if (e.propertyName === "value") {
+ e.type = "input"
+ return fn.call(elem, e)
+ }
+ }
+ }
+ }
+ }
+ if (DOC.onmousewheel === void 0) {
+ /* IE6-11 chrome mousewheel wheelDetla 下 -120 上 120
+ firefox DOMMouseScroll detail 下3 上-3
+ firefox wheel detlaY 下3 上-3
+ IE9-11 wheel deltaY 下40 上-40
+ chrome wheel deltaY 下100 上-100 */
+ var fixWheelType = DOC.onwheel !== void 0 ? "wheel" : "DOMMouseScroll"
+ var fixWheelDelta = fixWheelType === "wheel" ? "deltaY" : "detail"
+ eventHooks.mousewheel = {
+ type: fixWheelType,
+ deel: function (elem, fn) {
+ return function (e) {
+ e.wheelDeltaY = e.wheelDelta = e[fixWheelDelta] > 0 ? -120 : 120
+ e.wheelDeltaX = 0
+ if (Object.defineProperty) {
+ Object.defineProperty(e, "type", {
+ value: "mousewheel"
+ })
+ }
+ fn.call(elem, e)
+ }
+ }
+ }
+ }
+
+
+ /*********************************************************************
+ * 配置系统 *
+ **********************************************************************/
+
+ function kernel(settings) {
+ for (var p in settings) {
+ if (!ohasOwn.call(settings, p))
+ continue
+ var val = settings[p]
+ if (typeof kernel.plugins[p] === "function") {
+ kernel.plugins[p](val)
+ } else if (typeof kernel[p] === "object") {
+ avalon.mix(kernel[p], val)
+ } else {
+ kernel[p] = val
+ }
+ }
+ return this
+ }
+
+ var openTag, closeTag, rexpr, rexprg, rbind, rregexp = /[-.*+?^${}()|[\]\/\\]/g
+
+ function escapeRegExp(target) {
+ //http://stevenlevithan.com/regex/xregexp/
+ //将字符串安全格式化为正则表达式的源码
+ return (target + "").replace(rregexp, "\\$&")
+ }
+
+ var innerRequire = noop
+ var plugins = {
+ loader: function (builtin) {
+ window.define = builtin ? innerRequire.define : otherDefine
+ window.require = builtin ? innerRequire : otherRequire
+ },
+ interpolate: function (array) {
+ openTag = array[0]
+ closeTag = array[1]
+ if (openTag === closeTag) {
+ throw new SyntaxError("openTag!==closeTag")
+ } else if (array + "" === "<!--,-->") {
+ kernel.commentInterpolate = true
+ } else {
+ var test = openTag + "test" + closeTag
+ cinerator.innerHTML = test
+ if (cinerator.innerHTML !== test && cinerator.innerHTML.indexOf("&lt;") > -1) {
+ throw new SyntaxError("此定界符不合法")
+ }
+ cinerator.innerHTML = ""
+ }
+ var o = escapeRegExp(openTag),
+ c = escapeRegExp(closeTag)
+ rexpr = new RegExp(o + "(.*?)" + c)
+ rexprg = new RegExp(o + "(.*?)" + c, "g")
+ rbind = new RegExp(o + ".*?" + c + "|\\sms-")
+ }
+ }
+
+ kernel.debug = true
+ kernel.plugins = plugins
+ kernel.plugins['interpolate'](["{{", "}}"])
+ kernel.paths = {}
+ kernel.shim = {}
+ kernel.maxRepeatSize = 100
+ avalon.config = kernel
+ /*********************************************************************
+ * 事件总线 *
+ **********************************************************************/
+ var EventBus = {
+ $watch: function (type, callback) {
+ if (typeof callback === "function") {
+ var callbacks = this.$events[type]
+ if (callbacks) {
+ callbacks.push(callback)
+ } else {
+ this.$events[type] = [callback]
+ }
+ } else { //重新开始监听此VM的第一重简单属性的变动
+ this.$events = this.$watch.backup
+ }
+ return this
+ },
+ $unwatch: function (type, callback) {
+ var n = arguments.length
+ if (n === 0) { //让此VM的所有$watch回调无效化
+ this.$watch.backup = this.$events
+ this.$events = {}
+ } else if (n === 1) {
+ this.$events[type] = []
+ } else {
+ var callbacks = this.$events[type] || []
+ var i = callbacks.length
+ while (~--i < 0) {
+ if (callbacks[i] === callback) {
+ return callbacks.splice(i, 1)
+ }
+ }
+ }
+ return this
+ },
+ $fire: function (type) {
+ var special
+ if (/^(\w+)!(\S+)$/.test(type)) {
+ special = RegExp.$1
+ type = RegExp.$2
+ }
+ var events = this.$events
+ var args = aslice.call(arguments, 1)
+ var detail = [type].concat(args)
+ if (special === "all") {
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ if (v !== this) {
+ v.$fire.apply(v, detail)
+ }
+ }
+ } else if (special === "up" || special === "down") {
+ var elements = events.expr ? findNodes(events.expr) : []
+ if (elements.length === 0)
+ return
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ if (v !== this) {
+ if (v.$events.expr) {
+ var eventNodes = findNodes(v.$events.expr)
+ if (eventNodes.length === 0) {
+ continue
+ }
+ //循环两个vmodel中的节点,查找匹配(向上匹配或者向下匹配)的节点并设置标识
+ Array.prototype.forEach.call(eventNodes, function (node) {
+ Array.prototype.forEach.call(elements, function (element) {
+ var ok = special === "down" ? element.contains(node) : //向下捕获
+ node.contains(element) //向上冒泡
+
+ if (ok) {
+ node._avalon = v //符合条件的加一个标识
+ }
+ });
+ })
+ }
+ }
+ }
+ var nodes = DOC.getElementsByTagName("*") //实现节点排序
+ var alls = []
+ Array.prototype.forEach.call(nodes, function (el) {
+ if (el._avalon) {
+ alls.push(el._avalon)
+ el._avalon = ""
+ el.removeAttribute("_avalon")
+ }
+ })
+ if (special === "up") {
+ alls.reverse()
+ }
+ for (var i = 0, el; el = alls[i++];) {
+ if (el.$fire.apply(el, detail) === false) {
+ break
+ }
+ }
+ } else {
+ var callbacks = events[type] || []
+ var all = events.$all || []
+ for (var i = 0, callback; callback = callbacks[i++];) {
+ if (isFunction(callback))
+ callback.apply(this, args)
+ }
+ for (var i = 0, callback; callback = all[i++];) {
+ if (isFunction(callback))
+ callback.apply(this, arguments)
+ }
+ }
+ }
+ }
+
+ var ravalon = /(\w+)\[(avalonctrl)="(\S+)"\]/
+ var findNodes = DOC.querySelectorAll ? function (str) {
+ //pc safari v5.1: typeof DOC.querySelectorAll(str) === 'function'
+ //https://gist.github.com/DavidBruant/1016007
+ return DOC.querySelectorAll(str)
+ } : function (str) {
+ var match = str.match(ravalon)
+ var all = DOC.getElementsByTagName(match[1])
+ var nodes = []
+ for (var i = 0, el; el = all[i++];) {
+ if (el.getAttribute(match[2]) === match[3]) {
+ nodes.push(el)
+ }
+ }
+ return nodes
+ }
+ /*********************************************************************
+ * modelFactory *
+ **********************************************************************/
+//avalon最核心的方法的两个方法之一(另一个是avalon.scan),返回一个ViewModel(VM)
+ var VMODELS = avalon.vmodels = {} //所有vmodel都储存在这里
+ avalon.define = function (id, factory) {
+ var $id = id.$id || id
+ if (!$id) {
+ log("warning: vm必须指定$id")
+ }
+ if (VMODELS[$id]) {
+ log("warning: " + $id + " 已经存在于avalon.vmodels中")
+ }
+ if (typeof id === "object") {
+ var model = modelFactory(id)
+ } else {
+ var scope = {
+ $watch: noop
+ }
+ factory(scope) //得到所有定义
+ model = modelFactory(scope) //偷天换日,将scope换为model
+ stopRepeatAssign = true
+ factory(model)
+ stopRepeatAssign = false
+ }
+ model.$id = $id
+ return VMODELS[$id] = model
+ }
+
+//一些不需要被监听的属性
+ var $$skipArray = String("$id,$watch,$unwatch,$fire,$events,$model,$skipArray").match(rword)
+
+ function isObservable(name, value, $skipArray) {
+ if (isFunction(value) || value && value.nodeType) {
+ return false
+ }
+ if ($skipArray.indexOf(name) !== -1) {
+ return false
+ }
+ if ($$skipArray.indexOf(name) !== -1) {
+ return false
+ }
+ var $special = $skipArray.$special
+ if (name && name.charAt(0) === "$" && !$special[name]) {
+ return false
+ }
+ return true
+ }
+
+//ms-with,ms-each, ms-repeat绑定生成的代理对象储存池
+ var midway = {}
+
+ function getNewValue(accessor, name, value, $vmodel) {
+ switch (accessor.type) {
+ case 0://计算属性
+ var getter = accessor.get
+ var setter = accessor.set
+ if (isFunction(setter)) {
+ var $events = $vmodel.$events
+ var lock = $events[name]
+ $events[name] = [] //清空回调,防止内部冒泡而触发多次$fire
+ setter.call($vmodel, value)
+ $events[name] = lock
+ }
+ return getter.call($vmodel) //同步$model
+ case 1://监控属性
+ return value
+ case 2://对象属性(包括数组与哈希)
+ if (value !== $vmodel.$model[name]) {
+ var svmodel = accessor.svmodel = objectFactory($vmodel, name, value, accessor.valueType)
+ value = svmodel.$model //同步$model
+ var fn = midway[svmodel.$id]
+ fn && fn() //同步视图
+ }
+ return value
+ }
+ }
+
+ var defineProperty = Object.defineProperty
+ var canHideOwn = true
+//如果浏览器不支持ecma262v5的Object.defineProperties或者存在BUG,比如IE8
+//标准浏览器使用__defineGetter__, __defineSetter__实现
+ try {
+ defineProperty({}, "_", {
+ value: "x"
+ })
+ var defineProperties = Object.defineProperties
+ } catch (e) {
+ canHideOwn = false
+ }
+ function modelFactory(source, $special, $model) {
+ if (Array.isArray(source)) {
+ var arr = source.concat()
+ source.length = 0
+ var collection = Collection(source)
+ collection.pushArray(arr)
+ return collection
+ }
+ if (typeof source.nodeType === "number") {
+ return source
+ }
+ if (source.$id && source.$events) { //fix IE6-8 createWithProxy $val: val引发的BUG
+ return source
+ }
+ if (!Array.isArray(source.$skipArray)) {
+ source.$skipArray = []
+ }
+ source.$skipArray.$special = $special || {} //强制要监听的属性
+ var $vmodel = {} //要返回的对象, 它在IE6-8下可能被偷龙转凤
+ $model = $model || {} //vmodels.$model属性
+ var $events = {} //vmodel.$events属性
+ var watchedProperties = {} //监控属性
+ var initCallbacks = [] //初始化才执行的函数
+ for (var i in source) {
+ (function (name, val) {
+ $model[name] = val
+ if (!isObservable(name, val, source.$skipArray)) {
+ return //过滤所有非监控属性
+ }
+ //总共产生三种accessor
+ $events[name] = []
+ var valueType = avalon.type(val)
+ var accessor = function (newValue) {
+ var name = accessor._name
+ var $vmodel = this
+ var $model = $vmodel.$model
+ var oldValue = $model[name]
+ var $events = $vmodel.$events
+
+ if (arguments.length) {
+ if (stopRepeatAssign) {
+ return
+ }
+ //计算属性与对象属性需要重新计算newValue
+ if (accessor.type !== 1) {
+ newValue = getNewValue(accessor, name, newValue, $vmodel)
+ }
+ if (!isEqual(oldValue, newValue)) {
+ $model[name] = newValue
+ if ($events.$digest) {
+ if (accessor.pedding)
+ return
+ accessor.pedding = true
+ setTimeout(function () {
+ notifySubscribers($events[name]) //同步视图
+ safeFire($vmodel, name, $model[name], oldValue) //触发$watch回调
+ accessor.pedding = false
+ })
+ } else {
+ notifySubscribers($events[name]) //同步视图
+ safeFire($vmodel, name, newValue, oldValue) //触发$watch回调
+ }
+ }
+ } else {
+ if (accessor.type === 0) { //type 0 计算属性 1 监控属性 2 对象属性
+ //计算属性不需要收集视图刷新函数,都是由其他监控属性代劳
+ return $model[name] = accessor.get.call($vmodel)
+ } else {
+ collectSubscribers($events[name]) //收集视图函数
+ return accessor.svmodel || oldValue
+ }
+ }
+ }
+ //总共产生三种accessor
+ if (valueType === "object" && isFunction(val.get) && Object.keys(val).length <= 2) {
+ //第1种为计算属性, 因变量,通过其他监控属性触发其改变
+ accessor.set = val.set
+ accessor.get = val.get
+ accessor.type = 0
+ initCallbacks.push(function () {
+ var data = {
+ evaluator: function () {
+ data.element = null
+ data.type = new Date - 0
+ $model[name] = accessor.get.call($vmodel)
+ },
+ element: head,
+ type: new Date - 0,
+ handler: noop,
+ args: []
+ }
+ Registry[expose] = data
+ accessor.call($vmodel)
+ delete Registry[expose]
+ })
+ } else if (rcomplexType.test(valueType)) {
+ //第2种为对象属性,产生子VM与监控数组
+ accessor.type = 2
+ accessor.valueType = valueType
+ initCallbacks.push(function () {
+ var svmodel = modelFactory(val, 0, $model[name])
+ accessor.svmodel = svmodel
+ svmodel.$events[subscribers] = $events[name]
+ })
+ } else {
+ accessor.type = 1
+ //第3种为监控属性,对应简单的数据类型,自变量
+ }
+ accessor._name = name
+ watchedProperties[name] = accessor
+ })(i, source[i])
+ }
+
+ $$skipArray.forEach(function (name) {
+ delete source[name]
+ delete $model[name] //这些特殊属性不应该在$model中出现
+ })
+
+ $vmodel = defineProperties($vmodel, descriptorFactory(watchedProperties), source) //生成一个空的ViewModel
+ for (var name in source) {
+ if (!watchedProperties[name]) {
+ $vmodel[name] = source[name]
+ }
+ }
+ //添加$id, $model, $events, $watch, $unwatch, $fire
+ $vmodel.$id = generateID()
+ $vmodel.$model = $model
+ $vmodel.$events = $events
+ for (var i in EventBus) {
+ var fn = EventBus[i]
+ if (!W3C) { //在IE6-8下,VB对象的方法里的this并不指向自身,需要用bind处理一下
+ fn = fn.bind($vmodel)
+ }
+ $vmodel[i] = fn
+ }
+
+ if (canHideOwn) {
+ Object.defineProperty($vmodel, "hasOwnProperty", {
+ value: function (name) {
+ return name in this.$model
+ },
+ writable: false,
+ enumerable: false,
+ configurable: true
+ })
+
+ } else {
+ $vmodel.hasOwnProperty = function (name) {
+ return name in $vmodel.$model
+ }
+ }
+ initCallbacks.forEach(function (cb) { //收集依赖
+ cb()
+ })
+ return $vmodel
+ }
+
+//比较两个值是否相等
+ var isEqual = Object.is || function (v1, v2) {
+ if (v1 === 0 && v2 === 0) {
+ return 1 / v1 === 1 / v2
+ } else if (v1 !== v1) {
+ return v2 !== v2
+ } else {
+ return v1 === v2
+ }
+ }
+
+ function safeFire(a, b, c, d) {
+ if (a.$events) {
+ EventBus.$fire.call(a, b, c, d)
+ }
+ }
+
+ var descriptorFactory = W3C ? function (obj) {
+ var descriptors = {}
+ for (var i in obj) {
+ descriptors[i] = {
+ get: obj[i],
+ set: obj[i],
+ enumerable: true,
+ configurable: true
+ }
+ }
+ return descriptors
+ } : function (a) {
+ return a
+ }
+
+
+//应用于第2种accessor
+ function objectFactory(parent, name, value, valueType) {
+ //a为原来的VM, b为新数组或新对象
+ var son = parent[name]
+ if (valueType === "array") {
+ if (!Array.isArray(value) || son === value) {
+ return son //fix https://github.com/RubyLouvre/avalon/issues/261
+ }
+ son._.$unwatch()
+ son.clear()
+ son._.$watch()
+ son.pushArray(value.concat())
+ return son
+ } else {
+ var iterators = parent.$events[name]
+ var pool = son.$events.$withProxyPool
+ if (pool) {
+ recycleProxies(pool, "with")
+ son.$events.$withProxyPool = null
+ }
+ var ret = modelFactory(value)
+ ret.$events[subscribers] = iterators
+ midway[ret.$id] = function (data) {
+ while (data = iterators.shift()) {
+ (function (el) {
+ avalon.nextTick(function () {
+ if (el.type) { //重新绑定
+ el.rollback && el.rollback() //还原 ms-with ms-on
+ bindingHandlers[el.type](el, el.vmodels)
+ }
+ })
+ })(data)
+ }
+ delete midway[ret.$id]
+ }
+ return ret
+ }
+ }
+
+//===================修复浏览器对Object.defineProperties的支持=================
+ if (!canHideOwn) {
+ if ("__defineGetter__" in avalon) {
+ defineProperty = function (obj, prop, desc) {
+ if ('value' in desc) {
+ obj[prop] = desc.value
+ }
+ if ("get" in desc) {
+ obj.__defineGetter__(prop, desc.get)
+ }
+ if ('set' in desc) {
+ obj.__defineSetter__(prop, desc.set)
+ }
+ return obj
+ }
+ defineProperties = function (obj, descs) {
+ for (var prop in descs) {
+ if (descs.hasOwnProperty(prop)) {
+ defineProperty(obj, prop, descs[prop])
+ }
+ }
+ return obj
+ }
+ }
+ if (IEVersion) {
+ window.execScript([
+ "Function parseVB(code)",
+ "\tExecuteGlobal(code)",
+ "End Function",
+ "Dim VBClassBodies",
+ "Set VBClassBodies=CreateObject(\"Scripting.Dictionary\")",
+ "Function findOrDefineVBClass(name,body)",
+ "\tDim found",
+ "\tfound=\"\"",
+ "\tFor Each key in VBClassBodies",
+ "\t\tIf body=VBClassBodies.Item(key) Then",
+ "\t\t\tfound=key",
+ "\t\t\tExit For",
+ "\t\tEnd If",
+ "\tnext",
+ "\tIf found=\"\" Then",
+ "\t\tparseVB(\"Class \" + name + body)",
+ "\t\tVBClassBodies.Add name, body",
+ "\t\tfound=name",
+ "\tEnd If",
+ "\tfindOrDefineVBClass=found",
+ "End Function"
+ ].join("\n"), "VBScript")
+
+ function VBMediator(instance, accessors, name, value) {
+ var accessor = accessors[name]
+ if (arguments.length === 4) {
+ accessor.call(instance, value)
+ } else {
+ return accessor.call(instance)
+ }
+ }
+
+ defineProperties = function (name, accessors, properties) {
+ var className = "VBClass" + setTimeout("1"),
+ buffer = []
+ buffer.push(
+ "\r\n\tPrivate [__data__], [__proxy__]",
+ "\tPublic Default Function [__const__](d, p)",
+ "\t\tSet [__data__] = d: set [__proxy__] = p",
+ "\t\tSet [__const__] = Me", //链式调用
+ "\tEnd Function")
+ //添加普通属性,因为VBScript对象不能像JS那样随意增删属性,必须在这里预先定义好
+ for (name in properties) {
+ if (!accessors.hasOwnProperty(name)) {
+ buffer.push("\tPublic [" + name + "]")
+ }
+ }
+ $$skipArray.forEach(function (name) {
+ if (!accessors.hasOwnProperty(name)) {
+ buffer.push("\tPublic [" + name + "]")
+ }
+ })
+ buffer.push("\tPublic [" + 'hasOwnProperty' + "]")
+ //添加访问器属性
+ for (name in accessors) {
+ buffer.push(
+ //由于不知对方会传入什么,因此set, let都用上
+ "\tPublic Property Let [" + name + "](val" + expose + ")", //setter
+ "\t\tCall [__proxy__](Me,[__data__], \"" + name + "\", val" + expose + ")",
+ "\tEnd Property",
+ "\tPublic Property Set [" + name + "](val" + expose + ")", //setter
+ "\t\tCall [__proxy__](Me,[__data__], \"" + name + "\", val" + expose + ")",
+ "\tEnd Property",
+ "\tPublic Property Get [" + name + "]", //getter
+ "\tOn Error Resume Next", //必须优先使用set语句,否则它会误将数组当字符串返回
+ "\t\tSet[" + name + "] = [__proxy__](Me,[__data__],\"" + name + "\")",
+ "\tIf Err.Number <> 0 Then",
+ "\t\t[" + name + "] = [__proxy__](Me,[__data__],\"" + name + "\")",
+ "\tEnd If",
+ "\tOn Error Goto 0",
+ "\tEnd Property")
+
+ }
+
+ buffer.push("End Class")
+ var code = buffer.join("\r\n"),
+ realClassName = window['findOrDefineVBClass'](className, code) //如果该VB类已定义,返回类名。否则用className创建一个新类。
+ if (realClassName === className) {
+ window.parseVB([
+ "Function " + className + "Factory(a, b)", //创建实例并传入两个关键的参数
+ "\tDim o",
+ "\tSet o = (New " + className + ")(a, b)",
+ "\tSet " + className + "Factory = o",
+ "End Function"
+ ].join("\r\n"))
+ }
+ // console.log(code)
+ var ret = window[realClassName + "Factory"](accessors, VBMediator) //得到其产品
+ return ret //得到其产品
+ }
+ }
+ }
+
+ /*********************************************************************
+ * 监控数组(与ms-each, ms-repeat配合使用) *
+ **********************************************************************/
+
+ function Collection(model) {
+ var array = []
+ array.$id = generateID()
+ array.$model = model //数据模型
+ array.$events = {}
+ array.$events[subscribers] = []
+ array._ = modelFactory({
+ length: model.length
+ })
+ array._.$watch("length", function (a, b) {
+ array.$fire("length", a, b)
+ })
+ for (var i in EventBus) {
+ array[i] = EventBus[i]
+ }
+ avalon.mix(array, CollectionPrototype)
+ return array
+ }
+
+ function mutateArray(method, pos, n, index, method2, pos2, n2) {
+ var oldLen = this.length, loop = 2
+ while (--loop) {
+ switch (method) {
+ case "add":
+ var array = this.$model.slice(pos, pos + n).map(function (el) {
+ if (rcomplexType.test(avalon.type(el))) {
+ return el.$id ? el : modelFactory(el, 0, el)
+ } else {
+ return el
+ }
+ })
+ _splice.apply(this, [pos, 0].concat(array))
+ this._fire("add", pos, n)
+ break
+ case "del":
+ var ret = this._splice(pos, n)
+ this._fire("del", pos, n)
+ break
+ }
+ if (method2) {
+ method = method2
+ pos = pos2
+ n = n2
+ loop = 2
+ method2 = 0
+ }
+ }
+ this._fire("index", index)
+ if (this.length !== oldLen) {
+ this._.length = this.length
+ }
+ return ret
+ }
+
+ var _splice = ap.splice
+ var CollectionPrototype = {
+ _splice: _splice,
+ _fire: function (method, a, b) {
+ notifySubscribers(this.$events[subscribers], method, a, b)
+ },
+ size: function () { //取得数组长度,这个函数可以同步视图,length不能
+ return this._.length
+ },
+ pushArray: function (array) {
+ var m = array.length, n = this.length
+ if (m) {
+ ap.push.apply(this.$model, array)
+ mutateArray.call(this, "add", n, m, n)
+ }
+ return m + n
+ },
+ push: function () {
+ //http://jsperf.com/closure-with-arguments
+ var array = []
+ var i, n = arguments.length
+ for (i = 0; i < n; i++) {
+ array[i] = arguments[i]
+ }
+ return this.pushArray(arguments)
+ },
+ unshift: function () {
+ var m = arguments.length, n = this.length
+ if (m) {
+ ap.unshift.apply(this.$model, arguments)
+ mutateArray.call(this, "add", 0, m, 0)
+ }
+ return m + n //IE67的unshift不会返回长度
+ },
+ shift: function () {
+ if (this.length) {
+ var el = this.$model.shift()
+ mutateArray.call(this, "del", 0, 1, 0)
+ return el //返回被移除的元素
+ }
+ },
+ pop: function () {
+ var m = this.length
+ if (m) {
+ var el = this.$model.pop()
+ mutateArray.call(this, "del", m - 1, 1, Math.max(0, m - 2))
+ return el //返回被移除的元素
+ }
+ },
+ splice: function (start) {
+ var m = arguments.length, args = [], change
+ var removed = _splice.apply(this.$model, arguments)
+ if (removed.length) { //如果用户删掉了元素
+ args.push("del", start, removed.length, 0)
+ change = true
+ }
+ if (m > 2) { //如果用户添加了元素
+ if (change) {
+ args.splice(3, 1, 0, "add", start, m - 2)
+ } else {
+ args.push("add", start, m - 2, 0)
+ }
+ change = true
+ }
+ if (change) { //返回被移除的元素
+ return mutateArray.apply(this, args)
+ } else {
+ return []
+ }
+ },
+ contains: function (el) { //判定是否包含
+ return this.indexOf(el) !== -1
+ },
+ remove: function (el) { //移除第一个等于给定值的元素
+ return this.removeAt(this.indexOf(el))
+ },
+ removeAt: function (index) { //移除指定索引上的元素
+ if (index >= 0) {
+ this.$model.splice(index, 1)
+ return mutateArray.call(this, "del", index, 1, 0)
+ }
+ return []
+ },
+ clear: function () {
+ this.$model.length = this.length = this._.length = 0 //清空数组
+ this._fire("clear", 0)
+ return this
+ },
+ removeAll: function (all) { //移除N个元素
+ if (Array.isArray(all)) {
+ all.forEach(function (el) {
+ this.remove(el)
+ }, this)
+ } else if (typeof all === "function") {
+ for (var i = this.length - 1; i >= 0; i--) {
+ var el = this[i]
+ if (all(el, i)) {
+ this.removeAt(i)
+ }
+ }
+ } else {
+ this.clear()
+ }
+ },
+ ensure: function (el) {
+ if (!this.contains(el)) { //只有不存在才push
+ this.push(el)
+ }
+ return this
+ },
+ set: function (index, val) {
+ if (index >= 0) {
+ var valueType = avalon.type(val)
+ if (val && val.$model) {
+ val = val.$model
+ }
+ var target = this[index]
+ if (valueType === "object") {
+ for (var i in val) {
+ if (target.hasOwnProperty(i)) {
+ target[i] = val[i]
+ }
+ }
+ } else if (valueType === "array") {
+ target.clear().push.apply(target, val)
+ } else if (target !== val) {
+ this[index] = val
+ this.$model[index] = val
+ this._fire("set", index, val)
+ }
+ }
+ return this
+ }
+ }
+
+ function sortByIndex(array, indexes) {
+ var map = {};
+ for (var i = 0, n = indexes.length; i < n; i++) {
+ map[i] = array[i] // preserve
+ var j = indexes[i]
+ if (j in map) {
+ array[i] = map[j]
+ delete map[j]
+ } else {
+ array[i] = array[j]
+ }
+ }
+ }
+
+ "sort,reverse".replace(rword, function (method) {
+ CollectionPrototype[method] = function () {
+ var newArray = this.$model//这是要排序的新数组
+ var oldArray = newArray.concat() //保持原来状态的旧数组
+ var mask = Math.random()
+ var indexes = []
+ var hasSort
+ ap[method].apply(newArray, arguments) //排序
+ for (var i = 0, n = oldArray.length; i < n; i++) {
+ var neo = newArray[i]
+ var old = oldArray[i]
+ if (isEqual(neo, old)) {
+ indexes.push(i)
+ } else {
+ var index = oldArray.indexOf(neo)
+ indexes.push(index)//得到新数组的每个元素在旧数组对应的位置
+ oldArray[index] = mask //屏蔽已经找过的元素
+ hasSort = true
+ }
+ }
+ if (hasSort) {
+ sortByIndex(this, indexes)
+ this._fire("move", indexes)
+ this._fire("index", 0)
+ }
+ return this
+ }
+ })
+
+ /*********************************************************************
+ * 依赖调度系统 *
+ **********************************************************************/
+ var ronduplex = /^(duplex|on)$/
+
+ function registerSubscriber(data) {
+ Registry[expose] = data //暴光此函数,方便collectSubscribers收集
+ avalon.openComputedCollect = true
+ var fn = data.evaluator
+ if (fn) { //如果是求值函数
+ try {
+ var c = ronduplex.test(data.type) ? data : fn.apply(0, data.args)
+ data.handler(c, data.element, data)
+ } catch (e) {
+ //log("warning:exception throwed in [registerSubscriber] " + e)
+ delete data.evaluator
+ var node = data.element
+ if (node.nodeType === 3) {
+ var parent = node.parentNode
+ if (kernel.commentInterpolate) {
+ parent.replaceChild(DOC.createComment(data.value), node)
+ } else {
+ node.data = openTag + data.value + closeTag
+ }
+ }
+ }
+ }
+ avalon.openComputedCollect = false
+ delete Registry[expose]
+ }
+
+ function collectSubscribers(list) { //收集依赖于这个访问器的订阅者
+ var data = Registry[expose]
+ if (list && data && avalon.Array.ensure(list, data) && data.element) { //只有数组不存在此元素才push进去
+ addSubscribers(data, list)
+ }
+ }
+
+
+ function addSubscribers(data, list) {
+ data.$uuid = data.$uuid || generateID()
+ list.$uuid = list.$uuid || generateID()
+ var obj = {
+ data: data,
+ list: list,
+ $$uuid: data.$uuid + list.$uuid
+ }
+ if (!$$subscribers[obj.$$uuid]) {
+ $$subscribers[obj.$$uuid] = 1
+ $$subscribers.push(obj)
+ }
+ }
+
+ function disposeData(data) {
+ data.element = null
+ data.rollback && data.rollback()
+ for (var key in data) {
+ data[key] = null
+ }
+ }
+
+ function isRemove(el) {
+ try {//IE下,如果文本节点脱离DOM树,访问parentNode会报错
+ if (!el.parentNode) {
+ return true
+ }
+ } catch (e) {
+ return true
+ }
+ return el.msRetain ? 0 : (el.nodeType === 1 ? typeof el.sourceIndex === "number" ?
+ el.sourceIndex === 0 : !root.contains(el) : !avalon.contains(root, el))
+ }
+
+ var $$subscribers = avalon.$$subscribers = []
+ var beginTime = new Date()
+ var oldInfo = {}
+
+ function removeSubscribers() {
+ var i = $$subscribers.length
+ var n = i
+ var k = 0
+ var obj
+ var types = []
+ var newInfo = {}
+ var needTest = {}
+ while (obj = $$subscribers[--i]) {
+ var data = obj.data
+ var type = data.type
+ if (newInfo[type]) {
+ newInfo[type]++
+ } else {
+ newInfo[type] = 1
+ types.push(type)
+ }
+ }
+ var diff = false
+ types.forEach(function (type) {
+ if (oldInfo[type] !== newInfo[type]) {
+ needTest[type] = 1
+ diff = true
+ }
+ })
+ i = n
+ //avalon.log("需要检测的个数 " + i)
+ if (diff) {
+ //avalon.log("有需要移除的元素")
+ while (obj = $$subscribers[--i]) {
+ var data = obj.data
+ if (data.element === void 0)
+ continue
+ if (needTest[data.type] && isRemove(data.element)) { //如果它没有在DOM树
+ k++
+ $$subscribers.splice(i, 1)
+ delete $$subscribers[obj.$$uuid]
+ avalon.Array.remove(obj.list, data)
+ //log("debug: remove " + data.type)
+ disposeData(data)
+ obj.data = obj.list = null
+ }
+ }
+ }
+ oldInfo = newInfo
+ // avalon.log("已经移除的个数 " + k)
+ beginTime = new Date()
+ }
+
+ function notifySubscribers(list) { //通知依赖于这个访问器的订阅者更新自身
+ if (list && list.length) {
+ if (new Date() - beginTime > 444 && typeof list[0] === "object") {
+ removeSubscribers()
+ }
+ var args = aslice.call(arguments, 1)
+ for (var i = list.length, fn; fn = list[--i];) {
+ var el = fn.element
+ if (el && el.parentNode) {
+ if (fn.$repeat) {
+ fn.handler.apply(fn, args) //处理监控数组的方法
+ } else if (fn.type !== "on") { //事件绑定只能由用户触发,不能由程序触发
+ var fun = fn.evaluator || noop
+ fn.handler(fun.apply(0, fn.args || []), el, fn)
+ }
+ }
+ }
+ }
+ }
+
+ /************************************************************************
+ * HTML处理(parseHTML, innerHTML, clearHTML) *
+ ************************************************************************/
+//parseHTML的辅助变量
+ var tagHooks = {
+ area: [1, "<map>"],
+ param: [1, "<object>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</table>"],
+ legend: [1, "<fieldset>"],
+ option: [1, "<select multiple='multiple'>"],
+ thead: [1, "<table>", "</table>"],
+ //如果这里不写</tbody></table>,在IE6-9会在多出一个奇怪的caption标签
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ //如果这里不写</tr></tbody></table>,在IE6-9会在多出一个奇怪的caption标签
+ th: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+ td: [3, "<table><tbody><tr>"],
+ g: [1, '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">', '</svg>'],
+ //IE6-8在用innerHTML生成节点时,不能直接创建no-scope元素与HTML5的新标签
+ _default: W3C ? [0, ""] : [1, "X<div>"] //div可以不用闭合
+ }
+
+ tagHooks.optgroup = tagHooks.option
+ tagHooks.tbody = tagHooks.tfoot = tagHooks.colgroup = tagHooks.caption = tagHooks.thead
+ String("circle,defs,ellipse,image,line,path,polygon,polyline,rect,symbol,text,use").replace(rword, function (tag) {
+ tagHooks[tag] = tagHooks.g //处理SVG
+ })
+ var rtagName = /<([\w:]+)/ //取得其tagName
+ var rxhtml = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig
+ var rcreate = W3C ? /[^\d\D]/ : /(<(?:script|link|style|meta|noscript))/ig
+ var scriptTypes = oneObject(["", "text/javascript", "text/ecmascript", "application/ecmascript", "application/javascript"])
+ var rnest = /<(?:tb|td|tf|th|tr|col|opt|leg|cap|area)/ //需要处理套嵌关系的标签
+ var script = DOC.createElement("script")
+ avalon.parseHTML = function (html) {
+ if (typeof html !== "string") {
+ html = html + ""
+ }
+ html = html.replace(rxhtml, "<$1></$2>").trim()
+ var tag = (rtagName.exec(html) || ["", ""])[1].toLowerCase(),
+ //取得其标签名
+ wrap = tagHooks[tag] || tagHooks._default,
+ fragment = hyperspace.cloneNode(false),
+ wrapper = cinerator,
+ firstChild, neo
+ if (!W3C) { //fix IE
+ html = html.replace(rcreate, "<br class=msNoScope>$1") //在link style script等标签之前添加一个补丁
+ }
+ wrapper.innerHTML = wrap[1] + html + (wrap[2] || "")
+ var els = wrapper.getElementsByTagName("script")
+ if (els.length) { //使用innerHTML生成的script节点不会发出请求与执行text属性
+ for (var i = 0, el; el = els[i++];) {
+ if (scriptTypes[el.type]) {
+ //以偷龙转凤方式恢复执行脚本功能
+ neo = script.cloneNode(false) //FF不能省略参数
+ ap.forEach.call(el.attributes, function (attr) {
+ if (attr && attr.specified) {
+ neo[attr.name] = attr.value //复制其属性
+ neo.setAttribute(attr.name, attr.value)
+ }
+ })
+ neo.text = el.text
+ el.parentNode.replaceChild(neo, el) //替换节点
+ }
+ }
+ }
+ //移除我们为了符合套嵌关系而添加的标签
+ for (i = wrap[0]; i--; wrapper = wrapper.lastChild) {
+ }
+ if (!W3C) { //fix IE
+ var els = wrapper.getElementsByTagName("br"), n = els.length
+ while (el = els[--n]) {
+ if (el.className === "msNoScope") {
+ el.parentNode.removeChild(el)
+ }
+ }
+ for (els = wrapper.all, i = 0; el = els[i++];) { //fix VML
+ if (isVML(el)) {
+ fixVML(el)
+ }
+ }
+ }
+
+ while (firstChild = wrapper.firstChild) { // 将wrapper上的节点转移到文档碎片上!
+ fragment.appendChild(firstChild)
+ }
+ return fragment
+ }
+
+ function isVML(src) {
+ var nodeName = src.nodeName
+ return nodeName.toLowerCase() === nodeName && src.scopeName && src.outerText === ""
+ }
+
+ function fixVML(node) {
+ if (node.currentStyle.behavior !== "url(#default#VML)") {
+ node.style.behavior = "url(#default#VML)"
+ node.style.display = "inline-block"
+ node.style.zoom = 1 //hasLayout
+ }
+ }
+
+ avalon.innerHTML = function (node, html) {
+ if (!W3C && (!rcreate.test(html) && !rnest.test(html))) {
+ try {
+ node.innerHTML = html
+ return
+ } catch (e) {
+ }
+ }
+ var a = this.parseHTML(html)
+ this.clearHTML(node).appendChild(a)
+ }
+ avalon.clearHTML = function (node) {
+ node.textContent = ""
+ while (node.firstChild) {
+ node.removeChild(node.firstChild)
+ }
+ return node
+ }
+
+ /*********************************************************************
+ * 扫描系统 *
+ **********************************************************************/
+
+ avalon.scan = function (elem, vmodel, group) {
+ elem = elem || root
+ var vmodels = vmodel ? [].concat(vmodel) : []
+ scanTag(elem, vmodels)
+ }
+
+//http://www.w3.org/TR/html5/syntax.html#void-elements
+ var stopScan = oneObject("area,base,basefont,br,col,command,embed,hr,img,input,link,meta,param,source,track,wbr,noscript,script,style,textarea".toUpperCase())
+
+ function checkScan(elem, callback, innerHTML) {
+ var id = setTimeout(function () {
+ var currHTML = elem.innerHTML
+ clearTimeout(id)
+ if (currHTML === innerHTML) {
+ callback()
+ } else {
+ checkScan(elem, callback, currHTML)
+ }
+ })
+ }
+
+
+ function createSignalTower(elem, vmodel) {
+ var id = elem.getAttribute("avalonctrl") || vmodel.$id
+ elem.setAttribute("avalonctrl", id)
+ vmodel.$events.expr = elem.tagName + '[avalonctrl="' + id + '"]'
+ }
+
+ var getBindingCallback = function (elem, name, vmodels) {
+ var callback = elem.getAttribute(name)
+ if (callback) {
+ for (var i = 0, vm; vm = vmodels[i++];) {
+ if (vm.hasOwnProperty(callback) && typeof vm[callback] === "function") {
+ return vm[callback]
+ }
+ }
+ }
+ }
+
+ function executeBindings(bindings, vmodels) {
+ for (var i = 0, data; data = bindings[i++];) {
+ data.vmodels = vmodels
+ bindingHandlers[data.type](data, vmodels)
+ if (data.evaluator && data.element && data.element.nodeType === 1) { //移除数据绑定,防止被二次解析
+ //chrome使用removeAttributeNode移除不存在的特性节点时会报错 https://github.com/RubyLouvre/avalon/issues/99
+ data.element.removeAttribute(data.name)
+ }
+ }
+ bindings.length = 0
+ }
+
+//https://github.com/RubyLouvre/avalon/issues/636
+ var mergeTextNodes = IEVersion && window.MutationObserver ? function (elem) {
+ var node = elem.firstChild, text
+ while (node) {
+ var aaa = node.nextSibling
+ if (node.nodeType === 3) {
+ if (text) {
+ text.nodeValue += node.nodeValue
+ elem.removeChild(node)
+ } else {
+ text = node
+ }
+ } else {
+ text = null
+ }
+ node = aaa
+ }
+ } : 0
+
+ var rmsAttr = /ms-(\w+)-?(.*)/
+ var priorityMap = {
+ "if": 10,
+ "repeat": 90,
+ "data": 100,
+ "widget": 110,
+ "each": 1400,
+ "with": 1500,
+ "duplex": 2000,
+ "on": 3000
+ }
+
+ var events = oneObject("animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit")
+ var obsoleteAttrs = oneObject("value,title,alt,checked,selected,disabled,readonly,enabled")
+
+ function bindingSorter(a, b) {
+ return a.priority - b.priority
+ }
+
+ function scanTag(elem, vmodels, node) {
+ //扫描顺序 ms-skip(0) --> ms-important(1) --> ms-controller(2) --> ms-if(10) --> ms-repeat(100)
+ //--> ms-if-loop(110) --> ms-attr(970) ...--> ms-each(1400)-->ms-with(1500)--〉ms-duplex(2000)垫后
+ var a = elem.getAttribute("ms-skip")
+ //#360 在旧式IE中 Object标签在引入Flash等资源时,可能出现没有getAttributeNode,innerHTML的情形
+ if (!elem.getAttributeNode) {
+ return log("warning " + elem.tagName + " no getAttributeNode method")
+ }
+ var b = elem.getAttributeNode("ms-important")
+ var c = elem.getAttributeNode("ms-controller")
+ if (typeof a === "string") {
+ return
+ } else if (node = b || c) {
+ var newVmodel = avalon.vmodels[node.value]
+ if (!newVmodel) {
+ return
+ }
+ //ms-important不包含父VM,ms-controller相反
+ vmodels = node === b ? [newVmodel] : [newVmodel].concat(vmodels)
+ var name = node.name
+ elem.removeAttribute(name) //removeAttributeNode不会刷新[ms-controller]样式规则
+ avalon(elem).removeClass(name)
+ createSignalTower(elem, newVmodel)
+ }
+ scanAttr(elem, vmodels) //扫描特性节点
+ }
+
+ function scanNodeList(parent, vmodels) {
+ var node = parent.firstChild
+ while (node) {
+ var nextNode = node.nextSibling
+ scanNode(node, node.nodeType, vmodels)
+ node = nextNode
+ }
+ }
+
+ function scanNodeArray(nodes, vmodels) {
+ for (var i = 0, node; node = nodes[i++];) {
+ scanNode(node, node.nodeType, vmodels)
+ }
+ }
+
+ function scanNode(node, nodeType, vmodels) {
+ if (nodeType === 1) {
+ scanTag(node, vmodels) //扫描元素节点
+ } else if (nodeType === 3 && rexpr.test(node.data)) {
+ scanText(node, vmodels) //扫描文本节点
+ } else if (kernel.commentInterpolate && nodeType === 8 && !rexpr.test(node.nodeValue)) {
+ scanText(node, vmodels) //扫描注释节点
+ }
+ }
+
+ function scanAttr(elem, vmodels) {
+ //防止setAttribute, removeAttribute时 attributes自动被同步,导致for循环出错
+ var attributes = getAttributes ? getAttributes(elem) : avalon.slice(elem.attributes)
+ var bindings = [],
+ msData = {},
+ match
+ for (var i = 0, attr; attr = attributes[i++];) {
+ if (attr.specified) {
+ if (match = attr.name.match(rmsAttr)) {
+ //如果是以指定前缀命名的
+ var type = match[1]
+ var param = match[2] || ""
+ var value = attr.value
+ var name = attr.name
+ msData[name] = value
+ if (events[type]) {
+ param = type
+ type = "on"
+ } else if (obsoleteAttrs[type]) {
+ log("ms-" + type + "已经被废弃,请使用ms-attr-*代替")
+ if (type === "enabled") { //吃掉ms-enabled绑定,用ms-disabled代替
+ type = "disabled"
+ value = "!(" + value + ")"
+ }
+ param = type
+ type = "attr"
+ elem.removeAttribute(name)
+ name = "ms-attr-" + param
+ elem.setAttribute(name, value)
+ match = [name]
+ msData[name] = value
+ }
+ if (typeof bindingHandlers[type] === "function") {
+ var binding = {
+ type: type,
+ param: param,
+ element: elem,
+ name: match[0],
+ value: value,
+ priority: type in priorityMap ? priorityMap[type] : type.charCodeAt(0) * 10 + (Number(param) || 0)
+ }
+ if (type === "html" || type === "text") {
+ var token = getToken(value)
+ avalon.mix(binding, token)
+ binding.filters = binding.filters.replace(rhasHtml, function () {
+ binding.type = "html"
+ binding.group = 1
+ return ""
+ })
+ }
+ if (name === "ms-if-loop") {
+ binding.priority += 100
+ }
+ if (vmodels.length) {
+ bindings.push(binding)
+ if (type === "widget") {
+ elem.msData = elem.msData || msData
+ }
+ }
+ }
+ }
+ }
+ }
+ bindings.sort(bindingSorter)
+ if (msData["ms-attr-checked"] && msData["ms-duplex"]) {
+ log("warning!一个元素上不能同时定义ms-attr-checked与ms-duplex")
+ }
+ var scanNode = true
+ for (var i = 0, binding; binding = bindings[i]; i++) {
+ var type = binding.type
+ if (rnoscanAttrBinding.test(type)) {
+ return executeBindings(bindings.slice(0, i + 1), vmodels)
+ } else if (scanNode) {
+ scanNode = !rnoscanNodeBinding.test(type)
+ }
+ }
+ executeBindings(bindings, vmodels)
+ if (scanNode && !stopScan[elem.tagName] && rbind.test(elem.innerHTML.replace(rlt, "<").replace(rgt, ">"))) {
+ mergeTextNodes && mergeTextNodes(elem)
+ scanNodeList(elem, vmodels) //扫描子孙元素
+ }
+ }
+
+ var rnoscanAttrBinding = /^if|widget|repeat$/
+ var rnoscanNodeBinding = /^each|with|html|include$/
+//IE67下,在循环绑定中,一个节点如果是通过cloneNode得到,自定义属性的specified为false,无法进入里面的分支,
+//但如果我们去掉scanAttr中的attr.specified检测,一个元素会有80+个特性节点(因为它不区分固有属性与自定义属性),很容易卡死页面
+ if (!"1" [0]) {
+ var cacheAttrs = createCache(512)
+ var rattrs = /\s+(ms-[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,
+ rquote = /^['"]/,
+ rtag = /<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i,
+ ramp = /&amp;/g
+ //IE6-8解析HTML5新标签,会将它分解两个元素节点与一个文本节点
+ //<body><section>ddd</section></body>
+ // window.onload = function() {
+ // var body = document.body
+ // for (var i = 0, el; el = body.children[i++]; ) {
+ // avalon.log(el.outerHTML)
+ // }
+ // }
+ //依次输出<SECTION>, </SECTION>
+ var getAttributes = function (elem) {
+ var html = elem.outerHTML
+ //处理IE6-8解析HTML5新标签的情况,及<br>等半闭合标签outerHTML为空的情况
+ if (html.slice(0, 2) === "</" || !html.trim()) {
+ return []
+ }
+ var str = html.match(rtag)[0]
+ var attributes = [],
+ match,
+ k, v;
+ if (cacheAttrs[str]) {
+ return cacheAttrs[str]
+ }
+ while (k = rattrs.exec(str)) {
+ v = k[2]
+ if (v) {
+ v = (rquote.test(v) ? v.slice(1, -1) : v).replace(ramp, "&")
+ }
+ var name = k[1].toLowerCase()
+ match = name.match(rmsAttr)
+ var binding = {
+ name: name,
+ specified: true,
+ value: v || ""
+ }
+ attributes.push(binding)
+ }
+ return cacheAttrs(str, attributes)
+ }
+ }
+
+ var rhasHtml = /\|\s*html\s*/,
+ r11a = /\|\|/g,
+ rlt = /&lt;/g,
+ rgt = /&gt;/g
+
+ function getToken(value) {
+ if (value.indexOf("|") > 0) {
+ var index = value.replace(r11a, "\u1122\u3344").indexOf("|") //干掉所有短路或
+ if (index > -1) {
+ return {
+ filters: value.slice(index),
+ value: value.slice(0, index),
+ expr: true
+ }
+ }
+ }
+ return {
+ value: value,
+ filters: "",
+ expr: true
+ }
+ }
+
+ function scanExpr(str) {
+ var tokens = [],
+ value, start = 0,
+ stop
+ do {
+ stop = str.indexOf(openTag, start)
+ if (stop === -1) {
+ break
+ }
+ value = str.slice(start, stop)
+ if (value) { // {{ 左边的文本
+ tokens.push({
+ value: value,
+ filters: "",
+ expr: false
+ })
+ }
+ start = stop + openTag.length
+ stop = str.indexOf(closeTag, start)
+ if (stop === -1) {
+ break
+ }
+ value = str.slice(start, stop)
+ if (value) { //处理{{ }}插值表达式
+ tokens.push(getToken(value))
+ }
+ start = stop + closeTag.length
+ } while (1)
+ value = str.slice(start)
+ if (value) { //}} 右边的文本
+ tokens.push({
+ value: value,
+ expr: false,
+ filters: ""
+ })
+ }
+ return tokens
+ }
+
+ function scanText(textNode, vmodels) {
+ var bindings = []
+ if (textNode.nodeType === 8) {
+ var token = getToken(textNode.nodeValue)
+ var tokens = [token]
+ } else {
+ tokens = scanExpr(textNode.data)
+ }
+ if (tokens.length) {
+ for (var i = 0, token; token = tokens[i++];) {
+ var node = DOC.createTextNode(token.value) //将文本转换为文本节点,并替换原来的文本节点
+ if (token.expr) {
+ token.type = "text"
+ token.element = node
+ token.filters = token.filters.replace(rhasHtml, function () {
+ token.type = "html"
+ token.group = 1
+ return ""
+ })
+ bindings.push(token) //收集带有插值表达式的文本
+ }
+ hyperspace.appendChild(node)
+ }
+ textNode.parentNode.replaceChild(hyperspace, textNode)
+ if (bindings.length)
+ executeBindings(bindings, vmodels)
+ }
+ }
+
+ /*********************************************************************
+ * avalon的原型方法定义区 *
+ **********************************************************************/
+
+ function hyphen(target) {
+ //转换为连字符线风格
+ return target.replace(/([a-z\d])([A-Z]+)/g, "$1-$2").toLowerCase()
+ }
+
+ function camelize(target) {
+ //转换为驼峰风格
+ if (target.indexOf("-") < 0 && target.indexOf("_") < 0) {
+ return target //提前判断,提高getStyle等的效率
+ }
+ return target.replace(/[-_][^-_]/g, function (match) {
+ return match.charAt(1).toUpperCase()
+ })
+ }
+
+ var ClassListMethods = {
+ _toString: function () {
+ var node = this.node
+ var cls = node.className
+ var str = typeof cls === "string" ? cls : cls.baseVal
+ return str.split(/\s+/).join(" ")
+ },
+ _contains: function (cls) {
+ return (" " + this + " ").indexOf(" " + cls + " ") > -1
+ },
+ _add: function (cls) {
+ if (!this.contains(cls)) {
+ this._set(this + " " + cls)
+ }
+ },
+ _remove: function (cls) {
+ this._set((" " + this + " ").replace(" " + cls + " ", " "))
+ },
+ __set: function (cls) {
+ cls = cls.trim()
+ var node = this.node
+ if (rsvg.test(node)) {
+ //SVG元素的className是一个对象 SVGAnimatedString { baseVal="", animVal=""},只能通过set/getAttribute操作
+ node.setAttribute("class", cls)
+ } else {
+ node.className = cls
+ }
+ } //toggle存在版本差异,因此不使用它
+ }
+
+ function ClassList(node) {
+ if (!("classList" in node)) {
+ node.classList = {
+ node: node
+ }
+ for (var k in ClassListMethods) {
+ node.classList[k.slice(1)] = ClassListMethods[k]
+ }
+ }
+ return node.classList
+ }
+
+
+ "add,remove".replace(rword, function (method) {
+ avalon.fn[method + "Class"] = function (cls) {
+ var el = this[0]
+ //https://developer.mozilla.org/zh-CN/docs/Mozilla/Firefox/Releases/26
+ if (cls && typeof cls === "string" && el && el.nodeType === 1) {
+ cls.replace(/\S+/g, function (c) {
+ ClassList(el)[method](c)
+ })
+ }
+ return this
+ }
+ })
+ avalon.fn.mix({
+ hasClass: function (cls) {
+ var el = this[0] || {}
+ return el.nodeType === 1 && ClassList(el).contains(cls)
+ },
+ toggleClass: function (value, stateVal) {
+ var className, i = 0
+ var classNames = value.split(/\s+/)
+ var isBool = typeof stateVal === "boolean"
+ while ((className = classNames[i++])) {
+ var state = isBool ? stateVal : !this.hasClass(className)
+ this[state ? "addClass" : "removeClass"](className)
+ }
+ return this
+ },
+ attr: function (name, value) {
+ if (arguments.length === 2) {
+ this[0].setAttribute(name, value)
+ return this
+ } else {
+ return this[0].getAttribute(name)
+ }
+ },
+ data: function (name, value) {
+ name = "data-" + hyphen(name || "")
+ switch (arguments.length) {
+ case 2:
+ this.attr(name, value)
+ return this
+ case 1:
+ var val = this.attr(name)
+ return parseData(val)
+ case 0:
+ var ret = {}
+ ap.forEach.call(this[0].attributes, function (attr) {
+ if (attr) {
+ name = attr.name
+ if (!name.indexOf("data-")) {
+ name = camelize(name.slice(5))
+ ret[name] = parseData(attr.value)
+ }
+ }
+ })
+ return ret
+ }
+ },
+ removeData: function (name) {
+ name = "data-" + hyphen(name)
+ this[0].removeAttribute(name)
+ return this
+ },
+ css: function (name, value) {
+ if (avalon.isPlainObject(name)) {
+ for (var i in name) {
+ avalon.css(this, i, name[i])
+ }
+ } else {
+ var ret = avalon.css(this, name, value)
+ }
+ return ret !== void 0 ? ret : this
+ },
+ position: function () {
+ var offsetParent, offset,
+ elem = this[0],
+ parentOffset = {
+ top: 0,
+ left: 0
+ }
+ if (!elem) {
+ return
+ }
+ if (this.css("position") === "fixed") {
+ offset = elem.getBoundingClientRect()
+ } else {
+ offsetParent = this.offsetParent() //得到真正的offsetParent
+ offset = this.offset() // 得到正确的offsetParent
+ if (offsetParent[0].tagName !== "HTML") {
+ parentOffset = offsetParent.offset()
+ }
+ parentOffset.top += avalon.css(offsetParent[0], "borderTopWidth", true)
+ parentOffset.left += avalon.css(offsetParent[0], "borderLeftWidth", true)
+ }
+ return {
+ top: offset.top - parentOffset.top - avalon.css(elem, "marginTop", true),
+ left: offset.left - parentOffset.left - avalon.css(elem, "marginLeft", true)
+ }
+ },
+ offsetParent: function () {
+ var offsetParent = this[0].offsetParent
+ while (offsetParent && avalon.css(offsetParent, "position") === "static") {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return avalon(offsetParent)
+ },
+ bind: function (type, fn, phase) {
+ if (this[0]) { //此方法不会链
+ return avalon.bind(this[0], type, fn, phase)
+ }
+ },
+ unbind: function (type, fn, phase) {
+ if (this[0]) {
+ avalon.unbind(this[0], type, fn, phase)
+ }
+ return this
+ },
+ val: function (value) {
+ var node = this[0]
+ if (node && node.nodeType === 1) {
+ var get = arguments.length === 0
+ var access = get ? ":get" : ":set"
+ var fn = valHooks[getValType(node) + access]
+ if (fn) {
+ var val = fn(node, value)
+ } else if (get) {
+ return (node.value || "").replace(/\r/g, "")
+ } else {
+ node.value = value
+ }
+ }
+ return get ? val : this
+ }
+ })
+
+ function parseData(data) {
+ try {
+ if (typeof data === "object")
+ return data
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null : +data + "" === data ? +data : rbrace.test(data) ? avalon.parseJSON(data) : data
+ } catch (e) {
+ }
+ return data
+ }
+
+ var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g
+ avalon.parseJSON = window.JSON ? JSON.parse : function (data) {
+ if (typeof data === "string") {
+ data = data.trim();
+ if (data) {
+ if (rvalidchars.test(data.replace(rvalidescape, "@")
+ .replace(rvalidtokens, "]")
+ .replace(rvalidbraces, ""))) {
+ return (new Function("return " + data))();
+ }
+ }
+ avalon.error("Invalid JSON: " + data);
+ }
+ return data
+ }
+
+//生成avalon.fn.scrollLeft, avalon.fn.scrollTop方法
+ avalon.each({
+ scrollLeft: "pageXOffset",
+ scrollTop: "pageYOffset"
+ }, function (method, prop) {
+ avalon.fn[method] = function (val) {
+ var node = this[0] || {}, win = getWindow(node),
+ top = method === "scrollTop"
+ if (!arguments.length) {
+ return win ? (prop in win) ? win[prop] : root[method] : node[method]
+ } else {
+ if (win) {
+ win.scrollTo(!top ? val : avalon(win).scrollLeft(), top ? val : avalon(win).scrollTop())
+ } else {
+ node[method] = val
+ }
+ }
+ }
+ })
+
+ function getWindow(node) {
+ return node.window && node.document ? node : node.nodeType === 9 ? node.defaultView || node.parentWindow : false;
+ }
+
+//=============================css相关=======================
+ var cssHooks = avalon.cssHooks = {}
+ var prefixes = ["", "-webkit-", "-o-", "-moz-", "-ms-"]
+ var cssMap = {
+ "float": W3C ? "cssFloat" : "styleFloat"
+ }
+ avalon.cssNumber = oneObject("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom")
+
+ avalon.cssName = function (name, host, camelCase) {
+ if (cssMap[name]) {
+ return cssMap[name]
+ }
+ host = host || root.style
+ for (var i = 0, n = prefixes.length; i < n; i++) {
+ camelCase = camelize(prefixes[i] + name)
+ if (camelCase in host) {
+ return (cssMap[name] = camelCase)
+ }
+ }
+ return null
+ }
+ cssHooks["@:set"] = function (node, name, value) {
+ try { //node.style.width = NaN;node.style.width = "xxxxxxx";node.style.width = undefine 在旧式IE下会抛异常
+ node.style[name] = value
+ } catch (e) {
+ }
+ }
+ if (window.getComputedStyle) {
+ cssHooks["@:get"] = function (node, name) {
+ if (!node || !node.style) {
+ throw new Error("getComputedStyle要求传入一个节点 " + node)
+ }
+ var ret, styles = getComputedStyle(node, null)
+ if (styles) {
+ ret = name === "filter" ? styles.getPropertyValue(name) : styles[name]
+ if (ret === "") {
+ ret = node.style[name] //其他浏览器需要我们手动取内联样式
+ }
+ }
+ return ret
+ }
+ cssHooks["opacity:get"] = function (node) {
+ var ret = cssHooks["@:get"](node, "opacity")
+ return ret === "" ? "1" : ret
+ }
+ } else {
+ var rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i
+ var rposition = /^(top|right|bottom|left)$/
+ var ralpha = /alpha\([^)]*\)/i
+ var ie8 = !!window.XDomainRequest
+ var salpha = "DXImageTransform.Microsoft.Alpha"
+ var border = {
+ thin: ie8 ? '1px' : '2px',
+ medium: ie8 ? '3px' : '4px',
+ thick: ie8 ? '5px' : '6px'
+ }
+ cssHooks["@:get"] = function (node, name) {
+ //取得精确值,不过它有可能是带em,pc,mm,pt,%等单位
+ var currentStyle = node.currentStyle
+ var ret = currentStyle[name]
+ if ((rnumnonpx.test(ret) && !rposition.test(ret))) {
+ //①,保存原有的style.left, runtimeStyle.left,
+ var style = node.style,
+ left = style.left,
+ rsLeft = node.runtimeStyle.left
+ //②由于③处的style.left = xxx会影响到currentStyle.left,
+ //因此把它currentStyle.left放到runtimeStyle.left,
+ //runtimeStyle.left拥有最高优先级,不会style.left影响
+ node.runtimeStyle.left = currentStyle.left
+ //③将精确值赋给到style.left,然后通过IE的另一个私有属性 style.pixelLeft
+ //得到单位为px的结果;fontSize的分支见http://bugs.jquery.com/ticket/760
+ style.left = name === 'fontSize' ? '1em' : (ret || 0)
+ ret = style.pixelLeft + "px"
+ //④还原 style.left,runtimeStyle.left
+ style.left = left
+ node.runtimeStyle.left = rsLeft
+ }
+ if (ret === "medium") {
+ name = name.replace("Width", "Style")
+ //border width 默认值为medium,即使其为0"
+ if (currentStyle[name] === "none") {
+ ret = "0px"
+ }
+ }
+ return ret === "" ? "auto" : border[ret] || ret
+ }
+ cssHooks["opacity:set"] = function (node, name, value) {
+ var style = node.style
+ var opacity = isFinite(value) && value <= 1 ? "alpha(opacity=" + value * 100 + ")" : ""
+ var filter = style.filter || "";
+ style.zoom = 1
+ //不能使用以下方式设置透明度
+ //node.filters.alpha.opacity = value * 100
+ style.filter = (ralpha.test(filter) ?
+ filter.replace(ralpha, opacity) :
+ filter + " " + opacity).trim()
+ if (!style.filter) {
+ style.removeAttribute("filter")
+ }
+ }
+ cssHooks["opacity:get"] = function (node) {
+ //这是最快的获取IE透明值的方式,不需要动用正则了!
+ var alpha = node.filters.alpha || node.filters[salpha],
+ op = alpha && alpha.enabled ? alpha.opacity : 100
+ return (op / 100) + "" //确保返回的是字符串
+ }
+ }
+
+ "top,left".replace(rword, function (name) {
+ cssHooks[name + ":get"] = function (node) {
+ var computed = cssHooks["@:get"](node, name)
+ return /px$/.test(computed) ? computed :
+ avalon(node).position()[name] + "px"
+ }
+ })
+
+ var cssShow = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }
+
+ var rdisplayswap = /^(none|table(?!-c[ea]).+)/
+
+ function showHidden(node, array) {
+ //http://www.cnblogs.com/rubylouvre/archive/2012/10/27/2742529.html
+ if (node.offsetWidth <= 0) { //opera.offsetWidth可能小于0
+ if (rdisplayswap.test(cssHooks["@:get"](node, "display"))) {
+ var obj = {
+ node: node
+ }
+ for (var name in cssShow) {
+ obj[name] = node.style[name]
+ node.style[name] = cssShow[name]
+ }
+ array.push(obj)
+ }
+ var parent = node.parentNode
+ if (parent && parent.nodeType === 1) {
+ showHidden(parent, array)
+ }
+ }
+ }
+
+ "Width,Height".replace(rword, function (name) { //fix 481
+ var method = name.toLowerCase(),
+ clientProp = "client" + name,
+ scrollProp = "scroll" + name,
+ offsetProp = "offset" + name
+ cssHooks[method + ":get"] = function (node, which, override) {
+ var boxSizing = -4
+ if (typeof override === "number") {
+ boxSizing = override
+ }
+ which = name === "Width" ? ["Left", "Right"] : ["Top", "Bottom"]
+ var ret = node[offsetProp] // border-box 0
+ if (boxSizing === 2) { // margin-box 2
+ return ret + avalon.css(node, "margin" + which[0], true) + avalon.css(node, "margin" + which[1], true)
+ }
+ if (boxSizing < 0) { // padding-box -2
+ ret = ret - avalon.css(node, "border" + which[0] + "Width", true) - avalon.css(node, "border" + which[1] + "Width", true)
+ }
+ if (boxSizing === -4) { // content-box -4
+ ret = ret - avalon.css(node, "padding" + which[0], true) - avalon.css(node, "padding" + which[1], true)
+ }
+ return ret
+ }
+ cssHooks[method + "&get"] = function (node) {
+ var hidden = [];
+ showHidden(node, hidden);
+ var val = cssHooks[method + ":get"](node)
+ for (var i = 0, obj; obj = hidden[i++];) {
+ node = obj.node
+ for (var n in obj) {
+ if (typeof obj[n] === "string") {
+ node.style[n] = obj[n]
+ }
+ }
+ }
+ return val;
+ }
+ avalon.fn[method] = function (value) { //会忽视其display
+ var node = this[0]
+ if (arguments.length === 0) {
+ if (node.setTimeout) { //取得窗口尺寸,IE9后可以用node.innerWidth /innerHeight代替
+ return node["inner" + name] || node.document.documentElement[clientProp]
+ }
+ if (node.nodeType === 9) { //取得页面尺寸
+ var doc = node.documentElement
+ //FF chrome html.scrollHeight< body.scrollHeight
+ //IE 标准模式 : html.scrollHeight> body.scrollHeight
+ //IE 怪异模式 : html.scrollHeight 最大等于可视窗口多一点?
+ return Math.max(node.body[scrollProp], doc[scrollProp], node.body[offsetProp], doc[offsetProp], doc[clientProp])
+ }
+ return cssHooks[method + "&get"](node)
+ } else {
+ return this.css(method, value)
+ }
+ }
+ avalon.fn["inner" + name] = function () {
+ return cssHooks[method + ":get"](this[0], void 0, -2)
+ }
+ avalon.fn["outer" + name] = function (includeMargin) {
+ return cssHooks[method + ":get"](this[0], void 0, includeMargin === true ? 2 : 0)
+ }
+ })
+ avalon.fn.offset = function () { //取得距离页面左右角的坐标
+ var node = this[0],
+ box = {
+ left: 0,
+ top: 0
+ }
+ if (!node || !node.tagName || !node.ownerDocument) {
+ return box
+ }
+ var doc = node.ownerDocument,
+ body = doc.body,
+ root = doc.documentElement,
+ win = doc.defaultView || doc.parentWindow
+ if (!avalon.contains(root, node)) {
+ return box
+ }
+ //http://hkom.blog1.fc2.com/?mode=m&no=750 body的偏移量是不包含margin的
+ //我们可以通过getBoundingClientRect来获得元素相对于client的rect.
+ //http://msdn.microsoft.com/en-us/library/ms536433.aspx
+ if (node.getBoundingClientRect) {
+ box = node.getBoundingClientRect() // BlackBerry 5, iOS 3 (original iPhone)
+ }
+ //chrome/IE6: body.scrollTop, firefox/other: root.scrollTop
+ var clientTop = root.clientTop || body.clientTop,
+ clientLeft = root.clientLeft || body.clientLeft,
+ scrollTop = Math.max(win.pageYOffset || 0, root.scrollTop, body.scrollTop),
+ scrollLeft = Math.max(win.pageXOffset || 0, root.scrollLeft, body.scrollLeft)
+ // 把滚动距离加到left,top中去。
+ // IE一些版本中会自动为HTML元素加上2px的border,我们需要去掉它
+ // http://msdn.microsoft.com/en-us/library/ms533564(VS.85).aspx
+ return {
+ top: box.top + scrollTop - clientTop,
+ left: box.left + scrollLeft - clientLeft
+ }
+ }
+
+//==================================val相关============================
+
+ function getValType(el) {
+ var ret = el.tagName.toLowerCase()
+ return ret === "input" && /checkbox|radio/.test(el.type) ? "checked" : ret
+ }
+
+ var roption = /^<option(?:\s+\w+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s+value[\s=]/i
+ var valHooks = {
+ "option:get": IEVersion ? function (node) {
+ //在IE11及W3C,如果没有指定value,那么node.value默认为node.text(存在trim作),但IE9-10则是取innerHTML(没trim操作)
+ //specified并不可靠,因此通过分析outerHTML判定用户有没有显示定义value
+ return roption.test(node.outerHTML) ? node.value : node.text.trim()
+ } : function (node) {
+ return node.value
+ },
+ "select:get": function (node, value) {
+ var option, options = node.options,
+ index = node.selectedIndex,
+ getter = valHooks["option:get"],
+ one = node.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ? max : one ? index : 0
+ for (; i < max; i++) {
+ option = options[i]
+ //旧式IE在reset后不会改变selected,需要改用i === index判定
+ //我们过滤所有disabled的option元素,但在safari5下,如果设置select为disable,那么其所有孩子都disable
+ //因此当一个元素为disable,需要检测其是否显式设置了disable及其父节点的disable情况
+ if ((option.selected || i === index) && !option.disabled) {
+ value = getter(option)
+ if (one) {
+ return value
+ }
+ //收集所有selected值组成数组返回
+ values.push(value)
+ }
+ }
+ return values
+ },
+ "select:set": function (node, values, optionSet) {
+ values = [].concat(values) //强制转换为数组
+ var getter = valHooks["option:get"]
+ for (var i = 0, el; el = node.options[i++];) {
+ if ((el.selected = values.indexOf(getter(el)) > -1)) {
+ optionSet = true
+ }
+ }
+ if (!optionSet) {
+ node.selectedIndex = -1
+ }
+ }
+ }
+
+ /*********************************************************************
+ * 编译系统 *
+ **********************************************************************/
+ var meta = {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"': '\\"',
+ '\\': '\\\\'
+ }
+ var quote = window.JSON && JSON.stringify || function (str) {
+ return '"' + str.replace(/[\\\"\x00-\x1f]/g, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"'
+ }
+
+ var keywords =
+ // 关键字
+ "break,case,catch,continue,debugger,default,delete,do,else,false" +
+ ",finally,for,function,if,in,instanceof,new,null,return,switch,this" +
+ ",throw,true,try,typeof,var,void,while,with"
+ // 保留字
+ + ",abstract,boolean,byte,char,class,const,double,enum,export,extends" +
+ ",final,float,goto,implements,import,int,interface,long,native" +
+ ",package,private,protected,public,short,static,super,synchronized" +
+ ",throws,transient,volatile"
+ // ECMA 5 - use strict
+ + ",arguments,let,yield" + ",undefined"
+ var rrexpstr = /\/\*[\w\W]*?\*\/|\/\/[^\n]*\n|\/\/[^\n]*$|"(?:[^"\\]|\\[\w\W])*"|'(?:[^'\\]|\\[\w\W])*'|[\s\t\n]*\.[\s\t\n]*[$\w\.]+/g
+ var rsplit = /[^\w$]+/g
+ var rkeywords = new RegExp(["\\b" + keywords.replace(/,/g, '\\b|\\b') + "\\b"].join('|'), 'g')
+ var rnumber = /\b\d[^,]*/g
+ var rcomma = /^,+|,+$/g
+ var cacheVars = createCache(512)
+ var getVariables = function (code) {
+ var key = "," + code.trim()
+ if (cacheVars[key]) {
+ return cacheVars[key]
+ }
+ var match = code
+ .replace(rrexpstr, "")
+ .replace(rsplit, ",")
+ .replace(rkeywords, "")
+ .replace(rnumber, "")
+ .replace(rcomma, "")
+ .split(/^$|,+/)
+ return cacheVars(key, uniqSet(match))
+ }
+ /*添加赋值语句*/
+
+ function addAssign(vars, scope, name, data) {
+ var ret = [],
+ prefix = " = " + name + "."
+ for (var i = vars.length, prop; prop = vars[--i];) {
+ if (scope.hasOwnProperty(prop)) {
+ ret.push(prop + prefix + prop)
+ data.vars.push(prop)
+ if (data.type === "duplex") {
+ vars.get = name + "." + prop
+ }
+ vars.splice(i, 1)
+ }
+ }
+ return ret
+ }
+
+ function uniqSet(array) {
+ var ret = [],
+ unique = {}
+ for (var i = 0; i < array.length; i++) {
+ var el = array[i]
+ var id = el && typeof el.$id === "string" ? el.$id : el
+ if (!unique[id]) {
+ unique[id] = ret.push(el)
+ }
+ }
+ return ret
+ }
+
+//缓存求值函数,以便多次利用
+ var cacheExprs = createCache(128)
+//取得求值函数及其传参
+ var rduplex = /\w\[.*\]|\w\.\w/
+ var rproxy = /(\$proxy\$[a-z]+)\d+$/
+ var rthimRightParentheses = /\)\s*$/
+ var rthimOtherParentheses = /\)\s*\|/g
+ var rquoteFilterName = /\|\s*([$\w]+)/g
+ var rpatchBracket = /"\s*\["/g
+ var rthimLeftParentheses = /"\s*\(/g
+
+ function parseFilter(val, filters) {
+ filters = filters
+ .replace(rthimRightParentheses, "")//处理最后的小括号
+ .replace(rthimOtherParentheses, function () {//处理其他小括号
+ return "],|"
+ })
+ .replace(rquoteFilterName, function (a, b) { //处理|及它后面的过滤器的名字
+ return "[" + quote(b)
+ })
+ .replace(rpatchBracket, function () {
+ return '"],["'
+ })
+ .replace(rthimLeftParentheses, function () {
+ return '",'
+ }) + "]"
+ return "return avalon.filters.$filter(" + val + ", " + filters + ")"
+ }
+
+ function parseExpr(code, scopes, data) {
+ var dataType = data.type
+ var filters = data.filters || ""
+ var exprId = scopes.map(function (el) {
+ return String(el.$id).replace(rproxy, "$1")
+ }) + code + dataType + filters
+ var vars = getVariables(code).concat(),
+ assigns = [],
+ names = [],
+ args = [],
+ prefix = ""
+ //args 是一个对象数组, names 是将要生成的求值函数的参数
+ scopes = uniqSet(scopes)
+ data.vars = []
+ for (var i = 0, sn = scopes.length; i < sn; i++) {
+ if (vars.length) {
+ var name = "vm" + expose + "_" + i
+ names.push(name)
+ args.push(scopes[i])
+ assigns.push.apply(assigns, addAssign(vars, scopes[i], name, data))
+ }
+ }
+ if (!assigns.length && dataType === "duplex") {
+ return
+ }
+ if (dataType !== "duplex" && (code.indexOf("||") > -1 || code.indexOf("&&") > -1)) {
+ //https://github.com/RubyLouvre/avalon/issues/583
+ data.vars.forEach(function (v) {
+ var reg = new RegExp("\\b" + v + "(?:\\.\\w+|\\[\\w+\\])+", "ig")
+ code = code.replace(reg, function (_) {
+ var c = _.charAt(v.length)
+ var r = IEVersion ? code.slice(arguments[1] + _.length) : RegExp.rightContext
+ var method = /^\s*\(/.test(r)
+ if (c === "." || c === "[" || method) {//比如v为aa,我们只匹配aa.bb,aa[cc],不匹配aaa.xxx
+ var name = "var" + String(Math.random()).replace(/^0\./, "")
+ if (method) {//array.size()
+ var array = _.split(".")
+ if (array.length > 2) {
+ var last = array.pop()
+ assigns.push(name + " = " + array.join("."))
+ return name + "." + last
+ } else {
+ return _
+ }
+ }
+ assigns.push(name + " = " + _)
+ return name
+ } else {
+ return _
+ }
+ })
+ })
+ }
+ //---------------args----------------
+ data.args = args
+ //---------------cache----------------
+ var fn = cacheExprs[exprId] //直接从缓存,免得重复生成
+ if (fn) {
+ data.evaluator = fn
+ return
+ }
+ var prefix = assigns.join(", ")
+ if (prefix) {
+ prefix = "var " + prefix
+ }
+ if (/\S/.test(filters)) { //文本绑定,双工绑定才有过滤器
+ if (!/text|html/.test(data.type)) {
+ throw Error("ms-" + data.type + "不支持过滤器")
+ }
+ code = "\nvar ret" + expose + " = " + code + ";\r\n"
+ code += parseFilter("ret" + expose, filters)
+ } else if (dataType === "duplex") { //双工绑定
+ var _body = "'use strict';\nreturn function(vvv){\n\t" +
+ prefix +
+ ";\n\tif(!arguments.length){\n\t\treturn " +
+ code +
+ "\n\t}\n\t" + (!rduplex.test(code) ? vars.get : code) +
+ "= vvv;\n} "
+ try {
+ fn = Function.apply(noop, names.concat(_body))
+ data.evaluator = cacheExprs(exprId, fn)
+ } catch (e) {
+ log("debug: parse error," + e.message)
+ }
+ return
+ } else if (dataType === "on") { //事件绑定
+ if (code.indexOf("(") === -1) {
+ code += ".call(this, $event)"
+ } else {
+ code = code.replace("(", ".call(this,")
+ }
+ names.push("$event")
+ code = "\nreturn " + code + ";" //IE全家 Function("return ")出错,需要Function("return ;")
+ var lastIndex = code.lastIndexOf("\nreturn")
+ var header = code.slice(0, lastIndex)
+ var footer = code.slice(lastIndex)
+ code = header + "\n" + footer
+ } else { //其他绑定
+ code = "\nreturn " + code + ";" //IE全家 Function("return ")出错,需要Function("return ;")
+ }
+ try {
+ fn = Function.apply(noop, names.concat("'use strict';\n" + prefix + code))
+ data.evaluator = cacheExprs(exprId, fn)
+ } catch (e) {
+ log("debug: parse error," + e.message)
+ } finally {
+ vars = textBuffer = names = null //释放内存
+ }
+ }
+
+
+//parseExpr的智能引用代理
+
+ function parseExprProxy(code, scopes, data, tokens, noregister) {
+ if (Array.isArray(tokens)) {
+ code = tokens.map(function (el) {
+ return el.expr ? "(" + el.value + ")" : quote(el.value)
+ }).join(" + ")
+ }
+ parseExpr(code, scopes, data)
+ if (data.evaluator && !noregister) {
+ data.handler = bindingExecutors[data.handlerName || data.type]
+ //方便调试
+ //这里非常重要,我们通过判定视图刷新函数的element是否在DOM树决定
+ //将它移出订阅者列表
+ registerSubscriber(data)
+ }
+ }
+
+ avalon.parseExprProxy = parseExprProxy
+ /*********************************************************************
+ * 各种指令 *
+ **********************************************************************/
+//ms-skip绑定已经在scanTag 方法中实现
+//ms-controller绑定已经在scanTag 方法中实现
+//ms-important绑定已经在scanTag 方法中实现
+ var bools = "autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelected" +
+ "contentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected"
+ var boolMap = {}
+ bools.replace(rword, function (name) {
+ boolMap[name.toLowerCase()] = name
+ })
+
+ var propMap = {//属性名映射
+ "accept-charset": "acceptCharset",
+ "char": "ch",
+ "charoff": "chOff",
+ "class": "className",
+ "for": "htmlFor",
+ "http-equiv": "httpEquiv"
+ }
+
+ var anomaly = "accessKey,bgColor,cellPadding,cellSpacing,codeBase,codeType,colSpan," + "dateTime,defaultValue,frameBorder,longDesc,maxLength,marginWidth,marginHeight," + "rowSpan,tabIndex,useMap,vSpace,valueType,vAlign"
+ anomaly.replace(rword, function (name) {
+ propMap[name.toLowerCase()] = name
+ })
+
+ var rnoscripts = /<noscript.*?>(?:[\s\S]+?)<\/noscript>/img
+ var rnoscriptText = /<noscript.*?>([\s\S]+?)<\/noscript>/im
+
+ var getXHR = function () {
+ return new (window.XMLHttpRequest || ActiveXObject)("Microsoft.XMLHTTP")
+ }
+
+ var cacheTmpls = avalon.templateCache = {}
+
+ bindingHandlers.attr = function (data, vmodels) {
+ var text = data.value.trim(),
+ simple = true
+ if (text.indexOf(openTag) > -1 && text.indexOf(closeTag) > 2) {
+ simple = false
+ if (rexpr.test(text) && RegExp.rightContext === "" && RegExp.leftContext === "") {
+ simple = true
+ text = RegExp.$1
+ }
+ }
+ if (data.type === "include") {
+ var elem = data.element
+ data.includeRendered = getBindingCallback(elem, "data-include-rendered", vmodels)
+ data.includeLoaded = getBindingCallback(elem, "data-include-loaded", vmodels)
+ var outer = data.includeReplaced = !!avalon(elem).data("includeReplace")
+ data.startInclude = DOC.createComment("ms-include")
+ data.endInclude = DOC.createComment("ms-include-end")
+ if (outer) {
+ data.element = data.startInclude
+ elem.parentNode.insertBefore(data.startInclude, elem)
+ elem.parentNode.insertBefore(data.endInclude, elem.nextSibling)
+ } else {
+ elem.insertBefore(data.startInclude, elem.firstChild)
+ elem.appendChild(data.endInclude)
+ }
+ }
+ data.handlerName = "attr" //handleName用于处理多种绑定共用同一种bindingExecutor的情况
+ parseExprProxy(text, vmodels, data, (simple ? 0 : scanExpr(data.value)))
+ }
+
+ bindingExecutors.attr = function (val, elem, data) {
+ var method = data.type,
+ attrName = data.param
+ if (method === "css") {
+ avalon(elem).css(attrName, val)
+ } else if (method === "attr") {
+ // ms-attr-class="xxx" vm.xxx="aaa bbb ccc"将元素的className设置为aaa bbb ccc
+ // ms-attr-class="xxx" vm.xxx=false 清空元素的所有类名
+ // ms-attr-name="yyy" vm.yyy="ooo" 为元素设置name属性
+ if (boolMap[attrName]) {
+ var bool = boolMap[attrName]
+ if (typeof elem[bool] === "boolean") {
+ // IE6-11不支持动态设置fieldset的disabled属性,IE11下样式是生效了,但无法阻止用户对其底下的input元素进行设值……
+ return elem[bool] = !!val
+ }
+ }
+ var toRemove = (val === false) || (val === null) || (val === void 0)
+
+ if (!W3C && propMap[attrName]) { //旧式IE下需要进行名字映射
+ attrName = propMap[attrName]
+ }
+ if (toRemove) {
+ return elem.removeAttribute(attrName)
+ }
+ //SVG只能使用setAttribute(xxx, yyy), VML只能使用elem.xxx = yyy ,HTML的固有属性必须elem.xxx = yyy
+ var isInnate = rsvg.test(elem) ? false : (DOC.namespaces && isVML(elem)) ? true : attrName in elem.cloneNode(false)
+ if (isInnate) {
+ elem[attrName] = val
+ } else {
+ elem.setAttribute(attrName, val)
+ }
+ } else if (method === "include" && val) {
+ var vmodels = data.vmodels
+ var rendered = data.includeRendered
+ var loaded = data.includeLoaded
+ var replace = data.includeReplaced
+ var target = replace ? elem.parentNode : elem
+
+ function scanTemplate(text) {
+ if (loaded) {
+ text = loaded.apply(target, [text].concat(vmodels))
+ }
+ if (rendered) {
+ checkScan(target, function () {
+ rendered.call(target)
+ }, NaN)
+ }
+ while (true) {
+ var node = data.startInclude.nextSibling
+ if (node && node !== data.endInclude) {
+ target.removeChild(node)
+ } else {
+ break
+ }
+ }
+ var dom = avalon.parseHTML(text)
+ var nodes = avalon.slice(dom.childNodes)
+ target.insertBefore(dom, data.endInclude)
+ scanNodeArray(nodes, vmodels)
+ }
+
+ if (data.param === "src") {
+ if (cacheTmpls[val]) {
+ avalon.nextTick(function () {
+ scanTemplate(cacheTmpls[val])
+ })
+ } else {
+ var xhr = getXHR()
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ var s = xhr.status
+ if (s >= 200 && s < 300 || s === 304 || s === 1223) {
+ scanTemplate(cacheTmpls[val] = xhr.responseText)
+ }
+ }
+ }
+ xhr.open("GET", val, true)
+ if ("withCredentials" in xhr) {
+ xhr.withCredentials = true
+ }
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
+ xhr.send(null)
+ }
+ } else {
+ //IE系列与够新的标准浏览器支持通过ID取得元素(firefox14+)
+ //http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/
+ var el = val && val.nodeType === 1 ? val : DOC.getElementById(val)
+ if (el) {
+ if (el.tagName === "NOSCRIPT" && !(el.innerHTML || el.fixIE78)) { //IE7-8 innerText,innerHTML都无法取得其内容,IE6能取得其innerHTML
+ var xhr = getXHR() //IE9-11与chrome的innerHTML会得到转义的内容,它们的innerText可以
+ xhr.open("GET", location, false) //谢谢Nodejs 乱炖群 深圳-纯属虚构
+ xhr.send(null)
+ //http://bbs.csdn.net/topics/390349046?page=1#post-393492653
+ var noscripts = DOC.getElementsByTagName("noscript")
+ var array = (xhr.responseText || "").match(rnoscripts) || []
+ var n = array.length
+ for (var i = 0; i < n; i++) {
+ var tag = noscripts[i]
+ if (tag) { //IE6-8中noscript标签的innerHTML,innerText是只读的
+ tag.style.display = "none" //http://haslayout.net/css/noscript-Ghost-Bug
+ tag.fixIE78 = (array[i].match(rnoscriptText) || ["", "&nbsp;"])[1]
+ }
+ }
+ }
+ avalon.nextTick(function () {
+ scanTemplate(el.fixIE78 || el.value || el.innerText || el.innerHTML)
+ })
+ }
+ }
+ } else {
+ if (!root.hasAttribute && typeof val === "string" && (method === "src" || method === "href")) {
+ val = val.replace(/&amp;/g, "&") //处理IE67自动转义的问题
+ }
+ elem[method] = val
+ if (window.chrome && elem.tagName === "EMBED") {
+ var parent = elem.parentNode //#525 chrome1-37下embed标签动态设置src不能发生请求
+ var comment = document.createComment("ms-src")
+ parent.replaceChild(comment, elem)
+ parent.replaceChild(elem, comment)
+ }
+ }
+ }
+
+//这几个指令都可以使用插值表达式,如ms-src="aaa/{{b}}/{{c}}.html"
+ "title,alt,src,value,css,include,href".replace(rword, function (name) {
+ bindingHandlers[name] = bindingHandlers.attr
+ })
+//ms-include绑定已由ms-attr绑定实现
+
+//根据VM的属性值或表达式的值切换类名,ms-class="xxx yyy zzz:flag"
+//http://www.cnblogs.com/rubylouvre/archive/2012/12/17/2818540.html
+ bindingHandlers["class"] = function (data, vmodels) {
+ var oldStyle = data.param,
+ text = data.value,
+ rightExpr
+ data.handlerName = "class"
+ if (!oldStyle || isFinite(oldStyle)) {
+ data.param = "" //去掉数字
+ var noExpr = text.replace(rexprg, function (a) {
+ return a.replace(/./g, "0")
+ //return Math.pow(10, a.length - 1) //将插值表达式插入10的N-1次方来占位
+ })
+ var colonIndex = noExpr.indexOf(":") //取得第一个冒号的位置
+ if (colonIndex === -1) { // 比如 ms-class="aaa bbb ccc" 的情况
+ var className = text
+ } else { // 比如 ms-class-1="ui-state-active:checked" 的情况
+ className = text.slice(0, colonIndex)
+ rightExpr = text.slice(colonIndex + 1)
+ parseExpr(rightExpr, vmodels, data) //决定是添加还是删除
+ if (!data.evaluator) {
+ log("debug: ms-class '" + (rightExpr || "").trim() + "' 不存在于VM中")
+ return false
+ } else {
+ data._evaluator = data.evaluator
+ data._args = data.args
+ }
+ }
+ var hasExpr = rexpr.test(className) //比如ms-class="width{{w}}"的情况
+ if (!hasExpr) {
+ data.immobileClass = className
+ }
+ parseExprProxy("", vmodels, data, (hasExpr ? scanExpr(className) : 0))
+ } else {
+ data.immobileClass = data.oldStyle = data.param
+ parseExprProxy(text, vmodels, data)
+ }
+ }
+
+ bindingExecutors ["class"] = function (val, elem, data) {
+ var $elem = avalon(elem),
+ method = data.type
+ if (method === "class" && data.oldStyle) { //如果是旧风格
+ $elem.toggleClass(data.oldStyle, !!val)
+ } else {
+ //如果存在冒号就有求值函数
+ data.toggleClass = data._evaluator ? !!data._evaluator.apply(elem, data._args) : true
+ data.newClass = data.immobileClass || val
+ if (data.oldClass && data.newClass !== data.oldClass) {
+ $elem.removeClass(data.oldClass)
+ }
+ data.oldClass = data.newClass
+ switch (method) {
+ case "class":
+ $elem.toggleClass(data.newClass, data.toggleClass)
+ break
+ case "hover":
+ case "active":
+ if (!data.hasBindEvent) { //确保只绑定一次
+ var activate = "mouseenter" //在移出移入时切换类名
+ var abandon = "mouseleave"
+ if (method === "active") { //在聚焦失焦中切换类名
+ elem.tabIndex = elem.tabIndex || -1
+ activate = "mousedown"
+ abandon = "mouseup"
+ var fn0 = $elem.bind("mouseleave", function () {
+ data.toggleClass && $elem.removeClass(data.newClass)
+ })
+ }
+ var fn1 = $elem.bind(activate, function () {
+ data.toggleClass && $elem.addClass(data.newClass)
+ })
+ var fn2 = $elem.bind(abandon, function () {
+ data.toggleClass && $elem.removeClass(data.newClass)
+ })
+ data.rollback = function () {
+ $elem.unbind("mouseleave", fn0)
+ $elem.unbind(activate, fn1)
+ $elem.unbind(abandon, fn2)
+ }
+ data.hasBindEvent = true
+ }
+ break;
+ }
+ }
+ }
+
+ "hover,active".replace(rword, function (method) {
+ bindingHandlers[method] = bindingHandlers["class"]
+ })
+// bindingHandlers.data 定义在if.js
+ bindingExecutors.data = function (val, elem, data) {
+ var key = "data-" + data.param
+ if (val && typeof val === "object") {
+ elem[key] = val
+ } else {
+ elem.setAttribute(key, String(val))
+ }
+ }
+
+// bindingHandlers.text 定义在if.js
+ bindingExecutors.text = function (val, elem) {
+ val = val == null ? "" : val //不在页面上显示undefined null
+ if (elem.nodeType === 3) { //绑定在文本节点上
+ try { //IE对游离于DOM树外的节点赋值会报错
+ elem.data = val
+ } catch (e) {
+ }
+ } else { //绑定在特性节点上
+ if ("textContent" in elem) {
+ elem.textContent = val
+ } else {
+ elem.innerText = val
+ }
+ }
+ }
+
+
+// bindingHandlers.html 定义在if.js
+ bindingExecutors.html = function (val, elem, data) {
+ val = val == null ? "" : val
+ var isHtmlFilter = "group" in data
+ var parent = isHtmlFilter ? elem.parentNode : elem
+ if (!parent)
+ return
+ if (val.nodeType === 11) { //将val转换为文档碎片
+ var fragment = val
+ } else if (val.nodeType === 1 || val.item) {
+ var nodes = val.nodeType === 1 ? val.childNodes : val.item ? val : []
+ fragment = hyperspace.cloneNode(true)
+ while (nodes[0]) {
+ fragment.appendChild(nodes[0])
+ }
+ } else {
+ fragment = avalon.parseHTML(val)
+ }
+ //插入占位符, 如果是过滤器,需要有节制地移除指定的数量,如果是html指令,直接清空
+ var comment = DOC.createComment("ms-html")
+ if (isHtmlFilter) {
+ parent.insertBefore(comment, elem)
+ var n = data.group, i = 1
+ while (i < n) {
+ var node = elem.nextSibling
+ if (node) {
+ parent.removeChild(node)
+ i++
+ }
+ }
+ parent.removeChild(elem)
+ data.element = comment //防止被CG
+ } else {
+ avalon.clearHTML(parent).appendChild(comment)
+ }
+ if (isHtmlFilter) {
+ data.group = fragment.childNodes.length || 1
+ }
+ var nodes = avalon.slice(fragment.childNodes)
+ if (nodes[0]) {
+ if (comment.parentNode)
+ comment.parentNode.replaceChild(fragment, comment)
+ if (isHtmlFilter) {
+ data.element = nodes[0]
+ }
+ }
+ scanNodeArray(nodes, data.vmodels)
+ }
+
+ bindingHandlers["if"] =
+ bindingHandlers.data =
+ bindingHandlers.text =
+ bindingHandlers.html =
+ function (data, vmodels) {
+ parseExprProxy(data.value, vmodels, data)
+ }
+
+ bindingExecutors["if"] = function (val, elem, data) {
+ if (val) { //插回DOM树
+ if (elem.nodeType === 8) {
+ elem.parentNode.replaceChild(data.template, elem)
+ elem = data.element = data.template //这时可能为null
+ }
+ if (elem.getAttribute(data.name)) {
+ elem.removeAttribute(data.name)
+ scanAttr(elem, data.vmodels)
+ }
+ data.rollback = null
+ } else { //移出DOM树,并用注释节点占据原位置
+ if (elem.nodeType === 1) {
+ var node = data.element = DOC.createComment("ms-if")
+ elem.parentNode.replaceChild(node, elem)
+ data.template = elem //元素节点
+ ifGroup.appendChild(elem)
+ data.rollback = function () {
+ if (elem.parentNode === ifGroup) {
+ ifGroup.removeChild(elem)
+ }
+ }
+ }
+ }
+ }
+
+
+ function parseDisplay(nodeName, val) {
+ //用于取得此类标签的默认display值
+ var key = "_" + nodeName
+ if (!parseDisplay[key]) {
+ var node = DOC.createElement(nodeName)
+ root.appendChild(node)
+ if (W3C) {
+ val = getComputedStyle(node, null).display
+ } else {
+ val = node.currentStyle.display
+ }
+ root.removeChild(node)
+ parseDisplay[key] = val
+ }
+ return parseDisplay[key]
+ }
+
+ avalon.parseDisplay = parseDisplay
+
+ bindingHandlers.visible = function (data, vmodels) {
+ var elem = avalon(data.element)
+ var display = elem.css("display")
+ if (display === "none") {
+ var style = elem[0].style
+ var has = /visibility/i.test(style.cssText)
+ var visible = elem.css("visibility")
+ style.display = ""
+ style.visibility = "hidden"
+ display = elem.css("display")
+ if (display === "none") {
+ display = parseDisplay(elem[0].nodeName)
+ }
+ style.visibility = has ? visible : ""
+ }
+ data.display = display
+ parseExprProxy(data.value, vmodels, data)
+ }
+
+ bindingExecutors.visible = function (val, elem, data) {
+ elem.style.display = val ? data.display : "none"
+ }
+
+ var rdash = /\(([^)]*)\)/
+ bindingHandlers.on = function (data, vmodels) {
+ var value = data.value
+ data.type = "on"
+ var eventType = data.param.replace(/-\d+$/, "") // ms-on-mousemove-10
+ if (typeof bindingHandlers.on[eventType + "Hook"] === "function") {
+ bindingHandlers.on[eventType + "Hook"](data)
+ }
+ if (value.indexOf("(") > 0 && value.indexOf(")") > -1) {
+ var matched = (value.match(rdash) || ["", ""])[1].trim()
+ if (matched === "" || matched === "$event") { // aaa() aaa($event)当成aaa处理
+ value = value.replace(rdash, "")
+ }
+ }
+ parseExprProxy(value, vmodels, data)
+ }
+
+ bindingExecutors.on = function (callback, elem, data) {
+ callback = function (e) {
+ var fn = data.evaluator || noop
+ return fn.apply(this, data.args.concat(e))
+ }
+ var eventType = data.param.replace(/-\d+$/, "") // ms-on-mousemove-10
+ if (eventType === "scan") {
+ callback.call(elem, {
+ type: eventType
+ })
+ } else if (typeof data.specialBind === "function") {
+ data.specialBind(elem, callback)
+ } else {
+ var removeFn = avalon.bind(elem, eventType, callback)
+ }
+ data.rollback = function () {
+ if (typeof data.specialUnbind === "function") {
+ data.specialUnbind()
+ } else {
+ avalon.unbind(elem, eventType, removeFn)
+ }
+ }
+ }
+
+
+ bindingHandlers.widget = function (data, vmodels) {
+ var args = data.value.match(rword)
+ var elem = data.element
+ var widget = args[0]
+ var id = args[1]
+ if (!id || id === "$") {//没有定义或为$时,取组件名+随机数
+ id = generateID(widget)
+ }
+ var optName = args[2] || widget//没有定义,取组件名
+ var constructor = avalon.ui[widget]
+ if (typeof constructor === "function") { //ms-widget="tabs,tabsAAA,optname"
+ vmodels = elem.vmodels || vmodels
+ for (var i = 0, v; v = vmodels[i++];) {
+ if (v.hasOwnProperty(optName) && typeof v[optName] === "object") {
+ var vmOptions = v[optName]
+ vmOptions = vmOptions.$model || vmOptions
+ break
+ }
+ }
+ if (vmOptions) {
+ var wid = vmOptions[widget + "Id"]
+ if (typeof wid === "string") {
+ id = wid
+ }
+ }
+ //抽取data-tooltip-text、data-tooltip-attr属性,组成一个配置对象
+ var widgetData = avalon.getWidgetData(elem, widget)
+ data.value = [widget, id, optName].join(",")
+ data[widget + "Id"] = id
+ data.evaluator = noop
+ elem.msData["ms-widget-id"] = id
+ var options = data[widget + "Options"] = avalon.mix({}, constructor.defaults, vmOptions || {}, widgetData)
+ elem.removeAttribute("ms-widget")
+ var vmodel = constructor(elem, data, vmodels) || {} //防止组件不返回VM
+ if (vmodel.$id) {
+ avalon.vmodels[id] = vmodel
+ createSignalTower(elem, vmodel)
+ if (vmodel.hasOwnProperty("$init")) {
+ vmodel.$init(function () {
+ avalon.scan(elem, [vmodel].concat(vmodels))
+ if (typeof options.onInit === "function") {
+ options.onInit.call(elem, vmodel, options, vmodels)
+ }
+ })
+ }
+ data.rollback = function () {
+ try {
+ vmodel.widgetElement = null
+ vmodel.$remove()
+ } catch (e) {
+ }
+ elem.msData = {}
+ delete avalon.vmodels[vmodel.$id]
+ }
+ addSubscribers(data, widgetList)
+ if (window.chrome) {
+ elem.addEventListener("DOMNodeRemovedFromDocument", function () {
+ setTimeout(removeSubscribers)
+ })
+ }
+ } else {
+ avalon.scan(elem, vmodels)
+ }
+ } else if (vmodels.length) { //如果该组件还没有加载,那么保存当前的vmodels
+ elem.vmodels = vmodels
+ }
+ }
+ var widgetList = []
+//不存在 bindingExecutors.widget
+//双工绑定
+ var duplexBinding = bindingHandlers.duplex = function (data, vmodels) {
+ var elem = data.element,
+ hasCast
+ parseExprProxy(data.value, vmodels, data, 0, 1)
+
+ data.changed = getBindingCallback(elem, "data-duplex-changed", vmodels) || noop
+ if (data.evaluator && data.args) {
+ var params = []
+ var casting = oneObject("string,number,boolean,checked")
+ if (elem.type === "radio" && data.param === "") {
+ data.param = "checked"
+ }
+ if (elem.msData) {
+ elem.msData["ms-duplex"] = data.value
+ }
+ data.param.replace(/\w+/g, function (name) {
+ if (/^(checkbox|radio)$/.test(elem.type) && /^(radio|checked)$/.test(name)) {
+ if (name === "radio")
+ log("ms-duplex-radio已经更名为ms-duplex-checked")
+ name = "checked"
+ data.isChecked = true
+ }
+ if (name === "bool") {
+ name = "boolean"
+ log("ms-duplex-bool已经更名为ms-duplex-boolean")
+ } else if (name === "text") {
+ name = "string"
+ log("ms-duplex-text已经更名为ms-duplex-string")
+ }
+ if (casting[name]) {
+ hasCast = true
+ }
+ avalon.Array.ensure(params, name)
+ })
+ if (!hasCast) {
+ params.push("string")
+ }
+ data.param = params.join("-")
+ data.bound = function (type, callback) {
+ if (elem.addEventListener) {
+ elem.addEventListener(type, callback, false)
+ } else {
+ elem.attachEvent("on" + type, callback)
+ }
+ var old = data.rollback
+ data.rollback = function () {
+ elem.avalonSetter = null
+ avalon.unbind(elem, type, callback)
+ old && old()
+ }
+ }
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ v.$fire("avalon-ms-duplex-init", data)
+ }
+ var cpipe = data.pipe || (data.pipe = pipe)
+ cpipe(null, data, "init")
+ var tagName = elem.tagName
+ duplexBinding[tagName] && duplexBinding[tagName](elem, data.evaluator.apply(null, data.args), data)
+ }
+ }
+//不存在 bindingExecutors.duplex
+ function fixNull(val) {
+ return val == null ? "" : val
+ }
+
+ avalon.duplexHooks = {
+ checked: {
+ get: function (val, data) {
+ return !data.element.oldValue
+ }
+ },
+ string: {
+ get: function (val) { //同步到VM
+ return val
+ },
+ set: fixNull
+ },
+ "boolean": {
+ get: function (val) {
+ return val === "true"
+ },
+ set: fixNull
+ },
+ number: {
+ get: function (val) {
+ return isFinite(val) ? parseFloat(val) || 0 : val
+ },
+ set: fixNull
+ }
+ }
+
+ function pipe(val, data, action, e) {
+ data.param.replace(/\w+/g, function (name) {
+ var hook = avalon.duplexHooks[name]
+ if (hook && typeof hook[action] === "function") {
+ val = hook[action](val, data)
+ }
+ })
+ return val
+ }
+
+ var TimerID, ribbon = []
+
+ function W3CFire(el, name, detail) {
+ var event = DOC.createEvent("Events")
+ event.initEvent(name, true, true)
+ event.fireByAvalon = true//签名,标记事件是由avalon触发
+ //event.isTrusted = false 设置这个opera会报错
+ if (detail)
+ event.detail = detail
+ el.dispatchEvent(event)
+ }
+
+
+ avalon.tick = function (fn) {
+ if (ribbon.push(fn) === 1) {
+ TimerID = setInterval(ticker, 60)
+ }
+ }
+
+ function ticker() {
+ for (var n = ribbon.length - 1; n >= 0; n--) {
+ var el = ribbon[n]
+ if (el() === false) {
+ ribbon.splice(n, 1)
+ }
+ }
+ if (!ribbon.length) {
+ clearInterval(TimerID)
+ }
+ }
+
+ var watchValueInTimer = noop
+ new function () {
+ try {//#272 IE9-IE11, firefox
+ var setters = {}
+ var aproto = HTMLInputElement.prototype
+ var bproto = HTMLTextAreaElement.prototype
+
+ function newSetter(value) {
+ if (avalon.contains(root, this)) {
+ setters[this.tagName].call(this, value)
+ if (this.avalonSetter) {
+ this.avalonSetter()
+ }
+ }
+ }
+
+ var inputProto = HTMLInputElement.prototype
+ Object.getOwnPropertyNames(inputProto) //故意引发IE6-8等浏览器报错
+ setters["INPUT"] = Object.getOwnPropertyDescriptor(aproto, "value").set
+ Object.defineProperty(aproto, "value", {
+ set: newSetter
+ })
+ setters["TEXTAREA"] = Object.getOwnPropertyDescriptor(bproto, "value").set
+ Object.defineProperty(bproto, "value", {
+ set: newSetter
+ })
+ } catch (e) {
+ watchValueInTimer = avalon.tick
+ }
+ }
+
+ if (IEVersion) {
+ avalon.bind(DOC, "selectionchange", function (e) {
+ var el = DOC.activeElement
+ if (el && typeof el.avalonSetter === "function") {
+ el.avalonSetter()
+ }
+ })
+ }
+
+//处理radio, checkbox, text, textarea, password
+ duplexBinding.INPUT = function (element, evaluator, data) {
+ var type = element.type,
+ bound = data.bound,
+ $elem = avalon(element),
+ composing = false
+
+ function callback(value) {
+ data.changed.call(this, value, data)
+ }
+
+ function compositionStart() {
+ composing = true
+ }
+
+ function compositionEnd() {
+ composing = false
+ }
+
+ //当value变化时改变model的值
+
+ function updateVModel() {
+ if (composing) //处理中文输入法在minlengh下引发的BUG
+ return
+ var val = element.oldValue = element.value //防止递归调用形成死循环
+ var lastValue = data.pipe(val, data, "get")
+ if ($elem.data("duplex-observe") !== false) {
+ evaluator(lastValue)
+ callback.call(element, lastValue)
+ if ($elem.data("duplex-focus")) {
+ avalon.nextTick(function () {
+ element.focus()
+ })
+ }
+ }
+ }
+
+ //当model变化时,它就会改变value的值
+ data.handler = function () {
+ var val = data.pipe(evaluator(), data, "set")
+ if (val !== element.oldValue) {
+ element.value = val
+ }
+ }
+ if (data.isChecked || element.type === "radio") {
+ var IE6 = IEVersion === 6
+ updateVModel = function () {
+ if ($elem.data("duplex-observe") !== false) {
+ var lastValue = data.pipe(element.value, data, "get")
+ evaluator(lastValue)
+ callback.call(element, lastValue)
+ }
+ }
+ data.handler = function () {
+ var val = evaluator()
+ var checked = data.isChecked ? !!val : val + "" === element.value
+ element.oldValue = checked
+ if (IE6) {
+ setTimeout(function () {
+ //IE8 checkbox, radio是使用defaultChecked控制选中状态,
+ //并且要先设置defaultChecked后设置checked
+ //并且必须设置延迟
+ element.defaultChecked = checked
+ element.checked = checked
+ }, 100)
+ } else {
+ element.checked = checked
+ }
+ }
+ bound(IE6 ? "mouseup" : "click", updateVModel)
+ } else if (type === "checkbox") {
+ updateVModel = function () {
+ if ($elem.data("duplex-observe") !== false) {
+ var method = element.checked ? "ensure" : "remove"
+ var array = evaluator()
+ if (!Array.isArray(array)) {
+ log("ms-duplex应用于checkbox上要对应一个数组")
+ array = [array]
+ }
+ avalon.Array[method](array, data.pipe(element.value, data, "get"))
+ callback.call(element, array)
+ }
+ }
+
+ data.handler = function () {
+ var array = [].concat(evaluator()) //强制转换为数组
+ element.checked = array.indexOf(data.pipe(element.value, data, "get")) > -1
+ }
+ bound(W3C ? "change" : "click", updateVModel)
+ } else {
+ var events = element.getAttribute("data-duplex-event") || element.getAttribute("data-event") || "input"
+ if (element.attributes["data-event"]) {
+ log("data-event指令已经废弃,请改用data-duplex-event")
+ }
+ function delay(e) {
+ setTimeout(function () {
+ updateVModel(e)
+ })
+ }
+
+ events.replace(rword, function (name) {
+ switch (name) {
+ case "input":
+ if (!IEVersion) { // W3C
+ bound("input", updateVModel)
+ //非IE浏览器才用这个
+ bound("compositionstart", compositionStart)
+ bound("compositionend", compositionEnd)
+ bound("DOMAutoComplete", updateVModel)
+ } else { //onpropertychange事件无法区分是程序触发还是用户触发
+ // IE下通过selectionchange事件监听IE9+点击input右边的X的清空行为,及粘贴,剪切,删除行为
+ if (IEVersion > 8) {
+ bound("input", updateVModel)//IE9使用propertychange无法监听中文输入改动
+ } else {
+ bound("propertychange", function (e) {//IE6-8下第一次修改时不会触发,需要使用keydown或selectionchange修正
+ if (e.propertyName === "value") {
+ updateVModel()
+ }
+ })
+ }
+ bound("dragend", delay)
+ //http://www.cnblogs.com/rubylouvre/archive/2013/02/17/2914604.html
+ //http://www.matts411.com/post/internet-explorer-9-oninput/
+ }
+ break
+ default:
+ bound(name, updateVModel)
+ break
+ }
+ })
+ }
+ if (/text|password/.test(element.type)) {
+ watchValueInTimer(function () {
+ if (root.contains(element)) {
+ if (element.value !== element.oldValue) {
+ updateVModel()
+ }
+ } else if (!element.msRetain) {
+ return false
+ }
+ })
+ }
+ element.avalonSetter = updateVModel
+ element.oldValue = element.value
+ registerSubscriber(data)
+ callback.call(element, element.value)
+ }
+ duplexBinding.TEXTAREA = duplexBinding.INPUT
+
+
+ duplexBinding.SELECT = function (element, evaluator, data) {
+ var $elem = avalon(element)
+
+ function updateVModel() {
+ if ($elem.data("duplex-observe") !== false) {
+ var val = $elem.val() //字符串或字符串数组
+ if (Array.isArray(val)) {
+ val = val.map(function (v) {
+ return data.pipe(v, data, "get")
+ })
+ } else {
+ val = data.pipe(val, data, "get")
+ }
+ if (val + "" !== element.oldValue) {
+ evaluator(val)
+ }
+ data.changed.call(element, val, data)
+ }
+ }
+
+ data.handler = function () {
+ var val = evaluator()
+ val = val && val.$model || val
+ if (Array.isArray(val)) {
+ if (!element.multiple) {
+ log("ms-duplex在<select multiple=true>上要求对应一个数组")
+ }
+ } else {
+ if (element.multiple) {
+ log("ms-duplex在<select multiple=false>不能对应一个数组")
+ }
+ }
+ //必须变成字符串后才能比较
+ val = Array.isArray(val) ? val.map(String) : val + ""
+ if (val + "" !== element.oldValue) {
+ $elem.val(val)
+ element.oldValue = val + ""
+ }
+ }
+ data.bound("change", updateVModel)
+ checkScan(element, function () {
+ registerSubscriber(data)
+ data.changed.call(element, evaluator(), data)
+ }, NaN)
+ }
+
+
+ bindingHandlers.repeat = function (data, vmodels) {
+ var type = data.type
+ parseExprProxy(data.value, vmodels, data, 0, 1)
+ data.proxies = []
+ var freturn = false
+ try {
+ var $repeat = data.$repeat = data.evaluator.apply(0, data.args || [])
+ var xtype = avalon.type($repeat)
+ if (xtype !== "object" && xtype !== "array") {
+ freturn = true
+ avalon.log("warning:" + data.value + "对应类型不正确")
+ }
+ } catch (e) {
+ freturn = true
+ avalon.log("warning:" + data.value + "编译出错")
+ }
+
+ var arr = data.value.split(".") || []
+ if (arr.length > 1) {
+ arr.pop()
+ var n = arr[0]
+ for (var i = 0, v; v = vmodels[i++];) {
+ if (v && v.hasOwnProperty(n)) {
+ var events = v[n].$events || {}
+ events[subscribers] = events[subscribers] || []
+ events[subscribers].push(data)
+ break
+ }
+ }
+ }
+ var elem = data.element
+ elem.removeAttribute(data.name)
+
+ data.sortedCallback = getBindingCallback(elem, "data-with-sorted", vmodels)
+ data.renderedCallback = getBindingCallback(elem, "data-" + type + "-rendered", vmodels)
+ var signature = generateID(type)
+ var comment = data.element = DOC.createComment(signature + ":end")
+ data.clone = DOC.createComment(signature)
+ hyperspace.appendChild(comment)
+
+ if (type === "each" || type === "with") {
+ data.template = elem.innerHTML.trim()
+ avalon.clearHTML(elem).appendChild(comment)
+ } else {
+ data.template = elem.outerHTML.trim()
+ elem.parentNode.replaceChild(comment, elem)
+ }
+ data.template = avalon.parseHTML(data.template)
+ data.rollback = function () {
+ var elem = data.element
+ if (!elem)
+ return
+ bindingExecutors.repeat.call(data, "clear")
+ var parentNode = elem.parentNode
+ var content = data.template
+ var target = content.firstChild
+ parentNode.replaceChild(content, elem)
+ var start = data.$stamp
+ start && start.parentNode && start.parentNode.removeChild(start)
+ target = data.element = data.type === "repeat" ? target : parentNode
+ }
+ if (freturn) {
+ return
+ }
+ data.handler = bindingExecutors.repeat
+ data.$outer = {}
+ var check0 = "$key"
+ var check1 = "$val"
+ if (Array.isArray($repeat)) {
+ check0 = "$first"
+ check1 = "$last"
+ }
+ for (var i = 0, p; p = vmodels[i++];) {
+ if (p.hasOwnProperty(check0) && p.hasOwnProperty(check1)) {
+ data.$outer = p
+ break
+ }
+ }
+ var $events = $repeat.$events
+ var $list = ($events || {})[subscribers]
+ if ($list && avalon.Array.ensure($list, data)) {
+ addSubscribers(data, $list)
+ }
+ if (xtype === "object") {
+ data.$with = true
+ var pool = !$events ? {} : $events.$withProxyPool || ($events.$withProxyPool = {})
+ data.handler("append", $repeat, pool)
+ } else if ($repeat.length) {
+ data.handler("add", 0, $repeat.length)
+ }
+ }
+
+ bindingExecutors.repeat = function (method, pos, el) {
+ if (method) {
+ var data = this
+ var end = data.element
+ var parent = end.parentNode
+ var proxies = data.proxies
+ var transation = hyperspace.cloneNode(false)
+ switch (method) {
+ case "add": //在pos位置后添加el数组(pos为数字,el为数组)
+ var n = pos + el
+ var array = data.$repeat
+ var last = array.length - 1
+ var fragments = []
+ var start = locateNode(data, pos)
+ for (var i = pos; i < n; i++) {
+ var proxy = eachProxyAgent(i, data)
+ proxies.splice(i, 0, proxy)
+ shimController(data, transation, proxy, fragments)
+ }
+ parent.insertBefore(transation, start)
+ for (var i = 0, fragment; fragment = fragments[i++];) {
+ scanNodeArray(fragment.nodes, fragment.vmodels)
+ fragment.nodes = fragment.vmodels = null
+ }
+ break
+ case "del": //将pos后的el个元素删掉(pos, el都是数字)
+ start = proxies[pos].$stamp
+ end = locateNode(data, pos + el)
+ sweepNodes(start, end)
+ var removed = proxies.splice(pos, el)
+ recycleProxies(removed, "each")
+ break
+ case "clear":
+ var check = data.$stamp || proxies[0]
+ if (check) {
+ start = check.$stamp || check
+ sweepNodes(start, end)
+ }
+ recycleProxies(proxies, "each")
+ break
+ case "move":
+ start = proxies[0].$stamp
+ var signature = start.nodeValue
+ var rooms = []
+ var room = [], node
+ sweepNodes(start, end, function () {
+ room.unshift(this)
+ if (this.nodeValue === signature) {
+ rooms.unshift(room)
+ room = []
+ }
+ })
+ sortByIndex(proxies, pos)
+ sortByIndex(rooms, pos)
+ while (room = rooms.shift()) {
+ while (node = room.shift()) {
+ transation.appendChild(node)
+ }
+ }
+ parent.insertBefore(transation, end)
+ break
+ case "index": //将proxies中的第pos个起的所有元素重新索引
+ var last = proxies.length - 1
+ for (; el = proxies[pos]; pos++) {
+ el.$index = pos
+ el.$first = pos === 0
+ el.$last = pos === last
+ }
+ return
+ case "set": //将proxies中的第pos个元素的VM设置为el(pos为数字,el任意)
+ var proxy = proxies[pos]
+ if (proxy) {
+ notifySubscribers(proxy.$events.$index)
+ }
+ return
+ case "append": //将pos的键值对从el中取出(pos为一个普通对象,el为预先生成好的代理VM对象池)
+ var pool = el
+ var keys = []
+ var fragments = []
+ for (var key in pos) { //得到所有键名
+ if (pos.hasOwnProperty(key) && key !== "hasOwnProperty") {
+ keys.push(key)
+ }
+ }
+ if (data.sortedCallback) { //如果有回调,则让它们排序
+ var keys2 = data.sortedCallback.call(parent, keys)
+ if (keys2 && Array.isArray(keys2) && keys2.length) {
+ keys = keys2
+ }
+ }
+ for (var i = 0, key; key = keys[i++];) {
+ if (key !== "hasOwnProperty") {
+ if (!pool[key]) {
+ pool[key] = withProxyAgent(key, data)
+ }
+ shimController(data, transation, pool[key], fragments)
+ }
+ }
+ var comment = data.$stamp = data.clone
+ parent.insertBefore(comment, end)
+ parent.insertBefore(transation, end)
+ for (var i = 0, fragment; fragment = fragments[i++];) {
+ scanNodeArray(fragment.nodes, fragment.vmodels)
+ fragment.nodes = fragment.vmodels = null
+ }
+ break
+ }
+ if (method === "clear")
+ method = "del"
+ var callback = data.renderedCallback || noop,
+ args = arguments
+ checkScan(parent, function () {
+ callback.apply(parent, args)
+ if (parent.oldValue && parent.tagName === "SELECT") { //fix #503
+ avalon(parent).val(parent.oldValue.split(","))
+ }
+ }, NaN)
+ }
+ }
+
+ "with,each".replace(rword, function (name) {
+ bindingHandlers[name] = bindingHandlers.repeat
+ })
+
+ function shimController(data, transation, proxy, fragments) {
+ var content = data.template.cloneNode(true)
+ var nodes = avalon.slice(content.childNodes)
+ if (proxy.$stamp) {
+ content.insertBefore(proxy.$stamp, content.firstChild)
+ }
+ transation.appendChild(content)
+ var nv = [proxy].concat(data.vmodels)
+ var fragment = {
+ nodes: nodes,
+ vmodels: nv
+ }
+ fragments.push(fragment)
+ }
+
+ function locateNode(data, pos) {
+ var proxy = data.proxies[pos]
+ return proxy ? proxy.$stamp : data.element
+ }
+
+ function sweepNodes(start, end, callback) {
+ while (true) {
+ var node = end.previousSibling
+ if (!node)
+ break
+ node.parentNode.removeChild(node)
+ callback && callback.call(node)
+ if (node === start) {
+ break
+ }
+ }
+ }
+
+// 为ms-each,ms-with, ms-repeat会创建一个代理VM,
+// 通过它们保持一个下上文,让用户能调用$index,$first,$last,$remove,$key,$val,$outer等属性与方法
+// 所有代理VM的产生,消费,收集,存放通过xxxProxyFactory,xxxProxyAgent, recycleProxies,xxxProxyPool实现
+ var eachProxyPool = []
+ var withProxyPool = []
+
+ function eachProxyFactory(name) {
+ var source = {
+ $host: [],
+ $outer: {},
+ $stamp: 1,
+ $index: 0,
+ $first: false,
+ $last: false,
+ $remove: avalon.noop
+ }
+ source[name] = {
+ get: function () {
+ return this.$host[this.$index]
+ },
+ set: function (val) {
+ this.$host.set(this.$index, val)
+ }
+ }
+ var second = {
+ $last: 1,
+ $first: 1,
+ $index: 1
+ }
+ var proxy = modelFactory(source, second)
+ var e = proxy.$events
+ e[name] = e.$first = e.$last = e.$index
+ proxy.$id = generateID("$proxy$each")
+ return proxy
+ }
+
+ function eachProxyAgent(index, data) {
+ var param = data.param || "el", proxy
+ for (var i = 0, n = eachProxyPool.length; i < n; i++) {
+ var candidate = eachProxyPool[i]
+ if (candidate && candidate.hasOwnProperty(param)) {
+ proxy = candidate
+ eachProxyPool.splice(i, 1)
+ }
+ }
+ if (!proxy) {
+ proxy = eachProxyFactory(param)
+ }
+ var host = data.$repeat
+ var last = host.length - 1
+ proxy.$index = index
+ proxy.$first = index === 0
+ proxy.$last = index === last
+ proxy.$host = host
+ proxy.$outer = data.$outer
+ proxy.$stamp = data.clone.cloneNode(false)
+ proxy.$remove = function () {
+ return host.removeAt(proxy.$index)
+ }
+ return proxy
+ }
+
+ function withProxyFactory() {
+ var proxy = modelFactory({
+ $key: "",
+ $outer: {},
+ $host: {},
+ $val: {
+ get: function () {
+ return this.$host[this.$key]
+ },
+ set: function (val) {
+ this.$host[this.$key] = val
+ }
+ }
+ }, {
+ $val: 1
+ })
+ proxy.$id = generateID("$proxy$with")
+ return proxy
+ }
+
+ function withProxyAgent(key, data) {
+ var proxy = withProxyPool.pop()
+ if (!proxy) {
+ proxy = withProxyFactory()
+ }
+ var host = data.$repeat
+ proxy.$key = key
+ proxy.$host = host
+ proxy.$outer = data.$outer
+ if (host.$events) {
+ proxy.$events.$val = host.$events[key]
+ } else {
+ proxy.$events = {}
+ }
+ return proxy
+ }
+
+ function recycleProxies(proxies, type) {
+ var proxyPool = type === "each" ? eachProxyPool : withProxyPool
+ avalon.each(proxies, function (key, proxy) {
+ if (proxy.$events) {
+ for (var i in proxy.$events) {
+ if (Array.isArray(proxy.$events[i])) {
+ proxy.$events[i].forEach(function (data) {
+ if (typeof data === "object")
+ disposeData(data)
+ })
+ proxy.$events[i].length = 0
+ }
+ }
+ proxy.$host = proxy.$outer = {}
+ if (proxyPool.unshift(proxy) > kernel.maxRepeatSize) {
+ proxyPool.pop()
+ }
+ }
+ })
+ if (type === "each")
+ proxies.length = 0
+ }
+
+
+ /*********************************************************************
+ * 自带过滤器 *
+ **********************************************************************/
+ var rscripts = /<script[^>]*>([\S\s]*?)<\/script\s*>/gim
+ var ron = /\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g
+ var ropen = /<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig
+ var rsanitize = {
+ a: /\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,
+ img: /\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig,
+ form: /\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig
+ }
+ var rsurrogate = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
+ var rnoalphanumeric = /([^\#-~| |!])/g;
+
+ function numberFormat(number, decimals, dec_point, thousands_sep) {
+ //form http://phpjs.org/functions/number_format/
+ //number 必需,要格式化的数字
+ //decimals 可选,规定多少个小数位。
+ //dec_point 可选,规定用作小数点的字符串(默认为 . )。
+ //thousands_sep 可选,规定用作千位分隔符的字符串(默认为 , ),如果设置了该参数,那么所有其他参数都是必需的。
+ number = (number + '')
+ .replace(/[^0-9+\-Ee.]/g, '')
+ var n = !isFinite(+number) ? 0 : +number,
+ prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
+ sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
+ dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
+ s = '',
+ toFixedFix = function (n, prec) {
+ var k = Math.pow(10, prec)
+ return '' + (Math.round(n * k) / k)
+ .toFixed(prec)
+ }
+ // Fix for IE parseFloat(0.55).toFixed(0) = 0;
+ s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
+ .split('.')
+ if (s[0].length > 3) {
+ s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep)
+ }
+ if ((s[1] || '')
+ .length < prec) {
+ s[1] = s[1] || ''
+ s[1] += new Array(prec - s[1].length + 1)
+ .join('0')
+ }
+ return s.join(dec)
+ }
+
+
+ var filters = avalon.filters = {
+ uppercase: function (str) {
+ return str.toUpperCase()
+ },
+ lowercase: function (str) {
+ return str.toLowerCase()
+ },
+ truncate: function (str, length, truncation) {
+ //length,新字符串长度,truncation,新字符串的结尾的字段,返回新字符串
+ length = length || 30
+ truncation = truncation === void(0) ? "..." : truncation
+ return str.length > length ? str.slice(0, length - truncation.length) + truncation : String(str)
+ },
+ $filter: function (val) {
+ for (var i = 1, n = arguments.length; i < n; i++) {
+ var array = arguments[i]
+ var fn = avalon.filters[array.shift()]
+ if (typeof fn === "function") {
+ var arr = [val].concat(array)
+ val = fn.apply(null, arr)
+ }
+ }
+ return val
+ },
+ camelize: camelize,
+ //https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
+ // <a href="javasc&NewLine;ript&colon;alert('XSS')">chrome</a>
+ // <a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">chrome</a>
+ // <a href="jav ascript:alert('XSS');">IE67chrome</a>
+ // <a href="jav&#x09;ascript:alert('XSS');">IE67chrome</a>
+ // <a href="jav&#x0A;ascript:alert('XSS');">IE67chrome</a>
+ sanitize: function (str) {
+ return str.replace(rscripts, "").replace(ropen, function (a, b) {
+ var match = a.toLowerCase().match(/<(\w+)\s/)
+ if (match) { //处理a标签的href属性,img标签的src属性,form标签的action属性
+ var reg = rsanitize[match[1]]
+ if (reg) {
+ a = a.replace(reg, function (s, name, value) {
+ var quote = value.charAt(0)
+ return name + "=" + quote + "javascript:void(0)" + quote
+ })
+ }
+ }
+ return a.replace(ron, " ").replace(/\s+/g, " ") //移除onXXX事件
+ })
+ },
+ escape: function (str) {
+ //将字符串经过 str 转义得到适合在页面中显示的内容, 例如替换 < 为 &lt
+ return String(str).
+ replace(/&/g, '&amp;').
+ replace(rsurrogate, function (value) {
+ var hi = value.charCodeAt(0)
+ var low = value.charCodeAt(1)
+ return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';'
+ }).
+ replace(rnoalphanumeric, function (value) {
+ return '&#' + value.charCodeAt(0) + ';'
+ }).
+ replace(/</g, '&lt;').
+ replace(/>/g, '&gt;')
+ },
+ currency: function (amount, symbol, fractionSize) {
+ return (symbol || "\uFFE5") + numberFormat(amount, isFinite(fractionSize) ? fractionSize : 2)
+ },
+ number: function (number, fractionSize) {
+ return numberFormat(number, isFinite(fractionSize) ? fractionSize : 3)
+ }
+ }
+ /*
+ 'yyyy': 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
+ 'yy': 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
+ 'y': 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
+ 'MMMM': Month in year (January-December)
+ 'MMM': Month in year (Jan-Dec)
+ 'MM': Month in year, padded (01-12)
+ 'M': Month in year (1-12)
+ 'dd': Day in month, padded (01-31)
+ 'd': Day in month (1-31)
+ 'EEEE': Day in Week,(Sunday-Saturday)
+ 'EEE': Day in Week, (Sun-Sat)
+ 'HH': Hour in day, padded (00-23)
+ 'H': Hour in day (0-23)
+ 'hh': Hour in am/pm, padded (01-12)
+ 'h': Hour in am/pm, (1-12)
+ 'mm': Minute in hour, padded (00-59)
+ 'm': Minute in hour (0-59)
+ 'ss': Second in minute, padded (00-59)
+ 's': Second in minute (0-59)
+ 'a': am/pm marker
+ 'Z': 4 digit (+sign) representation of the timezone offset (-1200-+1200)
+ format string can also be one of the following predefined localizable formats:
+
+ 'medium': equivalent to 'MMM d, y h:mm:ss a' for en_US locale (e.g. Sep 3, 2010 12:05:08 pm)
+ 'short': equivalent to 'M/d/yy h:mm a' for en_US locale (e.g. 9/3/10 12:05 pm)
+ 'fullDate': equivalent to 'EEEE, MMMM d,y' for en_US locale (e.g. Friday, September 3, 2010)
+ 'longDate': equivalent to 'MMMM d, y' for en_US locale (e.g. September 3, 2010
+ 'mediumDate': equivalent to 'MMM d, y' for en_US locale (e.g. Sep 3, 2010)
+ 'shortDate': equivalent to 'M/d/yy' for en_US locale (e.g. 9/3/10)
+ 'mediumTime': equivalent to 'h:mm:ss a' for en_US locale (e.g. 12:05:08 pm)
+ 'shortTime': equivalent to 'h:mm a' for en_US locale (e.g. 12:05 pm)
+ */
+ new function () {
+ function toInt(str) {
+ return parseInt(str, 10)
+ }
+
+ function padNumber(num, digits, trim) {
+ var neg = ""
+ if (num < 0) {
+ neg = '-'
+ num = -num
+ }
+ num = "" + num
+ while (num.length < digits)
+ num = "0" + num
+ if (trim)
+ num = num.substr(num.length - digits)
+ return neg + num
+ }
+
+ function dateGetter(name, size, offset, trim) {
+ return function (date) {
+ var value = date["get" + name]()
+ if (offset > 0 || value > -offset)
+ value += offset
+ if (value === 0 && offset === -12) {
+ value = 12
+ }
+ return padNumber(value, size, trim)
+ }
+ }
+
+ function dateStrGetter(name, shortForm) {
+ return function (date, formats) {
+ var value = date["get" + name]()
+ var get = (shortForm ? ("SHORT" + name) : name).toUpperCase()
+ return formats[get][value]
+ }
+ }
+
+ function timeZoneGetter(date) {
+ var zone = -1 * date.getTimezoneOffset()
+ var paddedZone = (zone >= 0) ? "+" : ""
+ paddedZone += padNumber(Math[zone > 0 ? "floor" : "ceil"](zone / 60), 2) + padNumber(Math.abs(zone % 60), 2)
+ return paddedZone
+ }
+
+ //取得上午下午
+
+ function ampmGetter(date, formats) {
+ return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]
+ }
+
+ var DATE_FORMATS = {
+ yyyy: dateGetter("FullYear", 4),
+ yy: dateGetter("FullYear", 2, 0, true),
+ y: dateGetter("FullYear", 1),
+ MMMM: dateStrGetter("Month"),
+ MMM: dateStrGetter("Month", true),
+ MM: dateGetter("Month", 2, 1),
+ M: dateGetter("Month", 1, 1),
+ dd: dateGetter("Date", 2),
+ d: dateGetter("Date", 1),
+ HH: dateGetter("Hours", 2),
+ H: dateGetter("Hours", 1),
+ hh: dateGetter("Hours", 2, -12),
+ h: dateGetter("Hours", 1, -12),
+ mm: dateGetter("Minutes", 2),
+ m: dateGetter("Minutes", 1),
+ ss: dateGetter("Seconds", 2),
+ s: dateGetter("Seconds", 1),
+ sss: dateGetter("Milliseconds", 3),
+ EEEE: dateStrGetter("Day"),
+ EEE: dateStrGetter("Day", true),
+ a: ampmGetter,
+ Z: timeZoneGetter
+ }
+ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
+ NUMBER_STRING = /^\d+$/
+ var riso8601 = /^(\d{4})-?(\d+)-?(\d+)(?:T(\d+)(?::?(\d+)(?::?(\d+)(?:\.(\d+))?)?)?(Z|([+-])(\d+):?(\d+))?)?$/
+ // 1 2 3 4 5 6 7 8 9 10 11
+
+ function jsonStringToDate(string) {
+ var match
+ if (match = string.match(riso8601)) {
+ var date = new Date(0),
+ tzHour = 0,
+ tzMin = 0,
+ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+ timeSetter = match[8] ? date.setUTCHours : date.setHours
+ if (match[9]) {
+ tzHour = toInt(match[9] + match[10])
+ tzMin = toInt(match[9] + match[11])
+ }
+ dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]))
+ var h = toInt(match[4] || 0) - tzHour
+ var m = toInt(match[5] || 0) - tzMin
+ var s = toInt(match[6] || 0)
+ var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000)
+ timeSetter.call(date, h, m, s, ms)
+ return date
+ }
+ return string
+ }
+
+ var rfixYMD = /^(\d+)\D(\d+)\D(\d+)/
+ filters.date = function (date, format) {
+ var locate = filters.date.locate,
+ text = "",
+ parts = [],
+ fn, match
+ format = format || "mediumDate"
+ format = locate[format] || format
+ if (typeof date === "string") {
+ if (NUMBER_STRING.test(date)) {
+ date = toInt(date)
+ } else {
+ var trimDate = date.trim()
+ date = trimDate.replace(rfixYMD, function (a, b, c, d) {
+ var array = d.length === 4 ? [d, b, c] : [b, c, d]
+ return array.join("-")
+ })
+ date = jsonStringToDate(date)
+ }
+ date = new Date(date)
+ }
+ if (typeof date === "number") {
+ date = new Date(date)
+ }
+ if (avalon.type(date) !== "date") {
+ return
+ }
+ while (format) {
+ match = DATE_FORMATS_SPLIT.exec(format)
+ if (match) {
+ parts = parts.concat(match.slice(1))
+ format = parts.pop()
+ } else {
+ parts.push(format)
+ format = null
+ }
+ }
+ parts.forEach(function (value) {
+ fn = DATE_FORMATS[value]
+ text += fn ? fn(date, locate) : value.replace(/(^'|'$)/g, "").replace(/''/g, "'")
+ })
+ return text
+ }
+ var locate = {
+ AMPMS: {
+ 0: "上午",
+ 1: "下午"
+ },
+ DAY: {
+ 0: "星期日",
+ 1: "星期一",
+ 2: "星期二",
+ 3: "星期三",
+ 4: "星期四",
+ 5: "星期五",
+ 6: "星期六"
+ },
+ MONTH: {
+ 0: "1月",
+ 1: "2月",
+ 2: "3月",
+ 3: "4月",
+ 4: "5月",
+ 5: "6月",
+ 6: "7月",
+ 7: "8月",
+ 8: "9月",
+ 9: "10月",
+ 10: "11月",
+ 11: "12月"
+ },
+ SHORTDAY: {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ fullDate: "y年M月d日EEEE",
+ longDate: "y年M月d日",
+ medium: "yyyy-M-d H:mm:ss",
+ mediumDate: "yyyy-M-d",
+ mediumTime: "H:mm:ss",
+ "short": "yy-M-d ah:mm",
+ shortDate: "yy-M-d",
+ shortTime: "ah:mm"
+ }
+ locate.SHORTMONTH = locate.MONTH
+ filters.date.locate = locate
+ }
+ /*********************************************************************
+ * AMD加载器 *
+ **********************************************************************/
+ var modules = avalon.modules = {
+ "ready!": {
+ exports: avalon
+ },
+ "avalon": {
+ exports: avalon,
+ state: 2
+ }
+ }
+ modules.exports = modules.avalon
+//http://stackoverflow.com/questions/25175914/bundles-in-requirejs
+//http://maxogden.com/nested-dependencies.html
+ new function () {
+ var loadings = [] //正在加载中的模块列表
+ var factorys = [] //储存需要绑定ID与factory对应关系的模块(标准浏览器下,先parse的script节点会先onload)
+
+ function trimHashAndQuery(url) {
+ return (url || "").replace(/[?#].*/, "")
+ }
+
+ var cur = getCurrentScript(true) //求得当前avalon.js 所在的JS文件的路径
+ if (!cur) { //处理window safari的Error没有stack的问题
+ cur = DOC.scripts[DOC.scripts.length - 1].src
+ }
+ var url = trimHashAndQuery(cur)
+ kernel.loaderUrl = url.slice(0, url.lastIndexOf("/") + 1)
+
+ function getBaseUrl(parentUrl) {
+ return kernel.baseUrl ? kernel.baseUrl : parentUrl ?
+ parentUrl.substr(0, parentUrl.lastIndexOf("/")) :
+ kernel.loaderUrl
+ }
+
+ function getCurrentScript(base) {
+ // 参考 https://github.com/samyk/jiagra/blob/master/jiagra.js
+ var stack
+ try {
+ a.b.c() //强制报错,以便捕获e.stack
+ } catch (e) { //safari的错误对象只有line,sourceId,sourceURL
+ stack = e.stack
+ if (!stack && window.opera) {
+ //opera 9没有e.stack,但有e.Backtrace,但不能直接取得,需要对e对象转字符串进行抽取
+ stack = (String(e).match(/of linked script \S+/g) || []).join(" ")
+ }
+ }
+ if (stack) {
+ /**e.stack最后一行在所有支持的浏览器大致如下:
+ *chrome23:
+ * at http://113.93.50.63/data.js:4:1
+ *firefox17:
+ *@http://113.93.50.63/query.js:4
+ *opera12:http://www.oldapps.com/opera.php?system=Windows_XP
+ *@http://113.93.50.63/data.js:4
+ *IE10:
+ * at Global code (http://113.93.50.63/data.js:4:1)
+ * //firefox4+ 可以用document.currentScript
+ */
+ stack = stack.split(/[@ ]/g).pop() //取得最后一行,最后一个空格或@之后的部分
+ stack = stack[0] === "(" ? stack.slice(1, -1) : stack.replace(/\s/, "") //去掉换行符
+ return stack.replace(/(:\d+)?:\d+$/i, "") //去掉行号与或许存在的出错字符起始位置
+ }
+ var nodes = (base ? DOC : head).getElementsByTagName("script") //只在head标签中寻找
+ for (var i = nodes.length, node; node = nodes[--i];) {
+ if ((base || node.className === subscribers) && node.readyState === "interactive") {
+ var url = "1"[0] ? node.src : node.getAttribute("src", 4)
+ return node.className = url
+ }
+ }
+ }
+
+ innerRequire = avalon.require = function (array, factory, parentUrl) {
+ if (!Array.isArray(array)) {
+ avalon.error("require的第一个参数必须是依赖列数,类型为数组 " + array)
+ }
+ var args = [] // 放置所有依赖项的完整路径
+ var deps = {} // args的另一种表现形式,为的是方便去重
+ var id = parentUrl || "callback" + setTimeout("1")
+ parentUrl = getBaseUrl(parentUrl)
+ array.forEach(function (el) {
+ var url = loadResources(el, parentUrl) //加载资源,并返回能加载资源的完整路径
+ if (url) {
+ if (!deps[url]) {
+ args.push(url)
+ deps[url] = "司徒正美" //去重
+ }
+ }
+ })
+ if (!modules[id]) {
+ //如果此模块是定义在另一个JS文件中, 那必须等该文件加载完毕
+ //才能放到检测列队中
+ loadings.push(id)
+ }
+ if (!modules[id] || modules[id].state !== 2) {
+ modules[id] = makeModule(id, 1, factory, deps, args)//更新此模块信息
+ }
+
+ checkDeps()
+ }
+
+ innerRequire.define = function (urlOrId, deps, factory) { //模块名,依赖列表,模块本身
+ var args = aslice.call(arguments)
+ if (typeof urlOrId === "string") {
+ var id = args.shift()
+ }
+ if (typeof args[0] === "function") {
+ args.unshift([])
+ }
+ //上线合并后能直接得到模块ID,否则寻找当前正在解析中的script节点的src作为模块ID
+ //现在除了safari5,1-外,我们都能直接通过getCurrentScript一步到位得到当前执行的script节点,
+ //safari可通过onload+ factory.require闭包组合解决
+ var url = modules[id] && modules[id].state >= 1 ? id : trimHashAndQuery(getCurrentScript())
+ factory = args[1]
+ factory.id = id //用于调试
+
+ if (!modules[url] && id) {
+ //必须先行定义,并且不存在deps,用于checkCycle方法
+ modules[url] = makeModule(url, 1, factory)
+ }
+
+ factory.require = function (url) {
+ args.push(url)
+ var isCycle = true
+ try {
+ isCycle = checkCycle(modules[url].deps, url)
+ } catch (e) {
+ }
+ if (isCycle) {
+ avalon.error(url + "模块与之前的模块存在循环依赖,请不要直接用script标签引入" + url + "模块")
+ }
+
+ delete factory.require //释放内存
+ innerRequire.apply(null, args) //0,1,2 --> 1,2,0
+ }
+ if (url) {
+ factory.require(url)
+ } else { //先进先出
+ factorys.push(factory)
+ }
+ }
+ innerRequire.define.amd = modules
+
+ function checkCycle(deps, nick) {
+ //检测是否存在循环依赖
+ for (var id in deps) {
+ if (deps[id] === "司徒正美" && modules[id].state !== 2 && (id === nick || checkCycle(modules[id].deps, nick))) {
+ return true
+ }
+ }
+ }
+
+ function checkDeps() {
+ //检测此JS模块的依赖是否都已安装完毕,是则安装自身
+ loop: for (var i = loadings.length, id; id = loadings[--i];) {
+
+ var obj = modules[id],
+ deps = obj.deps
+ for (var key in deps) {
+ if (ohasOwn.call(deps, key) && modules[key].state !== 2) {
+ continue loop
+ }
+ }
+ //如果deps是空对象或者其依赖的模块的状态都是2
+ if (obj.state !== 2) {
+ loadings.splice(i, 1) //必须先移除再安装,防止在IE下DOM树建完后手动刷新页面,会多次执行它
+ fireFactory(obj.id, obj.args, obj.factory)
+ checkDeps() //如果成功,则再执行一次,以防有些模块就差本模块没有安装好
+ }
+ }
+ }
+
+ function checkFail(node, onError, fuckIE) {
+ var id = trimHashAndQuery(node.src) //检测是否死链
+ node.onload = node.onreadystatechange = node.onerror = null
+ if (onError || (fuckIE && !modules[id].state)) {
+ setTimeout(function () {
+ head.removeChild(node)
+ node = null // 处理旧式IE下的循环引用问题
+ })
+ log("debug: 加载 " + id + " 失败" + onError + " " + (!modules[id].state))
+ } else {
+ return true
+ }
+ }
+
+ function isAbsUrl(path) {
+ //http://stackoverflow.com/questions/10687099/how-to-test-if-a-url-string-is-absolute-or-relative
+ return /^(?:[a-z]+:)?\/\//i.test(String(path))
+ }
+
+ function getAbsUrl(url, baseUrl) {
+ //http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue
+ var oldBase = DOC.getElementsByTagName("base")[0]
+ var oldHref = oldBase && oldBase.href
+ var ourBase = oldBase || head.appendChild(DOC.createElement("base"))
+ var node = DOC.createElement("a")
+ ourBase.href = baseUrl
+ node.href = url
+ try {
+ return "1"[0] ? node.href : node.getAttribute("href", 4)
+ } finally {
+ if (oldBase) {
+ oldBase.href = oldHref
+ } else {
+ head.removeChild(ourBase)
+ }
+ }
+ }
+
+ var rdeuce = /\/\w+\/\.\./
+
+ function joinPath(a, b) {
+ if (a.charAt(a.length - 1) !== "/") {
+ a += "/"
+ }
+ if (b.slice(0, 2) === "./") { //相对于兄弟路径
+ return a + b.slice(2)
+ }
+ if (b.slice(0, 2) === "..") { //相对于父路径
+ a += b
+ while (rdeuce.test(a)) {
+ a = a.replace(rdeuce, "")
+ }
+ return a
+ }
+ if (b.slice(0, 1) === "/") {
+ return a + b.slice(1)
+ }
+ return a + b
+ }
+
+ function makeShimExports(value) {
+ function fn() {
+ var ret;
+ if (value.init) {
+ ret = value.init.apply(window, arguments);
+ }
+ return ret || (value.exports && getGlobal(value.exports));
+ }
+
+ return fn
+ }
+
+ function makeModule(id, state, factory, deps, args) {
+ return {
+ id: id,
+ state: state || 1,
+ factory: factory || noop,
+ deps: deps || {},
+ args: args || []
+ }
+ }
+
+ function getGlobal(value) {
+ if (!value) {
+ return value;
+ }
+ var g = window
+ value.split('.').forEach(function (part) {
+ g = g[part]
+ })
+ return g;
+ }
+
+ function loadResources(url, parentUrl) {
+ //1. 特别处理ready标识符
+ if (url === "ready!" || (modules[url] && modules[url].state === 2)) {
+ return url
+ }
+ //2. 获取text! css! 等插件名
+ var plugin
+ url = url.replace(/^\w+!/, function (a) {
+ plugin = a.slice(0, -1)
+ return ""
+ })
+ plugin = plugin || "js"
+ plugin = plugins[plugin] || noop
+ //3. 处理shim配置项
+ var shim = kernel.shim[url]
+ if (typeof shim === "object") {
+ if (Array.isArray(shim)) {
+ shim = kernel.shim[url] = {
+ deps: shim
+ }
+ }
+ if (!shim.exportsFn && (shim.exports || shim.init)) {
+ shim.exportsFn = makeShimExports(shim)
+ }
+ }
+ //4. 处理paths配置项
+ url = url.split("/");
+ for (var i = url.length, parentModule, parentPath; i > 0; i -= 1) {
+ parentModule = url.slice(0, i).join('/');
+
+ parentPath = kernel.paths[parentModule];
+ if (parentPath) {
+ //If an array, it means there are a few choices,
+ //Choose the one that is desired
+ if (Array.isArray(parentPath)) {
+ parentPath = parentPath[0];
+ }
+ url.splice(0, i, parentPath);
+ break;
+ }
+ }
+ //Join the path parts together, then figure out if baseUrl is needed.
+ url = url.join('/');
+ //5. 补全扩展名
+ url = trimHashAndQuery(url)
+ var ext = plugin.ext
+ if (ext) {
+ if (url.slice(0 - ext.length) !== ext) {
+ url += ext
+ }
+ }
+ //5. 转换为绝对路径
+ if (!isAbsUrl(url)) {
+ url = joinPath(parentUrl, url)
+ if (!isAbsUrl(url)) {
+ url = getAbsUrl(url, getBaseUrl())
+ }
+ }
+ //6. 缓存处理
+ if (kernel.nocache) {
+ url += (url.indexOf("?") === -1 ? "?" : "&") + (new Date - 0)
+ }
+ return plugin(url, shim)
+ }
+
+ function loadJS(url, id, callback) {
+ //通过script节点加载目标模块
+ var node = DOC.createElement("script")
+ node.className = subscribers //让getCurrentScript只处理类名为subscribers的script节点
+ node[W3C ? "onload" : "onreadystatechange"] = function () {
+ if (W3C || /loaded|complete/i.test(node.readyState)) {
+ //mass Framework会在_checkFail把它上面的回调清掉,尽可能释放回存,尽管DOM0事件写法在IE6下GC无望
+ var factory = factorys.pop()
+
+ factory && factory.require(id)
+ if (callback) {
+ callback()
+ }
+ if (checkFail(node, false, !W3C)) {
+ log("debug: 已成功加载 " + url)
+ loadings.push(id)
+ checkDeps()
+ }
+ }
+ }
+ node.onerror = function () {
+ checkFail(node, true)
+ }
+ node.src = url //插入到head的第一个节点前,防止IE6下head标签没闭合前使用appendChild抛错
+ head.insertBefore(node, head.firstChild) //chrome下第二个参数不能为null
+ log("debug: 正准备加载 " + url) //更重要的是IE6下可以收窄getCurrentScript的寻找范围
+ }
+
+ function fireFactory(id, deps, factory) {
+ var module = Object(modules[id])
+ module.state = 2
+ for (var i = 0, array = [], d; d = deps[i++];) {
+ if (d === "exports") {
+ var obj = module.exports || (module.exports = {})
+ array.push(obj)
+ } else {
+ array.push(modules[d].exports)
+ }
+ }
+ var ret = factory.apply(window, array)
+ if (ret !== void 0) {
+ modules[id].exports = ret
+ }
+ return ret
+ }
+
+
+ kernel.packages = []
+ kernel.pkgs = {}
+ jsSuffixRegExp = /\.js$/
+ currDirRegExp = /^\.\//
+ plugins.packages = function (array) {
+ for (var i = 0; i < array.length; i++) {
+ var pkgObj = array[i]
+ pkgObj = typeof pkgObj === "string" ? {name: pkgObj} : pkgObj
+ var name = pkgObj.name;
+ var location = pkgObj.location;
+ if (location) {
+ kernel.paths[name] = pkgObj.location
+ }
+ //Save pointer to main module ID for pkg name.
+ //Remove leading dot in main, so main paths are normalized,
+ //and remove any trailing .js, since different package
+ //envs have different conventions: some use a module name,
+ //some use a file name.
+ kernel.pkgs[name] = pkgObj.name + "/" + (pkgObj.main || "main")
+ .replace(currDirRegExp, "")
+ .replace(jsSuffixRegExp, "")
+ }
+ }
+
+
+ plugins.js = function (url, shim) {
+ var id = trimHashAndQuery(url)
+ if (!modules[id]) { //如果之前没有加载过
+ var module = modules[id] = makeModule(id)
+ if (shim) { //shim机制
+ innerRequire(shim.deps || [], function () {
+ var args = avalon.slice(arguments)
+ loadJS(url, id, function () {
+ module.state = 2
+ if (shim.exportsFn) {
+ module.exports = shim.exportsFn.apply(0, args)
+ }
+ innerRequire.checkDeps()
+ })
+ })
+ } else {
+ loadJS(url, id)
+ }
+ }
+ return id
+ }
+ plugins.css = function (url) {
+ var id = trimHashAndQuery(url).replace(/\W/g, "_") ////用于处理掉href中的hash与所有特殊符号
+ if (!DOC.getElementById(id)) {
+ var node = DOC.createElement("link")
+ node.rel = "stylesheet"
+ node.href = url
+ node.id = id
+ head.insertBefore(node, head.firstChild)
+ }
+ }
+ plugins.css.ext = ".css"
+ plugins.js.ext = ".js"
+
+ plugins.text = function (url) {
+ var xhr = getXHR()
+ var id = trimHashAndQuery(url)
+ modules[id] = {}
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ var status = xhr.status;
+ if (status > 399 && status < 600) {
+ avalon.error(url + " 对应资源不存在或没有开启 CORS")
+ } else {
+ modules[id].state = 2
+ modules[id].exports = xhr.responseText
+ innerRequire.checkDeps()
+ }
+ }
+ }
+ xhr.open("GET", url, true)
+ if ("withCredentials" in xhr) {
+ xhr.withCredentials = true
+ }
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
+ xhr.send()
+ return id
+ }
+
+ innerRequire.config = kernel
+ innerRequire.checkDeps = checkDeps
+ }
+
+ /*********************************************************************
+ * DOMReady *
+ **********************************************************************/
+
+ var readyList = []
+
+ function fireReady() {
+ if (DOC.body) { // 在IE8 iframe中doScrollCheck可能不正确
+ if (innerRequire) {
+ modules["ready!"].state = 2
+ innerRequire.checkDeps()
+ } else {
+ readyList.forEach(function (a) {
+ a(avalon)
+ })
+ }
+ fireReady = noop //隋性函数,防止IE9二次调用_checkDeps
+ }
+ }
+
+ function doScrollCheck() {
+ try { //IE下通过doScrollCheck检测DOM树是否建完
+ root.doScroll("left")
+ fireReady()
+ } catch (e) {
+ setTimeout(doScrollCheck)
+ }
+ }
+
+ if (DOC.readyState === "complete") {
+ setTimeout(fireReady) //如果在domReady之外加载
+ } else if (W3C) {
+ DOC.addEventListener("DOMContentLoaded", fireReady)
+ } else {
+ DOC.attachEvent("onreadystatechange", function () {
+ if (DOC.readyState === "complete") {
+ fireReady()
+ }
+ })
+ var isFrame;
+ try {
+ isFrame = window.frameElement != null//当前页面处于iframe中时,访问frameElement会抛出不允许跨域访问异常
+ }
+ catch (e) {
+ isFrame = true
+ }
+ if (root.doScroll && !isFrame) {//只有不处于iframe时才用doScroll判断,否则可能会不准
+ doScrollCheck()
+ }
+ }
+ avalon.bind(window, "load", fireReady)
+
+ avalon.ready = function (fn) {
+ if (innerRequire) {
+ innerRequire(["ready!"], fn)
+ } else if (fireReady === noop) {
+ fn(avalon)
+ } else {
+ readyList.push(fn)
+ }
+ }
+
+ avalon.config({
+ loader: true
+ })
+
+ avalon.ready(function () {
+ avalon.scan(DOC.body)
+ })
+
+// Register as a named AMD module, since avalon can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase avalon is used because AMD module names are
+// derived from file names, and Avalon is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of avalon, it will work.
+
+// Note that for maximum portability, libraries that are not avalon should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. avalon is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+ if (typeof define === "function" && define.amd) {
+ define("avalon", [], function () {
+ return avalon
+ })
+ }
+// Map over avalon in case of overwrite
+ var _avalon = window.avalon
+ avalon.noConflict = function (deep) {
+ if (deep && window.avalon === avalon) {
+ window.avalon = avalon
+ }
+ return avalon
+ }
+// Expose avalon and $ identifiers, even in AMD
+// and CommonJS for browser emulators
+ if (noGlobal === void 0) {
+ window.avalon = avalon
+ }
+ return avalon
+
+}));
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/d3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/d3.js
new file mode 100644
index 00000000..eafe91d9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/d3.js
@@ -0,0 +1,9925 @@
+!function () {
+ var d3 = {
+ version: "3.4.12"
+ };
+ if (!Date.now) Date.now = function () {
+ return +new Date();
+ };
+ var d3_arraySlice = [].slice, d3_array = function (list) {
+ return d3_arraySlice.call(list);
+ };
+ var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window;
+ try {
+ d3_array(d3_documentElement.childNodes)[0].nodeType;
+ } catch (e) {
+ d3_array = function (list) {
+ var i = list.length, array = new Array(i);
+ while (i--) array[i] = list[i];
+ return array;
+ };
+ }
+ try {
+ d3_document.createElement("div").style.setProperty("opacity", 0, "");
+ } catch (error) {
+ var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
+ d3_element_prototype.setAttribute = function (name, value) {
+ d3_element_setAttribute.call(this, name, value + "");
+ };
+ d3_element_prototype.setAttributeNS = function (space, local, value) {
+ d3_element_setAttributeNS.call(this, space, local, value + "");
+ };
+ d3_style_prototype.setProperty = function (name, value, priority) {
+ d3_style_setProperty.call(this, name, value + "", priority);
+ };
+ }
+ d3.ascending = d3_ascending;
+ function d3_ascending(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+ }
+
+ d3.descending = function (a, b) {
+ return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+ };
+ d3.min = function (array, f) {
+ var i = -1, n = array.length, a, b;
+ if (arguments.length === 1) {
+ while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
+ while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+ } else {
+ while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
+ }
+ return a;
+ };
+ d3.max = function (array, f) {
+ var i = -1, n = array.length, a, b;
+ if (arguments.length === 1) {
+ while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
+ while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+ } else {
+ while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
+ }
+ return a;
+ };
+ d3.extent = function (array, f) {
+ var i = -1, n = array.length, a, b, c;
+ if (arguments.length === 1) {
+ while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined;
+ while (++i < n) if ((b = array[i]) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ } else {
+ while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
+ if (a > b) a = b;
+ if (c < b) c = b;
+ }
+ }
+ return [a, c];
+ };
+ d3.sum = function (array, f) {
+ var s = 0, n = array.length, a, i = -1;
+ if (arguments.length === 1) {
+ while (++i < n) if (!isNaN(a = +array[i])) s += a;
+ } else {
+ while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
+ }
+ return s;
+ };
+ function d3_number(x) {
+ return x != null && !isNaN(x);
+ }
+
+ d3.mean = function (array, f) {
+ var s = 0, n = array.length, a, i = -1, j = n;
+ if (arguments.length === 1) {
+ while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
+ } else {
+ while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
+ }
+ return j ? s / j : undefined;
+ };
+ d3.quantile = function (values, p) {
+ var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
+ return e ? v + e * (values[h] - v) : v;
+ };
+ d3.median = function (array, f) {
+ if (arguments.length > 1) array = array.map(f);
+ array = array.filter(d3_number);
+ return array.length ? d3.quantile(array.sort(d3_ascending), .5) : undefined;
+ };
+ function d3_bisector(compare) {
+ return {
+ left: function (a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >>> 1;
+ if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;
+ }
+ return lo;
+ },
+ right: function (a, x, lo, hi) {
+ if (arguments.length < 3) lo = 0;
+ if (arguments.length < 4) hi = a.length;
+ while (lo < hi) {
+ var mid = lo + hi >>> 1;
+ if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;
+ }
+ return lo;
+ }
+ };
+ }
+
+ var d3_bisect = d3_bisector(d3_ascending);
+ d3.bisectLeft = d3_bisect.left;
+ d3.bisect = d3.bisectRight = d3_bisect.right;
+ d3.bisector = function (f) {
+ return d3_bisector(f.length === 1 ? function (d, x) {
+ return d3_ascending(f(d), x);
+ } : f);
+ };
+ d3.shuffle = function (array) {
+ var m = array.length, t, i;
+ while (m) {
+ i = Math.random() * m-- | 0;
+ t = array[m], array[m] = array[i], array[i] = t;
+ }
+ return array;
+ };
+ d3.permute = function (array, indexes) {
+ var i = indexes.length, permutes = new Array(i);
+ while (i--) permutes[i] = array[indexes[i]];
+ return permutes;
+ };
+ d3.pairs = function (array) {
+ var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
+ while (i < n) pairs[i] = [p0 = p1, p1 = array[++i]];
+ return pairs;
+ };
+ d3.zip = function () {
+ if (!(n = arguments.length)) return [];
+ for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m;) {
+ for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n;) {
+ zip[j] = arguments[j][i];
+ }
+ }
+ return zips;
+ };
+ function d3_zipLength(d) {
+ return d.length;
+ }
+
+ d3.transpose = function (matrix) {
+ return d3.zip.apply(d3, matrix);
+ };
+ d3.keys = function (map) {
+ var keys = [];
+ for (var key in map) keys.push(key);
+ return keys;
+ };
+ d3.values = function (map) {
+ var values = [];
+ for (var key in map) values.push(map[key]);
+ return values;
+ };
+ d3.entries = function (map) {
+ var entries = [];
+ for (var key in map) entries.push({
+ key: key,
+ value: map[key]
+ });
+ return entries;
+ };
+ d3.merge = function (arrays) {
+ var n = arrays.length, m, i = -1, j = 0, merged, array;
+ while (++i < n) j += arrays[i].length;
+ merged = new Array(j);
+ while (--n >= 0) {
+ array = arrays[n];
+ m = array.length;
+ while (--m >= 0) {
+ merged[--j] = array[m];
+ }
+ }
+ return merged;
+ };
+ var abs = Math.abs;
+ d3.range = function (start, stop, step) {
+ if (arguments.length < 3) {
+ step = 1;
+ if (arguments.length < 2) {
+ stop = start;
+ start = 0;
+ }
+ }
+ if ((stop - start) / step === Infinity) throw new Error("infinite range");
+ var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;
+ start *= k, stop *= k, step *= k;
+ if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
+ return range;
+ };
+ function d3_range_integerScale(x) {
+ var k = 1;
+ while (x * k % 1) k *= 10;
+ return k;
+ }
+
+ function d3_class(ctor, properties) {
+ try {
+ for (var key in properties) {
+ Object.defineProperty(ctor.prototype, key, {
+ value: properties[key],
+ enumerable: false
+ });
+ }
+ } catch (e) {
+ ctor.prototype = properties;
+ }
+ }
+
+ d3.map = function (object) {
+ var map = new d3_Map();
+ if (object instanceof d3_Map) object.forEach(function (key, value) {
+ map.set(key, value);
+ }); else for (var key in object) map.set(key, object[key]);
+ return map;
+ };
+ function d3_Map() {
+ }
+
+ d3_class(d3_Map, {
+ has: d3_map_has,
+ get: function (key) {
+ return this[d3_map_prefix + key];
+ },
+ set: function (key, value) {
+ return this[d3_map_prefix + key] = value;
+ },
+ remove: d3_map_remove,
+ keys: d3_map_keys,
+ values: function () {
+ var values = [];
+ this.forEach(function (key, value) {
+ values.push(value);
+ });
+ return values;
+ },
+ entries: function () {
+ var entries = [];
+ this.forEach(function (key, value) {
+ entries.push({
+ key: key,
+ value: value
+ });
+ });
+ return entries;
+ },
+ size: d3_map_size,
+ empty: d3_map_empty,
+ forEach: function (f) {
+ for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.slice(1), this[key]);
+ }
+ });
+ var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
+
+ function d3_map_has(key) {
+ return d3_map_prefix + key in this;
+ }
+
+ function d3_map_remove(key) {
+ key = d3_map_prefix + key;
+ return key in this && delete this[key];
+ }
+
+ function d3_map_keys() {
+ var keys = [];
+ this.forEach(function (key) {
+ keys.push(key);
+ });
+ return keys;
+ }
+
+ function d3_map_size() {
+ var size = 0;
+ for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
+ return size;
+ }
+
+ function d3_map_empty() {
+ for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
+ return true;
+ }
+
+ d3.nest = function () {
+ var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
+
+ function map(mapType, array, depth) {
+ if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
+ var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;
+ while (++i < n) {
+ if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
+ values.push(object);
+ } else {
+ valuesByKey.set(keyValue, [object]);
+ }
+ }
+ if (mapType) {
+ object = mapType();
+ setter = function (keyValue, values) {
+ object.set(keyValue, map(mapType, values, depth));
+ };
+ } else {
+ object = {};
+ setter = function (keyValue, values) {
+ object[keyValue] = map(mapType, values, depth);
+ };
+ }
+ valuesByKey.forEach(setter);
+ return object;
+ }
+
+ function entries(map, depth) {
+ if (depth >= keys.length) return map;
+ var array = [], sortKey = sortKeys[depth++];
+ map.forEach(function (key, keyMap) {
+ array.push({
+ key: key,
+ values: entries(keyMap, depth)
+ });
+ });
+ return sortKey ? array.sort(function (a, b) {
+ return sortKey(a.key, b.key);
+ }) : array;
+ }
+
+ nest.map = function (array, mapType) {
+ return map(mapType, array, 0);
+ };
+ nest.entries = function (array) {
+ return entries(map(d3.map, array, 0), 0);
+ };
+ nest.key = function (d) {
+ keys.push(d);
+ return nest;
+ };
+ nest.sortKeys = function (order) {
+ sortKeys[keys.length - 1] = order;
+ return nest;
+ };
+ nest.sortValues = function (order) {
+ sortValues = order;
+ return nest;
+ };
+ nest.rollup = function (f) {
+ rollup = f;
+ return nest;
+ };
+ return nest;
+ };
+ d3.set = function (array) {
+ var set = new d3_Set();
+ if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
+ return set;
+ };
+ function d3_Set() {
+ }
+
+ d3_class(d3_Set, {
+ has: d3_map_has,
+ add: function (value) {
+ this[d3_map_prefix + value] = true;
+ return value;
+ },
+ remove: function (value) {
+ value = d3_map_prefix + value;
+ return value in this && delete this[value];
+ },
+ values: d3_map_keys,
+ size: d3_map_size,
+ empty: d3_map_empty,
+ forEach: function (f) {
+ for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.slice(1));
+ }
+ });
+ d3.behavior = {};
+ d3.rebind = function (target, source) {
+ var i = 1, n = arguments.length, method;
+ while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
+ return target;
+ };
+ function d3_rebind(target, source, method) {
+ return function () {
+ var value = method.apply(source, arguments);
+ return value === source ? target : value;
+ };
+ }
+
+ function d3_vendorSymbol(object, name) {
+ if (name in object) return name;
+ name = name.charAt(0).toUpperCase() + name.slice(1);
+ for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
+ var prefixName = d3_vendorPrefixes[i] + name;
+ if (prefixName in object) return prefixName;
+ }
+ }
+
+ var d3_vendorPrefixes = ["webkit", "ms", "moz", "Moz", "o", "O"];
+
+ function d3_noop() {
+ }
+
+ d3.dispatch = function () {
+ var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
+ while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+ return dispatch;
+ };
+ function d3_dispatch() {
+ }
+
+ d3_dispatch.prototype.on = function (type, listener) {
+ var i = type.indexOf("."), name = "";
+ if (i >= 0) {
+ name = type.slice(i + 1);
+ type = type.slice(0, i);
+ }
+ if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
+ if (arguments.length === 2) {
+ if (listener == null) for (type in this) {
+ if (this.hasOwnProperty(type)) this[type].on(name, null);
+ }
+ return this;
+ }
+ };
+ function d3_dispatch_event(dispatch) {
+ var listeners = [], listenerByName = new d3_Map();
+
+ function event() {
+ var z = listeners, i = -1, n = z.length, l;
+ while (++i < n) if (l = z[i].on) l.apply(this, arguments);
+ return dispatch;
+ }
+
+ event.on = function (name, listener) {
+ var l = listenerByName.get(name), i;
+ if (arguments.length < 2) return l && l.on;
+ if (l) {
+ l.on = null;
+ listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
+ listenerByName.remove(name);
+ }
+ if (listener) listeners.push(listenerByName.set(name, {
+ on: listener
+ }));
+ return dispatch;
+ };
+ return event;
+ }
+
+ d3.event = null;
+ function d3_eventPreventDefault() {
+ d3.event.preventDefault();
+ }
+
+ function d3_eventSource() {
+ var e = d3.event, s;
+ while (s = e.sourceEvent) e = s;
+ return e;
+ }
+
+ function d3_eventDispatch(target) {
+ var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
+ while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
+ dispatch.of = function (thiz, argumentz) {
+ return function (e1) {
+ try {
+ var e0 = e1.sourceEvent = d3.event;
+ e1.target = target;
+ d3.event = e1;
+ dispatch[e1.type].apply(thiz, argumentz);
+ } finally {
+ d3.event = e0;
+ }
+ };
+ };
+ return dispatch;
+ }
+
+ d3.requote = function (s) {
+ return s.replace(d3_requote_re, "\\$&");
+ };
+ var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+ var d3_subclass = {}.__proto__ ? function (object, prototype) {
+ object.__proto__ = prototype;
+ } : function (object, prototype) {
+ for (var property in prototype) object[property] = prototype[property];
+ };
+
+ function d3_selection(groups) {
+ d3_subclass(groups, d3_selectionPrototype);
+ return groups;
+ }
+
+ var d3_select = function (s, n) {
+ return n.querySelector(s);
+ }, d3_selectAll = function (s, n) {
+ return n.querySelectorAll(s);
+ }, d3_selectMatcher = d3_documentElement.matches || d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function (n, s) {
+ return d3_selectMatcher.call(n, s);
+ };
+ if (typeof Sizzle === "function") {
+ d3_select = function (s, n) {
+ return Sizzle(s, n)[0] || null;
+ };
+ d3_selectAll = Sizzle;
+ d3_selectMatches = Sizzle.matchesSelector;
+ }
+ d3.selection = function () {
+ return d3_selectionRoot;
+ };
+ var d3_selectionPrototype = d3.selection.prototype = [];
+ d3_selectionPrototype.select = function (selector) {
+ var subgroups = [], subgroup, subnode, group, node;
+ selector = d3_selection_selector(selector);
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = (group = this[j]).parentNode;
+ for (var i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroup.push(subnode = selector.call(node, node.__data__, i, j));
+ if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+ return d3_selection(subgroups);
+ };
+ function d3_selection_selector(selector) {
+ return typeof selector === "function" ? selector : function () {
+ return d3_select(selector, this);
+ };
+ }
+
+ d3_selectionPrototype.selectAll = function (selector) {
+ var subgroups = [], subgroup, node;
+ selector = d3_selection_selectorAll(selector);
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));
+ subgroup.parentNode = node;
+ }
+ }
+ }
+ return d3_selection(subgroups);
+ };
+ function d3_selection_selectorAll(selector) {
+ return typeof selector === "function" ? selector : function () {
+ return d3_selectAll(selector, this);
+ };
+ }
+
+ var d3_nsPrefix = {
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: "http://www.w3.org/1999/xhtml",
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+ };
+ d3.ns = {
+ prefix: d3_nsPrefix,
+ qualify: function (name) {
+ var i = name.indexOf(":"), prefix = name;
+ if (i >= 0) {
+ prefix = name.slice(0, i);
+ name = name.slice(i + 1);
+ }
+ return d3_nsPrefix.hasOwnProperty(prefix) ? {
+ space: d3_nsPrefix[prefix],
+ local: name
+ } : name;
+ }
+ };
+ d3_selectionPrototype.attr = function (name, value) {
+ if (arguments.length < 2) {
+ if (typeof name === "string") {
+ var node = this.node();
+ name = d3.ns.qualify(name);
+ return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
+ }
+ for (value in name) this.each(d3_selection_attr(value, name[value]));
+ return this;
+ }
+ return this.each(d3_selection_attr(name, value));
+ };
+ function d3_selection_attr(name, value) {
+ name = d3.ns.qualify(name);
+ function attrNull() {
+ this.removeAttribute(name);
+ }
+
+ function attrNullNS() {
+ this.removeAttributeNS(name.space, name.local);
+ }
+
+ function attrConstant() {
+ this.setAttribute(name, value);
+ }
+
+ function attrConstantNS() {
+ this.setAttributeNS(name.space, name.local, value);
+ }
+
+ function attrFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
+ }
+
+ function attrFunctionNS() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
+ }
+
+ return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
+ }
+
+ function d3_collapse(s) {
+ return s.trim().replace(/\s+/g, " ");
+ }
+
+ d3_selectionPrototype.classed = function (name, value) {
+ if (arguments.length < 2) {
+ if (typeof name === "string") {
+ var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;
+ if (value = node.classList) {
+ while (++i < n) if (!value.contains(name[i])) return false;
+ } else {
+ value = node.getAttribute("class");
+ while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
+ }
+ return true;
+ }
+ for (value in name) this.each(d3_selection_classed(value, name[value]));
+ return this;
+ }
+ return this.each(d3_selection_classed(name, value));
+ };
+ function d3_selection_classedRe(name) {
+ return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
+ }
+
+ function d3_selection_classes(name) {
+ return (name + "").trim().split(/^|\s+/);
+ }
+
+ function d3_selection_classed(name, value) {
+ name = d3_selection_classes(name).map(d3_selection_classedName);
+ var n = name.length;
+
+ function classedConstant() {
+ var i = -1;
+ while (++i < n) name[i](this, value);
+ }
+
+ function classedFunction() {
+ var i = -1, x = value.apply(this, arguments);
+ while (++i < n) name[i](this, x);
+ }
+
+ return typeof value === "function" ? classedFunction : classedConstant;
+ }
+
+ function d3_selection_classedName(name) {
+ var re = d3_selection_classedRe(name);
+ return function (node, value) {
+ if (c = node.classList) return value ? c.add(name) : c.remove(name);
+ var c = node.getAttribute("class") || "";
+ if (value) {
+ re.lastIndex = 0;
+ if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name));
+ } else {
+ node.setAttribute("class", d3_collapse(c.replace(re, " ")));
+ }
+ };
+ }
+
+ d3_selectionPrototype.style = function (name, value, priority) {
+ var n = arguments.length;
+ if (n < 3) {
+ if (typeof name !== "string") {
+ if (n < 2) value = "";
+ for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
+ return this;
+ }
+ if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);
+ priority = "";
+ }
+ return this.each(d3_selection_style(name, value, priority));
+ };
+ function d3_selection_style(name, value, priority) {
+ function styleNull() {
+ this.style.removeProperty(name);
+ }
+
+ function styleConstant() {
+ this.style.setProperty(name, value, priority);
+ }
+
+ function styleFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
+ }
+
+ return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
+ }
+
+ d3_selectionPrototype.property = function (name, value) {
+ if (arguments.length < 2) {
+ if (typeof name === "string") return this.node()[name];
+ for (value in name) this.each(d3_selection_property(value, name[value]));
+ return this;
+ }
+ return this.each(d3_selection_property(name, value));
+ };
+ function d3_selection_property(name, value) {
+ function propertyNull() {
+ delete this[name];
+ }
+
+ function propertyConstant() {
+ this[name] = value;
+ }
+
+ function propertyFunction() {
+ var x = value.apply(this, arguments);
+ if (x == null) delete this[name]; else this[name] = x;
+ }
+
+ return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
+ }
+
+ d3_selectionPrototype.text = function (value) {
+ return arguments.length ? this.each(typeof value === "function" ? function () {
+ var v = value.apply(this, arguments);
+ this.textContent = v == null ? "" : v;
+ } : value == null ? function () {
+ this.textContent = "";
+ } : function () {
+ this.textContent = value;
+ }) : this.node().textContent;
+ };
+ d3_selectionPrototype.html = function (value) {
+ return arguments.length ? this.each(typeof value === "function" ? function () {
+ var v = value.apply(this, arguments);
+ this.innerHTML = v == null ? "" : v;
+ } : value == null ? function () {
+ this.innerHTML = "";
+ } : function () {
+ this.innerHTML = value;
+ }) : this.node().innerHTML;
+ };
+ d3_selectionPrototype.append = function (name) {
+ name = d3_selection_creator(name);
+ return this.select(function () {
+ return this.appendChild(name.apply(this, arguments));
+ });
+ };
+ function d3_selection_creator(name) {
+ return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function () {
+ return this.ownerDocument.createElementNS(name.space, name.local);
+ } : function () {
+ return this.ownerDocument.createElementNS(this.namespaceURI, name);
+ };
+ }
+
+ d3_selectionPrototype.insert = function (name, before) {
+ name = d3_selection_creator(name);
+ before = d3_selection_selector(before);
+ return this.select(function () {
+ return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);
+ });
+ };
+ d3_selectionPrototype.remove = function () {
+ return this.each(function () {
+ var parent = this.parentNode;
+ if (parent) parent.removeChild(this);
+ });
+ };
+ d3_selectionPrototype.data = function (value, key) {
+ var i = -1, n = this.length, group, node;
+ if (!arguments.length) {
+ value = new Array(n = (group = this[0]).length);
+ while (++i < n) {
+ if (node = group[i]) {
+ value[i] = node.__data__;
+ }
+ }
+ return value;
+ }
+ function bind(group, groupData) {
+ var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
+ if (key) {
+ var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
+ for (i = -1; ++i < n;) {
+ keyValue = key.call(node = group[i], node.__data__, i);
+ if (nodeByKeyValue.has(keyValue)) {
+ exitNodes[i] = node;
+ } else {
+ nodeByKeyValue.set(keyValue, node);
+ }
+ keyValues.push(keyValue);
+ }
+ for (i = -1; ++i < m;) {
+ keyValue = key.call(groupData, nodeData = groupData[i], i);
+ if (node = nodeByKeyValue.get(keyValue)) {
+ updateNodes[i] = node;
+ node.__data__ = nodeData;
+ } else if (!dataByKeyValue.has(keyValue)) {
+ enterNodes[i] = d3_selection_dataNode(nodeData);
+ }
+ dataByKeyValue.set(keyValue, nodeData);
+ nodeByKeyValue.remove(keyValue);
+ }
+ for (i = -1; ++i < n;) {
+ if (nodeByKeyValue.has(keyValues[i])) {
+ exitNodes[i] = group[i];
+ }
+ }
+ } else {
+ for (i = -1; ++i < n0;) {
+ node = group[i];
+ nodeData = groupData[i];
+ if (node) {
+ node.__data__ = nodeData;
+ updateNodes[i] = node;
+ } else {
+ enterNodes[i] = d3_selection_dataNode(nodeData);
+ }
+ }
+ for (; i < m; ++i) {
+ enterNodes[i] = d3_selection_dataNode(groupData[i]);
+ }
+ for (; i < n; ++i) {
+ exitNodes[i] = group[i];
+ }
+ }
+ enterNodes.update = updateNodes;
+ enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
+ enter.push(enterNodes);
+ update.push(updateNodes);
+ exit.push(exitNodes);
+ }
+
+ var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
+ if (typeof value === "function") {
+ while (++i < n) {
+ bind(group = this[i], value.call(group, group.parentNode.__data__, i));
+ }
+ } else {
+ while (++i < n) {
+ bind(group = this[i], value);
+ }
+ }
+ update.enter = function () {
+ return enter;
+ };
+ update.exit = function () {
+ return exit;
+ };
+ return update;
+ };
+ function d3_selection_dataNode(data) {
+ return {
+ __data__: data
+ };
+ }
+
+ d3_selectionPrototype.datum = function (value) {
+ return arguments.length ? this.property("__data__", value) : this.property("__data__");
+ };
+ d3_selectionPrototype.filter = function (filter) {
+ var subgroups = [], subgroup, group, node;
+ if (typeof filter !== "function") filter = d3_selection_filter(filter);
+ for (var j = 0, m = this.length; j < m; j++) {
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = (group = this[j]).parentNode;
+ for (var i = 0, n = group.length; i < n; i++) {
+ if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
+ subgroup.push(node);
+ }
+ }
+ }
+ return d3_selection(subgroups);
+ };
+ function d3_selection_filter(selector) {
+ return function () {
+ return d3_selectMatches(this, selector);
+ };
+ }
+
+ d3_selectionPrototype.order = function () {
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
+ if (node = group[i]) {
+ if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
+ next = node;
+ }
+ }
+ }
+ return this;
+ };
+ d3_selectionPrototype.sort = function (comparator) {
+ comparator = d3_selection_sortComparator.apply(this, arguments);
+ for (var j = -1, m = this.length; ++j < m;) this[j].sort(comparator);
+ return this.order();
+ };
+ function d3_selection_sortComparator(comparator) {
+ if (!arguments.length) comparator = d3_ascending;
+ return function (a, b) {
+ return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
+ };
+ }
+
+ d3_selectionPrototype.each = function (callback) {
+ return d3_selection_each(this, function (node, i, j) {
+ callback.call(node, node.__data__, i, j);
+ });
+ };
+ function d3_selection_each(groups, callback) {
+ for (var j = 0, m = groups.length; j < m; j++) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
+ if (node = group[i]) callback(node, i, j);
+ }
+ }
+ return groups;
+ }
+
+ d3_selectionPrototype.call = function (callback) {
+ var args = d3_array(arguments);
+ callback.apply(args[0] = this, args);
+ return this;
+ };
+ d3_selectionPrototype.empty = function () {
+ return !this.node();
+ };
+ d3_selectionPrototype.node = function () {
+ for (var j = 0, m = this.length; j < m; j++) {
+ for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+ var node = group[i];
+ if (node) return node;
+ }
+ }
+ return null;
+ };
+ d3_selectionPrototype.size = function () {
+ var n = 0;
+ d3_selection_each(this, function () {
+ ++n;
+ });
+ return n;
+ };
+ function d3_selection_enter(selection) {
+ d3_subclass(selection, d3_selection_enterPrototype);
+ return selection;
+ }
+
+ var d3_selection_enterPrototype = [];
+ d3.selection.enter = d3_selection_enter;
+ d3.selection.enter.prototype = d3_selection_enterPrototype;
+ d3_selection_enterPrototype.append = d3_selectionPrototype.append;
+ d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
+ d3_selection_enterPrototype.node = d3_selectionPrototype.node;
+ d3_selection_enterPrototype.call = d3_selectionPrototype.call;
+ d3_selection_enterPrototype.size = d3_selectionPrototype.size;
+ d3_selection_enterPrototype.select = function (selector) {
+ var subgroups = [], subgroup, subnode, upgroup, group, node;
+ for (var j = -1, m = this.length; ++j < m;) {
+ upgroup = (group = this[j]).update;
+ subgroups.push(subgroup = []);
+ subgroup.parentNode = group.parentNode;
+ for (var i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));
+ subnode.__data__ = node.__data__;
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+ return d3_selection(subgroups);
+ };
+ d3_selection_enterPrototype.insert = function (name, before) {
+ if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);
+ return d3_selectionPrototype.insert.call(this, name, before);
+ };
+ function d3_selection_enterInsertBefore(enter) {
+ var i0, j0;
+ return function (d, i, j) {
+ var group = enter[j].update, n = group.length, node;
+ if (j != j0) j0 = j, i0 = 0;
+ if (i >= i0) i0 = i + 1;
+ while (!(node = group[i0]) && ++i0 < n) ;
+ return node;
+ };
+ }
+
+ d3_selectionPrototype.transition = function () {
+ var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || {
+ time: Date.now(),
+ ease: d3_ease_cubicInOut,
+ delay: 0,
+ duration: 250
+ };
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) d3_transitionNode(node, i, id, transition);
+ subgroup.push(node);
+ }
+ }
+ return d3_transition(subgroups, id);
+ };
+ d3_selectionPrototype.interrupt = function () {
+ return this.each(d3_selection_interrupt);
+ };
+ function d3_selection_interrupt() {
+ var lock = this.__transition__;
+ if (lock) ++lock.active;
+ }
+
+ d3.select = function (node) {
+ var group = [typeof node === "string" ? d3_select(node, d3_document) : node];
+ group.parentNode = d3_documentElement;
+ return d3_selection([group]);
+ };
+ d3.selectAll = function (nodes) {
+ var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes);
+ group.parentNode = d3_documentElement;
+ return d3_selection([group]);
+ };
+ var d3_selectionRoot = d3.select(d3_documentElement);
+ d3_selectionPrototype.on = function (type, listener, capture) {
+ var n = arguments.length;
+ if (n < 3) {
+ if (typeof type !== "string") {
+ if (n < 2) listener = false;
+ for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
+ return this;
+ }
+ if (n < 2) return (n = this.node()["__on" + type]) && n._;
+ capture = false;
+ }
+ return this.each(d3_selection_on(type, listener, capture));
+ };
+ function d3_selection_on(type, listener, capture) {
+ var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
+ if (i > 0) type = type.slice(0, i);
+ var filter = d3_selection_onFilters.get(type);
+ if (filter) type = filter, wrap = d3_selection_onFilter;
+ function onRemove() {
+ var l = this[name];
+ if (l) {
+ this.removeEventListener(type, l, l.$);
+ delete this[name];
+ }
+ }
+
+ function onAdd() {
+ var l = wrap(listener, d3_array(arguments));
+ onRemove.call(this);
+ this.addEventListener(type, this[name] = l, l.$ = capture);
+ l._ = listener;
+ }
+
+ function removeAll() {
+ var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match;
+ for (var name in this) {
+ if (match = name.match(re)) {
+ var l = this[name];
+ this.removeEventListener(match[1], l, l.$);
+ delete this[name];
+ }
+ }
+ }
+
+ return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;
+ }
+
+ var d3_selection_onFilters = d3.map({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ });
+ d3_selection_onFilters.forEach(function (k) {
+ if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
+ });
+ function d3_selection_onListener(listener, argumentz) {
+ return function (e) {
+ var o = d3.event;
+ d3.event = e;
+ argumentz[0] = this.__data__;
+ try {
+ listener.apply(this, argumentz);
+ } finally {
+ d3.event = o;
+ }
+ };
+ }
+
+ function d3_selection_onFilter(listener, argumentz) {
+ var l = d3_selection_onListener(listener, argumentz);
+ return function (e) {
+ var target = this, related = e.relatedTarget;
+ if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {
+ l.call(target, e);
+ }
+ };
+ }
+
+ var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0;
+
+ function d3_event_dragSuppress() {
+ var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
+ if (d3_event_dragSelect) {
+ var style = d3_documentElement.style, select = style[d3_event_dragSelect];
+ style[d3_event_dragSelect] = "none";
+ }
+ return function (suppressClick) {
+ w.on(name, null);
+ if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
+ if (suppressClick) {
+ function off() {
+ w.on(click, null);
+ }
+
+ w.on(click, function () {
+ d3_eventPreventDefault();
+ off();
+ }, true);
+ setTimeout(off, 0);
+ }
+ };
+ }
+
+ d3.mouse = function (container) {
+ return d3_mousePoint(container, d3_eventSource());
+ };
+ var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
+
+ function d3_mousePoint(container, e) {
+ if (e.changedTouches) e = e.changedTouches[0];
+ var svg = container.ownerSVGElement || container;
+ if (svg.createSVGPoint) {
+ var point = svg.createSVGPoint();
+ if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
+ svg = d3.select("body").append("svg").style({
+ position: "absolute",
+ top: 0,
+ left: 0,
+ margin: 0,
+ padding: 0,
+ border: "none"
+ }, "important");
+ var ctm = svg[0][0].getScreenCTM();
+ d3_mouse_bug44083 = !(ctm.f || ctm.e);
+ svg.remove();
+ }
+ if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX,
+ point.y = e.clientY;
+ point = point.matrixTransform(container.getScreenCTM().inverse());
+ return [point.x, point.y];
+ }
+ var rect = container.getBoundingClientRect();
+ return [e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop];
+ }
+
+ d3.touch = function (container, touches, identifier) {
+ if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
+ if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
+ if ((touch = touches[i]).identifier === identifier) {
+ return d3_mousePoint(container, touch);
+ }
+ }
+ };
+ d3.behavior.drag = function () {
+ var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_behavior_dragMouseSubject, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_behavior_dragTouchSubject, "touchmove", "touchend");
+
+ function drag() {
+ this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
+ }
+
+ function dragstart(id, position, subject, move, end) {
+ return function () {
+ var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId);
+ if (origin) {
+ dragOffset = origin.apply(that, arguments);
+ dragOffset = [dragOffset.x - position0[0], dragOffset.y - position0[1]];
+ } else {
+ dragOffset = [0, 0];
+ }
+ dispatch({
+ type: "dragstart"
+ });
+ function moved() {
+ var position1 = position(parent, dragId), dx, dy;
+ if (!position1) return;
+ dx = position1[0] - position0[0];
+ dy = position1[1] - position0[1];
+ dragged |= dx | dy;
+ position0 = position1;
+ dispatch({
+ type: "drag",
+ x: position1[0] + dragOffset[0],
+ y: position1[1] + dragOffset[1],
+ dx: dx,
+ dy: dy
+ });
+ }
+
+ function ended() {
+ if (!position(parent, dragId)) return;
+ dragSubject.on(move + dragName, null).on(end + dragName, null);
+ dragRestore(dragged && d3.event.target === target);
+ dispatch({
+ type: "dragend"
+ });
+ }
+ };
+ }
+
+ drag.origin = function (x) {
+ if (!arguments.length) return origin;
+ origin = x;
+ return drag;
+ };
+ return d3.rebind(drag, event, "on");
+ };
+ function d3_behavior_dragTouchId() {
+ return d3.event.changedTouches[0].identifier;
+ }
+
+ function d3_behavior_dragTouchSubject() {
+ return d3.event.target;
+ }
+
+ function d3_behavior_dragMouseSubject() {
+ return d3_window;
+ }
+
+ d3.touches = function (container, touches) {
+ if (arguments.length < 2) touches = d3_eventSource().touches;
+ return touches ? d3_array(touches).map(function (touch) {
+ var point = d3_mousePoint(container, touch);
+ point.identifier = touch.identifier;
+ return point;
+ }) : [];
+ };
+ var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
+
+ function d3_sgn(x) {
+ return x > 0 ? 1 : x < 0 ? -1 : 0;
+ }
+
+ function d3_cross2d(a, b, c) {
+ return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
+ }
+
+ function d3_acos(x) {
+ return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
+ }
+
+ function d3_asin(x) {
+ return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
+ }
+
+ function d3_sinh(x) {
+ return ((x = Math.exp(x)) - 1 / x) / 2;
+ }
+
+ function d3_cosh(x) {
+ return ((x = Math.exp(x)) + 1 / x) / 2;
+ }
+
+ function d3_tanh(x) {
+ return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+ }
+
+ function d3_haversin(x) {
+ return (x = Math.sin(x / 2)) * x;
+ }
+
+ var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
+ d3.interpolateZoom = function (p0, p1) {
+ var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];
+ var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;
+
+ function interpolate(t) {
+ var s = t * S;
+ if (dr) {
+ var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
+ return [ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0)];
+ }
+ return [ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s)];
+ }
+
+ interpolate.duration = S * 1e3;
+ return interpolate;
+ };
+ d3.behavior.zoom = function () {
+ var view = {
+ x: 0,
+ y: 0,
+ k: 1
+ }, translate0, center0, center, size = [960, 500], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
+
+ function zoom(g) {
+ g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
+ }
+
+ zoom.event = function (g) {
+ g.each(function () {
+ var dispatch = event.of(this, arguments), view1 = view;
+ if (d3_transitionInheritId) {
+ d3.select(this).transition().each("start.zoom", function () {
+ view = this.__chart__ || {
+ x: 0,
+ y: 0,
+ k: 1
+ };
+ zoomstarted(dispatch);
+ }).tween("zoom:zoom", function () {
+ var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([(cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k], [(cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k]);
+ return function (t) {
+ var l = i(t), k = dx / l[2];
+ this.__chart__ = view = {
+ x: cx - l[0] * k,
+ y: cy - l[1] * k,
+ k: k
+ };
+ zoomed(dispatch);
+ };
+ }).each("end.zoom", function () {
+ zoomended(dispatch);
+ });
+ } else {
+ this.__chart__ = view;
+ zoomstarted(dispatch);
+ zoomed(dispatch);
+ zoomended(dispatch);
+ }
+ });
+ };
+ zoom.translate = function (_) {
+ if (!arguments.length) return [view.x, view.y];
+ view = {
+ x: +_[0],
+ y: +_[1],
+ k: view.k
+ };
+ rescale();
+ return zoom;
+ };
+ zoom.scale = function (_) {
+ if (!arguments.length) return view.k;
+ view = {
+ x: view.x,
+ y: view.y,
+ k: +_
+ };
+ rescale();
+ return zoom;
+ };
+ zoom.scaleExtent = function (_) {
+ if (!arguments.length) return scaleExtent;
+ scaleExtent = _ == null ? d3_behavior_zoomInfinity : [+_[0], +_[1]];
+ return zoom;
+ };
+ zoom.center = function (_) {
+ if (!arguments.length) return center;
+ center = _ && [+_[0], +_[1]];
+ return zoom;
+ };
+ zoom.size = function (_) {
+ if (!arguments.length) return size;
+ size = _ && [+_[0], +_[1]];
+ return zoom;
+ };
+ zoom.x = function (z) {
+ if (!arguments.length) return x1;
+ x1 = z;
+ x0 = z.copy();
+ view = {
+ x: 0,
+ y: 0,
+ k: 1
+ };
+ return zoom;
+ };
+ zoom.y = function (z) {
+ if (!arguments.length) return y1;
+ y1 = z;
+ y0 = z.copy();
+ view = {
+ x: 0,
+ y: 0,
+ k: 1
+ };
+ return zoom;
+ };
+ function location(p) {
+ return [(p[0] - view.x) / view.k, (p[1] - view.y) / view.k];
+ }
+
+ function point(l) {
+ return [l[0] * view.k + view.x, l[1] * view.k + view.y];
+ }
+
+ function scaleTo(s) {
+ view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
+ }
+
+ function translateTo(p, l) {
+ l = point(l);
+ view.x += p[0] - l[0];
+ view.y += p[1] - l[1];
+ }
+
+ function rescale() {
+ if (x1) x1.domain(x0.range().map(function (x) {
+ return (x - view.x) / view.k;
+ }).map(x0.invert));
+ if (y1) y1.domain(y0.range().map(function (y) {
+ return (y - view.y) / view.k;
+ }).map(y0.invert));
+ }
+
+ function zoomstarted(dispatch) {
+ dispatch({
+ type: "zoomstart"
+ });
+ }
+
+ function zoomed(dispatch) {
+ rescale();
+ dispatch({
+ type: "zoom",
+ scale: view.k,
+ translate: [view.x, view.y]
+ });
+ }
+
+ function zoomended(dispatch) {
+ dispatch({
+ type: "zoomend"
+ });
+ }
+
+ function mousedowned() {
+ var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress();
+ d3_selection_interrupt.call(that);
+ zoomstarted(dispatch);
+ function moved() {
+ dragged = 1;
+ translateTo(d3.mouse(that), location0);
+ zoomed(dispatch);
+ }
+
+ function ended() {
+ subject.on(mousemove, null).on(mouseup, null);
+ dragRestore(dragged && d3.event.target === target);
+ zoomended(dispatch);
+ }
+ }
+
+ function touchstarted() {
+ var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress();
+ d3_selection_interrupt.call(that);
+ started();
+ zoomstarted(dispatch);
+ subject.on(mousedown, null).on(touchstart, started);
+ function relocate() {
+ var touches = d3.touches(that);
+ scale0 = view.k;
+ touches.forEach(function (t) {
+ if (t.identifier in locations0) locations0[t.identifier] = location(t);
+ });
+ return touches;
+ }
+
+ function started() {
+ var target = d3.event.target;
+ d3.select(target).on(touchmove, moved).on(touchend, ended);
+ targets.push(target);
+ var changed = d3.event.changedTouches;
+ for (var i = 0, n = changed.length; i < n; ++i) {
+ locations0[changed[i].identifier] = null;
+ }
+ var touches = relocate(), now = Date.now();
+ if (touches.length === 1) {
+ if (now - touchtime < 500) {
+ var p = touches[0], l = locations0[p.identifier];
+ scaleTo(view.k * 2);
+ translateTo(p, l);
+ d3_eventPreventDefault();
+ zoomed(dispatch);
+ }
+ touchtime = now;
+ } else if (touches.length > 1) {
+ var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];
+ distance0 = dx * dx + dy * dy;
+ }
+ }
+
+ function moved() {
+ var touches = d3.touches(that), p0, l0, p1, l1;
+ for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
+ p1 = touches[i];
+ if (l1 = locations0[p1.identifier]) {
+ if (l0) break;
+ p0 = p1, l0 = l1;
+ }
+ }
+ if (l1) {
+ var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);
+ p0 = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
+ l0 = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+ scaleTo(scale1 * scale0);
+ }
+ touchtime = null;
+ translateTo(p0, l0);
+ zoomed(dispatch);
+ }
+
+ function ended() {
+ if (d3.event.touches.length) {
+ var changed = d3.event.changedTouches;
+ for (var i = 0, n = changed.length; i < n; ++i) {
+ delete locations0[changed[i].identifier];
+ }
+ for (var identifier in locations0) {
+ return void relocate();
+ }
+ }
+ d3.selectAll(targets).on(zoomName, null);
+ subject.on(mousedown, mousedowned).on(touchstart, touchstarted);
+ dragRestore();
+ zoomended(dispatch);
+ }
+ }
+
+ function mousewheeled() {
+ var dispatch = event.of(this, arguments);
+ if (mousewheelTimer) clearTimeout(mousewheelTimer); else translate0 = location(center0 = center || d3.mouse(this)),
+ d3_selection_interrupt.call(this), zoomstarted(dispatch);
+ mousewheelTimer = setTimeout(function () {
+ mousewheelTimer = null;
+ zoomended(dispatch);
+ }, 50);
+ d3_eventPreventDefault();
+ scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
+ translateTo(center0, translate0);
+ zoomed(dispatch);
+ }
+
+ function dblclicked() {
+ var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2;
+ zoomstarted(dispatch);
+ scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
+ translateTo(p, l);
+ zoomed(dispatch);
+ zoomended(dispatch);
+ }
+
+ return d3.rebind(zoom, event, "on");
+ };
+ var d3_behavior_zoomInfinity = [0, Infinity];
+ var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function () {
+ return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
+ }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function () {
+ return d3.event.wheelDelta;
+ }, "mousewheel") : (d3_behavior_zoomDelta = function () {
+ return -d3.event.detail;
+ }, "MozMousePixelScroll");
+ d3.color = d3_color;
+ function d3_color() {
+ }
+
+ d3_color.prototype.toString = function () {
+ return this.rgb() + "";
+ };
+ d3.hsl = d3_hsl;
+ function d3_hsl(h, s, l) {
+ return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);
+ }
+
+ var d3_hslPrototype = d3_hsl.prototype = new d3_color();
+ d3_hslPrototype.brighter = function (k) {
+ k = Math.pow(.7, arguments.length ? k : 1);
+ return new d3_hsl(this.h, this.s, this.l / k);
+ };
+ d3_hslPrototype.darker = function (k) {
+ k = Math.pow(.7, arguments.length ? k : 1);
+ return new d3_hsl(this.h, this.s, k * this.l);
+ };
+ d3_hslPrototype.rgb = function () {
+ return d3_hsl_rgb(this.h, this.s, this.l);
+ };
+ function d3_hsl_rgb(h, s, l) {
+ var m1, m2;
+ h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
+ s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
+ l = l < 0 ? 0 : l > 1 ? 1 : l;
+ m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
+ m1 = 2 * l - m2;
+ function v(h) {
+ if (h > 360) h -= 360; else if (h < 0) h += 360;
+ if (h < 60) return m1 + (m2 - m1) * h / 60;
+ if (h < 180) return m2;
+ if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
+ return m1;
+ }
+
+ function vv(h) {
+ return Math.round(v(h) * 255);
+ }
+
+ return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));
+ }
+
+ d3.hcl = d3_hcl;
+ function d3_hcl(h, c, l) {
+ return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);
+ }
+
+ var d3_hclPrototype = d3_hcl.prototype = new d3_color();
+ d3_hclPrototype.brighter = function (k) {
+ return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
+ };
+ d3_hclPrototype.darker = function (k) {
+ return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
+ };
+ d3_hclPrototype.rgb = function () {
+ return d3_hcl_lab(this.h, this.c, this.l).rgb();
+ };
+ function d3_hcl_lab(h, c, l) {
+ if (isNaN(h)) h = 0;
+ if (isNaN(c)) c = 0;
+ return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
+ }
+
+ d3.lab = d3_lab;
+ function d3_lab(l, a, b) {
+ return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
+ }
+
+ var d3_lab_K = 18;
+ var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
+ var d3_labPrototype = d3_lab.prototype = new d3_color();
+ d3_labPrototype.brighter = function (k) {
+ return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
+ };
+ d3_labPrototype.darker = function (k) {
+ return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
+ };
+ d3_labPrototype.rgb = function () {
+ return d3_lab_rgb(this.l, this.a, this.b);
+ };
+ function d3_lab_rgb(l, a, b) {
+ var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
+ x = d3_lab_xyz(x) * d3_lab_X;
+ y = d3_lab_xyz(y) * d3_lab_Y;
+ z = d3_lab_xyz(z) * d3_lab_Z;
+ return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
+ }
+
+ function d3_lab_hcl(l, a, b) {
+ return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);
+ }
+
+ function d3_lab_xyz(x) {
+ return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
+ }
+
+ function d3_xyz_lab(x) {
+ return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
+ }
+
+ function d3_xyz_rgb(r) {
+ return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
+ }
+
+ d3.rgb = d3_rgb;
+ function d3_rgb(r, g, b) {
+ return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);
+ }
+
+ function d3_rgbNumber(value) {
+ return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);
+ }
+
+ function d3_rgbString(value) {
+ return d3_rgbNumber(value) + "";
+ }
+
+ var d3_rgbPrototype = d3_rgb.prototype = new d3_color();
+ d3_rgbPrototype.brighter = function (k) {
+ k = Math.pow(.7, arguments.length ? k : 1);
+ var r = this.r, g = this.g, b = this.b, i = 30;
+ if (!r && !g && !b) return new d3_rgb(i, i, i);
+ if (r && r < i) r = i;
+ if (g && g < i) g = i;
+ if (b && b < i) b = i;
+ return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));
+ };
+ d3_rgbPrototype.darker = function (k) {
+ k = Math.pow(.7, arguments.length ? k : 1);
+ return new d3_rgb(k * this.r, k * this.g, k * this.b);
+ };
+ d3_rgbPrototype.hsl = function () {
+ return d3_rgb_hsl(this.r, this.g, this.b);
+ };
+ d3_rgbPrototype.toString = function () {
+ return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
+ };
+ function d3_rgb_hex(v) {
+ return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
+ }
+
+ function d3_rgb_parse(format, rgb, hsl) {
+ var r = 0, g = 0, b = 0, m1, m2, color;
+ m1 = /([a-z]+)\((.*)\)/i.exec(format);
+ if (m1) {
+ m2 = m1[2].split(",");
+ switch (m1[1]) {
+ case "hsl":
+ {
+ return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
+ }
+
+ case "rgb":
+ {
+ return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
+ }
+ }
+ }
+ if (color = d3_rgb_names.get(format)) return rgb(color.r, color.g, color.b);
+ if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
+ if (format.length === 4) {
+ r = (color & 3840) >> 4;
+ r = r >> 4 | r;
+ g = color & 240;
+ g = g >> 4 | g;
+ b = color & 15;
+ b = b << 4 | b;
+ } else if (format.length === 7) {
+ r = (color & 16711680) >> 16;
+ g = (color & 65280) >> 8;
+ b = color & 255;
+ }
+ }
+ return rgb(r, g, b);
+ }
+
+ function d3_rgb_hsl(r, g, b) {
+ var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
+ if (d) {
+ s = l < .5 ? d / (max + min) : d / (2 - max - min);
+ if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
+ h *= 60;
+ } else {
+ h = NaN;
+ s = l > 0 && l < 1 ? 0 : h;
+ }
+ return new d3_hsl(h, s, l);
+ }
+
+ function d3_rgb_lab(r, g, b) {
+ r = d3_rgb_xyz(r);
+ g = d3_rgb_xyz(g);
+ b = d3_rgb_xyz(b);
+ var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
+ return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
+ }
+
+ function d3_rgb_xyz(r) {
+ return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
+ }
+
+ function d3_rgb_parseNumber(c) {
+ var f = parseFloat(c);
+ return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
+ }
+
+ var d3_rgb_names = d3.map({
+ aliceblue: 15792383,
+ antiquewhite: 16444375,
+ aqua: 65535,
+ aquamarine: 8388564,
+ azure: 15794175,
+ beige: 16119260,
+ bisque: 16770244,
+ black: 0,
+ blanchedalmond: 16772045,
+ blue: 255,
+ blueviolet: 9055202,
+ brown: 10824234,
+ burlywood: 14596231,
+ cadetblue: 6266528,
+ chartreuse: 8388352,
+ chocolate: 13789470,
+ coral: 16744272,
+ cornflowerblue: 6591981,
+ cornsilk: 16775388,
+ crimson: 14423100,
+ cyan: 65535,
+ darkblue: 139,
+ darkcyan: 35723,
+ darkgoldenrod: 12092939,
+ darkgray: 11119017,
+ darkgreen: 25600,
+ darkgrey: 11119017,
+ darkkhaki: 12433259,
+ darkmagenta: 9109643,
+ darkolivegreen: 5597999,
+ darkorange: 16747520,
+ darkorchid: 10040012,
+ darkred: 9109504,
+ darksalmon: 15308410,
+ darkseagreen: 9419919,
+ darkslateblue: 4734347,
+ darkslategray: 3100495,
+ darkslategrey: 3100495,
+ darkturquoise: 52945,
+ darkviolet: 9699539,
+ deeppink: 16716947,
+ deepskyblue: 49151,
+ dimgray: 6908265,
+ dimgrey: 6908265,
+ dodgerblue: 2003199,
+ firebrick: 11674146,
+ floralwhite: 16775920,
+ forestgreen: 2263842,
+ fuchsia: 16711935,
+ gainsboro: 14474460,
+ ghostwhite: 16316671,
+ gold: 16766720,
+ goldenrod: 14329120,
+ gray: 8421504,
+ green: 32768,
+ greenyellow: 11403055,
+ grey: 8421504,
+ honeydew: 15794160,
+ hotpink: 16738740,
+ indianred: 13458524,
+ indigo: 4915330,
+ ivory: 16777200,
+ khaki: 15787660,
+ lavender: 15132410,
+ lavenderblush: 16773365,
+ lawngreen: 8190976,
+ lemonchiffon: 16775885,
+ lightblue: 11393254,
+ lightcoral: 15761536,
+ lightcyan: 14745599,
+ lightgoldenrodyellow: 16448210,
+ lightgray: 13882323,
+ lightgreen: 9498256,
+ lightgrey: 13882323,
+ lightpink: 16758465,
+ lightsalmon: 16752762,
+ lightseagreen: 2142890,
+ lightskyblue: 8900346,
+ lightslategray: 7833753,
+ lightslategrey: 7833753,
+ lightsteelblue: 11584734,
+ lightyellow: 16777184,
+ lime: 65280,
+ limegreen: 3329330,
+ linen: 16445670,
+ magenta: 16711935,
+ maroon: 8388608,
+ mediumaquamarine: 6737322,
+ mediumblue: 205,
+ mediumorchid: 12211667,
+ mediumpurple: 9662683,
+ mediumseagreen: 3978097,
+ mediumslateblue: 8087790,
+ mediumspringgreen: 64154,
+ mediumturquoise: 4772300,
+ mediumvioletred: 13047173,
+ midnightblue: 1644912,
+ mintcream: 16121850,
+ mistyrose: 16770273,
+ moccasin: 16770229,
+ navajowhite: 16768685,
+ navy: 128,
+ oldlace: 16643558,
+ olive: 8421376,
+ olivedrab: 7048739,
+ orange: 16753920,
+ orangered: 16729344,
+ orchid: 14315734,
+ palegoldenrod: 15657130,
+ palegreen: 10025880,
+ paleturquoise: 11529966,
+ palevioletred: 14381203,
+ papayawhip: 16773077,
+ peachpuff: 16767673,
+ peru: 13468991,
+ pink: 16761035,
+ plum: 14524637,
+ powderblue: 11591910,
+ purple: 8388736,
+ red: 16711680,
+ rosybrown: 12357519,
+ royalblue: 4286945,
+ saddlebrown: 9127187,
+ salmon: 16416882,
+ sandybrown: 16032864,
+ seagreen: 3050327,
+ seashell: 16774638,
+ sienna: 10506797,
+ silver: 12632256,
+ skyblue: 8900331,
+ slateblue: 6970061,
+ slategray: 7372944,
+ slategrey: 7372944,
+ snow: 16775930,
+ springgreen: 65407,
+ steelblue: 4620980,
+ tan: 13808780,
+ teal: 32896,
+ thistle: 14204888,
+ tomato: 16737095,
+ turquoise: 4251856,
+ violet: 15631086,
+ wheat: 16113331,
+ white: 16777215,
+ whitesmoke: 16119285,
+ yellow: 16776960,
+ yellowgreen: 10145074
+ });
+ d3_rgb_names.forEach(function (key, value) {
+ d3_rgb_names.set(key, d3_rgbNumber(value));
+ });
+ function d3_functor(v) {
+ return typeof v === "function" ? v : function () {
+ return v;
+ };
+ }
+
+ d3.functor = d3_functor;
+ function d3_identity(d) {
+ return d;
+ }
+
+ d3.xhr = d3_xhrType(d3_identity);
+ function d3_xhrType(response) {
+ return function (url, mimeType, callback) {
+ if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType,
+ mimeType = null;
+ return d3_xhr(url, mimeType, response, callback);
+ };
+ }
+
+ function d3_xhr(url, mimeType, response, callback) {
+ var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
+ if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
+ "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function () {
+ request.readyState > 3 && respond();
+ };
+ function respond() {
+ var status = request.status, result;
+ if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
+ try {
+ result = response.call(xhr, request);
+ } catch (e) {
+ dispatch.error.call(xhr, e);
+ return;
+ }
+ dispatch.load.call(xhr, result);
+ } else {
+ dispatch.error.call(xhr, request);
+ }
+ }
+
+ request.onprogress = function (event) {
+ var o = d3.event;
+ d3.event = event;
+ try {
+ dispatch.progress.call(xhr, request);
+ } finally {
+ d3.event = o;
+ }
+ };
+ xhr.header = function (name, value) {
+ name = (name + "").toLowerCase();
+ if (arguments.length < 2) return headers[name];
+ if (value == null) delete headers[name]; else headers[name] = value + "";
+ return xhr;
+ };
+ xhr.mimeType = function (value) {
+ if (!arguments.length) return mimeType;
+ mimeType = value == null ? null : value + "";
+ return xhr;
+ };
+ xhr.responseType = function (value) {
+ if (!arguments.length) return responseType;
+ responseType = value;
+ return xhr;
+ };
+ xhr.response = function (value) {
+ response = value;
+ return xhr;
+ };
+ ["get", "post"].forEach(function (method) {
+ xhr[method] = function () {
+ return xhr.send.apply(xhr, [method].concat(d3_array(arguments)));
+ };
+ });
+ xhr.send = function (method, data, callback) {
+ if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
+ request.open(method, url, true);
+ if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
+ if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
+ if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
+ if (responseType != null) request.responseType = responseType;
+ if (callback != null) xhr.on("error", callback).on("load", function (request) {
+ callback(null, request);
+ });
+ dispatch.beforesend.call(xhr, request);
+ request.send(data == null ? null : data);
+ return xhr;
+ };
+ xhr.abort = function () {
+ request.abort();
+ return xhr;
+ };
+ d3.rebind(xhr, dispatch, "on");
+ return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
+ }
+
+ function d3_xhr_fixCallback(callback) {
+ return callback.length === 1 ? function (error, request) {
+ callback(error == null ? request : null);
+ } : callback;
+ }
+
+ function d3_xhrHasResponse(request) {
+ var type = request.responseType;
+ return type && type !== "text" ? request.response : request.responseText;
+ }
+
+ d3.dsv = function (delimiter, mimeType) {
+ var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
+
+ function dsv(url, row, callback) {
+ if (arguments.length < 3) callback = row, row = null;
+ var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);
+ xhr.row = function (_) {
+ return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;
+ };
+ return xhr;
+ }
+
+ function response(request) {
+ return dsv.parse(request.responseText);
+ }
+
+ function typedResponse(f) {
+ return function (request) {
+ return dsv.parse(request.responseText, f);
+ };
+ }
+
+ dsv.parse = function (text, f) {
+ var o;
+ return dsv.parseRows(text, function (row, i) {
+ if (o) return o(row, i - 1);
+ var a = new Function("d", "return {" + row.map(function (name, i) {
+ return JSON.stringify(name) + ": d[" + i + "]";
+ }).join(",") + "}");
+ o = f ? function (row, i) {
+ return f(a(row), i);
+ } : a;
+ });
+ };
+ dsv.parseRows = function (text, f) {
+ var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
+
+ function token() {
+ if (I >= N) return EOF;
+ if (eol) return eol = false, EOL;
+ var j = I;
+ if (text.charCodeAt(j) === 34) {
+ var i = j;
+ while (i++ < N) {
+ if (text.charCodeAt(i) === 34) {
+ if (text.charCodeAt(i + 1) !== 34) break;
+ ++i;
+ }
+ }
+ I = i + 2;
+ var c = text.charCodeAt(i + 1);
+ if (c === 13) {
+ eol = true;
+ if (text.charCodeAt(i + 2) === 10) ++I;
+ } else if (c === 10) {
+ eol = true;
+ }
+ return text.slice(j + 1, i).replace(/""/g, '"');
+ }
+ while (I < N) {
+ var c = text.charCodeAt(I++), k = 1;
+ if (c === 10) eol = true; else if (c === 13) {
+ eol = true;
+ if (text.charCodeAt(I) === 10) ++I, ++k;
+ } else if (c !== delimiterCode) continue;
+ return text.slice(j, I - k);
+ }
+ return text.slice(j);
+ }
+
+ while ((t = token()) !== EOF) {
+ var a = [];
+ while (t !== EOL && t !== EOF) {
+ a.push(t);
+ t = token();
+ }
+ if (f && !(a = f(a, n++))) continue;
+ rows.push(a);
+ }
+ return rows;
+ };
+ dsv.format = function (rows) {
+ if (Array.isArray(rows[0])) return dsv.formatRows(rows);
+ var fieldSet = new d3_Set(), fields = [];
+ rows.forEach(function (row) {
+ for (var field in row) {
+ if (!fieldSet.has(field)) {
+ fields.push(fieldSet.add(field));
+ }
+ }
+ });
+ return [fields.map(formatValue).join(delimiter)].concat(rows.map(function (row) {
+ return fields.map(function (field) {
+ return formatValue(row[field]);
+ }).join(delimiter);
+ })).join("\n");
+ };
+ dsv.formatRows = function (rows) {
+ return rows.map(formatRow).join("\n");
+ };
+ function formatRow(row) {
+ return row.map(formatValue).join(delimiter);
+ }
+
+ function formatValue(text) {
+ return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
+ }
+
+ return dsv;
+ };
+ d3.csv = d3.dsv(",", "text/csv");
+ d3.tsv = d3.dsv(" ", "text/tab-separated-values");
+ var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function (callback) {
+ setTimeout(callback, 17);
+ };
+ d3.timer = function (callback, delay, then) {
+ var n = arguments.length;
+ if (n < 2) delay = 0;
+ if (n < 3) then = Date.now();
+ var time = then + delay, timer = {
+ c: callback,
+ t: time,
+ f: false,
+ n: null
+ };
+ if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;
+ d3_timer_queueTail = timer;
+ if (!d3_timer_interval) {
+ d3_timer_timeout = clearTimeout(d3_timer_timeout);
+ d3_timer_interval = 1;
+ d3_timer_frame(d3_timer_step);
+ }
+ };
+ function d3_timer_step() {
+ var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
+ if (delay > 24) {
+ if (isFinite(delay)) {
+ clearTimeout(d3_timer_timeout);
+ d3_timer_timeout = setTimeout(d3_timer_step, delay);
+ }
+ d3_timer_interval = 0;
+ } else {
+ d3_timer_interval = 1;
+ d3_timer_frame(d3_timer_step);
+ }
+ }
+
+ d3.timer.flush = function () {
+ d3_timer_mark();
+ d3_timer_sweep();
+ };
+ function d3_timer_mark() {
+ var now = Date.now();
+ d3_timer_active = d3_timer_queueHead;
+ while (d3_timer_active) {
+ if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);
+ d3_timer_active = d3_timer_active.n;
+ }
+ return now;
+ }
+
+ function d3_timer_sweep() {
+ var t0, t1 = d3_timer_queueHead, time = Infinity;
+ while (t1) {
+ if (t1.f) {
+ t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
+ } else {
+ if (t1.t < time) time = t1.t;
+ t1 = (t0 = t1).n;
+ }
+ }
+ d3_timer_queueTail = t0;
+ return time;
+ }
+
+ function d3_format_precision(x, p) {
+ return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
+ }
+
+ d3.round = function (x, n) {
+ return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
+ };
+ var d3_formatPrefixes = ["y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"].map(d3_formatPrefix);
+ d3.formatPrefix = function (value, precision) {
+ var i = 0;
+ if (value) {
+ if (value < 0) value *= -1;
+ if (precision) value = d3.round(value, d3_format_precision(value, precision));
+ i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
+ i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));
+ }
+ return d3_formatPrefixes[8 + i / 3];
+ };
+ function d3_formatPrefix(d, i) {
+ var k = Math.pow(10, abs(8 - i) * 3);
+ return {
+ scale: i > 8 ? function (d) {
+ return d / k;
+ } : function (d) {
+ return d * k;
+ },
+ symbol: d
+ };
+ }
+
+ function d3_locale_numberFormat(locale) {
+ var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function (value) {
+ var i = value.length, t = [], j = 0, g = locale_grouping[0];
+ while (g > 0 && i > 0) {
+ t.push(value.substring(i -= g, i + g));
+ g = locale_grouping[j = (j + 1) % locale_grouping.length];
+ }
+ return t.reverse().join(locale_thousands);
+ } : d3_identity;
+ return function (specifier) {
+ var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false;
+ if (precision) precision = +precision.substring(1);
+ if (zfill || fill === "0" && align === "=") {
+ zfill = fill = "0";
+ align = "=";
+ if (comma) width -= Math.floor((width - 1) / 4);
+ }
+ switch (type) {
+ case "n":
+ comma = true;
+ type = "g";
+ break;
+
+ case "%":
+ scale = 100;
+ suffix = "%";
+ type = "f";
+ break;
+
+ case "p":
+ scale = 100;
+ suffix = "%";
+ type = "r";
+ break;
+
+ case "b":
+ case "o":
+ case "x":
+ case "X":
+ if (symbol === "#") prefix = "0" + type.toLowerCase();
+
+ case "c":
+ case "d":
+ integer = true;
+ precision = 0;
+ break;
+
+ case "s":
+ scale = -1;
+ type = "r";
+ break;
+ }
+ if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1];
+ if (type == "r" && !precision) type = "g";
+ if (precision != null) {
+ if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision));
+ }
+ type = d3_format_types.get(type) || d3_format_typeDefault;
+ var zcomma = zfill && comma;
+ return function (value) {
+ var fullSuffix = suffix;
+ if (integer && value % 1) return "";
+ var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
+ if (scale < 0) {
+ var unit = d3.formatPrefix(value, precision);
+ value = unit.scale(value);
+ fullSuffix = unit.symbol + suffix;
+ } else {
+ value *= scale;
+ }
+ value = type(value, precision);
+ var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1);
+ if (!zfill && comma) before = formatGroup(before);
+ var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
+ if (zcomma) before = formatGroup(padding + before);
+ negative += prefix;
+ value = before + after;
+ return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
+ };
+ };
+ }
+
+ var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i;
+ var d3_format_types = d3.map({
+ b: function (x) {
+ return x.toString(2);
+ },
+ c: function (x) {
+ return String.fromCharCode(x);
+ },
+ o: function (x) {
+ return x.toString(8);
+ },
+ x: function (x) {
+ return x.toString(16);
+ },
+ X: function (x) {
+ return x.toString(16).toUpperCase();
+ },
+ g: function (x, p) {
+ return x.toPrecision(p);
+ },
+ e: function (x, p) {
+ return x.toExponential(p);
+ },
+ f: function (x, p) {
+ return x.toFixed(p);
+ },
+ r: function (x, p) {
+ return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
+ }
+ });
+
+ function d3_format_typeDefault(x) {
+ return x + "";
+ }
+
+ var d3_time = d3.time = {}, d3_date = Date;
+
+ function d3_date_utc() {
+ this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
+ }
+
+ d3_date_utc.prototype = {
+ getDate: function () {
+ return this._.getUTCDate();
+ },
+ getDay: function () {
+ return this._.getUTCDay();
+ },
+ getFullYear: function () {
+ return this._.getUTCFullYear();
+ },
+ getHours: function () {
+ return this._.getUTCHours();
+ },
+ getMilliseconds: function () {
+ return this._.getUTCMilliseconds();
+ },
+ getMinutes: function () {
+ return this._.getUTCMinutes();
+ },
+ getMonth: function () {
+ return this._.getUTCMonth();
+ },
+ getSeconds: function () {
+ return this._.getUTCSeconds();
+ },
+ getTime: function () {
+ return this._.getTime();
+ },
+ getTimezoneOffset: function () {
+ return 0;
+ },
+ valueOf: function () {
+ return this._.valueOf();
+ },
+ setDate: function () {
+ d3_time_prototype.setUTCDate.apply(this._, arguments);
+ },
+ setDay: function () {
+ d3_time_prototype.setUTCDay.apply(this._, arguments);
+ },
+ setFullYear: function () {
+ d3_time_prototype.setUTCFullYear.apply(this._, arguments);
+ },
+ setHours: function () {
+ d3_time_prototype.setUTCHours.apply(this._, arguments);
+ },
+ setMilliseconds: function () {
+ d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
+ },
+ setMinutes: function () {
+ d3_time_prototype.setUTCMinutes.apply(this._, arguments);
+ },
+ setMonth: function () {
+ d3_time_prototype.setUTCMonth.apply(this._, arguments);
+ },
+ setSeconds: function () {
+ d3_time_prototype.setUTCSeconds.apply(this._, arguments);
+ },
+ setTime: function () {
+ d3_time_prototype.setTime.apply(this._, arguments);
+ }
+ };
+ var d3_time_prototype = Date.prototype;
+
+ function d3_time_interval(local, step, number) {
+ function round(date) {
+ var d0 = local(date), d1 = offset(d0, 1);
+ return date - d0 < d1 - date ? d0 : d1;
+ }
+
+ function ceil(date) {
+ step(date = local(new d3_date(date - 1)), 1);
+ return date;
+ }
+
+ function offset(date, k) {
+ step(date = new d3_date(+date), k);
+ return date;
+ }
+
+ function range(t0, t1, dt) {
+ var time = ceil(t0), times = [];
+ if (dt > 1) {
+ while (time < t1) {
+ if (!(number(time) % dt)) times.push(new Date(+time));
+ step(time, 1);
+ }
+ } else {
+ while (time < t1) times.push(new Date(+time)), step(time, 1);
+ }
+ return times;
+ }
+
+ function range_utc(t0, t1, dt) {
+ try {
+ d3_date = d3_date_utc;
+ var utc = new d3_date_utc();
+ utc._ = t0;
+ return range(utc, t1, dt);
+ } finally {
+ d3_date = Date;
+ }
+ }
+
+ local.floor = local;
+ local.round = round;
+ local.ceil = ceil;
+ local.offset = offset;
+ local.range = range;
+ var utc = local.utc = d3_time_interval_utc(local);
+ utc.floor = utc;
+ utc.round = d3_time_interval_utc(round);
+ utc.ceil = d3_time_interval_utc(ceil);
+ utc.offset = d3_time_interval_utc(offset);
+ utc.range = range_utc;
+ return local;
+ }
+
+ function d3_time_interval_utc(method) {
+ return function (date, k) {
+ try {
+ d3_date = d3_date_utc;
+ var utc = new d3_date_utc();
+ utc._ = date;
+ return method(utc, k)._;
+ } finally {
+ d3_date = Date;
+ }
+ };
+ }
+
+ d3_time.year = d3_time_interval(function (date) {
+ date = d3_time.day(date);
+ date.setMonth(0, 1);
+ return date;
+ }, function (date, offset) {
+ date.setFullYear(date.getFullYear() + offset);
+ }, function (date) {
+ return date.getFullYear();
+ });
+ d3_time.years = d3_time.year.range;
+ d3_time.years.utc = d3_time.year.utc.range;
+ d3_time.day = d3_time_interval(function (date) {
+ var day = new d3_date(2e3, 0);
+ day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+ return day;
+ }, function (date, offset) {
+ date.setDate(date.getDate() + offset);
+ }, function (date) {
+ return date.getDate() - 1;
+ });
+ d3_time.days = d3_time.day.range;
+ d3_time.days.utc = d3_time.day.utc.range;
+ d3_time.dayOfYear = function (date) {
+ var year = d3_time.year(date);
+ return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
+ };
+ ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"].forEach(function (day, i) {
+ i = 7 - i;
+ var interval = d3_time[day] = d3_time_interval(function (date) {
+ (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
+ return date;
+ }, function (date, offset) {
+ date.setDate(date.getDate() + Math.floor(offset) * 7);
+ }, function (date) {
+ var day = d3_time.year(date).getDay();
+ return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
+ });
+ d3_time[day + "s"] = interval.range;
+ d3_time[day + "s"].utc = interval.utc.range;
+ d3_time[day + "OfYear"] = function (date) {
+ var day = d3_time.year(date).getDay();
+ return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);
+ };
+ });
+ d3_time.week = d3_time.sunday;
+ d3_time.weeks = d3_time.sunday.range;
+ d3_time.weeks.utc = d3_time.sunday.utc.range;
+ d3_time.weekOfYear = d3_time.sundayOfYear;
+ function d3_locale_timeFormat(locale) {
+ var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;
+
+ function d3_time_format(template) {
+ var n = template.length;
+
+ function format(date) {
+ var string = [], i = -1, j = 0, c, p, f;
+ while (++i < n) {
+ if (template.charCodeAt(i) === 37) {
+ string.push(template.slice(j, i));
+ if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
+ if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
+ string.push(c);
+ j = i + 1;
+ }
+ }
+ string.push(template.slice(j, i));
+ return string.join("");
+ }
+
+ format.parse = function (string) {
+ var d = {
+ y: 1900,
+ m: 0,
+ d: 1,
+ H: 0,
+ M: 0,
+ S: 0,
+ L: 0,
+ Z: null
+ }, i = d3_time_parse(d, template, string, 0);
+ if (i != string.length) return null;
+ if ("p" in d) d.H = d.H % 12 + d.p * 12;
+ var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
+ if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) {
+ date.setFullYear(d.y, 0, 1);
+ date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
+ } else date.setFullYear(d.y, d.m, d.d);
+ date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
+ return localZ ? date._ : date;
+ };
+ format.toString = function () {
+ return template;
+ };
+ return format;
+ }
+
+ function d3_time_parse(date, template, string, j) {
+ var c, p, t, i = 0, n = template.length, m = string.length;
+ while (i < n) {
+ if (j >= m) return -1;
+ c = template.charCodeAt(i++);
+ if (c === 37) {
+ t = template.charAt(i++);
+ p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];
+ if (!p || (j = p(date, string, j)) < 0) return -1;
+ } else if (c != string.charCodeAt(j++)) {
+ return -1;
+ }
+ }
+ return j;
+ }
+
+ d3_time_format.utc = function (template) {
+ var local = d3_time_format(template);
+
+ function format(date) {
+ try {
+ d3_date = d3_date_utc;
+ var utc = new d3_date();
+ utc._ = date;
+ return local(utc);
+ } finally {
+ d3_date = Date;
+ }
+ }
+
+ format.parse = function (string) {
+ try {
+ d3_date = d3_date_utc;
+ var date = local.parse(string);
+ return date && date._;
+ } finally {
+ d3_date = Date;
+ }
+ };
+ format.toString = local.toString;
+ return format;
+ };
+ d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;
+ var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);
+ locale_periods.forEach(function (p, i) {
+ d3_time_periodLookup.set(p.toLowerCase(), i);
+ });
+ var d3_time_formats = {
+ a: function (d) {
+ return locale_shortDays[d.getDay()];
+ },
+ A: function (d) {
+ return locale_days[d.getDay()];
+ },
+ b: function (d) {
+ return locale_shortMonths[d.getMonth()];
+ },
+ B: function (d) {
+ return locale_months[d.getMonth()];
+ },
+ c: d3_time_format(locale_dateTime),
+ d: function (d, p) {
+ return d3_time_formatPad(d.getDate(), p, 2);
+ },
+ e: function (d, p) {
+ return d3_time_formatPad(d.getDate(), p, 2);
+ },
+ H: function (d, p) {
+ return d3_time_formatPad(d.getHours(), p, 2);
+ },
+ I: function (d, p) {
+ return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
+ },
+ j: function (d, p) {
+ return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);
+ },
+ L: function (d, p) {
+ return d3_time_formatPad(d.getMilliseconds(), p, 3);
+ },
+ m: function (d, p) {
+ return d3_time_formatPad(d.getMonth() + 1, p, 2);
+ },
+ M: function (d, p) {
+ return d3_time_formatPad(d.getMinutes(), p, 2);
+ },
+ p: function (d) {
+ return locale_periods[+(d.getHours() >= 12)];
+ },
+ S: function (d, p) {
+ return d3_time_formatPad(d.getSeconds(), p, 2);
+ },
+ U: function (d, p) {
+ return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);
+ },
+ w: function (d) {
+ return d.getDay();
+ },
+ W: function (d, p) {
+ return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);
+ },
+ x: d3_time_format(locale_date),
+ X: d3_time_format(locale_time),
+ y: function (d, p) {
+ return d3_time_formatPad(d.getFullYear() % 100, p, 2);
+ },
+ Y: function (d, p) {
+ return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
+ },
+ Z: d3_time_zone,
+ "%": function () {
+ return "%";
+ }
+ };
+ var d3_time_parsers = {
+ a: d3_time_parseWeekdayAbbrev,
+ A: d3_time_parseWeekday,
+ b: d3_time_parseMonthAbbrev,
+ B: d3_time_parseMonth,
+ c: d3_time_parseLocaleFull,
+ d: d3_time_parseDay,
+ e: d3_time_parseDay,
+ H: d3_time_parseHour24,
+ I: d3_time_parseHour24,
+ j: d3_time_parseDayOfYear,
+ L: d3_time_parseMilliseconds,
+ m: d3_time_parseMonthNumber,
+ M: d3_time_parseMinutes,
+ p: d3_time_parseAmPm,
+ S: d3_time_parseSeconds,
+ U: d3_time_parseWeekNumberSunday,
+ w: d3_time_parseWeekdayNumber,
+ W: d3_time_parseWeekNumberMonday,
+ x: d3_time_parseLocaleDate,
+ X: d3_time_parseLocaleTime,
+ y: d3_time_parseYear,
+ Y: d3_time_parseFullYear,
+ Z: d3_time_parseZone,
+ "%": d3_time_parseLiteralPercent
+ };
+
+ function d3_time_parseWeekdayAbbrev(date, string, i) {
+ d3_time_dayAbbrevRe.lastIndex = 0;
+ var n = d3_time_dayAbbrevRe.exec(string.slice(i));
+ return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+ }
+
+ function d3_time_parseWeekday(date, string, i) {
+ d3_time_dayRe.lastIndex = 0;
+ var n = d3_time_dayRe.exec(string.slice(i));
+ return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+ }
+
+ function d3_time_parseMonthAbbrev(date, string, i) {
+ d3_time_monthAbbrevRe.lastIndex = 0;
+ var n = d3_time_monthAbbrevRe.exec(string.slice(i));
+ return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+ }
+
+ function d3_time_parseMonth(date, string, i) {
+ d3_time_monthRe.lastIndex = 0;
+ var n = d3_time_monthRe.exec(string.slice(i));
+ return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
+ }
+
+ function d3_time_parseLocaleFull(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
+ }
+
+ function d3_time_parseLocaleDate(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
+ }
+
+ function d3_time_parseLocaleTime(date, string, i) {
+ return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
+ }
+
+ function d3_time_parseAmPm(date, string, i) {
+ var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
+ return n == null ? -1 : (date.p = n, i);
+ }
+
+ return d3_time_format;
+ }
+
+ var d3_time_formatPads = {
+ "-": "",
+ _: " ",
+ "0": "0"
+ }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/;
+
+ function d3_time_formatPad(value, fill, width) {
+ var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length;
+ return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+ }
+
+ function d3_time_formatRe(names) {
+ return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
+ }
+
+ function d3_time_formatLookup(names) {
+ var map = new d3_Map(), i = -1, n = names.length;
+ while (++i < n) map.set(names[i].toLowerCase(), i);
+ return map;
+ }
+
+ function d3_time_parseWeekdayNumber(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 1));
+ return n ? (date.w = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseWeekNumberSunday(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i));
+ return n ? (date.U = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseWeekNumberMonday(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i));
+ return n ? (date.W = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseFullYear(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 4));
+ return n ? (date.y = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseYear(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
+ }
+
+ function d3_time_parseZone(date, string, i) {
+ return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string,
+ i + 5) : -1;
+ }
+
+ function d3_time_expandYear(d) {
+ return d + (d > 68 ? 1900 : 2e3);
+ }
+
+ function d3_time_parseMonthNumber(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
+ }
+
+ function d3_time_parseDay(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.d = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseDayOfYear(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
+ return n ? (date.j = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseHour24(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.H = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseMinutes(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.M = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseSeconds(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
+ return n ? (date.S = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_parseMilliseconds(date, string, i) {
+ d3_time_numberRe.lastIndex = 0;
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
+ return n ? (date.L = +n[0], i + n[0].length) : -1;
+ }
+
+ function d3_time_zone(d) {
+ var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
+ return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
+ }
+
+ function d3_time_parseLiteralPercent(date, string, i) {
+ d3_time_percentRe.lastIndex = 0;
+ var n = d3_time_percentRe.exec(string.slice(i, i + 1));
+ return n ? i + n[0].length : -1;
+ }
+
+ function d3_time_formatMulti(formats) {
+ var n = formats.length, i = -1;
+ while (++i < n) formats[i][0] = this(formats[i][0]);
+ return function (date) {
+ var i = 0, f = formats[i];
+ while (!f[1](date)) f = formats[++i];
+ return f[0](date);
+ };
+ }
+
+ d3.locale = function (locale) {
+ return {
+ numberFormat: d3_locale_numberFormat(locale),
+ timeFormat: d3_locale_timeFormat(locale)
+ };
+ };
+ var d3_locale_enUS = d3.locale({
+ decimal: ".",
+ thousands: ",",
+ grouping: [3],
+ currency: ["$", ""],
+ dateTime: "%a %b %e %X %Y",
+ date: "%m/%d/%Y",
+ time: "%H:%M:%S",
+ periods: ["AM", "PM"],
+ days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+ });
+ d3.format = d3_locale_enUS.numberFormat;
+ d3.geo = {};
+ function d3_adder() {
+ }
+
+ d3_adder.prototype = {
+ s: 0,
+ t: 0,
+ add: function (y) {
+ d3_adderSum(y, this.t, d3_adderTemp);
+ d3_adderSum(d3_adderTemp.s, this.s, this);
+ if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;
+ },
+ reset: function () {
+ this.s = this.t = 0;
+ },
+ valueOf: function () {
+ return this.s;
+ }
+ };
+ var d3_adderTemp = new d3_adder();
+
+ function d3_adderSum(a, b, o) {
+ var x = o.s = a + b, bv = x - a, av = x - bv;
+ o.t = a - av + (b - bv);
+ }
+
+ d3.geo.stream = function (object, listener) {
+ if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
+ d3_geo_streamObjectType[object.type](object, listener);
+ } else {
+ d3_geo_streamGeometry(object, listener);
+ }
+ };
+ function d3_geo_streamGeometry(geometry, listener) {
+ if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
+ d3_geo_streamGeometryType[geometry.type](geometry, listener);
+ }
+ }
+
+ var d3_geo_streamObjectType = {
+ Feature: function (feature, listener) {
+ d3_geo_streamGeometry(feature.geometry, listener);
+ },
+ FeatureCollection: function (object, listener) {
+ var features = object.features, i = -1, n = features.length;
+ while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
+ }
+ };
+ var d3_geo_streamGeometryType = {
+ Sphere: function (object, listener) {
+ listener.sphere();
+ },
+ Point: function (object, listener) {
+ object = object.coordinates;
+ listener.point(object[0], object[1], object[2]);
+ },
+ MultiPoint: function (object, listener) {
+ var coordinates = object.coordinates, i = -1, n = coordinates.length;
+ while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
+ },
+ LineString: function (object, listener) {
+ d3_geo_streamLine(object.coordinates, listener, 0);
+ },
+ MultiLineString: function (object, listener) {
+ var coordinates = object.coordinates, i = -1, n = coordinates.length;
+ while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
+ },
+ Polygon: function (object, listener) {
+ d3_geo_streamPolygon(object.coordinates, listener);
+ },
+ MultiPolygon: function (object, listener) {
+ var coordinates = object.coordinates, i = -1, n = coordinates.length;
+ while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
+ },
+ GeometryCollection: function (object, listener) {
+ var geometries = object.geometries, i = -1, n = geometries.length;
+ while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
+ }
+ };
+
+ function d3_geo_streamLine(coordinates, listener, closed) {
+ var i = -1, n = coordinates.length - closed, coordinate;
+ listener.lineStart();
+ while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
+ listener.lineEnd();
+ }
+
+ function d3_geo_streamPolygon(coordinates, listener) {
+ var i = -1, n = coordinates.length;
+ listener.polygonStart();
+ while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
+ listener.polygonEnd();
+ }
+
+ d3.geo.area = function (object) {
+ d3_geo_areaSum = 0;
+ d3.geo.stream(object, d3_geo_area);
+ return d3_geo_areaSum;
+ };
+ var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();
+ var d3_geo_area = {
+ sphere: function () {
+ d3_geo_areaSum += 4 * π;
+ },
+ point: d3_noop,
+ lineStart: d3_noop,
+ lineEnd: d3_noop,
+ polygonStart: function () {
+ d3_geo_areaRingSum.reset();
+ d3_geo_area.lineStart = d3_geo_areaRingStart;
+ },
+ polygonEnd: function () {
+ var area = 2 * d3_geo_areaRingSum;
+ d3_geo_areaSum += area < 0 ? 4 * π + area : area;
+ d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
+ }
+ };
+
+ function d3_geo_areaRingStart() {
+ var λ00, φ00, λ0, cosφ0, sinφ0;
+ d3_geo_area.point = function (λ, φ) {
+ d3_geo_area.point = nextPoint;
+ λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4),
+ sinφ0 = Math.sin(φ);
+ };
+ function nextPoint(λ, φ) {
+ λ *= d3_radians;
+ φ = φ * d3_radians / 2 + π / 4;
+ var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);
+ d3_geo_areaRingSum.add(Math.atan2(v, u));
+ λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
+ }
+
+ d3_geo_area.lineEnd = function () {
+ nextPoint(λ00, φ00);
+ };
+ }
+
+ function d3_geo_cartesian(spherical) {
+ var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
+ return [cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ)];
+ }
+
+ function d3_geo_cartesianDot(a, b) {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+ }
+
+ function d3_geo_cartesianCross(a, b) {
+ return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
+ }
+
+ function d3_geo_cartesianAdd(a, b) {
+ a[0] += b[0];
+ a[1] += b[1];
+ a[2] += b[2];
+ }
+
+ function d3_geo_cartesianScale(vector, k) {
+ return [vector[0] * k, vector[1] * k, vector[2] * k];
+ }
+
+ function d3_geo_cartesianNormalize(d) {
+ var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
+ d[0] /= l;
+ d[1] /= l;
+ d[2] /= l;
+ }
+
+ function d3_geo_spherical(cartesian) {
+ return [Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2])];
+ }
+
+ function d3_geo_sphericalEqual(a, b) {
+ return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;
+ }
+
+ d3.geo.bounds = function () {
+ var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
+ var bound = {
+ point: point,
+ lineStart: lineStart,
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ bound.point = ringPoint;
+ bound.lineStart = ringStart;
+ bound.lineEnd = ringEnd;
+ dλSum = 0;
+ d3_geo_area.polygonStart();
+ },
+ polygonEnd: function () {
+ d3_geo_area.polygonEnd();
+ bound.point = point;
+ bound.lineStart = lineStart;
+ bound.lineEnd = lineEnd;
+ if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
+ range[0] = λ0, range[1] = λ1;
+ }
+ };
+
+ function point(λ, φ) {
+ ranges.push(range = [λ0 = λ, λ1 = λ]);
+ if (φ < φ0) φ0 = φ;
+ if (φ > φ1) φ1 = φ;
+ }
+
+ function linePoint(λ, φ) {
+ var p = d3_geo_cartesian([λ * d3_radians, φ * d3_radians]);
+ if (p0) {
+ var normal = d3_geo_cartesianCross(p0, p), equatorial = [normal[1], -normal[0], 0], inflection = d3_geo_cartesianCross(equatorial, normal);
+ d3_geo_cartesianNormalize(inflection);
+ inflection = d3_geo_spherical(inflection);
+ var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;
+ if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
+ var φi = inflection[1] * d3_degrees;
+ if (φi > φ1) φ1 = φi;
+ } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
+ var φi = -inflection[1] * d3_degrees;
+ if (φi < φ0) φ0 = φi;
+ } else {
+ if (φ < φ0) φ0 = φ;
+ if (φ > φ1) φ1 = φ;
+ }
+ if (antimeridian) {
+ if (λ < λ_) {
+ if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
+ } else {
+ if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
+ }
+ } else {
+ if (λ1 >= λ0) {
+ if (λ < λ0) λ0 = λ;
+ if (λ > λ1) λ1 = λ;
+ } else {
+ if (λ > λ_) {
+ if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
+ } else {
+ if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
+ }
+ }
+ }
+ } else {
+ point(λ, φ);
+ }
+ p0 = p, λ_ = λ;
+ }
+
+ function lineStart() {
+ bound.point = linePoint;
+ }
+
+ function lineEnd() {
+ range[0] = λ0, range[1] = λ1;
+ bound.point = point;
+ p0 = null;
+ }
+
+ function ringPoint(λ, φ) {
+ if (p0) {
+ var dλ = λ - λ_;
+ dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
+ } else λ__ = λ, φ__ = φ;
+ d3_geo_area.point(λ, φ);
+ linePoint(λ, φ);
+ }
+
+ function ringStart() {
+ d3_geo_area.lineStart();
+ }
+
+ function ringEnd() {
+ ringPoint(λ__, φ__);
+ d3_geo_area.lineEnd();
+ if (abs(dλSum) > ε) λ0 = -(λ1 = 180);
+ range[0] = λ0, range[1] = λ1;
+ p0 = null;
+ }
+
+ function angle(λ0, λ1) {
+ return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
+ }
+
+ function compareRanges(a, b) {
+ return a[0] - b[0];
+ }
+
+ function withinRange(x, range) {
+ return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
+ }
+
+ return function (feature) {
+ φ1 = λ1 = -(λ0 = φ0 = Infinity);
+ ranges = [];
+ d3.geo.stream(feature, bound);
+ var n = ranges.length;
+ if (n) {
+ ranges.sort(compareRanges);
+ for (var i = 1, a = ranges[0], b, merged = [a]; i < n; ++i) {
+ b = ranges[i];
+ if (withinRange(b[0], a) || withinRange(b[1], a)) {
+ if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
+ if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
+ } else {
+ merged.push(a = b);
+ }
+ }
+ var best = -Infinity, dλ;
+ for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
+ b = merged[i];
+ if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
+ }
+ }
+ ranges = range = null;
+ return λ0 === Infinity || φ0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[λ0, φ0], [λ1, φ1]];
+ };
+ }();
+ d3.geo.centroid = function (object) {
+ d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
+ d3.geo.stream(object, d3_geo_centroid);
+ var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;
+ if (m < ε2) {
+ x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;
+ if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;
+ m = x * x + y * y + z * z;
+ if (m < ε2) return [NaN, NaN];
+ }
+ return [Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees];
+ };
+ var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;
+ var d3_geo_centroid = {
+ sphere: d3_noop,
+ point: d3_geo_centroidPoint,
+ lineStart: d3_geo_centroidLineStart,
+ lineEnd: d3_geo_centroidLineEnd,
+ polygonStart: function () {
+ d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
+ },
+ polygonEnd: function () {
+ d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
+ }
+ };
+
+ function d3_geo_centroidPoint(λ, φ) {
+ λ *= d3_radians;
+ var cosφ = Math.cos(φ *= d3_radians);
+ d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));
+ }
+
+ function d3_geo_centroidPointXYZ(x, y, z) {
+ ++d3_geo_centroidW0;
+ d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;
+ d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;
+ d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;
+ }
+
+ function d3_geo_centroidLineStart() {
+ var x0, y0, z0;
+ d3_geo_centroid.point = function (λ, φ) {
+ λ *= d3_radians;
+ var cosφ = Math.cos(φ *= d3_radians);
+ x0 = cosφ * Math.cos(λ);
+ y0 = cosφ * Math.sin(λ);
+ z0 = Math.sin(φ);
+ d3_geo_centroid.point = nextPoint;
+ d3_geo_centroidPointXYZ(x0, y0, z0);
+ };
+ function nextPoint(λ, φ) {
+ λ *= d3_radians;
+ var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
+ d3_geo_centroidW1 += w;
+ d3_geo_centroidX1 += w * (x0 + (x0 = x));
+ d3_geo_centroidY1 += w * (y0 + (y0 = y));
+ d3_geo_centroidZ1 += w * (z0 + (z0 = z));
+ d3_geo_centroidPointXYZ(x0, y0, z0);
+ }
+ }
+
+ function d3_geo_centroidLineEnd() {
+ d3_geo_centroid.point = d3_geo_centroidPoint;
+ }
+
+ function d3_geo_centroidRingStart() {
+ var λ00, φ00, x0, y0, z0;
+ d3_geo_centroid.point = function (λ, φ) {
+ λ00 = λ, φ00 = φ;
+ d3_geo_centroid.point = nextPoint;
+ λ *= d3_radians;
+ var cosφ = Math.cos(φ *= d3_radians);
+ x0 = cosφ * Math.cos(λ);
+ y0 = cosφ * Math.sin(λ);
+ z0 = Math.sin(φ);
+ d3_geo_centroidPointXYZ(x0, y0, z0);
+ };
+ d3_geo_centroid.lineEnd = function () {
+ nextPoint(λ00, φ00);
+ d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
+ d3_geo_centroid.point = d3_geo_centroidPoint;
+ };
+ function nextPoint(λ, φ) {
+ λ *= d3_radians;
+ var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);
+ d3_geo_centroidX2 += v * cx;
+ d3_geo_centroidY2 += v * cy;
+ d3_geo_centroidZ2 += v * cz;
+ d3_geo_centroidW1 += w;
+ d3_geo_centroidX1 += w * (x0 + (x0 = x));
+ d3_geo_centroidY1 += w * (y0 + (y0 = y));
+ d3_geo_centroidZ1 += w * (z0 + (z0 = z));
+ d3_geo_centroidPointXYZ(x0, y0, z0);
+ }
+ }
+
+ function d3_true() {
+ return true;
+ }
+
+ function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
+ var subject = [], clip = [];
+ segments.forEach(function (segment) {
+ if ((n = segment.length - 1) <= 0) return;
+ var n, p0 = segment[0], p1 = segment[n];
+ if (d3_geo_sphericalEqual(p0, p1)) {
+ listener.lineStart();
+ for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
+ listener.lineEnd();
+ return;
+ }
+ var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);
+ a.o = b;
+ subject.push(a);
+ clip.push(b);
+ a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);
+ b = new d3_geo_clipPolygonIntersection(p1, null, a, true);
+ a.o = b;
+ subject.push(a);
+ clip.push(b);
+ });
+ clip.sort(compare);
+ d3_geo_clipPolygonLinkCircular(subject);
+ d3_geo_clipPolygonLinkCircular(clip);
+ if (!subject.length) return;
+ for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
+ clip[i].e = entry = !entry;
+ }
+ var start = subject[0], points, point;
+ while (1) {
+ var current = start, isSubject = true;
+ while (current.v) if ((current = current.n) === start) return;
+ points = current.z;
+ listener.lineStart();
+ do {
+ current.v = current.o.v = true;
+ if (current.e) {
+ if (isSubject) {
+ for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);
+ } else {
+ interpolate(current.x, current.n.x, 1, listener);
+ }
+ current = current.n;
+ } else {
+ if (isSubject) {
+ points = current.p.z;
+ for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);
+ } else {
+ interpolate(current.x, current.p.x, -1, listener);
+ }
+ current = current.p;
+ }
+ current = current.o;
+ points = current.z;
+ isSubject = !isSubject;
+ } while (!current.v);
+ listener.lineEnd();
+ }
+ }
+
+ function d3_geo_clipPolygonLinkCircular(array) {
+ if (!(n = array.length)) return;
+ var n, i = 0, a = array[0], b;
+ while (++i < n) {
+ a.n = b = array[i];
+ b.p = a;
+ a = b;
+ }
+ a.n = b = array[0];
+ b.p = a;
+ }
+
+ function d3_geo_clipPolygonIntersection(point, points, other, entry) {
+ this.x = point;
+ this.z = points;
+ this.o = other;
+ this.e = entry;
+ this.v = false;
+ this.n = this.p = null;
+ }
+
+ function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
+ return function (rotate, listener) {
+ var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
+ var clip = {
+ point: point,
+ lineStart: lineStart,
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ clip.point = pointRing;
+ clip.lineStart = ringStart;
+ clip.lineEnd = ringEnd;
+ segments = [];
+ polygon = [];
+ },
+ polygonEnd: function () {
+ clip.point = point;
+ clip.lineStart = lineStart;
+ clip.lineEnd = lineEnd;
+ segments = d3.merge(segments);
+ var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
+ if (segments.length) {
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
+ d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
+ } else if (clipStartInside) {
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
+ listener.lineStart();
+ interpolate(null, null, 1, listener);
+ listener.lineEnd();
+ }
+ if (polygonStarted) listener.polygonEnd(), polygonStarted = false;
+ segments = polygon = null;
+ },
+ sphere: function () {
+ listener.polygonStart();
+ listener.lineStart();
+ interpolate(null, null, 1, listener);
+ listener.lineEnd();
+ listener.polygonEnd();
+ }
+ };
+
+ function point(λ, φ) {
+ var point = rotate(λ, φ);
+ if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
+ }
+
+ function pointLine(λ, φ) {
+ var point = rotate(λ, φ);
+ line.point(point[0], point[1]);
+ }
+
+ function lineStart() {
+ clip.point = pointLine;
+ line.lineStart();
+ }
+
+ function lineEnd() {
+ clip.point = point;
+ line.lineEnd();
+ }
+
+ var segments;
+ var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;
+
+ function pointRing(λ, φ) {
+ ring.push([λ, φ]);
+ var point = rotate(λ, φ);
+ ringListener.point(point[0], point[1]);
+ }
+
+ function ringStart() {
+ ringListener.lineStart();
+ ring = [];
+ }
+
+ function ringEnd() {
+ pointRing(ring[0][0], ring[0][1]);
+ ringListener.lineEnd();
+ var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
+ ring.pop();
+ polygon.push(ring);
+ ring = null;
+ if (!n) return;
+ if (clean & 1) {
+ segment = ringSegments[0];
+ var n = segment.length - 1, i = -1, point;
+ if (n > 0) {
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
+ listener.lineStart();
+ while (++i < n) listener.point((point = segment[i])[0], point[1]);
+ listener.lineEnd();
+ }
+ return;
+ }
+ if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+ segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
+ }
+
+ return clip;
+ };
+ }
+
+ function d3_geo_clipSegmentLength1(segment) {
+ return segment.length > 1;
+ }
+
+ function d3_geo_clipBufferListener() {
+ var lines = [], line;
+ return {
+ lineStart: function () {
+ lines.push(line = []);
+ },
+ point: function (λ, φ) {
+ line.push([λ, φ]);
+ },
+ lineEnd: d3_noop,
+ buffer: function () {
+ var buffer = lines;
+ lines = [];
+ line = null;
+ return buffer;
+ },
+ rejoin: function () {
+ if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
+ }
+ };
+ }
+
+ function d3_geo_clipSort(a, b) {
+ return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
+ }
+
+ var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [-π, -π / 2]);
+
+ function d3_geo_clipAntimeridianLine(listener) {
+ var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
+ return {
+ lineStart: function () {
+ listener.lineStart();
+ clean = 1;
+ },
+ point: function (λ1, φ1) {
+ var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);
+ if (abs(dλ - π) < ε) {
+ listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
+ listener.point(sλ0, φ0);
+ listener.lineEnd();
+ listener.lineStart();
+ listener.point(sλ1, φ0);
+ listener.point(λ1, φ0);
+ clean = 0;
+ } else if (sλ0 !== sλ1 && dλ >= π) {
+ if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
+ if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
+ φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
+ listener.point(sλ0, φ0);
+ listener.lineEnd();
+ listener.lineStart();
+ listener.point(sλ1, φ0);
+ clean = 0;
+ }
+ listener.point(λ0 = λ1, φ0 = φ1);
+ sλ0 = sλ1;
+ },
+ lineEnd: function () {
+ listener.lineEnd();
+ λ0 = φ0 = NaN;
+ },
+ clean: function () {
+ return 2 - clean;
+ }
+ };
+ }
+
+ function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
+ var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
+ return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
+ }
+
+ function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
+ var φ;
+ if (from == null) {
+ φ = direction * halfπ;
+ listener.point(-π, φ);
+ listener.point(0, φ);
+ listener.point(π, φ);
+ listener.point(π, 0);
+ listener.point(π, -φ);
+ listener.point(0, -φ);
+ listener.point(-π, -φ);
+ listener.point(-π, 0);
+ listener.point(-π, φ);
+ } else if (abs(from[0] - to[0]) > ε) {
+ var s = from[0] < to[0] ? π : -π;
+ φ = direction * s / 2;
+ listener.point(-s, φ);
+ listener.point(0, φ);
+ listener.point(s, φ);
+ } else {
+ listener.point(to[0], to[1]);
+ }
+ }
+
+ function d3_geo_pointInPolygon(point, polygon) {
+ var meridian = point[0], parallel = point[1], meridianNormal = [Math.sin(meridian), -Math.cos(meridian), 0], polarAngle = 0, winding = 0;
+ d3_geo_areaRingSum.reset();
+ for (var i = 0, n = polygon.length; i < n; ++i) {
+ var ring = polygon[i], m = ring.length;
+ if (!m) continue;
+ var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
+ while (true) {
+ if (j === m) j = 0;
+ point = ring[j];
+ var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
+ d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
+ polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
+ if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
+ var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
+ d3_geo_cartesianNormalize(arc);
+ var intersection = d3_geo_cartesianCross(meridianNormal, arc);
+ d3_geo_cartesianNormalize(intersection);
+ var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
+ if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
+ winding += antimeridian ^ dλ >= 0 ? 1 : -1;
+ }
+ }
+ if (!j++) break;
+ λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
+ }
+ }
+ return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
+ }
+
+ function d3_geo_clipCircle(radius) {
+ var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
+ return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-π, radius - π]);
+ function visible(λ, φ) {
+ return Math.cos(λ) * Math.cos(φ) > cr;
+ }
+
+ function clipLine(listener) {
+ var point0, c0, v0, v00, clean;
+ return {
+ lineStart: function () {
+ v00 = v0 = false;
+ clean = 1;
+ },
+ point: function (λ, φ) {
+ var point1 = [λ, φ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;
+ if (!point0 && (v00 = v0 = v)) listener.lineStart();
+ if (v !== v0) {
+ point2 = intersect(point0, point1);
+ if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
+ point1[0] += ε;
+ point1[1] += ε;
+ v = visible(point1[0], point1[1]);
+ }
+ }
+ if (v !== v0) {
+ clean = 0;
+ if (v) {
+ listener.lineStart();
+ point2 = intersect(point1, point0);
+ listener.point(point2[0], point2[1]);
+ } else {
+ point2 = intersect(point0, point1);
+ listener.point(point2[0], point2[1]);
+ listener.lineEnd();
+ }
+ point0 = point2;
+ } else if (notHemisphere && point0 && smallRadius ^ v) {
+ var t;
+ if (!(c & c0) && (t = intersect(point1, point0, true))) {
+ clean = 0;
+ if (smallRadius) {
+ listener.lineStart();
+ listener.point(t[0][0], t[0][1]);
+ listener.point(t[1][0], t[1][1]);
+ listener.lineEnd();
+ } else {
+ listener.point(t[1][0], t[1][1]);
+ listener.lineEnd();
+ listener.lineStart();
+ listener.point(t[0][0], t[0][1]);
+ }
+ }
+ }
+ if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {
+ listener.point(point1[0], point1[1]);
+ }
+ point0 = point1, v0 = v, c0 = c;
+ },
+ lineEnd: function () {
+ if (v0) listener.lineEnd();
+ point0 = null;
+ },
+ clean: function () {
+ return clean | (v00 && v0) << 1;
+ }
+ };
+ }
+
+ function intersect(a, b, two) {
+ var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);
+ var n1 = [1, 0, 0], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
+ if (!determinant) return !two && a;
+ var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
+ d3_geo_cartesianAdd(A, B);
+ var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);
+ if (t2 < 0) return;
+ var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);
+ d3_geo_cartesianAdd(q, A);
+ q = d3_geo_spherical(q);
+ if (!two) return q;
+ var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;
+ if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
+ var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;
+ if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
+ if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
+ var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
+ d3_geo_cartesianAdd(q1, A);
+ return [q, d3_geo_spherical(q1)];
+ }
+ }
+
+ function code(λ, φ) {
+ var r = smallRadius ? radius : π - radius, code = 0;
+ if (λ < -r) code |= 1; else if (λ > r) code |= 2;
+ if (φ < -r) code |= 4; else if (φ > r) code |= 8;
+ return code;
+ }
+ }
+
+ function d3_geom_clipLine(x0, y0, x1, y1) {
+ return function (line) {
+ var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;
+ r = x0 - ax;
+ if (!dx && r > 0) return;
+ r /= dx;
+ if (dx < 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ } else if (dx > 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ }
+ r = x1 - ax;
+ if (!dx && r < 0) return;
+ r /= dx;
+ if (dx < 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ } else if (dx > 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ }
+ r = y0 - ay;
+ if (!dy && r > 0) return;
+ r /= dy;
+ if (dy < 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ } else if (dy > 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ }
+ r = y1 - ay;
+ if (!dy && r < 0) return;
+ r /= dy;
+ if (dy < 0) {
+ if (r > t1) return;
+ if (r > t0) t0 = r;
+ } else if (dy > 0) {
+ if (r < t0) return;
+ if (r < t1) t1 = r;
+ }
+ if (t0 > 0) line.a = {
+ x: ax + t0 * dx,
+ y: ay + t0 * dy
+ };
+ if (t1 < 1) line.b = {
+ x: ax + t1 * dx,
+ y: ay + t1 * dy
+ };
+ return line;
+ };
+ }
+
+ var d3_geo_clipExtentMAX = 1e9;
+ d3.geo.clipExtent = function () {
+ var x0, y0, x1, y1, stream, clip, clipExtent = {
+ stream: function (output) {
+ if (stream) stream.valid = false;
+ stream = clip(output);
+ stream.valid = true;
+ return stream;
+ },
+ extent: function (_) {
+ if (!arguments.length) return [[x0, y0], [x1, y1]];
+ clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
+ if (stream) stream.valid = false, stream = null;
+ return clipExtent;
+ }
+ };
+ return clipExtent.extent([[0, 0], [960, 500]]);
+ };
+ function d3_geo_clipExtent(x0, y0, x1, y1) {
+ return function (listener) {
+ var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;
+ var clip = {
+ point: point,
+ lineStart: lineStart,
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ listener = bufferListener;
+ segments = [];
+ polygon = [];
+ clean = true;
+ },
+ polygonEnd: function () {
+ listener = listener_;
+ segments = d3.merge(segments);
+ var clipStartInside = insidePolygon([x0, y1]), inside = clean && clipStartInside, visible = segments.length;
+ if (inside || visible) {
+ listener.polygonStart();
+ if (inside) {
+ listener.lineStart();
+ interpolate(null, null, 1, listener);
+ listener.lineEnd();
+ }
+ if (visible) {
+ d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
+ }
+ listener.polygonEnd();
+ }
+ segments = polygon = ring = null;
+ }
+ };
+
+ function insidePolygon(p) {
+ var wn = 0, n = polygon.length, y = p[1];
+ for (var i = 0; i < n; ++i) {
+ for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {
+ b = v[j];
+ if (a[1] <= y) {
+ if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;
+ } else {
+ if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;
+ }
+ a = b;
+ }
+ }
+ return wn !== 0;
+ }
+
+ function interpolate(from, to, direction, listener) {
+ var a = 0, a1 = 0;
+ if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {
+ do {
+ listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
+ } while ((a = (a + direction + 4) % 4) !== a1);
+ } else {
+ listener.point(to[0], to[1]);
+ }
+ }
+
+ function pointVisible(x, y) {
+ return x0 <= x && x <= x1 && y0 <= y && y <= y1;
+ }
+
+ function point(x, y) {
+ if (pointVisible(x, y)) listener.point(x, y);
+ }
+
+ var x__, y__, v__, x_, y_, v_, first, clean;
+
+ function lineStart() {
+ clip.point = linePoint;
+ if (polygon) polygon.push(ring = []);
+ first = true;
+ v_ = false;
+ x_ = y_ = NaN;
+ }
+
+ function lineEnd() {
+ if (segments) {
+ linePoint(x__, y__);
+ if (v__ && v_) bufferListener.rejoin();
+ segments.push(bufferListener.buffer());
+ }
+ clip.point = point;
+ if (v_) listener.lineEnd();
+ }
+
+ function linePoint(x, y) {
+ x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
+ y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
+ var v = pointVisible(x, y);
+ if (polygon) ring.push([x, y]);
+ if (first) {
+ x__ = x, y__ = y, v__ = v;
+ first = false;
+ if (v) {
+ listener.lineStart();
+ listener.point(x, y);
+ }
+ } else {
+ if (v && v_) listener.point(x, y); else {
+ var l = {
+ a: {
+ x: x_,
+ y: y_
+ },
+ b: {
+ x: x,
+ y: y
+ }
+ };
+ if (clipLine(l)) {
+ if (!v_) {
+ listener.lineStart();
+ listener.point(l.a.x, l.a.y);
+ }
+ listener.point(l.b.x, l.b.y);
+ if (!v) listener.lineEnd();
+ clean = false;
+ } else if (v) {
+ listener.lineStart();
+ listener.point(x, y);
+ clean = false;
+ }
+ }
+ }
+ x_ = x, y_ = y, v_ = v;
+ }
+
+ return clip;
+ };
+ function corner(p, direction) {
+ return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
+ }
+
+ function compare(a, b) {
+ return comparePoints(a.x, b.x);
+ }
+
+ function comparePoints(a, b) {
+ var ca = corner(a, 1), cb = corner(b, 1);
+ return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
+ }
+ }
+
+ function d3_geo_compose(a, b) {
+ function compose(x, y) {
+ return x = a(x, y), b(x[0], x[1]);
+ }
+
+ if (a.invert && b.invert) compose.invert = function (x, y) {
+ return x = b.invert(x, y), x && a.invert(x[0], x[1]);
+ };
+ return compose;
+ }
+
+ function d3_geo_conic(projectAt) {
+ var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
+ p.parallels = function (_) {
+ if (!arguments.length) return [φ0 / π * 180, φ1 / π * 180];
+ return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);
+ };
+ return p;
+ }
+
+ function d3_geo_conicEqualArea(φ0, φ1) {
+ var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
+
+ function forward(λ, φ) {
+ var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
+ return [ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ)];
+ }
+
+ forward.invert = function (x, y) {
+ var ρ0_y = ρ0 - y;
+ return [Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n))];
+ };
+ return forward;
+ }
+
+ (d3.geo.conicEqualArea = function () {
+ return d3_geo_conic(d3_geo_conicEqualArea);
+ }).raw = d3_geo_conicEqualArea;
+ d3.geo.albers = function () {
+ return d3.geo.conicEqualArea().rotate([96, 0]).center([-.6, 38.7]).parallels([29.5, 45.5]).scale(1070);
+ };
+ d3.geo.albersUsa = function () {
+ var lower48 = d3.geo.albers();
+ var alaska = d3.geo.conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]);
+ var hawaii = d3.geo.conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]);
+ var point, pointStream = {
+ point: function (x, y) {
+ point = [x, y];
+ }
+ }, lower48Point, alaskaPoint, hawaiiPoint;
+
+ function albersUsa(coordinates) {
+ var x = coordinates[0], y = coordinates[1];
+ point = null;
+ (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
+ return point;
+ }
+
+ albersUsa.invert = function (coordinates) {
+ var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
+ return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
+ };
+ albersUsa.stream = function (stream) {
+ var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
+ return {
+ point: function (x, y) {
+ lower48Stream.point(x, y);
+ alaskaStream.point(x, y);
+ hawaiiStream.point(x, y);
+ },
+ sphere: function () {
+ lower48Stream.sphere();
+ alaskaStream.sphere();
+ hawaiiStream.sphere();
+ },
+ lineStart: function () {
+ lower48Stream.lineStart();
+ alaskaStream.lineStart();
+ hawaiiStream.lineStart();
+ },
+ lineEnd: function () {
+ lower48Stream.lineEnd();
+ alaskaStream.lineEnd();
+ hawaiiStream.lineEnd();
+ },
+ polygonStart: function () {
+ lower48Stream.polygonStart();
+ alaskaStream.polygonStart();
+ hawaiiStream.polygonStart();
+ },
+ polygonEnd: function () {
+ lower48Stream.polygonEnd();
+ alaskaStream.polygonEnd();
+ hawaiiStream.polygonEnd();
+ }
+ };
+ };
+ albersUsa.precision = function (_) {
+ if (!arguments.length) return lower48.precision();
+ lower48.precision(_);
+ alaska.precision(_);
+ hawaii.precision(_);
+ return albersUsa;
+ };
+ albersUsa.scale = function (_) {
+ if (!arguments.length) return lower48.scale();
+ lower48.scale(_);
+ alaska.scale(_ * .35);
+ hawaii.scale(_);
+ return albersUsa.translate(lower48.translate());
+ };
+ albersUsa.translate = function (_) {
+ if (!arguments.length) return lower48.translate();
+ var k = lower48.scale(), x = +_[0], y = +_[1];
+ lower48Point = lower48.translate(_).clipExtent([[x - .455 * k, y - .238 * k], [x + .455 * k, y + .238 * k]]).stream(pointStream).point;
+ alaskaPoint = alaska.translate([x - .307 * k, y + .201 * k]).clipExtent([[x - .425 * k + ε, y + .12 * k + ε], [x - .214 * k - ε, y + .234 * k - ε]]).stream(pointStream).point;
+ hawaiiPoint = hawaii.translate([x - .205 * k, y + .212 * k]).clipExtent([[x - .214 * k + ε, y + .166 * k + ε], [x - .115 * k - ε, y + .234 * k - ε]]).stream(pointStream).point;
+ return albersUsa;
+ };
+ return albersUsa.scale(1070);
+ };
+ var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
+ point: d3_noop,
+ lineStart: d3_noop,
+ lineEnd: d3_noop,
+ polygonStart: function () {
+ d3_geo_pathAreaPolygon = 0;
+ d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
+ },
+ polygonEnd: function () {
+ d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
+ d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);
+ }
+ };
+
+ function d3_geo_pathAreaRingStart() {
+ var x00, y00, x0, y0;
+ d3_geo_pathArea.point = function (x, y) {
+ d3_geo_pathArea.point = nextPoint;
+ x00 = x0 = x, y00 = y0 = y;
+ };
+ function nextPoint(x, y) {
+ d3_geo_pathAreaPolygon += y0 * x - x0 * y;
+ x0 = x, y0 = y;
+ }
+
+ d3_geo_pathArea.lineEnd = function () {
+ nextPoint(x00, y00);
+ };
+ }
+
+ var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
+ var d3_geo_pathBounds = {
+ point: d3_geo_pathBoundsPoint,
+ lineStart: d3_noop,
+ lineEnd: d3_noop,
+ polygonStart: d3_noop,
+ polygonEnd: d3_noop
+ };
+
+ function d3_geo_pathBoundsPoint(x, y) {
+ if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
+ if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
+ if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
+ if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
+ }
+
+ function d3_geo_pathBuffer() {
+ var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
+ var stream = {
+ point: point,
+ lineStart: function () {
+ stream.point = pointLineStart;
+ },
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ stream.lineEnd = lineEndPolygon;
+ },
+ polygonEnd: function () {
+ stream.lineEnd = lineEnd;
+ stream.point = point;
+ },
+ pointRadius: function (_) {
+ pointCircle = d3_geo_pathBufferCircle(_);
+ return stream;
+ },
+ result: function () {
+ if (buffer.length) {
+ var result = buffer.join("");
+ buffer = [];
+ return result;
+ }
+ }
+ };
+
+ function point(x, y) {
+ buffer.push("M", x, ",", y, pointCircle);
+ }
+
+ function pointLineStart(x, y) {
+ buffer.push("M", x, ",", y);
+ stream.point = pointLine;
+ }
+
+ function pointLine(x, y) {
+ buffer.push("L", x, ",", y);
+ }
+
+ function lineEnd() {
+ stream.point = point;
+ }
+
+ function lineEndPolygon() {
+ buffer.push("Z");
+ }
+
+ return stream;
+ }
+
+ function d3_geo_pathBufferCircle(radius) {
+ return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
+ }
+
+ var d3_geo_pathCentroid = {
+ point: d3_geo_pathCentroidPoint,
+ lineStart: d3_geo_pathCentroidLineStart,
+ lineEnd: d3_geo_pathCentroidLineEnd,
+ polygonStart: function () {
+ d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
+ },
+ polygonEnd: function () {
+ d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
+ d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
+ d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
+ }
+ };
+
+ function d3_geo_pathCentroidPoint(x, y) {
+ d3_geo_centroidX0 += x;
+ d3_geo_centroidY0 += y;
+ ++d3_geo_centroidZ0;
+ }
+
+ function d3_geo_pathCentroidLineStart() {
+ var x0, y0;
+ d3_geo_pathCentroid.point = function (x, y) {
+ d3_geo_pathCentroid.point = nextPoint;
+ d3_geo_pathCentroidPoint(x0 = x, y0 = y);
+ };
+ function nextPoint(x, y) {
+ var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
+ d3_geo_centroidX1 += z * (x0 + x) / 2;
+ d3_geo_centroidY1 += z * (y0 + y) / 2;
+ d3_geo_centroidZ1 += z;
+ d3_geo_pathCentroidPoint(x0 = x, y0 = y);
+ }
+ }
+
+ function d3_geo_pathCentroidLineEnd() {
+ d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
+ }
+
+ function d3_geo_pathCentroidRingStart() {
+ var x00, y00, x0, y0;
+ d3_geo_pathCentroid.point = function (x, y) {
+ d3_geo_pathCentroid.point = nextPoint;
+ d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);
+ };
+ function nextPoint(x, y) {
+ var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
+ d3_geo_centroidX1 += z * (x0 + x) / 2;
+ d3_geo_centroidY1 += z * (y0 + y) / 2;
+ d3_geo_centroidZ1 += z;
+ z = y0 * x - x0 * y;
+ d3_geo_centroidX2 += z * (x0 + x);
+ d3_geo_centroidY2 += z * (y0 + y);
+ d3_geo_centroidZ2 += z * 3;
+ d3_geo_pathCentroidPoint(x0 = x, y0 = y);
+ }
+
+ d3_geo_pathCentroid.lineEnd = function () {
+ nextPoint(x00, y00);
+ };
+ }
+
+ function d3_geo_pathContext(context) {
+ var pointRadius = 4.5;
+ var stream = {
+ point: point,
+ lineStart: function () {
+ stream.point = pointLineStart;
+ },
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ stream.lineEnd = lineEndPolygon;
+ },
+ polygonEnd: function () {
+ stream.lineEnd = lineEnd;
+ stream.point = point;
+ },
+ pointRadius: function (_) {
+ pointRadius = _;
+ return stream;
+ },
+ result: d3_noop
+ };
+
+ function point(x, y) {
+ context.moveTo(x, y);
+ context.arc(x, y, pointRadius, 0, τ);
+ }
+
+ function pointLineStart(x, y) {
+ context.moveTo(x, y);
+ stream.point = pointLine;
+ }
+
+ function pointLine(x, y) {
+ context.lineTo(x, y);
+ }
+
+ function lineEnd() {
+ stream.point = point;
+ }
+
+ function lineEndPolygon() {
+ context.closePath();
+ }
+
+ return stream;
+ }
+
+ function d3_geo_resample(project) {
+ var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;
+
+ function resample(stream) {
+ return (maxDepth ? resampleRecursive : resampleNone)(stream);
+ }
+
+ function resampleNone(stream) {
+ return d3_geo_transformPoint(stream, function (x, y) {
+ x = project(x, y);
+ stream.point(x[0], x[1]);
+ });
+ }
+
+ function resampleRecursive(stream) {
+ var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;
+ var resample = {
+ point: point,
+ lineStart: lineStart,
+ lineEnd: lineEnd,
+ polygonStart: function () {
+ stream.polygonStart();
+ resample.lineStart = ringStart;
+ },
+ polygonEnd: function () {
+ stream.polygonEnd();
+ resample.lineStart = lineStart;
+ }
+ };
+
+ function point(x, y) {
+ x = project(x, y);
+ stream.point(x[0], x[1]);
+ }
+
+ function lineStart() {
+ x0 = NaN;
+ resample.point = linePoint;
+ stream.lineStart();
+ }
+
+ function linePoint(λ, φ) {
+ var c = d3_geo_cartesian([λ, φ]), p = project(λ, φ);
+ resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
+ stream.point(x0, y0);
+ }
+
+ function lineEnd() {
+ resample.point = point;
+ stream.lineEnd();
+ }
+
+ function ringStart() {
+ lineStart();
+ resample.point = ringPoint;
+ resample.lineEnd = ringEnd;
+ }
+
+ function ringPoint(λ, φ) {
+ linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
+ resample.point = linePoint;
+ }
+
+ function ringEnd() {
+ resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
+ resample.lineEnd = lineEnd;
+ lineEnd();
+ }
+
+ return resample;
+ }
+
+ function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
+ var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
+ if (d2 > 4 * δ2 && depth--) {
+ var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
+ if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
+ resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
+ stream.point(x2, y2);
+ resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
+ }
+ }
+ }
+
+ resample.precision = function (_) {
+ if (!arguments.length) return Math.sqrt(δ2);
+ maxDepth = (δ2 = _ * _) > 0 && 16;
+ return resample;
+ };
+ return resample;
+ }
+
+ d3.geo.path = function () {
+ var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;
+
+ function path(object) {
+ if (object) {
+ if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
+ if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);
+ d3.geo.stream(object, cacheStream);
+ }
+ return contextStream.result();
+ }
+
+ path.area = function (object) {
+ d3_geo_pathAreaSum = 0;
+ d3.geo.stream(object, projectStream(d3_geo_pathArea));
+ return d3_geo_pathAreaSum;
+ };
+ path.centroid = function (object) {
+ d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
+ d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
+ return d3_geo_centroidZ2 ? [d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2] : d3_geo_centroidZ1 ? [d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1] : d3_geo_centroidZ0 ? [d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0] : [NaN, NaN];
+ };
+ path.bounds = function (object) {
+ d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
+ d3.geo.stream(object, projectStream(d3_geo_pathBounds));
+ return [[d3_geo_pathBoundsX0, d3_geo_pathBoundsY0], [d3_geo_pathBoundsX1, d3_geo_pathBoundsY1]];
+ };
+ path.projection = function (_) {
+ if (!arguments.length) return projection;
+ projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
+ return reset();
+ };
+ path.context = function (_) {
+ if (!arguments.length) return context;
+ contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
+ if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
+ return reset();
+ };
+ path.pointRadius = function (_) {
+ if (!arguments.length) return pointRadius;
+ pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
+ return path;
+ };
+ function reset() {
+ cacheStream = null;
+ return path;
+ }
+
+ return path.projection(d3.geo.albersUsa()).context(null);
+ };
+ function d3_geo_pathProjectStream(project) {
+ var resample = d3_geo_resample(function (x, y) {
+ return project([x * d3_degrees, y * d3_degrees]);
+ });
+ return function (stream) {
+ return d3_geo_projectionRadians(resample(stream));
+ };
+ }
+
+ d3.geo.transform = function (methods) {
+ return {
+ stream: function (stream) {
+ var transform = new d3_geo_transform(stream);
+ for (var k in methods) transform[k] = methods[k];
+ return transform;
+ }
+ };
+ };
+ function d3_geo_transform(stream) {
+ this.stream = stream;
+ }
+
+ d3_geo_transform.prototype = {
+ point: function (x, y) {
+ this.stream.point(x, y);
+ },
+ sphere: function () {
+ this.stream.sphere();
+ },
+ lineStart: function () {
+ this.stream.lineStart();
+ },
+ lineEnd: function () {
+ this.stream.lineEnd();
+ },
+ polygonStart: function () {
+ this.stream.polygonStart();
+ },
+ polygonEnd: function () {
+ this.stream.polygonEnd();
+ }
+ };
+ function d3_geo_transformPoint(stream, point) {
+ return {
+ point: point,
+ sphere: function () {
+ stream.sphere();
+ },
+ lineStart: function () {
+ stream.lineStart();
+ },
+ lineEnd: function () {
+ stream.lineEnd();
+ },
+ polygonStart: function () {
+ stream.polygonStart();
+ },
+ polygonEnd: function () {
+ stream.polygonEnd();
+ }
+ };
+ }
+
+ d3.geo.projection = d3_geo_projection;
+ d3.geo.projectionMutator = d3_geo_projectionMutator;
+ function d3_geo_projection(project) {
+ return d3_geo_projectionMutator(function () {
+ return project;
+ })();
+ }
+
+ function d3_geo_projectionMutator(projectAt) {
+ var project, rotate, projectRotate, projectResample = d3_geo_resample(function (x, y) {
+ x = project(x, y);
+ return [x[0] * k + δx, δy - x[1] * k];
+ }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;
+
+ function projection(point) {
+ point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
+ return [point[0] * k + δx, δy - point[1] * k];
+ }
+
+ function invert(point) {
+ point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
+ return point && [point[0] * d3_degrees, point[1] * d3_degrees];
+ }
+
+ projection.stream = function (output) {
+ if (stream) stream.valid = false;
+ stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
+ stream.valid = true;
+ return stream;
+ };
+ projection.clipAngle = function (_) {
+ if (!arguments.length) return clipAngle;
+ preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);
+ return invalidate();
+ };
+ projection.clipExtent = function (_) {
+ if (!arguments.length) return clipExtent;
+ clipExtent = _;
+ postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
+ return invalidate();
+ };
+ projection.scale = function (_) {
+ if (!arguments.length) return k;
+ k = +_;
+ return reset();
+ };
+ projection.translate = function (_) {
+ if (!arguments.length) return [x, y];
+ x = +_[0];
+ y = +_[1];
+ return reset();
+ };
+ projection.center = function (_) {
+ if (!arguments.length) return [λ * d3_degrees, φ * d3_degrees];
+ λ = _[0] % 360 * d3_radians;
+ φ = _[1] % 360 * d3_radians;
+ return reset();
+ };
+ projection.rotate = function (_) {
+ if (!arguments.length) return [δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees];
+ δλ = _[0] % 360 * d3_radians;
+ δφ = _[1] % 360 * d3_radians;
+ δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
+ return reset();
+ };
+ d3.rebind(projection, projectResample, "precision");
+ function reset() {
+ projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
+ var center = project(λ, φ);
+ δx = x - center[0] * k;
+ δy = y + center[1] * k;
+ return invalidate();
+ }
+
+ function invalidate() {
+ if (stream) stream.valid = false, stream = null;
+ return projection;
+ }
+
+ return function () {
+ project = projectAt.apply(this, arguments);
+ projection.invert = project.invert && invert;
+ return reset();
+ };
+ }
+
+ function d3_geo_projectionRadians(stream) {
+ return d3_geo_transformPoint(stream, function (x, y) {
+ stream.point(x * d3_radians, y * d3_radians);
+ });
+ }
+
+ function d3_geo_equirectangular(λ, φ) {
+ return [λ, φ];
+ }
+
+ (d3.geo.equirectangular = function () {
+ return d3_geo_projection(d3_geo_equirectangular);
+ }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
+ d3.geo.rotation = function (rotate) {
+ rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);
+ function forward(coordinates) {
+ coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
+ return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
+ }
+
+ forward.invert = function (coordinates) {
+ coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
+ return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
+ };
+ return forward;
+ };
+ function d3_geo_identityRotation(λ, φ) {
+ return [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ];
+ }
+
+ d3_geo_identityRotation.invert = d3_geo_equirectangular;
+ function d3_geo_rotation(δλ, δφ, δγ) {
+ return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;
+ }
+
+ function d3_geo_forwardRotationλ(δλ) {
+ return function (λ, φ) {
+ return λ += δλ, [λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ];
+ };
+ }
+
+ function d3_geo_rotationλ(δλ) {
+ var rotation = d3_geo_forwardRotationλ(δλ);
+ rotation.invert = d3_geo_forwardRotationλ(-δλ);
+ return rotation;
+ }
+
+ function d3_geo_rotationφγ(δφ, δγ) {
+ var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
+
+ function rotation(λ, φ) {
+ var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
+ return [Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ)];
+ }
+
+ rotation.invert = function (λ, φ) {
+ var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
+ return [Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ)];
+ };
+ return rotation;
+ }
+
+ d3.geo.circle = function () {
+ var origin = [0, 0], angle, precision = 6, interpolate;
+
+ function circle() {
+ var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
+ interpolate(null, null, 1, {
+ point: function (x, y) {
+ ring.push(x = rotate(x, y));
+ x[0] *= d3_degrees, x[1] *= d3_degrees;
+ }
+ });
+ return {
+ type: "Polygon",
+ coordinates: [ring]
+ };
+ }
+
+ circle.origin = function (x) {
+ if (!arguments.length) return origin;
+ origin = x;
+ return circle;
+ };
+ circle.angle = function (x) {
+ if (!arguments.length) return angle;
+ interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
+ return circle;
+ };
+ circle.precision = function (_) {
+ if (!arguments.length) return precision;
+ interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
+ return circle;
+ };
+ return circle.angle(90);
+ };
+ function d3_geo_circleInterpolate(radius, precision) {
+ var cr = Math.cos(radius), sr = Math.sin(radius);
+ return function (from, to, direction, listener) {
+ var step = direction * precision;
+ if (from != null) {
+ from = d3_geo_circleAngle(cr, from);
+ to = d3_geo_circleAngle(cr, to);
+ if (direction > 0 ? from < to : from > to) from += direction * τ;
+ } else {
+ from = radius + direction * τ;
+ to = radius - .5 * step;
+ }
+ for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
+ listener.point((point = d3_geo_spherical([cr, -sr * Math.cos(t), -sr * Math.sin(t)]))[0], point[1]);
+ }
+ };
+ }
+
+ function d3_geo_circleAngle(cr, point) {
+ var a = d3_geo_cartesian(point);
+ a[0] -= cr;
+ d3_geo_cartesianNormalize(a);
+ var angle = d3_acos(-a[1]);
+ return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
+ }
+
+ d3.geo.distance = function (a, b) {
+ var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;
+ return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);
+ };
+ d3.geo.graticule = function () {
+ var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;
+
+ function graticule() {
+ return {
+ type: "MultiLineString",
+ coordinates: lines()
+ };
+ }
+
+ function lines() {
+ return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function (x) {
+ return abs(x % DX) > ε;
+ }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function (y) {
+ return abs(y % DY) > ε;
+ }).map(y));
+ }
+
+ graticule.lines = function () {
+ return lines().map(function (coordinates) {
+ return {
+ type: "LineString",
+ coordinates: coordinates
+ };
+ });
+ };
+ graticule.outline = function () {
+ return {
+ type: "Polygon",
+ coordinates: [X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1))]
+ };
+ };
+ graticule.extent = function (_) {
+ if (!arguments.length) return graticule.minorExtent();
+ return graticule.majorExtent(_).minorExtent(_);
+ };
+ graticule.majorExtent = function (_) {
+ if (!arguments.length) return [[X0, Y0], [X1, Y1]];
+ X0 = +_[0][0], X1 = +_[1][0];
+ Y0 = +_[0][1], Y1 = +_[1][1];
+ if (X0 > X1) _ = X0, X0 = X1, X1 = _;
+ if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
+ return graticule.precision(precision);
+ };
+ graticule.minorExtent = function (_) {
+ if (!arguments.length) return [[x0, y0], [x1, y1]];
+ x0 = +_[0][0], x1 = +_[1][0];
+ y0 = +_[0][1], y1 = +_[1][1];
+ if (x0 > x1) _ = x0, x0 = x1, x1 = _;
+ if (y0 > y1) _ = y0, y0 = y1, y1 = _;
+ return graticule.precision(precision);
+ };
+ graticule.step = function (_) {
+ if (!arguments.length) return graticule.minorStep();
+ return graticule.majorStep(_).minorStep(_);
+ };
+ graticule.majorStep = function (_) {
+ if (!arguments.length) return [DX, DY];
+ DX = +_[0], DY = +_[1];
+ return graticule;
+ };
+ graticule.minorStep = function (_) {
+ if (!arguments.length) return [dx, dy];
+ dx = +_[0], dy = +_[1];
+ return graticule;
+ };
+ graticule.precision = function (_) {
+ if (!arguments.length) return precision;
+ precision = +_;
+ x = d3_geo_graticuleX(y0, y1, 90);
+ y = d3_geo_graticuleY(x0, x1, precision);
+ X = d3_geo_graticuleX(Y0, Y1, 90);
+ Y = d3_geo_graticuleY(X0, X1, precision);
+ return graticule;
+ };
+ return graticule.majorExtent([[-180, -90 + ε], [180, 90 - ε]]).minorExtent([[-180, -80 - ε], [180, 80 + ε]]);
+ };
+ function d3_geo_graticuleX(y0, y1, dy) {
+ var y = d3.range(y0, y1 - ε, dy).concat(y1);
+ return function (x) {
+ return y.map(function (y) {
+ return [x, y];
+ });
+ };
+ }
+
+ function d3_geo_graticuleY(x0, x1, dx) {
+ var x = d3.range(x0, x1 - ε, dx).concat(x1);
+ return function (y) {
+ return x.map(function (x) {
+ return [x, y];
+ });
+ };
+ }
+
+ function d3_source(d) {
+ return d.source;
+ }
+
+ function d3_target(d) {
+ return d.target;
+ }
+
+ d3.geo.greatArc = function () {
+ var source = d3_source, source_, target = d3_target, target_;
+
+ function greatArc() {
+ return {
+ type: "LineString",
+ coordinates: [source_ || source.apply(this, arguments), target_ || target.apply(this, arguments)]
+ };
+ }
+
+ greatArc.distance = function () {
+ return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));
+ };
+ greatArc.source = function (_) {
+ if (!arguments.length) return source;
+ source = _, source_ = typeof _ === "function" ? null : _;
+ return greatArc;
+ };
+ greatArc.target = function (_) {
+ if (!arguments.length) return target;
+ target = _, target_ = typeof _ === "function" ? null : _;
+ return greatArc;
+ };
+ greatArc.precision = function () {
+ return arguments.length ? greatArc : 0;
+ };
+ return greatArc;
+ };
+ d3.geo.interpolate = function (source, target) {
+ return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
+ };
+ function d3_geo_interpolate(x0, y0, x1, y1) {
+ var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);
+ var interpolate = d ? function (t) {
+ var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
+ return [Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees];
+ } : function () {
+ return [x0 * d3_degrees, y0 * d3_degrees];
+ };
+ interpolate.distance = d;
+ return interpolate;
+ }
+
+ d3.geo.length = function (object) {
+ d3_geo_lengthSum = 0;
+ d3.geo.stream(object, d3_geo_length);
+ return d3_geo_lengthSum;
+ };
+ var d3_geo_lengthSum;
+ var d3_geo_length = {
+ sphere: d3_noop,
+ point: d3_noop,
+ lineStart: d3_geo_lengthLineStart,
+ lineEnd: d3_noop,
+ polygonStart: d3_noop,
+ polygonEnd: d3_noop
+ };
+
+ function d3_geo_lengthLineStart() {
+ var λ0, sinφ0, cosφ0;
+ d3_geo_length.point = function (λ, φ) {
+ λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
+ d3_geo_length.point = nextPoint;
+ };
+ d3_geo_length.lineEnd = function () {
+ d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
+ };
+ function nextPoint(λ, φ) {
+ var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);
+ d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
+ λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
+ }
+ }
+
+ function d3_geo_azimuthal(scale, angle) {
+ function azimuthal(λ, φ) {
+ var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
+ return [k * cosφ * Math.sin(λ), k * Math.sin(φ)];
+ }
+
+ azimuthal.invert = function (x, y) {
+ var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
+ return [Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ)];
+ };
+ return azimuthal;
+ }
+
+ var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function (cosλcosφ) {
+ return Math.sqrt(2 / (1 + cosλcosφ));
+ }, function (ρ) {
+ return 2 * Math.asin(ρ / 2);
+ });
+ (d3.geo.azimuthalEqualArea = function () {
+ return d3_geo_projection(d3_geo_azimuthalEqualArea);
+ }).raw = d3_geo_azimuthalEqualArea;
+ var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function (cosλcosφ) {
+ var c = Math.acos(cosλcosφ);
+ return c && c / Math.sin(c);
+ }, d3_identity);
+ (d3.geo.azimuthalEquidistant = function () {
+ return d3_geo_projection(d3_geo_azimuthalEquidistant);
+ }).raw = d3_geo_azimuthalEquidistant;
+ function d3_geo_conicConformal(φ0, φ1) {
+ var cosφ0 = Math.cos(φ0), t = function (φ) {
+ return Math.tan(π / 4 + φ / 2);
+ }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
+ if (!n) return d3_geo_mercator;
+ function forward(λ, φ) {
+ if (F > 0) {
+ if (φ < -halfπ + ε) φ = -halfπ + ε;
+ } else {
+ if (φ > halfπ - ε) φ = halfπ - ε;
+ }
+ var ρ = F / Math.pow(t(φ), n);
+ return [ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ)];
+ }
+
+ forward.invert = function (x, y) {
+ var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
+ return [Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ];
+ };
+ return forward;
+ }
+
+ (d3.geo.conicConformal = function () {
+ return d3_geo_conic(d3_geo_conicConformal);
+ }).raw = d3_geo_conicConformal;
+ function d3_geo_conicEquidistant(φ0, φ1) {
+ var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;
+ if (abs(n) < ε) return d3_geo_equirectangular;
+ function forward(λ, φ) {
+ var ρ = G - φ;
+ return [ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ)];
+ }
+
+ forward.invert = function (x, y) {
+ var ρ0_y = G - y;
+ return [Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y)];
+ };
+ return forward;
+ }
+
+ (d3.geo.conicEquidistant = function () {
+ return d3_geo_conic(d3_geo_conicEquidistant);
+ }).raw = d3_geo_conicEquidistant;
+ var d3_geo_gnomonic = d3_geo_azimuthal(function (cosλcosφ) {
+ return 1 / cosλcosφ;
+ }, Math.atan);
+ (d3.geo.gnomonic = function () {
+ return d3_geo_projection(d3_geo_gnomonic);
+ }).raw = d3_geo_gnomonic;
+ function d3_geo_mercator(λ, φ) {
+ return [λ, Math.log(Math.tan(π / 4 + φ / 2))];
+ }
+
+ d3_geo_mercator.invert = function (x, y) {
+ return [x, 2 * Math.atan(Math.exp(y)) - halfπ];
+ };
+ function d3_geo_mercatorProjection(project) {
+ var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
+ m.scale = function () {
+ var v = scale.apply(m, arguments);
+ return v === m ? clipAuto ? m.clipExtent(null) : m : v;
+ };
+ m.translate = function () {
+ var v = translate.apply(m, arguments);
+ return v === m ? clipAuto ? m.clipExtent(null) : m : v;
+ };
+ m.clipExtent = function (_) {
+ var v = clipExtent.apply(m, arguments);
+ if (v === m) {
+ if (clipAuto = _ == null) {
+ var k = π * scale(), t = translate();
+ clipExtent([[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]]);
+ }
+ } else if (clipAuto) {
+ v = null;
+ }
+ return v;
+ };
+ return m.clipExtent(null);
+ }
+
+ (d3.geo.mercator = function () {
+ return d3_geo_mercatorProjection(d3_geo_mercator);
+ }).raw = d3_geo_mercator;
+ var d3_geo_orthographic = d3_geo_azimuthal(function () {
+ return 1;
+ }, Math.asin);
+ (d3.geo.orthographic = function () {
+ return d3_geo_projection(d3_geo_orthographic);
+ }).raw = d3_geo_orthographic;
+ var d3_geo_stereographic = d3_geo_azimuthal(function (cosλcosφ) {
+ return 1 / (1 + cosλcosφ);
+ }, function (ρ) {
+ return 2 * Math.atan(ρ);
+ });
+ (d3.geo.stereographic = function () {
+ return d3_geo_projection(d3_geo_stereographic);
+ }).raw = d3_geo_stereographic;
+ function d3_geo_transverseMercator(λ, φ) {
+ return [Math.log(Math.tan(π / 4 + φ / 2)), -λ];
+ }
+
+ d3_geo_transverseMercator.invert = function (x, y) {
+ return [-y, 2 * Math.atan(Math.exp(x)) - halfπ];
+ };
+ (d3.geo.transverseMercator = function () {
+ var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;
+ projection.center = function (_) {
+ return _ ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
+ };
+ projection.rotate = function (_) {
+ return _ ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(),
+ [_[0], _[1], _[2] - 90]);
+ };
+ return rotate([0, 0, 90]);
+ }).raw = d3_geo_transverseMercator;
+ d3.geom = {};
+ function d3_geom_pointX(d) {
+ return d[0];
+ }
+
+ function d3_geom_pointY(d) {
+ return d[1];
+ }
+
+ d3.geom.hull = function (vertices) {
+ var x = d3_geom_pointX, y = d3_geom_pointY;
+ if (arguments.length) return hull(vertices);
+ function hull(data) {
+ if (data.length < 3) return [];
+ var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];
+ for (i = 0; i < n; i++) {
+ points.push([+fx.call(this, data[i], i), +fy.call(this, data[i], i), i]);
+ }
+ points.sort(d3_geom_hullOrder);
+ for (i = 0; i < n; i++) flippedPoints.push([points[i][0], -points[i][1]]);
+ var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);
+ var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];
+ for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);
+ for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);
+ return polygon;
+ }
+
+ hull.x = function (_) {
+ return arguments.length ? (x = _, hull) : x;
+ };
+ hull.y = function (_) {
+ return arguments.length ? (y = _, hull) : y;
+ };
+ return hull;
+ };
+ function d3_geom_hullUpper(points) {
+ var n = points.length, hull = [0, 1], hs = 2;
+ for (var i = 2; i < n; i++) {
+ while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;
+ hull[hs++] = i;
+ }
+ return hull.slice(0, hs);
+ }
+
+ function d3_geom_hullOrder(a, b) {
+ return a[0] - b[0] || a[1] - b[1];
+ }
+
+ d3.geom.polygon = function (coordinates) {
+ d3_subclass(coordinates, d3_geom_polygonPrototype);
+ return coordinates;
+ };
+ var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];
+ d3_geom_polygonPrototype.area = function () {
+ var i = -1, n = this.length, a, b = this[n - 1], area = 0;
+ while (++i < n) {
+ a = b;
+ b = this[i];
+ area += a[1] * b[0] - a[0] * b[1];
+ }
+ return area * .5;
+ };
+ d3_geom_polygonPrototype.centroid = function (k) {
+ var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;
+ if (!arguments.length) k = -1 / (6 * this.area());
+ while (++i < n) {
+ a = b;
+ b = this[i];
+ c = a[0] * b[1] - b[0] * a[1];
+ x += (a[0] + b[0]) * c;
+ y += (a[1] + b[1]) * c;
+ }
+ return [x * k, y * k];
+ };
+ d3_geom_polygonPrototype.clip = function (subject) {
+ var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;
+ while (++i < n) {
+ input = subject.slice();
+ subject.length = 0;
+ b = this[i];
+ c = input[(m = input.length - closed) - 1];
+ j = -1;
+ while (++j < m) {
+ d = input[j];
+ if (d3_geom_polygonInside(d, a, b)) {
+ if (!d3_geom_polygonInside(c, a, b)) {
+ subject.push(d3_geom_polygonIntersect(c, d, a, b));
+ }
+ subject.push(d);
+ } else if (d3_geom_polygonInside(c, a, b)) {
+ subject.push(d3_geom_polygonIntersect(c, d, a, b));
+ }
+ c = d;
+ }
+ if (closed) subject.push(subject[0]);
+ a = b;
+ }
+ return subject;
+ };
+ function d3_geom_polygonInside(p, a, b) {
+ return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
+ }
+
+ function d3_geom_polygonIntersect(c, d, a, b) {
+ var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
+ return [x1 + ua * x21, y1 + ua * y21];
+ }
+
+ function d3_geom_polygonClosed(coordinates) {
+ var a = coordinates[0], b = coordinates[coordinates.length - 1];
+ return !(a[0] - b[0] || a[1] - b[1]);
+ }
+
+ var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];
+
+ function d3_geom_voronoiBeach() {
+ d3_geom_voronoiRedBlackNode(this);
+ this.edge = this.site = this.circle = null;
+ }
+
+ function d3_geom_voronoiCreateBeach(site) {
+ var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();
+ beach.site = site;
+ return beach;
+ }
+
+ function d3_geom_voronoiDetachBeach(beach) {
+ d3_geom_voronoiDetachCircle(beach);
+ d3_geom_voronoiBeaches.remove(beach);
+ d3_geom_voronoiBeachPool.push(beach);
+ d3_geom_voronoiRedBlackNode(beach);
+ }
+
+ function d3_geom_voronoiRemoveBeach(beach) {
+ var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {
+ x: x,
+ y: y
+ }, previous = beach.P, next = beach.N, disappearing = [beach];
+ d3_geom_voronoiDetachBeach(beach);
+ var lArc = previous;
+ while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {
+ previous = lArc.P;
+ disappearing.unshift(lArc);
+ d3_geom_voronoiDetachBeach(lArc);
+ lArc = previous;
+ }
+ disappearing.unshift(lArc);
+ d3_geom_voronoiDetachCircle(lArc);
+ var rArc = next;
+ while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {
+ next = rArc.N;
+ disappearing.push(rArc);
+ d3_geom_voronoiDetachBeach(rArc);
+ rArc = next;
+ }
+ disappearing.push(rArc);
+ d3_geom_voronoiDetachCircle(rArc);
+ var nArcs = disappearing.length, iArc;
+ for (iArc = 1; iArc < nArcs; ++iArc) {
+ rArc = disappearing[iArc];
+ lArc = disappearing[iArc - 1];
+ d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
+ }
+ lArc = disappearing[0];
+ rArc = disappearing[nArcs - 1];
+ rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);
+ d3_geom_voronoiAttachCircle(lArc);
+ d3_geom_voronoiAttachCircle(rArc);
+ }
+
+ function d3_geom_voronoiAddBeach(site) {
+ var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;
+ while (node) {
+ dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;
+ if (dxl > ε) node = node.L; else {
+ dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);
+ if (dxr > ε) {
+ if (!node.R) {
+ lArc = node;
+ break;
+ }
+ node = node.R;
+ } else {
+ if (dxl > -ε) {
+ lArc = node.P;
+ rArc = node;
+ } else if (dxr > -ε) {
+ lArc = node;
+ rArc = node.N;
+ } else {
+ lArc = rArc = node;
+ }
+ break;
+ }
+ }
+ }
+ var newArc = d3_geom_voronoiCreateBeach(site);
+ d3_geom_voronoiBeaches.insert(lArc, newArc);
+ if (!lArc && !rArc) return;
+ if (lArc === rArc) {
+ d3_geom_voronoiDetachCircle(lArc);
+ rArc = d3_geom_voronoiCreateBeach(lArc.site);
+ d3_geom_voronoiBeaches.insert(newArc, rArc);
+ newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
+ d3_geom_voronoiAttachCircle(lArc);
+ d3_geom_voronoiAttachCircle(rArc);
+ return;
+ }
+ if (!rArc) {
+ newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
+ return;
+ }
+ d3_geom_voronoiDetachCircle(lArc);
+ d3_geom_voronoiDetachCircle(rArc);
+ var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {
+ x: (cy * hb - by * hc) / d + ax,
+ y: (bx * hc - cx * hb) / d + ay
+ };
+ d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);
+ newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);
+ rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);
+ d3_geom_voronoiAttachCircle(lArc);
+ d3_geom_voronoiAttachCircle(rArc);
+ }
+
+ function d3_geom_voronoiLeftBreakPoint(arc, directrix) {
+ var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;
+ if (!pby2) return rfocx;
+ var lArc = arc.P;
+ if (!lArc) return -Infinity;
+ site = lArc.site;
+ var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;
+ if (!plby2) return lfocx;
+ var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;
+ if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
+ return (rfocx + lfocx) / 2;
+ }
+
+ function d3_geom_voronoiRightBreakPoint(arc, directrix) {
+ var rArc = arc.N;
+ if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);
+ var site = arc.site;
+ return site.y === directrix ? site.x : Infinity;
+ }
+
+ function d3_geom_voronoiCell(site) {
+ this.site = site;
+ this.edges = [];
+ }
+
+ d3_geom_voronoiCell.prototype.prepare = function () {
+ var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;
+ while (iHalfEdge--) {
+ edge = halfEdges[iHalfEdge].edge;
+ if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);
+ }
+ halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);
+ return halfEdges.length;
+ };
+ function d3_geom_voronoiCloseCells(extent) {
+ var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;
+ while (iCell--) {
+ cell = cells[iCell];
+ if (!cell || !cell.prepare()) continue;
+ halfEdges = cell.edges;
+ nHalfEdges = halfEdges.length;
+ iHalfEdge = 0;
+ while (iHalfEdge < nHalfEdges) {
+ end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;
+ start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;
+ if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {
+ halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {
+ x: x0,
+ y: abs(x2 - x0) < ε ? y2 : y1
+ } : abs(y3 - y1) < ε && x1 - x3 > ε ? {
+ x: abs(y2 - y1) < ε ? x2 : x1,
+ y: y1
+ } : abs(x3 - x1) < ε && y3 - y0 > ε ? {
+ x: x1,
+ y: abs(x2 - x1) < ε ? y2 : y0
+ } : abs(y3 - y0) < ε && x3 - x0 > ε ? {
+ x: abs(y2 - y0) < ε ? x2 : x0,
+ y: y0
+ } : null), cell.site, null));
+ ++nHalfEdges;
+ }
+ }
+ }
+ }
+
+ function d3_geom_voronoiHalfEdgeOrder(a, b) {
+ return b.angle - a.angle;
+ }
+
+ function d3_geom_voronoiCircle() {
+ d3_geom_voronoiRedBlackNode(this);
+ this.x = this.y = this.arc = this.site = this.cy = null;
+ }
+
+ function d3_geom_voronoiAttachCircle(arc) {
+ var lArc = arc.P, rArc = arc.N;
+ if (!lArc || !rArc) return;
+ var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;
+ if (lSite === rSite) return;
+ var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;
+ var d = 2 * (ax * cy - ay * cx);
+ if (d >= -ε2) return;
+ var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;
+ var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();
+ circle.arc = arc;
+ circle.site = cSite;
+ circle.x = x + bx;
+ circle.y = cy + Math.sqrt(x * x + y * y);
+ circle.cy = cy;
+ arc.circle = circle;
+ var before = null, node = d3_geom_voronoiCircles._;
+ while (node) {
+ if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {
+ if (node.L) node = node.L; else {
+ before = node.P;
+ break;
+ }
+ } else {
+ if (node.R) node = node.R; else {
+ before = node;
+ break;
+ }
+ }
+ }
+ d3_geom_voronoiCircles.insert(before, circle);
+ if (!before) d3_geom_voronoiFirstCircle = circle;
+ }
+
+ function d3_geom_voronoiDetachCircle(arc) {
+ var circle = arc.circle;
+ if (circle) {
+ if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;
+ d3_geom_voronoiCircles.remove(circle);
+ d3_geom_voronoiCirclePool.push(circle);
+ d3_geom_voronoiRedBlackNode(circle);
+ arc.circle = null;
+ }
+ }
+
+ function d3_geom_voronoiClipEdges(extent) {
+ var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;
+ while (i--) {
+ e = edges[i];
+ if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {
+ e.a = e.b = null;
+ edges.splice(i, 1);
+ }
+ }
+ }
+
+ function d3_geom_voronoiConnectEdge(edge, extent) {
+ var vb = edge.b;
+ if (vb) return true;
+ var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;
+ if (ry === ly) {
+ if (fx < x0 || fx >= x1) return;
+ if (lx > rx) {
+ if (!va) va = {
+ x: fx,
+ y: y0
+ }; else if (va.y >= y1) return;
+ vb = {
+ x: fx,
+ y: y1
+ };
+ } else {
+ if (!va) va = {
+ x: fx,
+ y: y1
+ }; else if (va.y < y0) return;
+ vb = {
+ x: fx,
+ y: y0
+ };
+ }
+ } else {
+ fm = (lx - rx) / (ry - ly);
+ fb = fy - fm * fx;
+ if (fm < -1 || fm > 1) {
+ if (lx > rx) {
+ if (!va) va = {
+ x: (y0 - fb) / fm,
+ y: y0
+ }; else if (va.y >= y1) return;
+ vb = {
+ x: (y1 - fb) / fm,
+ y: y1
+ };
+ } else {
+ if (!va) va = {
+ x: (y1 - fb) / fm,
+ y: y1
+ }; else if (va.y < y0) return;
+ vb = {
+ x: (y0 - fb) / fm,
+ y: y0
+ };
+ }
+ } else {
+ if (ly < ry) {
+ if (!va) va = {
+ x: x0,
+ y: fm * x0 + fb
+ }; else if (va.x >= x1) return;
+ vb = {
+ x: x1,
+ y: fm * x1 + fb
+ };
+ } else {
+ if (!va) va = {
+ x: x1,
+ y: fm * x1 + fb
+ }; else if (va.x < x0) return;
+ vb = {
+ x: x0,
+ y: fm * x0 + fb
+ };
+ }
+ }
+ }
+ edge.a = va;
+ edge.b = vb;
+ return true;
+ }
+
+ function d3_geom_voronoiEdge(lSite, rSite) {
+ this.l = lSite;
+ this.r = rSite;
+ this.a = this.b = null;
+ }
+
+ function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {
+ var edge = new d3_geom_voronoiEdge(lSite, rSite);
+ d3_geom_voronoiEdges.push(edge);
+ if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);
+ if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);
+ d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));
+ d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));
+ return edge;
+ }
+
+ function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {
+ var edge = new d3_geom_voronoiEdge(lSite, null);
+ edge.a = va;
+ edge.b = vb;
+ d3_geom_voronoiEdges.push(edge);
+ return edge;
+ }
+
+ function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {
+ if (!edge.a && !edge.b) {
+ edge.a = vertex;
+ edge.l = lSite;
+ edge.r = rSite;
+ } else if (edge.l === rSite) {
+ edge.b = vertex;
+ } else {
+ edge.a = vertex;
+ }
+ }
+
+ function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {
+ var va = edge.a, vb = edge.b;
+ this.edge = edge;
+ this.site = lSite;
+ this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);
+ }
+
+ d3_geom_voronoiHalfEdge.prototype = {
+ start: function () {
+ return this.edge.l === this.site ? this.edge.a : this.edge.b;
+ },
+ end: function () {
+ return this.edge.l === this.site ? this.edge.b : this.edge.a;
+ }
+ };
+ function d3_geom_voronoiRedBlackTree() {
+ this._ = null;
+ }
+
+ function d3_geom_voronoiRedBlackNode(node) {
+ node.U = node.C = node.L = node.R = node.P = node.N = null;
+ }
+
+ d3_geom_voronoiRedBlackTree.prototype = {
+ insert: function (after, node) {
+ var parent, grandpa, uncle;
+ if (after) {
+ node.P = after;
+ node.N = after.N;
+ if (after.N) after.N.P = node;
+ after.N = node;
+ if (after.R) {
+ after = after.R;
+ while (after.L) after = after.L;
+ after.L = node;
+ } else {
+ after.R = node;
+ }
+ parent = after;
+ } else if (this._) {
+ after = d3_geom_voronoiRedBlackFirst(this._);
+ node.P = null;
+ node.N = after;
+ after.P = after.L = node;
+ parent = after;
+ } else {
+ node.P = node.N = null;
+ this._ = node;
+ parent = null;
+ }
+ node.L = node.R = null;
+ node.U = parent;
+ node.C = true;
+ after = node;
+ while (parent && parent.C) {
+ grandpa = parent.U;
+ if (parent === grandpa.L) {
+ uncle = grandpa.R;
+ if (uncle && uncle.C) {
+ parent.C = uncle.C = false;
+ grandpa.C = true;
+ after = grandpa;
+ } else {
+ if (after === parent.R) {
+ d3_geom_voronoiRedBlackRotateLeft(this, parent);
+ after = parent;
+ parent = after.U;
+ }
+ parent.C = false;
+ grandpa.C = true;
+ d3_geom_voronoiRedBlackRotateRight(this, grandpa);
+ }
+ } else {
+ uncle = grandpa.L;
+ if (uncle && uncle.C) {
+ parent.C = uncle.C = false;
+ grandpa.C = true;
+ after = grandpa;
+ } else {
+ if (after === parent.L) {
+ d3_geom_voronoiRedBlackRotateRight(this, parent);
+ after = parent;
+ parent = after.U;
+ }
+ parent.C = false;
+ grandpa.C = true;
+ d3_geom_voronoiRedBlackRotateLeft(this, grandpa);
+ }
+ }
+ parent = after.U;
+ }
+ this._.C = false;
+ },
+ remove: function (node) {
+ if (node.N) node.N.P = node.P;
+ if (node.P) node.P.N = node.N;
+ node.N = node.P = null;
+ var parent = node.U, sibling, left = node.L, right = node.R, next, red;
+ if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);
+ if (parent) {
+ if (parent.L === node) parent.L = next; else parent.R = next;
+ } else {
+ this._ = next;
+ }
+ if (left && right) {
+ red = next.C;
+ next.C = node.C;
+ next.L = left;
+ left.U = next;
+ if (next !== right) {
+ parent = next.U;
+ next.U = node.U;
+ node = next.R;
+ parent.L = node;
+ next.R = right;
+ right.U = next;
+ } else {
+ next.U = parent;
+ parent = next;
+ node = next.R;
+ }
+ } else {
+ red = node.C;
+ node = next;
+ }
+ if (node) node.U = parent;
+ if (red) return;
+ if (node && node.C) {
+ node.C = false;
+ return;
+ }
+ do {
+ if (node === this._) break;
+ if (node === parent.L) {
+ sibling = parent.R;
+ if (sibling.C) {
+ sibling.C = false;
+ parent.C = true;
+ d3_geom_voronoiRedBlackRotateLeft(this, parent);
+ sibling = parent.R;
+ }
+ if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
+ if (!sibling.R || !sibling.R.C) {
+ sibling.L.C = false;
+ sibling.C = true;
+ d3_geom_voronoiRedBlackRotateRight(this, sibling);
+ sibling = parent.R;
+ }
+ sibling.C = parent.C;
+ parent.C = sibling.R.C = false;
+ d3_geom_voronoiRedBlackRotateLeft(this, parent);
+ node = this._;
+ break;
+ }
+ } else {
+ sibling = parent.L;
+ if (sibling.C) {
+ sibling.C = false;
+ parent.C = true;
+ d3_geom_voronoiRedBlackRotateRight(this, parent);
+ sibling = parent.L;
+ }
+ if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
+ if (!sibling.L || !sibling.L.C) {
+ sibling.R.C = false;
+ sibling.C = true;
+ d3_geom_voronoiRedBlackRotateLeft(this, sibling);
+ sibling = parent.L;
+ }
+ sibling.C = parent.C;
+ parent.C = sibling.L.C = false;
+ d3_geom_voronoiRedBlackRotateRight(this, parent);
+ node = this._;
+ break;
+ }
+ }
+ sibling.C = true;
+ node = parent;
+ parent = parent.U;
+ } while (!node.C);
+ if (node) node.C = false;
+ }
+ };
+ function d3_geom_voronoiRedBlackRotateLeft(tree, node) {
+ var p = node, q = node.R, parent = p.U;
+ if (parent) {
+ if (parent.L === p) parent.L = q; else parent.R = q;
+ } else {
+ tree._ = q;
+ }
+ q.U = parent;
+ p.U = q;
+ p.R = q.L;
+ if (p.R) p.R.U = p;
+ q.L = p;
+ }
+
+ function d3_geom_voronoiRedBlackRotateRight(tree, node) {
+ var p = node, q = node.L, parent = p.U;
+ if (parent) {
+ if (parent.L === p) parent.L = q; else parent.R = q;
+ } else {
+ tree._ = q;
+ }
+ q.U = parent;
+ p.U = q;
+ p.L = q.R;
+ if (p.L) p.L.U = p;
+ q.R = p;
+ }
+
+ function d3_geom_voronoiRedBlackFirst(node) {
+ while (node.L) node = node.L;
+ return node;
+ }
+
+ function d3_geom_voronoi(sites, bbox) {
+ var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;
+ d3_geom_voronoiEdges = [];
+ d3_geom_voronoiCells = new Array(sites.length);
+ d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();
+ d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();
+ while (true) {
+ circle = d3_geom_voronoiFirstCircle;
+ if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {
+ if (site.x !== x0 || site.y !== y0) {
+ d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);
+ d3_geom_voronoiAddBeach(site);
+ x0 = site.x, y0 = site.y;
+ }
+ site = sites.pop();
+ } else if (circle) {
+ d3_geom_voronoiRemoveBeach(circle.arc);
+ } else {
+ break;
+ }
+ }
+ if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);
+ var diagram = {
+ cells: d3_geom_voronoiCells,
+ edges: d3_geom_voronoiEdges
+ };
+ d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;
+ return diagram;
+ }
+
+ function d3_geom_voronoiVertexOrder(a, b) {
+ return b.y - a.y || b.x - a.x;
+ }
+
+ d3.geom.voronoi = function (points) {
+ var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;
+ if (points) return voronoi(points);
+ function voronoi(data) {
+ var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];
+ d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function (cell, i) {
+ var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function (e) {
+ var s = e.start();
+ return [s.x, s.y];
+ }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [[x0, y1], [x1, y1], [x1, y0], [x0, y0]] : [];
+ polygon.point = data[i];
+ });
+ return polygons;
+ }
+
+ function sites(data) {
+ return data.map(function (d, i) {
+ return {
+ x: Math.round(fx(d, i) / ε) * ε,
+ y: Math.round(fy(d, i) / ε) * ε,
+ i: i
+ };
+ });
+ }
+
+ voronoi.links = function (data) {
+ return d3_geom_voronoi(sites(data)).edges.filter(function (edge) {
+ return edge.l && edge.r;
+ }).map(function (edge) {
+ return {
+ source: data[edge.l.i],
+ target: data[edge.r.i]
+ };
+ });
+ };
+ voronoi.triangles = function (data) {
+ var triangles = [];
+ d3_geom_voronoi(sites(data)).cells.forEach(function (cell, i) {
+ var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;
+ while (++j < m) {
+ e0 = e1;
+ s0 = s1;
+ e1 = edges[j].edge;
+ s1 = e1.l === site ? e1.r : e1.l;
+ if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
+ triangles.push([data[i], data[s0.i], data[s1.i]]);
+ }
+ }
+ });
+ return triangles;
+ };
+ voronoi.x = function (_) {
+ return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;
+ };
+ voronoi.y = function (_) {
+ return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;
+ };
+ voronoi.clipExtent = function (_) {
+ if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;
+ clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;
+ return voronoi;
+ };
+ voronoi.size = function (_) {
+ if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];
+ return voronoi.clipExtent(_ && [[0, 0], _]);
+ };
+ return voronoi;
+ };
+ var d3_geom_voronoiClipExtent = [[-1e6, -1e6], [1e6, 1e6]];
+
+ function d3_geom_voronoiTriangleArea(a, b, c) {
+ return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
+ }
+
+ d3.geom.delaunay = function (vertices) {
+ return d3.geom.voronoi().triangles(vertices);
+ };
+ d3.geom.quadtree = function (points, x1, y1, x2, y2) {
+ var x = d3_geom_pointX, y = d3_geom_pointY, compat;
+ if (compat = arguments.length) {
+ x = d3_geom_quadtreeCompatX;
+ y = d3_geom_quadtreeCompatY;
+ if (compat === 3) {
+ y2 = y1;
+ x2 = x1;
+ y1 = x1 = 0;
+ }
+ return quadtree(points);
+ }
+ function quadtree(data) {
+ var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;
+ if (x1 != null) {
+ x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;
+ } else {
+ x2_ = y2_ = -(x1_ = y1_ = Infinity);
+ xs = [], ys = [];
+ n = data.length;
+ if (compat) for (i = 0; i < n; ++i) {
+ d = data[i];
+ if (d.x < x1_) x1_ = d.x;
+ if (d.y < y1_) y1_ = d.y;
+ if (d.x > x2_) x2_ = d.x;
+ if (d.y > y2_) y2_ = d.y;
+ xs.push(d.x);
+ ys.push(d.y);
+ } else for (i = 0; i < n; ++i) {
+ var x_ = +fx(d = data[i], i), y_ = +fy(d, i);
+ if (x_ < x1_) x1_ = x_;
+ if (y_ < y1_) y1_ = y_;
+ if (x_ > x2_) x2_ = x_;
+ if (y_ > y2_) y2_ = y_;
+ xs.push(x_);
+ ys.push(y_);
+ }
+ }
+ var dx = x2_ - x1_, dy = y2_ - y1_;
+ if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;
+ function insert(n, d, x, y, x1, y1, x2, y2) {
+ if (isNaN(x) || isNaN(y)) return;
+ if (n.leaf) {
+ var nx = n.x, ny = n.y;
+ if (nx != null) {
+ if (abs(nx - x) + abs(ny - y) < .01) {
+ insertChild(n, d, x, y, x1, y1, x2, y2);
+ } else {
+ var nPoint = n.point;
+ n.x = n.y = n.point = null;
+ insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);
+ insertChild(n, d, x, y, x1, y1, x2, y2);
+ }
+ } else {
+ n.x = x, n.y = y, n.point = d;
+ }
+ } else {
+ insertChild(n, d, x, y, x1, y1, x2, y2);
+ }
+ }
+
+ function insertChild(n, d, x, y, x1, y1, x2, y2) {
+ var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right;
+ n.leaf = false;
+ n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
+ if (right) x1 = sx; else x2 = sx;
+ if (bottom) y1 = sy; else y2 = sy;
+ insert(n, d, x, y, x1, y1, x2, y2);
+ }
+
+ var root = d3_geom_quadtreeNode();
+ root.add = function (d) {
+ insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);
+ };
+ root.visit = function (f) {
+ d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
+ };
+ i = -1;
+ if (x1 == null) {
+ while (++i < n) {
+ insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);
+ }
+ --i;
+ } else data.forEach(root.add);
+ xs = ys = data = d = null;
+ return root;
+ }
+
+ quadtree.x = function (_) {
+ return arguments.length ? (x = _, quadtree) : x;
+ };
+ quadtree.y = function (_) {
+ return arguments.length ? (y = _, quadtree) : y;
+ };
+ quadtree.extent = function (_) {
+ if (!arguments.length) return x1 == null ? null : [[x1, y1], [x2, y2]];
+ if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0],
+ y2 = +_[1][1];
+ return quadtree;
+ };
+ quadtree.size = function (_) {
+ if (!arguments.length) return x1 == null ? null : [x2 - x1, y2 - y1];
+ if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];
+ return quadtree;
+ };
+ return quadtree;
+ };
+ function d3_geom_quadtreeCompatX(d) {
+ return d.x;
+ }
+
+ function d3_geom_quadtreeCompatY(d) {
+ return d.y;
+ }
+
+ function d3_geom_quadtreeNode() {
+ return {
+ leaf: true,
+ nodes: [],
+ point: null,
+ x: null,
+ y: null
+ };
+ }
+
+ function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
+ if (!f(node, x1, y1, x2, y2)) {
+ var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
+ if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
+ if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
+ if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
+ if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
+ }
+ }
+
+ d3.interpolateRgb = d3_interpolateRgb;
+ function d3_interpolateRgb(a, b) {
+ a = d3.rgb(a);
+ b = d3.rgb(b);
+ var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
+ return function (t) {
+ return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
+ };
+ }
+
+ d3.interpolateObject = d3_interpolateObject;
+ function d3_interpolateObject(a, b) {
+ var i = {}, c = {}, k;
+ for (k in a) {
+ if (k in b) {
+ i[k] = d3_interpolate(a[k], b[k]);
+ } else {
+ c[k] = a[k];
+ }
+ }
+ for (k in b) {
+ if (!(k in a)) {
+ c[k] = b[k];
+ }
+ }
+ return function (t) {
+ for (k in i) c[k] = i[k](t);
+ return c;
+ };
+ }
+
+ d3.interpolateNumber = d3_interpolateNumber;
+ function d3_interpolateNumber(a, b) {
+ b -= a = +a;
+ return function (t) {
+ return a + b * t;
+ };
+ }
+
+ d3.interpolateString = d3_interpolateString;
+ function d3_interpolateString(a, b) {
+ var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];
+ a = a + "", b = b + "";
+ while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
+ if ((bs = bm.index) > bi) {
+ bs = b.slice(bi, bs);
+ if (s[i]) s[i] += bs; else s[++i] = bs;
+ }
+ if ((am = am[0]) === (bm = bm[0])) {
+ if (s[i]) s[i] += bm; else s[++i] = bm;
+ } else {
+ s[++i] = null;
+ q.push({
+ i: i,
+ x: d3_interpolateNumber(am, bm)
+ });
+ }
+ bi = d3_interpolate_numberB.lastIndex;
+ }
+ if (bi < b.length) {
+ bs = b.slice(bi);
+ if (s[i]) s[i] += bs; else s[++i] = bs;
+ }
+ return s.length < 2 ? q[0] ? (b = q[0].x, function (t) {
+ return b(t) + "";
+ }) : function () {
+ return b;
+ } : (b = q.length, function (t) {
+ for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ });
+ }
+
+ var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g");
+ d3.interpolate = d3_interpolate;
+ function d3_interpolate(a, b) {
+ var i = d3.interpolators.length, f;
+ while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
+ return f;
+ }
+
+ d3.interpolators = [function (a, b) {
+ var t = typeof b;
+ return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);
+ }];
+ d3.interpolateArray = d3_interpolateArray;
+ function d3_interpolateArray(a, b) {
+ var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
+ for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));
+ for (; i < na; ++i) c[i] = a[i];
+ for (; i < nb; ++i) c[i] = b[i];
+ return function (t) {
+ for (i = 0; i < n0; ++i) c[i] = x[i](t);
+ return c;
+ };
+ }
+
+ var d3_ease_default = function () {
+ return d3_identity;
+ };
+ var d3_ease = d3.map({
+ linear: d3_ease_default,
+ poly: d3_ease_poly,
+ quad: function () {
+ return d3_ease_quad;
+ },
+ cubic: function () {
+ return d3_ease_cubic;
+ },
+ sin: function () {
+ return d3_ease_sin;
+ },
+ exp: function () {
+ return d3_ease_exp;
+ },
+ circle: function () {
+ return d3_ease_circle;
+ },
+ elastic: d3_ease_elastic,
+ back: d3_ease_back,
+ bounce: function () {
+ return d3_ease_bounce;
+ }
+ });
+ var d3_ease_mode = d3.map({
+ "in": d3_identity,
+ out: d3_ease_reverse,
+ "in-out": d3_ease_reflect,
+ "out-in": function (f) {
+ return d3_ease_reflect(d3_ease_reverse(f));
+ }
+ });
+ d3.ease = function (name) {
+ var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
+ t = d3_ease.get(t) || d3_ease_default;
+ m = d3_ease_mode.get(m) || d3_identity;
+ return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
+ };
+ function d3_ease_clamp(f) {
+ return function (t) {
+ return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
+ };
+ }
+
+ function d3_ease_reverse(f) {
+ return function (t) {
+ return 1 - f(1 - t);
+ };
+ }
+
+ function d3_ease_reflect(f) {
+ return function (t) {
+ return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
+ };
+ }
+
+ function d3_ease_quad(t) {
+ return t * t;
+ }
+
+ function d3_ease_cubic(t) {
+ return t * t * t;
+ }
+
+ function d3_ease_cubicInOut(t) {
+ if (t <= 0) return 0;
+ if (t >= 1) return 1;
+ var t2 = t * t, t3 = t2 * t;
+ return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
+ }
+
+ function d3_ease_poly(e) {
+ return function (t) {
+ return Math.pow(t, e);
+ };
+ }
+
+ function d3_ease_sin(t) {
+ return 1 - Math.cos(t * halfπ);
+ }
+
+ function d3_ease_exp(t) {
+ return Math.pow(2, 10 * (t - 1));
+ }
+
+ function d3_ease_circle(t) {
+ return 1 - Math.sqrt(1 - t * t);
+ }
+
+ function d3_ease_elastic(a, p) {
+ var s;
+ if (arguments.length < 2) p = .45;
+ if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;
+ return function (t) {
+ return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
+ };
+ }
+
+ function d3_ease_back(s) {
+ if (!s) s = 1.70158;
+ return function (t) {
+ return t * t * ((s + 1) * t - s);
+ };
+ }
+
+ function d3_ease_bounce(t) {
+ return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
+ }
+
+ d3.interpolateHcl = d3_interpolateHcl;
+ function d3_interpolateHcl(a, b) {
+ a = d3.hcl(a);
+ b = d3.hcl(b);
+ var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
+ if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
+ if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
+ return function (t) {
+ return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
+ };
+ }
+
+ d3.interpolateHsl = d3_interpolateHsl;
+ function d3_interpolateHsl(a, b) {
+ a = d3.hsl(a);
+ b = d3.hsl(b);
+ var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
+ if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
+ if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
+ return function (t) {
+ return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
+ };
+ }
+
+ d3.interpolateLab = d3_interpolateLab;
+ function d3_interpolateLab(a, b) {
+ a = d3.lab(a);
+ b = d3.lab(b);
+ var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
+ return function (t) {
+ return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
+ };
+ }
+
+ d3.interpolateRound = d3_interpolateRound;
+ function d3_interpolateRound(a, b) {
+ b -= a;
+ return function (t) {
+ return Math.round(a + b * t);
+ };
+ }
+
+ d3.transform = function (string) {
+ var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
+ return (d3.transform = function (string) {
+ if (string != null) {
+ g.setAttribute("transform", string);
+ var t = g.transform.baseVal.consolidate();
+ }
+ return new d3_transform(t ? t.matrix : d3_transformIdentity);
+ })(string);
+ };
+ function d3_transform(m) {
+ var r0 = [m.a, m.b], r1 = [m.c, m.d], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
+ if (r0[0] * r1[1] < r1[0] * r0[1]) {
+ r0[0] *= -1;
+ r0[1] *= -1;
+ kx *= -1;
+ kz *= -1;
+ }
+ this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
+ this.translate = [m.e, m.f];
+ this.scale = [kx, ky];
+ this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
+ }
+
+ d3_transform.prototype.toString = function () {
+ return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
+ };
+ function d3_transformDot(a, b) {
+ return a[0] * b[0] + a[1] * b[1];
+ }
+
+ function d3_transformNormalize(a) {
+ var k = Math.sqrt(d3_transformDot(a, a));
+ if (k) {
+ a[0] /= k;
+ a[1] /= k;
+ }
+ return k;
+ }
+
+ function d3_transformCombine(a, b, k) {
+ a[0] += k * b[0];
+ a[1] += k * b[1];
+ return a;
+ }
+
+ var d3_transformIdentity = {
+ a: 1,
+ b: 0,
+ c: 0,
+ d: 1,
+ e: 0,
+ f: 0
+ };
+ d3.interpolateTransform = d3_interpolateTransform;
+ function d3_interpolateTransform(a, b) {
+ var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;
+ if (ta[0] != tb[0] || ta[1] != tb[1]) {
+ s.push("translate(", null, ",", null, ")");
+ q.push({
+ i: 1,
+ x: d3_interpolateNumber(ta[0], tb[0])
+ }, {
+ i: 3,
+ x: d3_interpolateNumber(ta[1], tb[1])
+ });
+ } else if (tb[0] || tb[1]) {
+ s.push("translate(" + tb + ")");
+ } else {
+ s.push("");
+ }
+ if (ra != rb) {
+ if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
+ q.push({
+ i: s.push(s.pop() + "rotate(", null, ")") - 2,
+ x: d3_interpolateNumber(ra, rb)
+ });
+ } else if (rb) {
+ s.push(s.pop() + "rotate(" + rb + ")");
+ }
+ if (wa != wb) {
+ q.push({
+ i: s.push(s.pop() + "skewX(", null, ")") - 2,
+ x: d3_interpolateNumber(wa, wb)
+ });
+ } else if (wb) {
+ s.push(s.pop() + "skewX(" + wb + ")");
+ }
+ if (ka[0] != kb[0] || ka[1] != kb[1]) {
+ n = s.push(s.pop() + "scale(", null, ",", null, ")");
+ q.push({
+ i: n - 4,
+ x: d3_interpolateNumber(ka[0], kb[0])
+ }, {
+ i: n - 2,
+ x: d3_interpolateNumber(ka[1], kb[1])
+ });
+ } else if (kb[0] != 1 || kb[1] != 1) {
+ s.push(s.pop() + "scale(" + kb + ")");
+ }
+ n = q.length;
+ return function (t) {
+ var i = -1, o;
+ while (++i < n) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ };
+ }
+
+ function d3_uninterpolateNumber(a, b) {
+ b = b - (a = +a) ? 1 / (b - a) : 0;
+ return function (x) {
+ return (x - a) * b;
+ };
+ }
+
+ function d3_uninterpolateClamp(a, b) {
+ b = b - (a = +a) ? 1 / (b - a) : 0;
+ return function (x) {
+ return Math.max(0, Math.min(1, (x - a) * b));
+ };
+ }
+
+ d3.layout = {};
+ d3.layout.bundle = function () {
+ return function (links) {
+ var paths = [], i = -1, n = links.length;
+ while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
+ return paths;
+ };
+ };
+ function d3_layout_bundlePath(link) {
+ var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [start];
+ while (start !== lca) {
+ start = start.parent;
+ points.push(start);
+ }
+ var k = points.length;
+ while (end !== lca) {
+ points.splice(k, 0, end);
+ end = end.parent;
+ }
+ return points;
+ }
+
+ function d3_layout_bundleAncestors(node) {
+ var ancestors = [], parent = node.parent;
+ while (parent != null) {
+ ancestors.push(node);
+ node = parent;
+ parent = parent.parent;
+ }
+ ancestors.push(node);
+ return ancestors;
+ }
+
+ function d3_layout_bundleLeastCommonAncestor(a, b) {
+ if (a === b) return a;
+ var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
+ while (aNode === bNode) {
+ sharedNode = aNode;
+ aNode = aNodes.pop();
+ bNode = bNodes.pop();
+ }
+ return sharedNode;
+ }
+
+ d3.layout.chord = function () {
+ var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
+
+ function relayout() {
+ var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
+ chords = [];
+ groups = [];
+ k = 0, i = -1;
+ while (++i < n) {
+ x = 0, j = -1;
+ while (++j < n) {
+ x += matrix[i][j];
+ }
+ groupSums.push(x);
+ subgroupIndex.push(d3.range(n));
+ k += x;
+ }
+ if (sortGroups) {
+ groupIndex.sort(function (a, b) {
+ return sortGroups(groupSums[a], groupSums[b]);
+ });
+ }
+ if (sortSubgroups) {
+ subgroupIndex.forEach(function (d, i) {
+ d.sort(function (a, b) {
+ return sortSubgroups(matrix[i][a], matrix[i][b]);
+ });
+ });
+ }
+ k = (τ - padding * n) / k;
+ x = 0, i = -1;
+ while (++i < n) {
+ x0 = x, j = -1;
+ while (++j < n) {
+ var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
+ subgroups[di + "-" + dj] = {
+ index: di,
+ subindex: dj,
+ startAngle: a0,
+ endAngle: a1,
+ value: v
+ };
+ }
+ groups[di] = {
+ index: di,
+ startAngle: x0,
+ endAngle: x,
+ value: (x - x0) / k
+ };
+ x += padding;
+ }
+ i = -1;
+ while (++i < n) {
+ j = i - 1;
+ while (++j < n) {
+ var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
+ if (source.value || target.value) {
+ chords.push(source.value < target.value ? {
+ source: target,
+ target: source
+ } : {
+ source: source,
+ target: target
+ });
+ }
+ }
+ }
+ if (sortChords) resort();
+ }
+
+ function resort() {
+ chords.sort(function (a, b) {
+ return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
+ });
+ }
+
+ chord.matrix = function (x) {
+ if (!arguments.length) return matrix;
+ n = (matrix = x) && matrix.length;
+ chords = groups = null;
+ return chord;
+ };
+ chord.padding = function (x) {
+ if (!arguments.length) return padding;
+ padding = x;
+ chords = groups = null;
+ return chord;
+ };
+ chord.sortGroups = function (x) {
+ if (!arguments.length) return sortGroups;
+ sortGroups = x;
+ chords = groups = null;
+ return chord;
+ };
+ chord.sortSubgroups = function (x) {
+ if (!arguments.length) return sortSubgroups;
+ sortSubgroups = x;
+ chords = null;
+ return chord;
+ };
+ chord.sortChords = function (x) {
+ if (!arguments.length) return sortChords;
+ sortChords = x;
+ if (chords) resort();
+ return chord;
+ };
+ chord.chords = function () {
+ if (!chords) relayout();
+ return chords;
+ };
+ chord.groups = function () {
+ if (!groups) relayout();
+ return groups;
+ };
+ return chord;
+ };
+ d3.layout.force = function () {
+ var force = {}, event = d3.dispatch("start", "tick", "end"), size = [1, 1], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
+
+ function repulse(node) {
+ return function (quad, x1, _, x2) {
+ if (quad.point !== node) {
+ var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;
+ if (dw * dw / theta2 < dn) {
+ if (dn < chargeDistance2) {
+ var k = quad.charge / dn;
+ node.px -= dx * k;
+ node.py -= dy * k;
+ }
+ return true;
+ }
+ if (quad.point && dn && dn < chargeDistance2) {
+ var k = quad.pointCharge / dn;
+ node.px -= dx * k;
+ node.py -= dy * k;
+ }
+ }
+ return !quad.charge;
+ };
+ }
+
+ force.tick = function () {
+ if ((alpha *= .99) < .005) {
+ event.end({
+ type: "end",
+ alpha: alpha = 0
+ });
+ return true;
+ }
+ var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
+ for (i = 0; i < m; ++i) {
+ o = links[i];
+ s = o.source;
+ t = o.target;
+ x = t.x - s.x;
+ y = t.y - s.y;
+ if (l = x * x + y * y) {
+ l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
+ x *= l;
+ y *= l;
+ t.x -= x * (k = s.weight / (t.weight + s.weight));
+ t.y -= y * k;
+ s.x += x * (k = 1 - k);
+ s.y += y * k;
+ }
+ }
+ if (k = alpha * gravity) {
+ x = size[0] / 2;
+ y = size[1] / 2;
+ i = -1;
+ if (k) while (++i < n) {
+ o = nodes[i];
+ o.x += (x - o.x) * k;
+ o.y += (y - o.y) * k;
+ }
+ }
+ if (charge) {
+ d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
+ i = -1;
+ while (++i < n) {
+ if (!(o = nodes[i]).fixed) {
+ q.visit(repulse(o));
+ }
+ }
+ }
+ i = -1;
+ while (++i < n) {
+ o = nodes[i];
+ if (o.fixed) {
+ o.x = o.px;
+ o.y = o.py;
+ } else {
+ o.x -= (o.px - (o.px = o.x)) * friction;
+ o.y -= (o.py - (o.py = o.y)) * friction;
+ }
+ }
+ event.tick({
+ type: "tick",
+ alpha: alpha
+ });
+ };
+ force.nodes = function (x) {
+ if (!arguments.length) return nodes;
+ nodes = x;
+ return force;
+ };
+ force.links = function (x) {
+ if (!arguments.length) return links;
+ links = x;
+ return force;
+ };
+ force.size = function (x) {
+ if (!arguments.length) return size;
+ size = x;
+ return force;
+ };
+ force.linkDistance = function (x) {
+ if (!arguments.length) return linkDistance;
+ linkDistance = typeof x === "function" ? x : +x;
+ return force;
+ };
+ force.distance = force.linkDistance;
+ force.linkStrength = function (x) {
+ if (!arguments.length) return linkStrength;
+ linkStrength = typeof x === "function" ? x : +x;
+ return force;
+ };
+ force.friction = function (x) {
+ if (!arguments.length) return friction;
+ friction = +x;
+ return force;
+ };
+ force.charge = function (x) {
+ if (!arguments.length) return charge;
+ charge = typeof x === "function" ? x : +x;
+ return force;
+ };
+ force.chargeDistance = function (x) {
+ if (!arguments.length) return Math.sqrt(chargeDistance2);
+ chargeDistance2 = x * x;
+ return force;
+ };
+ force.gravity = function (x) {
+ if (!arguments.length) return gravity;
+ gravity = +x;
+ return force;
+ };
+ force.theta = function (x) {
+ if (!arguments.length) return Math.sqrt(theta2);
+ theta2 = x * x;
+ return force;
+ };
+ force.alpha = function (x) {
+ if (!arguments.length) return alpha;
+ x = +x;
+ if (alpha) {
+ if (x > 0) alpha = x; else alpha = 0;
+ } else if (x > 0) {
+ event.start({
+ type: "start",
+ alpha: alpha = x
+ });
+ d3.timer(force.tick);
+ }
+ return force;
+ };
+ force.start = function () {
+ var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
+ for (i = 0; i < n; ++i) {
+ (o = nodes[i]).index = i;
+ o.weight = 0;
+ }
+ for (i = 0; i < m; ++i) {
+ o = links[i];
+ if (typeof o.source == "number") o.source = nodes[o.source];
+ if (typeof o.target == "number") o.target = nodes[o.target];
+ ++o.source.weight;
+ ++o.target.weight;
+ }
+ for (i = 0; i < n; ++i) {
+ o = nodes[i];
+ if (isNaN(o.x)) o.x = position("x", w);
+ if (isNaN(o.y)) o.y = position("y", h);
+ if (isNaN(o.px)) o.px = o.x;
+ if (isNaN(o.py)) o.py = o.y;
+ }
+ distances = [];
+ if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
+ strengths = [];
+ if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
+ charges = [];
+ if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
+ function position(dimension, size) {
+ if (!neighbors) {
+ neighbors = new Array(n);
+ for (j = 0; j < n; ++j) {
+ neighbors[j] = [];
+ }
+ for (j = 0; j < m; ++j) {
+ var o = links[j];
+ neighbors[o.source.index].push(o.target);
+ neighbors[o.target.index].push(o.source);
+ }
+ }
+ var candidates = neighbors[i], j = -1, m = candidates.length, x;
+ while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x;
+ return Math.random() * size;
+ }
+
+ return force.resume();
+ };
+ force.resume = function () {
+ return force.alpha(.1);
+ };
+ force.stop = function () {
+ return force.alpha(0);
+ };
+ force.drag = function () {
+ if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
+ if (!arguments.length) return drag;
+ this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
+ };
+ function dragmove(d) {
+ d.px = d3.event.x, d.py = d3.event.y;
+ force.resume();
+ }
+
+ return d3.rebind(force, event, "on");
+ };
+ function d3_layout_forceDragstart(d) {
+ d.fixed |= 2;
+ }
+
+ function d3_layout_forceDragend(d) {
+ d.fixed &= ~6;
+ }
+
+ function d3_layout_forceMouseover(d) {
+ d.fixed |= 4;
+ d.px = d.x, d.py = d.y;
+ }
+
+ function d3_layout_forceMouseout(d) {
+ d.fixed &= ~4;
+ }
+
+ function d3_layout_forceAccumulate(quad, alpha, charges) {
+ var cx = 0, cy = 0;
+ quad.charge = 0;
+ if (!quad.leaf) {
+ var nodes = quad.nodes, n = nodes.length, i = -1, c;
+ while (++i < n) {
+ c = nodes[i];
+ if (c == null) continue;
+ d3_layout_forceAccumulate(c, alpha, charges);
+ quad.charge += c.charge;
+ cx += c.charge * c.cx;
+ cy += c.charge * c.cy;
+ }
+ }
+ if (quad.point) {
+ if (!quad.leaf) {
+ quad.point.x += Math.random() - .5;
+ quad.point.y += Math.random() - .5;
+ }
+ var k = alpha * charges[quad.point.index];
+ quad.charge += quad.pointCharge = k;
+ cx += k * quad.point.x;
+ cy += k * quad.point.y;
+ }
+ quad.cx = cx / quad.charge;
+ quad.cy = cy / quad.charge;
+ }
+
+ var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
+ d3.layout.hierarchy = function () {
+ var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
+
+ function hierarchy(root) {
+ var stack = [root], nodes = [], node;
+ root.depth = 0;
+ while ((node = stack.pop()) != null) {
+ nodes.push(node);
+ if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {
+ var n, childs, child;
+ while (--n >= 0) {
+ stack.push(child = childs[n]);
+ child.parent = node;
+ child.depth = node.depth + 1;
+ }
+ if (value) node.value = 0;
+ node.children = childs;
+ } else {
+ if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;
+ delete node.children;
+ }
+ }
+ d3_layout_hierarchyVisitAfter(root, function (node) {
+ var childs, parent;
+ if (sort && (childs = node.children)) childs.sort(sort);
+ if (value && (parent = node.parent)) parent.value += node.value;
+ });
+ return nodes;
+ }
+
+ hierarchy.sort = function (x) {
+ if (!arguments.length) return sort;
+ sort = x;
+ return hierarchy;
+ };
+ hierarchy.children = function (x) {
+ if (!arguments.length) return children;
+ children = x;
+ return hierarchy;
+ };
+ hierarchy.value = function (x) {
+ if (!arguments.length) return value;
+ value = x;
+ return hierarchy;
+ };
+ hierarchy.revalue = function (root) {
+ if (value) {
+ d3_layout_hierarchyVisitBefore(root, function (node) {
+ if (node.children) node.value = 0;
+ });
+ d3_layout_hierarchyVisitAfter(root, function (node) {
+ var parent;
+ if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;
+ if (parent = node.parent) parent.value += node.value;
+ });
+ }
+ return root;
+ };
+ return hierarchy;
+ };
+ function d3_layout_hierarchyRebind(object, hierarchy) {
+ d3.rebind(object, hierarchy, "sort", "children", "value");
+ object.nodes = object;
+ object.links = d3_layout_hierarchyLinks;
+ return object;
+ }
+
+ function d3_layout_hierarchyVisitBefore(node, callback) {
+ var nodes = [node];
+ while ((node = nodes.pop()) != null) {
+ callback(node);
+ if ((children = node.children) && (n = children.length)) {
+ var n, children;
+ while (--n >= 0) nodes.push(children[n]);
+ }
+ }
+ }
+
+ function d3_layout_hierarchyVisitAfter(node, callback) {
+ var nodes = [node], nodes2 = [];
+ while ((node = nodes.pop()) != null) {
+ nodes2.push(node);
+ if ((children = node.children) && (n = children.length)) {
+ var i = -1, n, children;
+ while (++i < n) nodes.push(children[i]);
+ }
+ }
+ while ((node = nodes2.pop()) != null) {
+ callback(node);
+ }
+ }
+
+ function d3_layout_hierarchyChildren(d) {
+ return d.children;
+ }
+
+ function d3_layout_hierarchyValue(d) {
+ return d.value;
+ }
+
+ function d3_layout_hierarchySort(a, b) {
+ return b.value - a.value;
+ }
+
+ function d3_layout_hierarchyLinks(nodes) {
+ return d3.merge(nodes.map(function (parent) {
+ return (parent.children || []).map(function (child) {
+ return {
+ source: parent,
+ target: child
+ };
+ });
+ }));
+ }
+
+ d3.layout.partition = function () {
+ var hierarchy = d3.layout.hierarchy(), size = [1, 1];
+
+ function position(node, x, dx, dy) {
+ var children = node.children;
+ node.x = x;
+ node.y = node.depth * dy;
+ node.dx = dx;
+ node.dy = dy;
+ if (children && (n = children.length)) {
+ var i = -1, n, c, d;
+ dx = node.value ? dx / node.value : 0;
+ while (++i < n) {
+ position(c = children[i], x, d = c.value * dx, dy);
+ x += d;
+ }
+ }
+ }
+
+ function depth(node) {
+ var children = node.children, d = 0;
+ if (children && (n = children.length)) {
+ var i = -1, n;
+ while (++i < n) d = Math.max(d, depth(children[i]));
+ }
+ return 1 + d;
+ }
+
+ function partition(d, i) {
+ var nodes = hierarchy.call(this, d, i);
+ position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
+ return nodes;
+ }
+
+ partition.size = function (x) {
+ if (!arguments.length) return size;
+ size = x;
+ return partition;
+ };
+ return d3_layout_hierarchyRebind(partition, hierarchy);
+ };
+ d3.layout.pie = function () {
+ var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ;
+
+ function pie(data) {
+ var values = data.map(function (d, i) {
+ return +value.call(pie, d, i);
+ });
+ var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
+ var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);
+ var index = d3.range(data.length);
+ if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function (i, j) {
+ return values[j] - values[i];
+ } : function (i, j) {
+ return sort(data[i], data[j]);
+ });
+ var arcs = [];
+ index.forEach(function (i) {
+ var d;
+ arcs[i] = {
+ data: data[i],
+ value: d = values[i],
+ startAngle: a,
+ endAngle: a += d * k
+ };
+ });
+ return arcs;
+ }
+
+ pie.value = function (x) {
+ if (!arguments.length) return value;
+ value = x;
+ return pie;
+ };
+ pie.sort = function (x) {
+ if (!arguments.length) return sort;
+ sort = x;
+ return pie;
+ };
+ pie.startAngle = function (x) {
+ if (!arguments.length) return startAngle;
+ startAngle = x;
+ return pie;
+ };
+ pie.endAngle = function (x) {
+ if (!arguments.length) return endAngle;
+ endAngle = x;
+ return pie;
+ };
+ return pie;
+ };
+ var d3_layout_pieSortByValue = {};
+ d3.layout.stack = function () {
+ var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
+
+ function stack(data, index) {
+ var series = data.map(function (d, i) {
+ return values.call(stack, d, i);
+ });
+ var points = series.map(function (d) {
+ return d.map(function (v, i) {
+ return [x.call(stack, v, i), y.call(stack, v, i)];
+ });
+ });
+ var orders = order.call(stack, points, index);
+ series = d3.permute(series, orders);
+ points = d3.permute(points, orders);
+ var offsets = offset.call(stack, points, index);
+ var n = series.length, m = series[0].length, i, j, o;
+ for (j = 0; j < m; ++j) {
+ out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
+ for (i = 1; i < n; ++i) {
+ out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
+ }
+ }
+ return data;
+ }
+
+ stack.values = function (x) {
+ if (!arguments.length) return values;
+ values = x;
+ return stack;
+ };
+ stack.order = function (x) {
+ if (!arguments.length) return order;
+ order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
+ return stack;
+ };
+ stack.offset = function (x) {
+ if (!arguments.length) return offset;
+ offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
+ return stack;
+ };
+ stack.x = function (z) {
+ if (!arguments.length) return x;
+ x = z;
+ return stack;
+ };
+ stack.y = function (z) {
+ if (!arguments.length) return y;
+ y = z;
+ return stack;
+ };
+ stack.out = function (z) {
+ if (!arguments.length) return out;
+ out = z;
+ return stack;
+ };
+ return stack;
+ };
+ function d3_layout_stackX(d) {
+ return d.x;
+ }
+
+ function d3_layout_stackY(d) {
+ return d.y;
+ }
+
+ function d3_layout_stackOut(d, y0, y) {
+ d.y0 = y0;
+ d.y = y;
+ }
+
+ var d3_layout_stackOrders = d3.map({
+ "inside-out": function (data) {
+ var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function (a, b) {
+ return max[a] - max[b];
+ }), top = 0, bottom = 0, tops = [], bottoms = [];
+ for (i = 0; i < n; ++i) {
+ j = index[i];
+ if (top < bottom) {
+ top += sums[j];
+ tops.push(j);
+ } else {
+ bottom += sums[j];
+ bottoms.push(j);
+ }
+ }
+ return bottoms.reverse().concat(tops);
+ },
+ reverse: function (data) {
+ return d3.range(data.length).reverse();
+ },
+ "default": d3_layout_stackOrderDefault
+ });
+ var d3_layout_stackOffsets = d3.map({
+ silhouette: function (data) {
+ var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
+ for (j = 0; j < m; ++j) {
+ for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+ if (o > max) max = o;
+ sums.push(o);
+ }
+ for (j = 0; j < m; ++j) {
+ y0[j] = (max - sums[j]) / 2;
+ }
+ return y0;
+ },
+ wiggle: function (data) {
+ var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
+ y0[0] = o = o0 = 0;
+ for (j = 1; j < m; ++j) {
+ for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
+ for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
+ for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
+ s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
+ }
+ s2 += s3 * data[i][j][1];
+ }
+ y0[j] = o -= s1 ? s2 / s1 * dx : 0;
+ if (o < o0) o0 = o;
+ }
+ for (j = 0; j < m; ++j) y0[j] -= o0;
+ return y0;
+ },
+ expand: function (data) {
+ var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
+ for (j = 0; j < m; ++j) {
+ for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
+ if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
+ }
+ for (j = 0; j < m; ++j) y0[j] = 0;
+ return y0;
+ },
+ zero: d3_layout_stackOffsetZero
+ });
+
+ function d3_layout_stackOrderDefault(data) {
+ return d3.range(data.length);
+ }
+
+ function d3_layout_stackOffsetZero(data) {
+ var j = -1, m = data[0].length, y0 = [];
+ while (++j < m) y0[j] = 0;
+ return y0;
+ }
+
+ function d3_layout_stackMaxIndex(array) {
+ var i = 1, j = 0, v = array[0][1], k, n = array.length;
+ for (; i < n; ++i) {
+ if ((k = array[i][1]) > v) {
+ j = i;
+ v = k;
+ }
+ }
+ return j;
+ }
+
+ function d3_layout_stackReduceSum(d) {
+ return d.reduce(d3_layout_stackSum, 0);
+ }
+
+ function d3_layout_stackSum(p, d) {
+ return p + d[1];
+ }
+
+ d3.layout.histogram = function () {
+ var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
+
+ function histogram(data, i) {
+ var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
+ while (++i < m) {
+ bin = bins[i] = [];
+ bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
+ bin.y = 0;
+ }
+ if (m > 0) {
+ i = -1;
+ while (++i < n) {
+ x = values[i];
+ if (x >= range[0] && x <= range[1]) {
+ bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
+ bin.y += k;
+ bin.push(data[i]);
+ }
+ }
+ }
+ return bins;
+ }
+
+ histogram.value = function (x) {
+ if (!arguments.length) return valuer;
+ valuer = x;
+ return histogram;
+ };
+ histogram.range = function (x) {
+ if (!arguments.length) return ranger;
+ ranger = d3_functor(x);
+ return histogram;
+ };
+ histogram.bins = function (x) {
+ if (!arguments.length) return binner;
+ binner = typeof x === "number" ? function (range) {
+ return d3_layout_histogramBinFixed(range, x);
+ } : d3_functor(x);
+ return histogram;
+ };
+ histogram.frequency = function (x) {
+ if (!arguments.length) return frequency;
+ frequency = !!x;
+ return histogram;
+ };
+ return histogram;
+ };
+ function d3_layout_histogramBinSturges(range, values) {
+ return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
+ }
+
+ function d3_layout_histogramBinFixed(range, n) {
+ var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
+ while (++x <= n) f[x] = m * x + b;
+ return f;
+ }
+
+ function d3_layout_histogramRange(values) {
+ return [d3.min(values), d3.max(values)];
+ }
+
+ d3.layout.pack = function () {
+ var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [1, 1], radius;
+
+ function pack(d, i) {
+ var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function () {
+ return radius;
+ };
+ root.x = root.y = 0;
+ d3_layout_hierarchyVisitAfter(root, function (d) {
+ d.r = +r(d.value);
+ });
+ d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
+ if (padding) {
+ var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
+ d3_layout_hierarchyVisitAfter(root, function (d) {
+ d.r += dr;
+ });
+ d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
+ d3_layout_hierarchyVisitAfter(root, function (d) {
+ d.r -= dr;
+ });
+ }
+ d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));
+ return nodes;
+ }
+
+ pack.size = function (_) {
+ if (!arguments.length) return size;
+ size = _;
+ return pack;
+ };
+ pack.radius = function (_) {
+ if (!arguments.length) return radius;
+ radius = _ == null || typeof _ === "function" ? _ : +_;
+ return pack;
+ };
+ pack.padding = function (_) {
+ if (!arguments.length) return padding;
+ padding = +_;
+ return pack;
+ };
+ return d3_layout_hierarchyRebind(pack, hierarchy);
+ };
+ function d3_layout_packSort(a, b) {
+ return a.value - b.value;
+ }
+
+ function d3_layout_packInsert(a, b) {
+ var c = a._pack_next;
+ a._pack_next = b;
+ b._pack_prev = a;
+ b._pack_next = c;
+ c._pack_prev = b;
+ }
+
+ function d3_layout_packSplice(a, b) {
+ a._pack_next = b;
+ b._pack_prev = a;
+ }
+
+ function d3_layout_packIntersects(a, b) {
+ var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
+ return .999 * dr * dr > dx * dx + dy * dy;
+ }
+
+ function d3_layout_packSiblings(node) {
+ if (!(nodes = node.children) || !(n = nodes.length)) return;
+ var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
+
+ function bound(node) {
+ xMin = Math.min(node.x - node.r, xMin);
+ xMax = Math.max(node.x + node.r, xMax);
+ yMin = Math.min(node.y - node.r, yMin);
+ yMax = Math.max(node.y + node.r, yMax);
+ }
+
+ nodes.forEach(d3_layout_packLink);
+ a = nodes[0];
+ a.x = -a.r;
+ a.y = 0;
+ bound(a);
+ if (n > 1) {
+ b = nodes[1];
+ b.x = b.r;
+ b.y = 0;
+ bound(b);
+ if (n > 2) {
+ c = nodes[2];
+ d3_layout_packPlace(a, b, c);
+ bound(c);
+ d3_layout_packInsert(a, c);
+ a._pack_prev = c;
+ d3_layout_packInsert(c, b);
+ b = a._pack_next;
+ for (i = 3; i < n; i++) {
+ d3_layout_packPlace(a, b, c = nodes[i]);
+ var isect = 0, s1 = 1, s2 = 1;
+ for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
+ if (d3_layout_packIntersects(j, c)) {
+ isect = 1;
+ break;
+ }
+ }
+ if (isect == 1) {
+ for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
+ if (d3_layout_packIntersects(k, c)) {
+ break;
+ }
+ }
+ }
+ if (isect) {
+ if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
+ i--;
+ } else {
+ d3_layout_packInsert(a, c);
+ b = c;
+ bound(c);
+ }
+ }
+ }
+ }
+ var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
+ for (i = 0; i < n; i++) {
+ c = nodes[i];
+ c.x -= cx;
+ c.y -= cy;
+ cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
+ }
+ node.r = cr;
+ nodes.forEach(d3_layout_packUnlink);
+ }
+
+ function d3_layout_packLink(node) {
+ node._pack_next = node._pack_prev = node;
+ }
+
+ function d3_layout_packUnlink(node) {
+ delete node._pack_next;
+ delete node._pack_prev;
+ }
+
+ function d3_layout_packTransform(node, x, y, k) {
+ var children = node.children;
+ node.x = x += k * node.x;
+ node.y = y += k * node.y;
+ node.r *= k;
+ if (children) {
+ var i = -1, n = children.length;
+ while (++i < n) d3_layout_packTransform(children[i], x, y, k);
+ }
+ }
+
+ function d3_layout_packPlace(a, b, c) {
+ var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
+ if (db && (dx || dy)) {
+ var da = b.r + c.r, dc = dx * dx + dy * dy;
+ da *= da;
+ db *= db;
+ var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
+ c.x = a.x + x * dx + y * dy;
+ c.y = a.y + x * dy - y * dx;
+ } else {
+ c.x = a.x + db;
+ c.y = a.y;
+ }
+ }
+
+ d3.layout.tree = function () {
+ var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [1, 1], nodeSize = null;
+
+ function tree(d, i) {
+ var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);
+ d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;
+ d3_layout_hierarchyVisitBefore(root1, secondWalk);
+ if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {
+ var left = root0, right = root0, bottom = root0;
+ d3_layout_hierarchyVisitBefore(root0, function (node) {
+ if (node.x < left.x) left = node;
+ if (node.x > right.x) right = node;
+ if (node.depth > bottom.depth) bottom = node;
+ });
+ var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);
+ d3_layout_hierarchyVisitBefore(root0, function (node) {
+ node.x = (node.x + tx) * kx;
+ node.y = node.depth * ky;
+ });
+ }
+ return nodes;
+ }
+
+ function wrapTree(root0) {
+ var root1 = {
+ A: null,
+ children: [root0]
+ }, queue = [root1], node1;
+ while ((node1 = queue.pop()) != null) {
+ for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {
+ queue.push((children[i] = child = {
+ _: children[i],
+ parent: node1,
+ children: (child = children[i].children) && child.slice() || [],
+ A: null,
+ a: null,
+ z: 0,
+ m: 0,
+ c: 0,
+ s: 0,
+ t: null,
+ i: i
+ }).a = child);
+ }
+ }
+ return root1.children[0];
+ }
+
+ function firstWalk(v) {
+ var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;
+ if (children.length) {
+ d3_layout_treeShift(v);
+ var midpoint = (children[0].z + children[children.length - 1].z) / 2;
+ if (w) {
+ v.z = w.z + separation(v._, w._);
+ v.m = v.z - midpoint;
+ } else {
+ v.z = midpoint;
+ }
+ } else if (w) {
+ v.z = w.z + separation(v._, w._);
+ }
+ v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
+ }
+
+ function secondWalk(v) {
+ v._.x = v.z + v.parent.m;
+ v.m += v.parent.m;
+ }
+
+ function apportion(v, w, ancestor) {
+ if (w) {
+ var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;
+ while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
+ vom = d3_layout_treeLeft(vom);
+ vop = d3_layout_treeRight(vop);
+ vop.a = v;
+ shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
+ if (shift > 0) {
+ d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);
+ sip += shift;
+ sop += shift;
+ }
+ sim += vim.m;
+ sip += vip.m;
+ som += vom.m;
+ sop += vop.m;
+ }
+ if (vim && !d3_layout_treeRight(vop)) {
+ vop.t = vim;
+ vop.m += sim - sop;
+ }
+ if (vip && !d3_layout_treeLeft(vom)) {
+ vom.t = vip;
+ vom.m += sip - som;
+ ancestor = v;
+ }
+ }
+ return ancestor;
+ }
+
+ function sizeNode(node) {
+ node.x *= size[0];
+ node.y = node.depth * size[1];
+ }
+
+ tree.separation = function (x) {
+ if (!arguments.length) return separation;
+ separation = x;
+ return tree;
+ };
+ tree.size = function (x) {
+ if (!arguments.length) return nodeSize ? null : size;
+ nodeSize = (size = x) == null ? sizeNode : null;
+ return tree;
+ };
+ tree.nodeSize = function (x) {
+ if (!arguments.length) return nodeSize ? size : null;
+ nodeSize = (size = x) == null ? null : sizeNode;
+ return tree;
+ };
+ return d3_layout_hierarchyRebind(tree, hierarchy);
+ };
+ function d3_layout_treeSeparation(a, b) {
+ return a.parent == b.parent ? 1 : 2;
+ }
+
+ function d3_layout_treeLeft(v) {
+ var children = v.children;
+ return children.length ? children[0] : v.t;
+ }
+
+ function d3_layout_treeRight(v) {
+ var children = v.children, n;
+ return (n = children.length) ? children[n - 1] : v.t;
+ }
+
+ function d3_layout_treeMove(wm, wp, shift) {
+ var change = shift / (wp.i - wm.i);
+ wp.c -= change;
+ wp.s += shift;
+ wm.c += change;
+ wp.z += shift;
+ wp.m += shift;
+ }
+
+ function d3_layout_treeShift(v) {
+ var shift = 0, change = 0, children = v.children, i = children.length, w;
+ while (--i >= 0) {
+ w = children[i];
+ w.z += shift;
+ w.m += shift;
+ shift += w.s + (change += w.c);
+ }
+ }
+
+ function d3_layout_treeAncestor(vim, v, ancestor) {
+ return vim.a.parent === v.parent ? vim.a : ancestor;
+ }
+
+ d3.layout.cluster = function () {
+ var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [1, 1], nodeSize = false;
+
+ function cluster(d, i) {
+ var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
+ d3_layout_hierarchyVisitAfter(root, function (node) {
+ var children = node.children;
+ if (children && children.length) {
+ node.x = d3_layout_clusterX(children);
+ node.y = d3_layout_clusterY(children);
+ } else {
+ node.x = previousNode ? x += separation(node, previousNode) : 0;
+ node.y = 0;
+ previousNode = node;
+ }
+ });
+ var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
+ d3_layout_hierarchyVisitAfter(root, nodeSize ? function (node) {
+ node.x = (node.x - root.x) * size[0];
+ node.y = (root.y - node.y) * size[1];
+ } : function (node) {
+ node.x = (node.x - x0) / (x1 - x0) * size[0];
+ node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
+ });
+ return nodes;
+ }
+
+ cluster.separation = function (x) {
+ if (!arguments.length) return separation;
+ separation = x;
+ return cluster;
+ };
+ cluster.size = function (x) {
+ if (!arguments.length) return nodeSize ? null : size;
+ nodeSize = (size = x) == null;
+ return cluster;
+ };
+ cluster.nodeSize = function (x) {
+ if (!arguments.length) return nodeSize ? size : null;
+ nodeSize = (size = x) != null;
+ return cluster;
+ };
+ return d3_layout_hierarchyRebind(cluster, hierarchy);
+ };
+ function d3_layout_clusterY(children) {
+ return 1 + d3.max(children, function (child) {
+ return child.y;
+ });
+ }
+
+ function d3_layout_clusterX(children) {
+ return children.reduce(function (x, child) {
+ return x + child.x;
+ }, 0) / children.length;
+ }
+
+ function d3_layout_clusterLeft(node) {
+ var children = node.children;
+ return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
+ }
+
+ function d3_layout_clusterRight(node) {
+ var children = node.children, n;
+ return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
+ }
+
+ d3.layout.treemap = function () {
+ var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [1, 1], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
+
+ function scale(children, k) {
+ var i = -1, n = children.length, child, area;
+ while (++i < n) {
+ area = (child = children[i]).value * (k < 0 ? 0 : k);
+ child.area = isNaN(area) || area <= 0 ? 0 : area;
+ }
+ }
+
+ function squarify(node) {
+ var children = node.children;
+ if (children && children.length) {
+ var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
+ scale(remaining, rect.dx * rect.dy / node.value);
+ row.area = 0;
+ while ((n = remaining.length) > 0) {
+ row.push(child = remaining[n - 1]);
+ row.area += child.area;
+ if (mode !== "squarify" || (score = worst(row, u)) <= best) {
+ remaining.pop();
+ best = score;
+ } else {
+ row.area -= row.pop().area;
+ position(row, u, rect, false);
+ u = Math.min(rect.dx, rect.dy);
+ row.length = row.area = 0;
+ best = Infinity;
+ }
+ }
+ if (row.length) {
+ position(row, u, rect, true);
+ row.length = row.area = 0;
+ }
+ children.forEach(squarify);
+ }
+ }
+
+ function stickify(node) {
+ var children = node.children;
+ if (children && children.length) {
+ var rect = pad(node), remaining = children.slice(), child, row = [];
+ scale(remaining, rect.dx * rect.dy / node.value);
+ row.area = 0;
+ while (child = remaining.pop()) {
+ row.push(child);
+ row.area += child.area;
+ if (child.z != null) {
+ position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
+ row.length = row.area = 0;
+ }
+ }
+ children.forEach(stickify);
+ }
+ }
+
+ function worst(row, u) {
+ var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
+ while (++i < n) {
+ if (!(r = row[i].area)) continue;
+ if (r < rmin) rmin = r;
+ if (r > rmax) rmax = r;
+ }
+ s *= s;
+ u *= u;
+ return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
+ }
+
+ function position(row, u, rect, flush) {
+ var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
+ if (u == rect.dx) {
+ if (flush || v > rect.dy) v = rect.dy;
+ while (++i < n) {
+ o = row[i];
+ o.x = x;
+ o.y = y;
+ o.dy = v;
+ x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
+ }
+ o.z = true;
+ o.dx += rect.x + rect.dx - x;
+ rect.y += v;
+ rect.dy -= v;
+ } else {
+ if (flush || v > rect.dx) v = rect.dx;
+ while (++i < n) {
+ o = row[i];
+ o.x = x;
+ o.y = y;
+ o.dx = v;
+ y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
+ }
+ o.z = false;
+ o.dy += rect.y + rect.dy - y;
+ rect.x += v;
+ rect.dx -= v;
+ }
+ }
+
+ function treemap(d) {
+ var nodes = stickies || hierarchy(d), root = nodes[0];
+ root.x = 0;
+ root.y = 0;
+ root.dx = size[0];
+ root.dy = size[1];
+ if (stickies) hierarchy.revalue(root);
+ scale([root], root.dx * root.dy / root.value);
+ (stickies ? stickify : squarify)(root);
+ if (sticky) stickies = nodes;
+ return nodes;
+ }
+
+ treemap.size = function (x) {
+ if (!arguments.length) return size;
+ size = x;
+ return treemap;
+ };
+ treemap.padding = function (x) {
+ if (!arguments.length) return padding;
+ function padFunction(node) {
+ var p = x.call(treemap, node, node.depth);
+ return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [p, p, p, p] : p);
+ }
+
+ function padConstant(node) {
+ return d3_layout_treemapPad(node, x);
+ }
+
+ var type;
+ pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [x, x, x, x],
+ padConstant) : padConstant;
+ return treemap;
+ };
+ treemap.round = function (x) {
+ if (!arguments.length) return round != Number;
+ round = x ? Math.round : Number;
+ return treemap;
+ };
+ treemap.sticky = function (x) {
+ if (!arguments.length) return sticky;
+ sticky = x;
+ stickies = null;
+ return treemap;
+ };
+ treemap.ratio = function (x) {
+ if (!arguments.length) return ratio;
+ ratio = x;
+ return treemap;
+ };
+ treemap.mode = function (x) {
+ if (!arguments.length) return mode;
+ mode = x + "";
+ return treemap;
+ };
+ return d3_layout_hierarchyRebind(treemap, hierarchy);
+ };
+ function d3_layout_treemapPadNull(node) {
+ return {
+ x: node.x,
+ y: node.y,
+ dx: node.dx,
+ dy: node.dy
+ };
+ }
+
+ function d3_layout_treemapPad(node, padding) {
+ var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
+ if (dx < 0) {
+ x += dx / 2;
+ dx = 0;
+ }
+ if (dy < 0) {
+ y += dy / 2;
+ dy = 0;
+ }
+ return {
+ x: x,
+ y: y,
+ dx: dx,
+ dy: dy
+ };
+ }
+
+ d3.random = {
+ normal: function (µ, σ) {
+ var n = arguments.length;
+ if (n < 2) σ = 1;
+ if (n < 1) µ = 0;
+ return function () {
+ var x, y, r;
+ do {
+ x = Math.random() * 2 - 1;
+ y = Math.random() * 2 - 1;
+ r = x * x + y * y;
+ } while (!r || r > 1);
+ return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
+ };
+ },
+ logNormal: function () {
+ var random = d3.random.normal.apply(d3, arguments);
+ return function () {
+ return Math.exp(random());
+ };
+ },
+ bates: function (m) {
+ var random = d3.random.irwinHall(m);
+ return function () {
+ return random() / m;
+ };
+ },
+ irwinHall: function (m) {
+ return function () {
+ for (var s = 0, j = 0; j < m; j++) s += Math.random();
+ return s;
+ };
+ }
+ };
+ d3.scale = {};
+ function d3_scaleExtent(domain) {
+ var start = domain[0], stop = domain[domain.length - 1];
+ return start < stop ? [start, stop] : [stop, start];
+ }
+
+ function d3_scaleRange(scale) {
+ return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
+ }
+
+ function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
+ var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
+ return function (x) {
+ return i(u(x));
+ };
+ }
+
+ function d3_scale_nice(domain, nice) {
+ var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
+ if (x1 < x0) {
+ dx = i0, i0 = i1, i1 = dx;
+ dx = x0, x0 = x1, x1 = dx;
+ }
+ domain[i0] = nice.floor(x0);
+ domain[i1] = nice.ceil(x1);
+ return domain;
+ }
+
+ function d3_scale_niceStep(step) {
+ return step ? {
+ floor: function (x) {
+ return Math.floor(x / step) * step;
+ },
+ ceil: function (x) {
+ return Math.ceil(x / step) * step;
+ }
+ } : d3_scale_niceIdentity;
+ }
+
+ var d3_scale_niceIdentity = {
+ floor: d3_identity,
+ ceil: d3_identity
+ };
+
+ function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
+ var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
+ if (domain[k] < domain[0]) {
+ domain = domain.slice().reverse();
+ range = range.slice().reverse();
+ }
+ while (++j <= k) {
+ u.push(uninterpolate(domain[j - 1], domain[j]));
+ i.push(interpolate(range[j - 1], range[j]));
+ }
+ return function (x) {
+ var j = d3.bisect(domain, x, 1, k) - 1;
+ return i[j](u[j](x));
+ };
+ }
+
+ d3.scale.linear = function () {
+ return d3_scale_linear([0, 1], [0, 1], d3_interpolate, false);
+ };
+ function d3_scale_linear(domain, range, interpolate, clamp) {
+ var output, input;
+
+ function rescale() {
+ var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
+ output = linear(domain, range, uninterpolate, interpolate);
+ input = linear(range, domain, uninterpolate, d3_interpolate);
+ return scale;
+ }
+
+ function scale(x) {
+ return output(x);
+ }
+
+ scale.invert = function (y) {
+ return input(y);
+ };
+ scale.domain = function (x) {
+ if (!arguments.length) return domain;
+ domain = x.map(Number);
+ return rescale();
+ };
+ scale.range = function (x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+ scale.rangeRound = function (x) {
+ return scale.range(x).interpolate(d3_interpolateRound);
+ };
+ scale.clamp = function (x) {
+ if (!arguments.length) return clamp;
+ clamp = x;
+ return rescale();
+ };
+ scale.interpolate = function (x) {
+ if (!arguments.length) return interpolate;
+ interpolate = x;
+ return rescale();
+ };
+ scale.ticks = function (m) {
+ return d3_scale_linearTicks(domain, m);
+ };
+ scale.tickFormat = function (m, format) {
+ return d3_scale_linearTickFormat(domain, m, format);
+ };
+ scale.nice = function (m) {
+ d3_scale_linearNice(domain, m);
+ return rescale();
+ };
+ scale.copy = function () {
+ return d3_scale_linear(domain, range, interpolate, clamp);
+ };
+ return rescale();
+ }
+
+ function d3_scale_linearRebind(scale, linear) {
+ return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
+ }
+
+ function d3_scale_linearNice(domain, m) {
+ return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
+ }
+
+ function d3_scale_linearTickRange(domain, m) {
+ if (m == null) m = 10;
+ var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
+ if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
+ extent[0] = Math.ceil(extent[0] / step) * step;
+ extent[1] = Math.floor(extent[1] / step) * step + step * .5;
+ extent[2] = step;
+ return extent;
+ }
+
+ function d3_scale_linearTicks(domain, m) {
+ return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
+ }
+
+ function d3_scale_linearTickFormat(domain, m, format) {
+ var range = d3_scale_linearTickRange(domain, m);
+ if (format) {
+ var match = d3_format_re.exec(format);
+ match.shift();
+ if (match[8] === "s") {
+ var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));
+ if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2]));
+ match[8] = "f";
+ format = d3.format(match.join(""));
+ return function (d) {
+ return format(prefix.scale(d)) + prefix.symbol;
+ };
+ }
+ if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range);
+ format = match.join("");
+ } else {
+ format = ",." + d3_scale_linearPrecision(range[2]) + "f";
+ }
+ return d3.format(format);
+ }
+
+ var d3_scale_linearFormatSignificant = {
+ s: 1,
+ g: 1,
+ p: 1,
+ r: 1,
+ e: 1
+ };
+
+ function d3_scale_linearPrecision(value) {
+ return -Math.floor(Math.log(value) / Math.LN10 + .01);
+ }
+
+ function d3_scale_linearFormatPrecision(type, range) {
+ var p = d3_scale_linearPrecision(range[2]);
+ return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
+ }
+
+ d3.scale.log = function () {
+ return d3_scale_log(d3.scale.linear().domain([0, 1]), 10, true, [1, 10]);
+ };
+ function d3_scale_log(linear, base, positive, domain) {
+ function log(x) {
+ return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);
+ }
+
+ function pow(x) {
+ return positive ? Math.pow(base, x) : -Math.pow(base, -x);
+ }
+
+ function scale(x) {
+ return linear(log(x));
+ }
+
+ scale.invert = function (x) {
+ return pow(linear.invert(x));
+ };
+ scale.domain = function (x) {
+ if (!arguments.length) return domain;
+ positive = x[0] >= 0;
+ linear.domain((domain = x.map(Number)).map(log));
+ return scale;
+ };
+ scale.base = function (_) {
+ if (!arguments.length) return base;
+ base = +_;
+ linear.domain(domain.map(log));
+ return scale;
+ };
+ scale.nice = function () {
+ var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);
+ linear.domain(niced);
+ domain = niced.map(pow);
+ return scale;
+ };
+ scale.ticks = function () {
+ var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;
+ if (isFinite(j - i)) {
+ if (positive) {
+ for (; i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);
+ ticks.push(pow(i));
+ } else {
+ ticks.push(pow(i));
+ for (; i++ < j;) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);
+ }
+ for (i = 0; ticks[i] < u; i++) {
+ }
+ for (j = ticks.length; ticks[j - 1] > v; j--) {
+ }
+ ticks = ticks.slice(i, j);
+ }
+ return ticks;
+ };
+ scale.tickFormat = function (n, format) {
+ if (!arguments.length) return d3_scale_logFormat;
+ if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
+ var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12,
+ Math.floor), e;
+ return function (d) {
+ return d / pow(f(log(d) + e)) <= k ? format(d) : "";
+ };
+ };
+ scale.copy = function () {
+ return d3_scale_log(linear.copy(), base, positive, domain);
+ };
+ return d3_scale_linearRebind(scale, linear);
+ }
+
+ var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = {
+ floor: function (x) {
+ return -Math.ceil(-x);
+ },
+ ceil: function (x) {
+ return -Math.floor(-x);
+ }
+ };
+ d3.scale.pow = function () {
+ return d3_scale_pow(d3.scale.linear(), 1, [0, 1]);
+ };
+ function d3_scale_pow(linear, exponent, domain) {
+ var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
+
+ function scale(x) {
+ return linear(powp(x));
+ }
+
+ scale.invert = function (x) {
+ return powb(linear.invert(x));
+ };
+ scale.domain = function (x) {
+ if (!arguments.length) return domain;
+ linear.domain((domain = x.map(Number)).map(powp));
+ return scale;
+ };
+ scale.ticks = function (m) {
+ return d3_scale_linearTicks(domain, m);
+ };
+ scale.tickFormat = function (m, format) {
+ return d3_scale_linearTickFormat(domain, m, format);
+ };
+ scale.nice = function (m) {
+ return scale.domain(d3_scale_linearNice(domain, m));
+ };
+ scale.exponent = function (x) {
+ if (!arguments.length) return exponent;
+ powp = d3_scale_powPow(exponent = x);
+ powb = d3_scale_powPow(1 / exponent);
+ linear.domain(domain.map(powp));
+ return scale;
+ };
+ scale.copy = function () {
+ return d3_scale_pow(linear.copy(), exponent, domain);
+ };
+ return d3_scale_linearRebind(scale, linear);
+ }
+
+ function d3_scale_powPow(e) {
+ return function (x) {
+ return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
+ };
+ }
+
+ d3.scale.sqrt = function () {
+ return d3.scale.pow().exponent(.5);
+ };
+ d3.scale.ordinal = function () {
+ return d3_scale_ordinal([], {
+ t: "range",
+ a: [[]]
+ });
+ };
+ function d3_scale_ordinal(domain, ranger) {
+ var index, range, rangeBand;
+
+ function scale(x) {
+ return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];
+ }
+
+ function steps(start, step) {
+ return d3.range(domain.length).map(function (i) {
+ return start + step * i;
+ });
+ }
+
+ scale.domain = function (x) {
+ if (!arguments.length) return domain;
+ domain = [];
+ index = new d3_Map();
+ var i = -1, n = x.length, xi;
+ while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
+ return scale[ranger.t].apply(scale, ranger.a);
+ };
+ scale.range = function (x) {
+ if (!arguments.length) return range;
+ range = x;
+ rangeBand = 0;
+ ranger = {
+ t: "range",
+ a: arguments
+ };
+ return scale;
+ };
+ scale.rangePoints = function (x, padding) {
+ if (arguments.length < 2) padding = 0;
+ var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
+ range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
+ rangeBand = 0;
+ ranger = {
+ t: "rangePoints",
+ a: arguments
+ };
+ return scale;
+ };
+ scale.rangeBands = function (x, padding, outerPadding) {
+ if (arguments.length < 2) padding = 0;
+ if (arguments.length < 3) outerPadding = padding;
+ var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
+ range = steps(start + step * outerPadding, step);
+ if (reverse) range.reverse();
+ rangeBand = step * (1 - padding);
+ ranger = {
+ t: "rangeBands",
+ a: arguments
+ };
+ return scale;
+ };
+ scale.rangeRoundBands = function (x, padding, outerPadding) {
+ if (arguments.length < 2) padding = 0;
+ if (arguments.length < 3) outerPadding = padding;
+ var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
+ range = steps(start + Math.round(error / 2), step);
+ if (reverse) range.reverse();
+ rangeBand = Math.round(step * (1 - padding));
+ ranger = {
+ t: "rangeRoundBands",
+ a: arguments
+ };
+ return scale;
+ };
+ scale.rangeBand = function () {
+ return rangeBand;
+ };
+ scale.rangeExtent = function () {
+ return d3_scaleExtent(ranger.a[0]);
+ };
+ scale.copy = function () {
+ return d3_scale_ordinal(domain, ranger);
+ };
+ return scale.domain(domain);
+ }
+
+ d3.scale.category10 = function () {
+ return d3.scale.ordinal().range(d3_category10);
+ };
+ d3.scale.category20 = function () {
+ return d3.scale.ordinal().range(d3_category20);
+ };
+ d3.scale.category20b = function () {
+ return d3.scale.ordinal().range(d3_category20b);
+ };
+ d3.scale.category20c = function () {
+ return d3.scale.ordinal().range(d3_category20c);
+ };
+ var d3_category10 = [2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175].map(d3_rgbString);
+ var d3_category20 = [2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725].map(d3_rgbString);
+ var d3_category20b = [3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654].map(d3_rgbString);
+ var d3_category20c = [3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081].map(d3_rgbString);
+ d3.scale.quantile = function () {
+ return d3_scale_quantile([], []);
+ };
+ function d3_scale_quantile(domain, range) {
+ var thresholds;
+
+ function rescale() {
+ var k = 0, q = range.length;
+ thresholds = [];
+ while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
+ return scale;
+ }
+
+ function scale(x) {
+ if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];
+ }
+
+ scale.domain = function (x) {
+ if (!arguments.length) return domain;
+ domain = x.filter(d3_number).sort(d3_ascending);
+ return rescale();
+ };
+ scale.range = function (x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+ scale.quantiles = function () {
+ return thresholds;
+ };
+ scale.invertExtent = function (y) {
+ y = range.indexOf(y);
+ return y < 0 ? [NaN, NaN] : [y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1]];
+ };
+ scale.copy = function () {
+ return d3_scale_quantile(domain, range);
+ };
+ return rescale();
+ }
+
+ d3.scale.quantize = function () {
+ return d3_scale_quantize(0, 1, [0, 1]);
+ };
+ function d3_scale_quantize(x0, x1, range) {
+ var kx, i;
+
+ function scale(x) {
+ return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
+ }
+
+ function rescale() {
+ kx = range.length / (x1 - x0);
+ i = range.length - 1;
+ return scale;
+ }
+
+ scale.domain = function (x) {
+ if (!arguments.length) return [x0, x1];
+ x0 = +x[0];
+ x1 = +x[x.length - 1];
+ return rescale();
+ };
+ scale.range = function (x) {
+ if (!arguments.length) return range;
+ range = x;
+ return rescale();
+ };
+ scale.invertExtent = function (y) {
+ y = range.indexOf(y);
+ y = y < 0 ? NaN : y / kx + x0;
+ return [y, y + 1 / kx];
+ };
+ scale.copy = function () {
+ return d3_scale_quantize(x0, x1, range);
+ };
+ return rescale();
+ }
+
+ d3.scale.threshold = function () {
+ return d3_scale_threshold([.5], [0, 1]);
+ };
+ function d3_scale_threshold(domain, range) {
+ function scale(x) {
+ if (x <= x) return range[d3.bisect(domain, x)];
+ }
+
+ scale.domain = function (_) {
+ if (!arguments.length) return domain;
+ domain = _;
+ return scale;
+ };
+ scale.range = function (_) {
+ if (!arguments.length) return range;
+ range = _;
+ return scale;
+ };
+ scale.invertExtent = function (y) {
+ y = range.indexOf(y);
+ return [domain[y - 1], domain[y]];
+ };
+ scale.copy = function () {
+ return d3_scale_threshold(domain, range);
+ };
+ return scale;
+ }
+
+ d3.scale.identity = function () {
+ return d3_scale_identity([0, 1]);
+ };
+ function d3_scale_identity(domain) {
+ function identity(x) {
+ return +x;
+ }
+
+ identity.invert = identity;
+ identity.domain = identity.range = function (x) {
+ if (!arguments.length) return domain;
+ domain = x.map(identity);
+ return identity;
+ };
+ identity.ticks = function (m) {
+ return d3_scale_linearTicks(domain, m);
+ };
+ identity.tickFormat = function (m, format) {
+ return d3_scale_linearTickFormat(domain, m, format);
+ };
+ identity.copy = function () {
+ return d3_scale_identity(domain);
+ };
+ return identity;
+ }
+
+ d3.svg = {};
+ d3.svg.arc = function () {
+ var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
+
+ function arc() {
+ var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0,
+ a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);
+ return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z";
+ }
+
+ arc.innerRadius = function (v) {
+ if (!arguments.length) return innerRadius;
+ innerRadius = d3_functor(v);
+ return arc;
+ };
+ arc.outerRadius = function (v) {
+ if (!arguments.length) return outerRadius;
+ outerRadius = d3_functor(v);
+ return arc;
+ };
+ arc.startAngle = function (v) {
+ if (!arguments.length) return startAngle;
+ startAngle = d3_functor(v);
+ return arc;
+ };
+ arc.endAngle = function (v) {
+ if (!arguments.length) return endAngle;
+ endAngle = d3_functor(v);
+ return arc;
+ };
+ arc.centroid = function () {
+ var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
+ return [Math.cos(a) * r, Math.sin(a) * r];
+ };
+ return arc;
+ };
+ var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε;
+
+ function d3_svg_arcInnerRadius(d) {
+ return d.innerRadius;
+ }
+
+ function d3_svg_arcOuterRadius(d) {
+ return d.outerRadius;
+ }
+
+ function d3_svg_arcStartAngle(d) {
+ return d.startAngle;
+ }
+
+ function d3_svg_arcEndAngle(d) {
+ return d.endAngle;
+ }
+
+ function d3_svg_line(projection) {
+ var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
+
+ function line(data) {
+ var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
+
+ function segment() {
+ segments.push("M", interpolate(projection(points), tension));
+ }
+
+ while (++i < n) {
+ if (defined.call(this, d = data[i], i)) {
+ points.push([+fx.call(this, d, i), +fy.call(this, d, i)]);
+ } else if (points.length) {
+ segment();
+ points = [];
+ }
+ }
+ if (points.length) segment();
+ return segments.length ? segments.join("") : null;
+ }
+
+ line.x = function (_) {
+ if (!arguments.length) return x;
+ x = _;
+ return line;
+ };
+ line.y = function (_) {
+ if (!arguments.length) return y;
+ y = _;
+ return line;
+ };
+ line.defined = function (_) {
+ if (!arguments.length) return defined;
+ defined = _;
+ return line;
+ };
+ line.interpolate = function (_) {
+ if (!arguments.length) return interpolateKey;
+ if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
+ return line;
+ };
+ line.tension = function (_) {
+ if (!arguments.length) return tension;
+ tension = _;
+ return line;
+ };
+ return line;
+ }
+
+ d3.svg.line = function () {
+ return d3_svg_line(d3_identity);
+ };
+ var d3_svg_lineInterpolators = d3.map({
+ linear: d3_svg_lineLinear,
+ "linear-closed": d3_svg_lineLinearClosed,
+ step: d3_svg_lineStep,
+ "step-before": d3_svg_lineStepBefore,
+ "step-after": d3_svg_lineStepAfter,
+ basis: d3_svg_lineBasis,
+ "basis-open": d3_svg_lineBasisOpen,
+ "basis-closed": d3_svg_lineBasisClosed,
+ bundle: d3_svg_lineBundle,
+ cardinal: d3_svg_lineCardinal,
+ "cardinal-open": d3_svg_lineCardinalOpen,
+ "cardinal-closed": d3_svg_lineCardinalClosed,
+ monotone: d3_svg_lineMonotone
+ });
+ d3_svg_lineInterpolators.forEach(function (key, value) {
+ value.key = key;
+ value.closed = /-closed$/.test(key);
+ });
+ function d3_svg_lineLinear(points) {
+ return points.join("L");
+ }
+
+ function d3_svg_lineLinearClosed(points) {
+ return d3_svg_lineLinear(points) + "Z";
+ }
+
+ function d3_svg_lineStep(points) {
+ var i = 0, n = points.length, p = points[0], path = [p[0], ",", p[1]];
+ while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]);
+ if (n > 1) path.push("H", p[0]);
+ return path.join("");
+ }
+
+ function d3_svg_lineStepBefore(points) {
+ var i = 0, n = points.length, p = points[0], path = [p[0], ",", p[1]];
+ while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
+ return path.join("");
+ }
+
+ function d3_svg_lineStepAfter(points) {
+ var i = 0, n = points.length, p = points[0], path = [p[0], ",", p[1]];
+ while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
+ return path.join("");
+ }
+
+ function d3_svg_lineCardinalOpen(points, tension) {
+ return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
+ }
+
+ function d3_svg_lineCardinalClosed(points, tension) {
+ return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
+ points), d3_svg_lineCardinalTangents([points[points.length - 2]].concat(points, [points[1]]), tension));
+ }
+
+ function d3_svg_lineCardinal(points, tension) {
+ return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
+ }
+
+ function d3_svg_lineHermite(points, tangents) {
+ if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
+ return d3_svg_lineLinear(points);
+ }
+ var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
+ if (quad) {
+ path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
+ p0 = points[1];
+ pi = 2;
+ }
+ if (tangents.length > 1) {
+ t = tangents[1];
+ p = points[pi];
+ pi++;
+ path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
+ for (var i = 2; i < tangents.length; i++, pi++) {
+ p = points[pi];
+ t = tangents[i];
+ path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
+ }
+ }
+ if (quad) {
+ var lp = points[pi];
+ path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
+ }
+ return path;
+ }
+
+ function d3_svg_lineCardinalTangents(points, tension) {
+ var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
+ while (++i < n) {
+ p0 = p1;
+ p1 = p2;
+ p2 = points[i];
+ tangents.push([a * (p2[0] - p0[0]), a * (p2[1] - p0[1])]);
+ }
+ return tangents;
+ }
+
+ function d3_svg_lineBasis(points) {
+ if (points.length < 3) return d3_svg_lineLinear(points);
+ var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [x0, x0, x0, (pi = points[1])[0]], py = [y0, y0, y0, pi[1]], path = [x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)];
+ points.push(points[n - 1]);
+ while (++i <= n) {
+ pi = points[i];
+ px.shift();
+ px.push(pi[0]);
+ py.shift();
+ py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ points.pop();
+ path.push("L", pi);
+ return path.join("");
+ }
+
+ function d3_svg_lineBasisOpen(points) {
+ if (points.length < 4) return d3_svg_lineLinear(points);
+ var path = [], i = -1, n = points.length, pi, px = [0], py = [0];
+ while (++i < 3) {
+ pi = points[i];
+ px.push(pi[0]);
+ py.push(pi[1]);
+ }
+ path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
+ --i;
+ while (++i < n) {
+ pi = points[i];
+ px.shift();
+ px.push(pi[0]);
+ py.shift();
+ py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ return path.join("");
+ }
+
+ function d3_svg_lineBasisClosed(points) {
+ var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
+ while (++i < 4) {
+ pi = points[i % n];
+ px.push(pi[0]);
+ py.push(pi[1]);
+ }
+ path = [d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py)];
+ --i;
+ while (++i < m) {
+ pi = points[i % n];
+ px.shift();
+ px.push(pi[0]);
+ py.shift();
+ py.push(pi[1]);
+ d3_svg_lineBasisBezier(path, px, py);
+ }
+ return path.join("");
+ }
+
+ function d3_svg_lineBundle(points, tension) {
+ var n = points.length - 1;
+ if (n) {
+ var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
+ while (++i <= n) {
+ p = points[i];
+ t = i / n;
+ p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
+ p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
+ }
+ }
+ return d3_svg_lineBasis(points);
+ }
+
+ function d3_svg_lineDot4(a, b) {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
+ }
+
+ var d3_svg_lineBasisBezier1 = [0, 2 / 3, 1 / 3, 0], d3_svg_lineBasisBezier2 = [0, 1 / 3, 2 / 3, 0], d3_svg_lineBasisBezier3 = [0, 1 / 6, 2 / 3, 1 / 6];
+
+ function d3_svg_lineBasisBezier(path, x, y) {
+ path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
+ }
+
+ function d3_svg_lineSlope(p0, p1) {
+ return (p1[1] - p0[1]) / (p1[0] - p0[0]);
+ }
+
+ function d3_svg_lineFiniteDifferences(points) {
+ var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
+ while (++i < j) {
+ m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
+ }
+ m[i] = d;
+ return m;
+ }
+
+ function d3_svg_lineMonotoneTangents(points) {
+ var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
+ while (++i < j) {
+ d = d3_svg_lineSlope(points[i], points[i + 1]);
+ if (abs(d) < ε) {
+ m[i] = m[i + 1] = 0;
+ } else {
+ a = m[i] / d;
+ b = m[i + 1] / d;
+ s = a * a + b * b;
+ if (s > 9) {
+ s = d * 3 / Math.sqrt(s);
+ m[i] = s * a;
+ m[i + 1] = s * b;
+ }
+ }
+ }
+ i = -1;
+ while (++i <= j) {
+ s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
+ tangents.push([s || 0, m[i] * s || 0]);
+ }
+ return tangents;
+ }
+
+ function d3_svg_lineMonotone(points) {
+ return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
+ }
+
+ d3.svg.line.radial = function () {
+ var line = d3_svg_line(d3_svg_lineRadial);
+ line.radius = line.x, delete line.x;
+ line.angle = line.y, delete line.y;
+ return line;
+ };
+ function d3_svg_lineRadial(points) {
+ var point, i = -1, n = points.length, r, a;
+ while (++i < n) {
+ point = points[i];
+ r = point[0];
+ a = point[1] + d3_svg_arcOffset;
+ point[0] = r * Math.cos(a);
+ point[1] = r * Math.sin(a);
+ }
+ return points;
+ }
+
+ function d3_svg_area(projection) {
+ var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
+
+ function area(data) {
+ var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function () {
+ return x;
+ } : d3_functor(x1), fy1 = y0 === y1 ? function () {
+ return y;
+ } : d3_functor(y1), x, y;
+
+ function segment() {
+ segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
+ }
+
+ while (++i < n) {
+ if (defined.call(this, d = data[i], i)) {
+ points0.push([x = +fx0.call(this, d, i), y = +fy0.call(this, d, i)]);
+ points1.push([+fx1.call(this, d, i), +fy1.call(this, d, i)]);
+ } else if (points0.length) {
+ segment();
+ points0 = [];
+ points1 = [];
+ }
+ }
+ if (points0.length) segment();
+ return segments.length ? segments.join("") : null;
+ }
+
+ area.x = function (_) {
+ if (!arguments.length) return x1;
+ x0 = x1 = _;
+ return area;
+ };
+ area.x0 = function (_) {
+ if (!arguments.length) return x0;
+ x0 = _;
+ return area;
+ };
+ area.x1 = function (_) {
+ if (!arguments.length) return x1;
+ x1 = _;
+ return area;
+ };
+ area.y = function (_) {
+ if (!arguments.length) return y1;
+ y0 = y1 = _;
+ return area;
+ };
+ area.y0 = function (_) {
+ if (!arguments.length) return y0;
+ y0 = _;
+ return area;
+ };
+ area.y1 = function (_) {
+ if (!arguments.length) return y1;
+ y1 = _;
+ return area;
+ };
+ area.defined = function (_) {
+ if (!arguments.length) return defined;
+ defined = _;
+ return area;
+ };
+ area.interpolate = function (_) {
+ if (!arguments.length) return interpolateKey;
+ if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
+ interpolateReverse = interpolate.reverse || interpolate;
+ L = interpolate.closed ? "M" : "L";
+ return area;
+ };
+ area.tension = function (_) {
+ if (!arguments.length) return tension;
+ tension = _;
+ return area;
+ };
+ return area;
+ }
+
+ d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
+ d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
+ d3.svg.area = function () {
+ return d3_svg_area(d3_identity);
+ };
+ d3.svg.area.radial = function () {
+ var area = d3_svg_area(d3_svg_lineRadial);
+ area.radius = area.x, delete area.x;
+ area.innerRadius = area.x0, delete area.x0;
+ area.outerRadius = area.x1, delete area.x1;
+ area.angle = area.y, delete area.y;
+ area.startAngle = area.y0, delete area.y0;
+ area.endAngle = area.y1, delete area.y1;
+ return area;
+ };
+ d3.svg.chord = function () {
+ var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
+
+ function chord(d, i) {
+ var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
+ return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
+ }
+
+ function subgroup(self, f, d, i) {
+ var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
+ return {
+ r: r,
+ a0: a0,
+ a1: a1,
+ p0: [r * Math.cos(a0), r * Math.sin(a0)],
+ p1: [r * Math.cos(a1), r * Math.sin(a1)]
+ };
+ }
+
+ function equals(a, b) {
+ return a.a0 == b.a0 && a.a1 == b.a1;
+ }
+
+ function arc(r, p, a) {
+ return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
+ }
+
+ function curve(r0, p0, r1, p1) {
+ return "Q 0,0 " + p1;
+ }
+
+ chord.radius = function (v) {
+ if (!arguments.length) return radius;
+ radius = d3_functor(v);
+ return chord;
+ };
+ chord.source = function (v) {
+ if (!arguments.length) return source;
+ source = d3_functor(v);
+ return chord;
+ };
+ chord.target = function (v) {
+ if (!arguments.length) return target;
+ target = d3_functor(v);
+ return chord;
+ };
+ chord.startAngle = function (v) {
+ if (!arguments.length) return startAngle;
+ startAngle = d3_functor(v);
+ return chord;
+ };
+ chord.endAngle = function (v) {
+ if (!arguments.length) return endAngle;
+ endAngle = d3_functor(v);
+ return chord;
+ };
+ return chord;
+ };
+ function d3_svg_chordRadius(d) {
+ return d.radius;
+ }
+
+ d3.svg.diagonal = function () {
+ var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
+
+ function diagonal(d, i) {
+ var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [p0, {
+ x: p0.x,
+ y: m
+ }, {
+ x: p3.x,
+ y: m
+ }, p3];
+ p = p.map(projection);
+ return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
+ }
+
+ diagonal.source = function (x) {
+ if (!arguments.length) return source;
+ source = d3_functor(x);
+ return diagonal;
+ };
+ diagonal.target = function (x) {
+ if (!arguments.length) return target;
+ target = d3_functor(x);
+ return diagonal;
+ };
+ diagonal.projection = function (x) {
+ if (!arguments.length) return projection;
+ projection = x;
+ return diagonal;
+ };
+ return diagonal;
+ };
+ function d3_svg_diagonalProjection(d) {
+ return [d.x, d.y];
+ }
+
+ d3.svg.diagonal.radial = function () {
+ var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
+ diagonal.projection = function (x) {
+ return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
+ };
+ return diagonal;
+ };
+ function d3_svg_diagonalRadialProjection(projection) {
+ return function () {
+ var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
+ return [r * Math.cos(a), r * Math.sin(a)];
+ };
+ }
+
+ d3.svg.symbol = function () {
+ var type = d3_svg_symbolType, size = d3_svg_symbolSize;
+
+ function symbol(d, i) {
+ return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
+ }
+
+ symbol.type = function (x) {
+ if (!arguments.length) return type;
+ type = d3_functor(x);
+ return symbol;
+ };
+ symbol.size = function (x) {
+ if (!arguments.length) return size;
+ size = d3_functor(x);
+ return symbol;
+ };
+ return symbol;
+ };
+ function d3_svg_symbolSize() {
+ return 64;
+ }
+
+ function d3_svg_symbolType() {
+ return "circle";
+ }
+
+ function d3_svg_symbolCircle(size) {
+ var r = Math.sqrt(size / π);
+ return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
+ }
+
+ var d3_svg_symbols = d3.map({
+ circle: d3_svg_symbolCircle,
+ cross: function (size) {
+ var r = Math.sqrt(size / 5) / 2;
+ return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
+ },
+ diamond: function (size) {
+ var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
+ return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
+ },
+ square: function (size) {
+ var r = Math.sqrt(size) / 2;
+ return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
+ },
+ "triangle-down": function (size) {
+ var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
+ return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
+ },
+ "triangle-up": function (size) {
+ var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
+ return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
+ }
+ });
+ d3.svg.symbolTypes = d3_svg_symbols.keys();
+ var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
+
+ function d3_transition(groups, id) {
+ d3_subclass(groups, d3_transitionPrototype);
+ groups.id = id;
+ return groups;
+ }
+
+ var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;
+ d3_transitionPrototype.call = d3_selectionPrototype.call;
+ d3_transitionPrototype.empty = d3_selectionPrototype.empty;
+ d3_transitionPrototype.node = d3_selectionPrototype.node;
+ d3_transitionPrototype.size = d3_selectionPrototype.size;
+ d3.transition = function (selection) {
+ return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();
+ };
+ d3.transition.prototype = d3_transitionPrototype;
+ d3_transitionPrototype.select = function (selector) {
+ var id = this.id, subgroups = [], subgroup, subnode, node;
+ selector = d3_selection_selector(selector);
+ for (var j = -1, m = this.length; ++j < m;) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
+ if ("__data__" in node) subnode.__data__ = node.__data__;
+ d3_transitionNode(subnode, i, id, node.__transition__[id]);
+ subgroup.push(subnode);
+ } else {
+ subgroup.push(null);
+ }
+ }
+ }
+ return d3_transition(subgroups, id);
+ };
+ d3_transitionPrototype.selectAll = function (selector) {
+ var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
+ selector = d3_selection_selectorAll(selector);
+ for (var j = -1, m = this.length; ++j < m;) {
+ for (var group = this[j], i = -1, n = group.length; ++i < n;) {
+ if (node = group[i]) {
+ transition = node.__transition__[id];
+ subnodes = selector.call(node, node.__data__, i, j);
+ subgroups.push(subgroup = []);
+ for (var k = -1, o = subnodes.length; ++k < o;) {
+ if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition);
+ subgroup.push(subnode);
+ }
+ }
+ }
+ }
+ return d3_transition(subgroups, id);
+ };
+ d3_transitionPrototype.filter = function (filter) {
+ var subgroups = [], subgroup, group, node;
+ if (typeof filter !== "function") filter = d3_selection_filter(filter);
+ for (var j = 0, m = this.length; j < m; j++) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+ if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
+ subgroup.push(node);
+ }
+ }
+ }
+ return d3_transition(subgroups, this.id);
+ };
+ d3_transitionPrototype.tween = function (name, tween) {
+ var id = this.id;
+ if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
+ return d3_selection_each(this, tween == null ? function (node) {
+ node.__transition__[id].tween.remove(name);
+ } : function (node) {
+ node.__transition__[id].tween.set(name, tween);
+ });
+ };
+ function d3_transition_tween(groups, name, value, tween) {
+ var id = groups.id;
+ return d3_selection_each(groups, typeof value === "function" ? function (node, i, j) {
+ node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
+ } : (value = tween(value), function (node) {
+ node.__transition__[id].tween.set(name, value);
+ }));
+ }
+
+ d3_transitionPrototype.attr = function (nameNS, value) {
+ if (arguments.length < 2) {
+ for (value in nameNS) this.attr(value, nameNS[value]);
+ return this;
+ }
+ var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);
+
+ function attrNull() {
+ this.removeAttribute(name);
+ }
+
+ function attrNullNS() {
+ this.removeAttributeNS(name.space, name.local);
+ }
+
+ function attrTween(b) {
+ return b == null ? attrNull : (b += "", function () {
+ var a = this.getAttribute(name), i;
+ return a !== b && (i = interpolate(a, b), function (t) {
+ this.setAttribute(name, i(t));
+ });
+ });
+ }
+
+ function attrTweenNS(b) {
+ return b == null ? attrNullNS : (b += "", function () {
+ var a = this.getAttributeNS(name.space, name.local), i;
+ return a !== b && (i = interpolate(a, b), function (t) {
+ this.setAttributeNS(name.space, name.local, i(t));
+ });
+ });
+ }
+
+ return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween);
+ };
+ d3_transitionPrototype.attrTween = function (nameNS, tween) {
+ var name = d3.ns.qualify(nameNS);
+
+ function attrTween(d, i) {
+ var f = tween.call(this, d, i, this.getAttribute(name));
+ return f && function (t) {
+ this.setAttribute(name, f(t));
+ };
+ }
+
+ function attrTweenNS(d, i) {
+ var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
+ return f && function (t) {
+ this.setAttributeNS(name.space, name.local, f(t));
+ };
+ }
+
+ return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
+ };
+ d3_transitionPrototype.style = function (name, value, priority) {
+ var n = arguments.length;
+ if (n < 3) {
+ if (typeof name !== "string") {
+ if (n < 2) value = "";
+ for (priority in name) this.style(priority, name[priority], value);
+ return this;
+ }
+ priority = "";
+ }
+ function styleNull() {
+ this.style.removeProperty(name);
+ }
+
+ function styleString(b) {
+ return b == null ? styleNull : (b += "", function () {
+ var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;
+ return a !== b && (i = d3_interpolate(a, b), function (t) {
+ this.style.setProperty(name, i(t), priority);
+ });
+ });
+ }
+
+ return d3_transition_tween(this, "style." + name, value, styleString);
+ };
+ d3_transitionPrototype.styleTween = function (name, tween, priority) {
+ if (arguments.length < 3) priority = "";
+ function styleTween(d, i) {
+ var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));
+ return f && function (t) {
+ this.style.setProperty(name, f(t), priority);
+ };
+ }
+
+ return this.tween("style." + name, styleTween);
+ };
+ d3_transitionPrototype.text = function (value) {
+ return d3_transition_tween(this, "text", value, d3_transition_text);
+ };
+ function d3_transition_text(b) {
+ if (b == null) b = "";
+ return function () {
+ this.textContent = b;
+ };
+ }
+
+ d3_transitionPrototype.remove = function () {
+ return this.each("end.transition", function () {
+ var p;
+ if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);
+ });
+ };
+ d3_transitionPrototype.ease = function (value) {
+ var id = this.id;
+ if (arguments.length < 1) return this.node().__transition__[id].ease;
+ if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
+ return d3_selection_each(this, function (node) {
+ node.__transition__[id].ease = value;
+ });
+ };
+ d3_transitionPrototype.delay = function (value) {
+ var id = this.id;
+ if (arguments.length < 1) return this.node().__transition__[id].delay;
+ return d3_selection_each(this, typeof value === "function" ? function (node, i, j) {
+ node.__transition__[id].delay = +value.call(node, node.__data__, i, j);
+ } : (value = +value, function (node) {
+ node.__transition__[id].delay = value;
+ }));
+ };
+ d3_transitionPrototype.duration = function (value) {
+ var id = this.id;
+ if (arguments.length < 1) return this.node().__transition__[id].duration;
+ return d3_selection_each(this, typeof value === "function" ? function (node, i, j) {
+ node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));
+ } : (value = Math.max(1, value), function (node) {
+ node.__transition__[id].duration = value;
+ }));
+ };
+ d3_transitionPrototype.each = function (type, listener) {
+ var id = this.id;
+ if (arguments.length < 2) {
+ var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
+ d3_transitionInheritId = id;
+ d3_selection_each(this, function (node, i, j) {
+ d3_transitionInherit = node.__transition__[id];
+ type.call(node, node.__data__, i, j);
+ });
+ d3_transitionInherit = inherit;
+ d3_transitionInheritId = inheritId;
+ } else {
+ d3_selection_each(this, function (node) {
+ var transition = node.__transition__[id];
+ (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener);
+ });
+ }
+ return this;
+ };
+ d3_transitionPrototype.transition = function () {
+ var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
+ for (var j = 0, m = this.length; j < m; j++) {
+ subgroups.push(subgroup = []);
+ for (var group = this[j], i = 0, n = group.length; i < n; i++) {
+ if (node = group[i]) {
+ transition = Object.create(node.__transition__[id0]);
+ transition.delay += transition.duration;
+ d3_transitionNode(node, i, id1, transition);
+ }
+ subgroup.push(node);
+ }
+ }
+ return d3_transition(subgroups, id1);
+ };
+ function d3_transitionNode(node, i, id, inherit) {
+ var lock = node.__transition__ || (node.__transition__ = {
+ active: 0,
+ count: 0
+ }), transition = lock[id];
+ if (!transition) {
+ var time = inherit.time;
+ transition = lock[id] = {
+ tween: new d3_Map(),
+ time: time,
+ ease: inherit.ease,
+ delay: inherit.delay,
+ duration: inherit.duration
+ };
+ ++lock.count;
+ d3.timer(function (elapsed) {
+ var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = [];
+ timer.t = delay + time;
+ if (delay <= elapsed) return start(elapsed - delay);
+ timer.c = start;
+ function start(elapsed) {
+ if (lock.active > id) return stop();
+ lock.active = id;
+ transition.event && transition.event.start.call(node, d, i);
+ transition.tween.forEach(function (key, value) {
+ if (value = value.call(node, d, i)) {
+ tweened.push(value);
+ }
+ });
+ d3.timer(function () {
+ timer.c = tick(elapsed || 1) ? d3_true : tick;
+ return 1;
+ }, 0, time);
+ }
+
+ function tick(elapsed) {
+ if (lock.active !== id) return stop();
+ var t = elapsed / duration, e = ease(t), n = tweened.length;
+ while (n > 0) {
+ tweened[--n].call(node, e);
+ }
+ if (t >= 1) {
+ transition.event && transition.event.end.call(node, d, i);
+ return stop();
+ }
+ }
+
+ function stop() {
+ if (--lock.count) delete lock[id]; else delete node.__transition__;
+ return 1;
+ }
+ }, 0, time);
+ }
+ }
+
+ d3.svg.axis = function () {
+ var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [10], tickValues = null, tickFormat_;
+
+ function axis(g) {
+ g.each(function () {
+ var g = d3.select(this);
+ var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
+ var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickTransform;
+ var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([0]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
+ d3.transition(path));
+ tickEnter.append("line");
+ tickEnter.append("text");
+ var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
+ switch (orient) {
+ case "bottom":
+ {
+ tickTransform = d3_svg_axisX;
+ lineEnter.attr("y2", innerTickSize);
+ textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding);
+ lineUpdate.attr("x2", 0).attr("y2", innerTickSize);
+ textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding);
+ text.attr("dy", ".71em").style("text-anchor", "middle");
+ pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
+ break;
+ }
+
+ case "top":
+ {
+ tickTransform = d3_svg_axisX;
+ lineEnter.attr("y2", -innerTickSize);
+ textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
+ lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
+ textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
+ text.attr("dy", "0em").style("text-anchor", "middle");
+ pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
+ break;
+ }
+
+ case "left":
+ {
+ tickTransform = d3_svg_axisY;
+ lineEnter.attr("x2", -innerTickSize);
+ textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding));
+ lineUpdate.attr("x2", -innerTickSize).attr("y2", 0);
+ textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0);
+ text.attr("dy", ".32em").style("text-anchor", "end");
+ pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
+ break;
+ }
+
+ case "right":
+ {
+ tickTransform = d3_svg_axisY;
+ lineEnter.attr("x2", innerTickSize);
+ textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding);
+ lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
+ textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0);
+ text.attr("dy", ".32em").style("text-anchor", "start");
+ pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
+ break;
+ }
+ }
+ if (scale1.rangeBand) {
+ var x = scale1, dx = x.rangeBand() / 2;
+ scale0 = scale1 = function (d) {
+ return x(d) + dx;
+ };
+ } else if (scale0.rangeBand) {
+ scale0 = scale1;
+ } else {
+ tickExit.call(tickTransform, scale1);
+ }
+ tickEnter.call(tickTransform, scale0);
+ tickUpdate.call(tickTransform, scale1);
+ });
+ }
+
+ axis.scale = function (x) {
+ if (!arguments.length) return scale;
+ scale = x;
+ return axis;
+ };
+ axis.orient = function (x) {
+ if (!arguments.length) return orient;
+ orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
+ return axis;
+ };
+ axis.ticks = function () {
+ if (!arguments.length) return tickArguments_;
+ tickArguments_ = arguments;
+ return axis;
+ };
+ axis.tickValues = function (x) {
+ if (!arguments.length) return tickValues;
+ tickValues = x;
+ return axis;
+ };
+ axis.tickFormat = function (x) {
+ if (!arguments.length) return tickFormat_;
+ tickFormat_ = x;
+ return axis;
+ };
+ axis.tickSize = function (x) {
+ var n = arguments.length;
+ if (!n) return innerTickSize;
+ innerTickSize = +x;
+ outerTickSize = +arguments[n - 1];
+ return axis;
+ };
+ axis.innerTickSize = function (x) {
+ if (!arguments.length) return innerTickSize;
+ innerTickSize = +x;
+ return axis;
+ };
+ axis.outerTickSize = function (x) {
+ if (!arguments.length) return outerTickSize;
+ outerTickSize = +x;
+ return axis;
+ };
+ axis.tickPadding = function (x) {
+ if (!arguments.length) return tickPadding;
+ tickPadding = +x;
+ return axis;
+ };
+ axis.tickSubdivide = function () {
+ return arguments.length && axis;
+ };
+ return axis;
+ };
+ var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
+ top: 1,
+ right: 1,
+ bottom: 1,
+ left: 1
+ };
+
+ function d3_svg_axisX(selection, x) {
+ selection.attr("transform", function (d) {
+ return "translate(" + x(d) + ",0)";
+ });
+ }
+
+ function d3_svg_axisY(selection, y) {
+ selection.attr("transform", function (d) {
+ return "translate(0," + y(d) + ")";
+ });
+ }
+
+ d3.svg.brush = function () {
+ var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [0, 0], yExtent = [0, 0], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];
+
+ function brush(g) {
+ g.each(function () {
+ var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
+ var background = g.selectAll(".background").data([0]);
+ background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
+ g.selectAll(".extent").data([0]).enter().append("rect").attr("class", "extent").style("cursor", "move");
+ var resize = g.selectAll(".resize").data(resizes, d3_identity);
+ resize.exit().remove();
+ resize.enter().append("g").attr("class", function (d) {
+ return "resize " + d;
+ }).style("cursor", function (d) {
+ return d3_svg_brushCursor[d];
+ }).append("rect").attr("x", function (d) {
+ return /[ew]$/.test(d) ? -3 : null;
+ }).attr("y", function (d) {
+ return /^[ns]/.test(d) ? -3 : null;
+ }).attr("width", 6).attr("height", 6).style("visibility", "hidden");
+ resize.style("display", brush.empty() ? "none" : null);
+ var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;
+ if (x) {
+ range = d3_scaleRange(x);
+ backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]);
+ redrawX(gUpdate);
+ }
+ if (y) {
+ range = d3_scaleRange(y);
+ backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]);
+ redrawY(gUpdate);
+ }
+ redraw(gUpdate);
+ });
+ }
+
+ brush.event = function (g) {
+ g.each(function () {
+ var event_ = event.of(this, arguments), extent1 = {
+ x: xExtent,
+ y: yExtent,
+ i: xExtentDomain,
+ j: yExtentDomain
+ }, extent0 = this.__chart__ || extent1;
+ this.__chart__ = extent1;
+ if (d3_transitionInheritId) {
+ d3.select(this).transition().each("start.brush", function () {
+ xExtentDomain = extent0.i;
+ yExtentDomain = extent0.j;
+ xExtent = extent0.x;
+ yExtent = extent0.y;
+ event_({
+ type: "brushstart"
+ });
+ }).tween("brush:brush", function () {
+ var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);
+ xExtentDomain = yExtentDomain = null;
+ return function (t) {
+ xExtent = extent1.x = xi(t);
+ yExtent = extent1.y = yi(t);
+ event_({
+ type: "brush",
+ mode: "resize"
+ });
+ };
+ }).each("end.brush", function () {
+ xExtentDomain = extent1.i;
+ yExtentDomain = extent1.j;
+ event_({
+ type: "brush",
+ mode: "resize"
+ });
+ event_({
+ type: "brushend"
+ });
+ });
+ } else {
+ event_({
+ type: "brushstart"
+ });
+ event_({
+ type: "brush",
+ mode: "resize"
+ });
+ event_({
+ type: "brushend"
+ });
+ }
+ });
+ };
+ function redraw(g) {
+ g.selectAll(".resize").attr("transform", function (d) {
+ return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")";
+ });
+ }
+
+ function redrawX(g) {
+ g.select(".extent").attr("x", xExtent[0]);
+ g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]);
+ }
+
+ function redrawY(g) {
+ g.select(".extent").attr("y", yExtent[0]);
+ g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
+ }
+
+ function brushstart() {
+ var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset;
+ var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup);
+ if (d3.event.changedTouches) {
+ w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
+ } else {
+ w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend);
+ }
+ g.interrupt().selectAll("*").interrupt();
+ if (dragging) {
+ origin[0] = xExtent[0] - origin[0];
+ origin[1] = yExtent[0] - origin[1];
+ } else if (resizing) {
+ var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
+ offset = [xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1]];
+ origin[0] = xExtent[ex];
+ origin[1] = yExtent[ey];
+ } else if (d3.event.altKey) center = origin.slice();
+ g.style("pointer-events", "none").selectAll(".resize").style("display", null);
+ d3.select("body").style("cursor", eventTarget.style("cursor"));
+ event_({
+ type: "brushstart"
+ });
+ brushmove();
+ function keydown() {
+ if (d3.event.keyCode == 32) {
+ if (!dragging) {
+ center = null;
+ origin[0] -= xExtent[1];
+ origin[1] -= yExtent[1];
+ dragging = 2;
+ }
+ d3_eventPreventDefault();
+ }
+ }
+
+ function keyup() {
+ if (d3.event.keyCode == 32 && dragging == 2) {
+ origin[0] += xExtent[1];
+ origin[1] += yExtent[1];
+ dragging = 0;
+ d3_eventPreventDefault();
+ }
+ }
+
+ function brushmove() {
+ var point = d3.mouse(target), moved = false;
+ if (offset) {
+ point[0] += offset[0];
+ point[1] += offset[1];
+ }
+ if (!dragging) {
+ if (d3.event.altKey) {
+ if (!center) center = [(xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2];
+ origin[0] = xExtent[+(point[0] < center[0])];
+ origin[1] = yExtent[+(point[1] < center[1])];
+ } else center = null;
+ }
+ if (resizingX && move1(point, x, 0)) {
+ redrawX(g);
+ moved = true;
+ }
+ if (resizingY && move1(point, y, 1)) {
+ redrawY(g);
+ moved = true;
+ }
+ if (moved) {
+ redraw(g);
+ event_({
+ type: "brush",
+ mode: dragging ? "move" : "resize"
+ });
+ }
+ }
+
+ function move1(point, scale, i) {
+ var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;
+ if (dragging) {
+ r0 -= position;
+ r1 -= size + position;
+ }
+ min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];
+ if (dragging) {
+ max = (min += position) + size;
+ } else {
+ if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
+ if (position < min) {
+ max = min;
+ min = position;
+ } else {
+ max = position;
+ }
+ }
+ if (extent[0] != min || extent[1] != max) {
+ if (i) yExtentDomain = null; else xExtentDomain = null;
+ extent[0] = min;
+ extent[1] = max;
+ return true;
+ }
+ }
+
+ function brushend() {
+ brushmove();
+ g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
+ d3.select("body").style("cursor", null);
+ w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
+ dragRestore();
+ event_({
+ type: "brushend"
+ });
+ }
+ }
+
+ brush.x = function (z) {
+ if (!arguments.length) return x;
+ x = z;
+ resizes = d3_svg_brushResizes[!x << 1 | !y];
+ return brush;
+ };
+ brush.y = function (z) {
+ if (!arguments.length) return y;
+ y = z;
+ resizes = d3_svg_brushResizes[!x << 1 | !y];
+ return brush;
+ };
+ brush.clamp = function (z) {
+ if (!arguments.length) return x && y ? [xClamp, yClamp] : x ? xClamp : y ? yClamp : null;
+ if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;
+ return brush;
+ };
+ brush.extent = function (z) {
+ var x0, x1, y0, y1, t;
+ if (!arguments.length) {
+ if (x) {
+ if (xExtentDomain) {
+ x0 = xExtentDomain[0], x1 = xExtentDomain[1];
+ } else {
+ x0 = xExtent[0], x1 = xExtent[1];
+ if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
+ if (x1 < x0) t = x0, x0 = x1, x1 = t;
+ }
+ }
+ if (y) {
+ if (yExtentDomain) {
+ y0 = yExtentDomain[0], y1 = yExtentDomain[1];
+ } else {
+ y0 = yExtent[0], y1 = yExtent[1];
+ if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
+ if (y1 < y0) t = y0, y0 = y1, y1 = t;
+ }
+ }
+ return x && y ? [[x0, y0], [x1, y1]] : x ? [x0, x1] : y && [y0, y1];
+ }
+ if (x) {
+ x0 = z[0], x1 = z[1];
+ if (y) x0 = x0[0], x1 = x1[0];
+ xExtentDomain = [x0, x1];
+ if (x.invert) x0 = x(x0), x1 = x(x1);
+ if (x1 < x0) t = x0, x0 = x1, x1 = t;
+ if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [x0, x1];
+ }
+ if (y) {
+ y0 = z[0], y1 = z[1];
+ if (x) y0 = y0[1], y1 = y1[1];
+ yExtentDomain = [y0, y1];
+ if (y.invert) y0 = y(y0), y1 = y(y1);
+ if (y1 < y0) t = y0, y0 = y1, y1 = t;
+ if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [y0, y1];
+ }
+ return brush;
+ };
+ brush.clear = function () {
+ if (!brush.empty()) {
+ xExtent = [0, 0], yExtent = [0, 0];
+ xExtentDomain = yExtentDomain = null;
+ }
+ return brush;
+ };
+ brush.empty = function () {
+ return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];
+ };
+ return d3.rebind(brush, event, "on");
+ };
+ var d3_svg_brushCursor = {
+ n: "ns-resize",
+ e: "ew-resize",
+ s: "ns-resize",
+ w: "ew-resize",
+ nw: "nwse-resize",
+ ne: "nesw-resize",
+ se: "nwse-resize",
+ sw: "nesw-resize"
+ };
+ var d3_svg_brushResizes = [["n", "e", "s", "w", "nw", "ne", "se", "sw"], ["e", "w"], ["n", "s"], []];
+ var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;
+ var d3_time_formatUtc = d3_time_format.utc;
+ var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ");
+ d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
+ function d3_time_formatIsoNative(date) {
+ return date.toISOString();
+ }
+
+ d3_time_formatIsoNative.parse = function (string) {
+ var date = new Date(string);
+ return isNaN(date) ? null : date;
+ };
+ d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
+ d3_time.second = d3_time_interval(function (date) {
+ return new d3_date(Math.floor(date / 1e3) * 1e3);
+ }, function (date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 1e3);
+ }, function (date) {
+ return date.getSeconds();
+ });
+ d3_time.seconds = d3_time.second.range;
+ d3_time.seconds.utc = d3_time.second.utc.range;
+ d3_time.minute = d3_time_interval(function (date) {
+ return new d3_date(Math.floor(date / 6e4) * 6e4);
+ }, function (date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 6e4);
+ }, function (date) {
+ return date.getMinutes();
+ });
+ d3_time.minutes = d3_time.minute.range;
+ d3_time.minutes.utc = d3_time.minute.utc.range;
+ d3_time.hour = d3_time_interval(function (date) {
+ var timezone = date.getTimezoneOffset() / 60;
+ return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
+ }, function (date, offset) {
+ date.setTime(date.getTime() + Math.floor(offset) * 36e5);
+ }, function (date) {
+ return date.getHours();
+ });
+ d3_time.hours = d3_time.hour.range;
+ d3_time.hours.utc = d3_time.hour.utc.range;
+ d3_time.month = d3_time_interval(function (date) {
+ date = d3_time.day(date);
+ date.setDate(1);
+ return date;
+ }, function (date, offset) {
+ date.setMonth(date.getMonth() + offset);
+ }, function (date) {
+ return date.getMonth();
+ });
+ d3_time.months = d3_time.month.range;
+ d3_time.months.utc = d3_time.month.utc.range;
+ function d3_time_scale(linear, methods, format) {
+ function scale(x) {
+ return linear(x);
+ }
+
+ scale.invert = function (x) {
+ return d3_time_scaleDate(linear.invert(x));
+ };
+ scale.domain = function (x) {
+ if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
+ linear.domain(x);
+ return scale;
+ };
+ function tickMethod(extent, count) {
+ var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);
+ return i == d3_time_scaleSteps.length ? [methods.year, d3_scale_linearTickRange(extent.map(function (d) {
+ return d / 31536e6;
+ }), count)[2]] : !i ? [d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2]] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];
+ }
+
+ scale.nice = function (interval, skip) {
+ var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval);
+ if (method) interval = method[0], skip = method[1];
+ function skipped(date) {
+ return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;
+ }
+
+ return scale.domain(d3_scale_nice(domain, skip > 1 ? {
+ floor: function (date) {
+ while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);
+ return date;
+ },
+ ceil: function (date) {
+ while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);
+ return date;
+ }
+ } : interval));
+ };
+ scale.ticks = function (interval, skip) {
+ var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [{
+ range: interval
+ }, skip];
+ if (method) interval = method[0], skip = method[1];
+ return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);
+ };
+ scale.tickFormat = function () {
+ return format;
+ };
+ scale.copy = function () {
+ return d3_time_scale(linear.copy(), methods, format);
+ };
+ return d3_scale_linearRebind(scale, linear);
+ }
+
+ function d3_time_scaleDate(t) {
+ return new Date(t);
+ }
+
+ var d3_time_scaleSteps = [1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6];
+ var d3_time_scaleLocalMethods = [[d3_time.second, 1], [d3_time.second, 5], [d3_time.second, 15], [d3_time.second, 30], [d3_time.minute, 1], [d3_time.minute, 5], [d3_time.minute, 15], [d3_time.minute, 30], [d3_time.hour, 1], [d3_time.hour, 3], [d3_time.hour, 6], [d3_time.hour, 12], [d3_time.day, 1], [d3_time.day, 2], [d3_time.week, 1], [d3_time.month, 1], [d3_time.month, 3], [d3_time.year, 1]];
+ var d3_time_scaleLocalFormat = d3_time_format.multi([[".%L", function (d) {
+ return d.getMilliseconds();
+ }], [":%S", function (d) {
+ return d.getSeconds();
+ }], ["%I:%M", function (d) {
+ return d.getMinutes();
+ }], ["%I %p", function (d) {
+ return d.getHours();
+ }], ["%a %d", function (d) {
+ return d.getDay() && d.getDate() != 1;
+ }], ["%b %d", function (d) {
+ return d.getDate() != 1;
+ }], ["%B", function (d) {
+ return d.getMonth();
+ }], ["%Y", d3_true]]);
+ var d3_time_scaleMilliseconds = {
+ range: function (start, stop, step) {
+ return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);
+ },
+ floor: d3_identity,
+ ceil: d3_identity
+ };
+ d3_time_scaleLocalMethods.year = d3_time.year;
+ d3_time.scale = function () {
+ return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
+ };
+ var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function (m) {
+ return [m[0].utc, m[1]];
+ });
+ var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([[".%L", function (d) {
+ return d.getUTCMilliseconds();
+ }], [":%S", function (d) {
+ return d.getUTCSeconds();
+ }], ["%I:%M", function (d) {
+ return d.getUTCMinutes();
+ }], ["%I %p", function (d) {
+ return d.getUTCHours();
+ }], ["%a %d", function (d) {
+ return d.getUTCDay() && d.getUTCDate() != 1;
+ }], ["%b %d", function (d) {
+ return d.getUTCDate() != 1;
+ }], ["%B", function (d) {
+ return d.getUTCMonth();
+ }], ["%Y", d3_true]]);
+ d3_time_scaleUtcMethods.year = d3_time.year.utc;
+ d3_time.scale.utc = function () {
+ return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);
+ };
+ d3.text = d3_xhrType(function (request) {
+ return request.responseText;
+ });
+ d3.json = function (url, callback) {
+ return d3_xhr(url, "application/json", d3_json, callback);
+ };
+ function d3_json(request) {
+ return JSON.parse(request.responseText);
+ }
+
+ d3.html = function (url, callback) {
+ return d3_xhr(url, "text/html", d3_html, callback);
+ };
+ function d3_html(request) {
+ var range = d3_document.createRange();
+ range.selectNode(d3_document.body);
+ return range.createContextualFragment(request.responseText);
+ }
+
+ d3.xml = d3_xhrType(function (request) {
+ return request.responseXML;
+ });
+ if (typeof define === "function" && define.amd) define(d3); else if (typeof module === "object" && module.exports) module.exports = d3;
+ this.d3 = d3;
+}(); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/facebox.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/facebox.js
new file mode 100644
index 00000000..69443cc7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/facebox.js
@@ -0,0 +1,380 @@
+/*
+ * Facebox (for jQuery)
+ * version: 1.3
+ * @requires jQuery v1.2 or later
+ * @homepage https://github.com/defunkt/facebox
+ *
+ * Licensed under the MIT:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Copyright Forever Chris Wanstrath, Kyle Neath
+ *
+ * Usage:
+ *
+ * jQuery(document).ready(function() {
+ * jQuery('a[rel*=facebox]').facebox()
+ * })
+ *
+ * <a href="#terms" rel="facebox">Terms</a>
+ * Loads the #terms div in the box
+ *
+ * <a href="terms.html" rel="facebox">Terms</a>
+ * Loads the terms.html page in the box
+ *
+ * <a href="terms.png" rel="facebox">Terms</a>
+ * Loads the terms.png image in the box
+ *
+ *
+ * You can also use it programmatically:
+ *
+ * jQuery.facebox('some html')
+ * jQuery.facebox('some html', 'my-groovy-style')
+ *
+ * The above will open a facebox with "some html" as the content.
+ *
+ * jQuery.facebox(function($) {
+ * $.get('blah.html', function(data) { $.facebox(data) })
+ * })
+ *
+ * The above will show a loading screen before the passed function is called,
+ * allowing for a better ajaxy experience.
+ *
+ * The facebox function can also display an ajax page, an image, or the contents of a div:
+ *
+ * jQuery.facebox({ ajax: 'remote.html' })
+ * jQuery.facebox({ ajax: 'remote.html' }, 'my-groovy-style')
+ * jQuery.facebox({ image: 'stairs.jpg' })
+ * jQuery.facebox({ image: 'stairs.jpg' }, 'my-groovy-style')
+ * jQuery.facebox({ div: '#box' })
+ * jQuery.facebox({ div: '#box' }, 'my-groovy-style')
+ *
+ * Want to close the facebox? Trigger the 'close.facebox' document event:
+ *
+ * jQuery(document).trigger('close.facebox')
+ *
+ * Facebox also has a bunch of other hooks:
+ *
+ * loading.facebox
+ * beforeReveal.facebox
+ * reveal.facebox (aliased as 'afterReveal.facebox')
+ * init.facebox
+ * afterClose.facebox
+ *
+ * Simply bind a function to any of these hooks:
+ *
+ * $(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })
+ *
+ */
+(function ($) {
+ /*
+ function cloneCanvas(oldCanvas) {
+
+ //create a new canvas
+ var newCanvas = document.createElement('canvas');
+ var context = newCanvas.getContext('2d');
+
+ //set dimensions
+ newCanvas.width = oldCanvas.width;
+ newCanvas.height = oldCanvas.height;
+
+ //apply the old canvas to the new one
+ context.drawImage(oldCanvas, 0, 0);
+
+ //return the new canvas
+ return newCanvas;
+ }
+ */
+ $.facebox = function (data, klass) {
+ $.facebox.loading(data.settings || [])
+
+ if (data.ajax) fillFaceboxFromAjax(data.ajax, klass)
+ else if (data.image) fillFaceboxFromImage(data.image, klass)
+ else if (data.div) fillFaceboxFromHref(data.div, klass)
+ else if ($.isFunction(data)) data.call($)
+ else $.facebox.reveal(data, klass)
+ }
+
+ /*
+ * Public, $.facebox methods
+ */
+
+ $.extend($.facebox, {
+ settings: {
+ opacity: 0.2,
+ overlay: true,
+ loadingImage: '/facebox/loading.gif',
+ closeImage: '/facebox/closelabel.png',
+ imageTypes: ['png', 'jpg', 'jpeg', 'gif'],
+ faceboxHtml: '\
+ <div id="facebox" style="display:none;"> \
+ <div class="popup"> \
+ <div class="content"> \
+ </div> \
+ <a href="#" class="close"></a> \
+ </div> \
+ </div>'
+ },
+
+ loading: function () {
+ init()
+ if ($('#facebox .loading').length == 1) return true
+ showOverlay()
+
+ $('#facebox .content').empty().
+ append('<div class="loading"><img src="' + $.facebox.settings.loadingImage + '"/></div>')
+
+ $('#facebox').show().css({
+ top: getPageScroll()[1] + (getPageHeight() / 10),
+ left: $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2)
+ })
+
+ $(document).bind('keydown.facebox', function (e) {
+ if (e.keyCode == 27) $.facebox.close()
+ return true
+ })
+ $(document).trigger('loading.facebox')
+ },
+
+ flotPlaceholderId: "",
+ //flotRedrawCallbackId: "",
+ flotRedrawCallback: {},
+ flotRedrawCallbackObjs: {},
+
+ isExpand: function (placeholderFlotId) {
+ if (placeholderFlotId.indexOf("_expand") >= 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+
+ clearContent: function (placeholderId) {
+ $('#facebox .content').empty().append('<div id="' + placeholderId + '_expand" class="flot-placeholder-expand">')
+ },
+
+ createChartExpand: function (callback) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ callback(this.flotPlaceholderId + "_expand");
+ },
+
+ createChartExpandObj: function (callbackObj) {
+ $.facebox.clearContent(this.flotPlaceholderId);
+ //callback(this.flotPlaceholderId + "_expand");
+ var args = callbackObj.arguments;
+ if (args.length > 0) {
+ args[0] = this.flotPlaceholderId + "_expand";
+ callbackObj.callback.apply(null, args);
+ }
+ },
+
+ reveal: function (data, klass) {
+ $(document).trigger('beforeReveal.facebox')
+ if (klass) $('#facebox .content').addClass(klass)
+ //$('#facebox .content').empty().append(data)
+ /////////////////////////////////////////////
+ //this.createChartExpand(this.flotRedrawCallback[this.flotPlaceholderId]);
+ this.createChartExpandObj(this.flotRedrawCallbackObjs[this.flotPlaceholderId]);
+ //////////////////////////////////////////////////////////////////////
+ $('#facebox .popup').children().fadeIn('normal')
+ $('#facebox').css('left', $(window).width() / 2 - ($('#facebox .popup').outerWidth() / 2))
+ $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
+ },
+
+ close: function () {
+ $(document).trigger('close.facebox')
+ return false
+ }
+ })
+
+ /*
+ * Public, $.fn methods
+ */
+
+ $.fn.facebox = function (settings) {
+ if ($(this).length == 0) return
+
+ init(settings)
+
+ function clickHandler() {
+ $.facebox.loading(true)
+
+ // support for rel="facebox.inline_popup" syntax, to add a class
+ // also supports deprecated "facebox[.inline_popup]" syntax
+ var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
+ if (klass) klass = klass[1]
+
+ fillFaceboxFromHref(this.href, klass)
+ return false
+ }
+
+ return this.bind('click.facebox', clickHandler)
+ }
+
+ /*
+ * Private methods
+ */
+
+ // called one time to setup facebox on this page
+ function init(settings) {
+ if ($.facebox.settings.inited) return true
+ else $.facebox.settings.inited = true
+
+ $(document).trigger('init.facebox')
+ makeCompatible()
+
+ var imageTypes = $.facebox.settings.imageTypes.join('|')
+ $.facebox.settings.imageTypesRegexp = new RegExp('\\.(' + imageTypes + ')(\\?.*)?$', 'i')
+
+ if (settings) $.extend($.facebox.settings, settings)
+ $('body').append($.facebox.settings.faceboxHtml)
+
+ var preload = [new Image(), new Image()]
+ preload[0].src = $.facebox.settings.closeImage
+ preload[1].src = $.facebox.settings.loadingImage
+
+ $('#facebox').find('.b:first, .bl').each(function () {
+ preload.push(new Image())
+ preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
+ })
+
+ $('#facebox .close')
+ .click($.facebox.close)
+ .append('<img src="'
+ + $.facebox.settings.closeImage
+ + '" class="close_image" title="close">')
+
+ //$('#facebox .content').addClass('contentWide')
+ }
+
+ // getPageScroll() by quirksmode.com
+ function getPageScroll() {
+ var xScroll, yScroll;
+ if (self.pageYOffset) {
+ yScroll = self.pageYOffset;
+ xScroll = self.pageXOffset;
+ } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
+ yScroll = document.documentElement.scrollTop;
+ xScroll = document.documentElement.scrollLeft;
+ } else if (document.body) {// all other Explorers
+ yScroll = document.body.scrollTop;
+ xScroll = document.body.scrollLeft;
+ }
+ return new Array(xScroll, yScroll)
+ }
+
+ // Adapted from getPageSize() by quirksmode.com
+ function getPageHeight() {
+ var windowHeight
+ if (self.innerHeight) { // all except Explorer
+ windowHeight = self.innerHeight;
+ } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
+ windowHeight = document.documentElement.clientHeight;
+ } else if (document.body) { // other Explorers
+ windowHeight = document.body.clientHeight;
+ }
+ return windowHeight
+ }
+
+ // Backwards compatibility
+ function makeCompatible() {
+ var $s = $.facebox.settings
+
+ $s.loadingImage = $s.loading_image || $s.loadingImage
+ $s.closeImage = $s.close_image || $s.closeImage
+ $s.imageTypes = $s.image_types || $s.imageTypes
+ $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
+ }
+
+ // Figures out what you want to display and displays it
+ // formats are:
+ // div: #id
+ // image: blah.extension
+ // ajax: anything else
+ function fillFaceboxFromHref(href, klass) {
+ // div
+ if (href.match(/#/)) {
+ var url = window.location.href.split('#')[0]
+ var target = href.replace(url, '')
+ if (target == '#') return
+ //选择需要放大的图
+ $.facebox.flotPlaceholderId = $(target).attr("flot_id");
+ //$.facebox.flotRedrawCallbackId = $(target).attr("callback_id");
+ if ($(target).hasClass("flot-placeholder-wrapper-portlet-wide")) {
+ $('#facebox .content').addClass('contentWide');
+ }
+
+ $.facebox.reveal($(target).html(), klass)
+
+ // image
+ } else if (href.match($.facebox.settings.imageTypesRegexp)) {
+ fillFaceboxFromImage(href, klass)
+ // ajax
+ } else {
+ fillFaceboxFromAjax(href, klass)
+ }
+ }
+
+ function fillFaceboxFromImage(href, klass) {
+ var image = new Image()
+ image.onload = function () {
+ $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
+ }
+ image.src = href
+ }
+
+ function fillFaceboxFromAjax(href, klass) {
+ $.facebox.jqxhr = $.get(href, function (data) {
+ $.facebox.reveal(data, klass)
+ })
+ }
+
+ function skipOverlay() {
+ return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null
+ }
+
+ function showOverlay() {
+ if (skipOverlay()) return
+
+ if ($('#facebox_overlay').length == 0)
+ $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')
+
+ $('#facebox_overlay').hide().addClass("facebox_overlayBG")
+ .css('opacity', $.facebox.settings.opacity)
+ .click(function () {
+ $(document).trigger('close.facebox')
+ })
+ .fadeIn(200)
+ return false
+ }
+
+ function hideOverlay() {
+ if (skipOverlay()) return
+
+ $('#facebox_overlay').fadeOut(200, function () {
+ $("#facebox_overlay").removeClass("facebox_overlayBG")
+ $("#facebox_overlay").addClass("facebox_hide")
+ $("#facebox_overlay").remove()
+ })
+
+ return false
+ }
+
+ /*
+ * Bindings
+ */
+
+ $(document).bind('close.facebox', function () {
+ if ($.facebox.jqxhr) {
+ $.facebox.jqxhr.abort()
+ $.facebox.jqxhr = null
+ }
+ $(document).unbind('keydown.facebox')
+ $('#facebox').fadeOut(function () {
+ $('#facebox .content').removeClass().addClass('content')
+ $('#facebox .loading').remove()
+ $(document).trigger('afterClose.facebox')
+ })
+ hideOverlay()
+ })
+
+})(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/freewall.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/freewall.js
new file mode 100644
index 00000000..d84c334e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-dashboard/js/freewall.js
@@ -0,0 +1,1317 @@
+// created by Minh Nguyen;
+// version 1.05;
+
+(function ($) {
+
+ // for zeptojs;
+ $.isNumeric == null && ($.isNumeric = function (src) {
+ return src != null && src.constructor === Number;
+ });
+
+ $.isFunction == null && ($.isFunction = function (src) {
+ return src != null && src instanceof Function;
+ });
+
+ var $W = $(window);
+ var $D = $(document);
+
+ var layoutManager = {
+ // default setting;
+ defaultConfig: {
+ animate: false,
+ cellW: 100, // function(container) {return 100;}
+ cellH: 100, // function(container) {return 100;}
+ delay: 0, // slowdown active block;
+ engine: 'giot', // 'giot' is a person name;
+ fixSize: null, // resize + adjust = fill gap;
+ //fixSize: 0, resize but keep ratio = no fill gap;
+ //fixSize: 1, no resize + no adjust = no fill gap;
+ gutterX: 15, // width spacing between blocks;
+ gutterY: 15, // height spacing between blocks;
+ keepOrder: false,
+ selector: '> div',
+ draggable: false,
+ cacheSize: true, // caches the original size of block;
+ rightToLeft: false,
+ bottomToTop: false,
+ onGapFound: function () {
+ },
+ onComplete: function () {
+ },
+ onResize: function () {
+ },
+ onBlockDrag: function () {
+ },
+ onBlockMove: function () {
+ },
+ onBlockDrop: function () {
+ },
+ onBlockReady: function () {
+ },
+ onBlockFinish: function () {
+ },
+ onBlockActive: function () {
+ },
+ onBlockResize: function () {
+ }
+ },
+ plugin: {},
+ totalGrid: 1,
+ transition: false,
+ loadBlock: function (item, setting) {
+ var runtime = setting.runtime;
+ var gutterX = runtime.gutterX;
+ var gutterY = runtime.gutterY;
+ var cellH = runtime.cellH;
+ var cellW = runtime.cellW;
+ var block = null;
+ var $item = $(item);
+ var active = $item.data("active");
+ var fixPos = $item.attr('data-position');
+ var fixSize = parseInt($item.attr('data-fixSize'));
+ var blockId = runtime.lastId++ + '-' + runtime.totalGrid;
+
+ //ignore dragging block;
+ if ($item.hasClass('fw-float')) return;
+ $item.attr({id: blockId, 'data-delay': item.index});
+
+ //remove animation for speed render;
+ if (setting.animate && this.transition) {
+ this.setTransition(item, "");
+ }
+
+ isNaN(fixSize) && (fixSize = null);
+ (fixSize == null) && (fixSize = setting.fixSize);
+ var makeRound = (fixSize >= 1) ? "ceil" : "round";
+ // store original size;
+
+ $item.attr('data-height') == null && $item.attr('data-height', $item.height());
+ $item.attr('data-width') == null && $item.attr('data-width', $item.width());
+ var height = 1 * $item.attr('data-height');
+ var width = 1 * $item.attr('data-width');
+
+ if (!setting.cacheSize) {
+ item.style.width = "";
+ width = $item.width();
+
+ item.style.height = "";
+ height = $item.height();
+ }
+
+ var col = !width ? 0 : Math[makeRound]((width + gutterX) / cellW);
+ var row = !height ? 0 : Math[makeRound]((height + gutterY) / cellH);
+
+ // estimate size;
+ if (!fixSize && setting.cellH == 'auto') {
+ $item.width(cellW * col - gutterX);
+ item.style.height = "";
+ height = $item.height();
+ row = !height ? 0 : Math.round((height + gutterY) / cellH);
+ }
+
+ if (!fixSize && setting.cellW == 'auto') {
+ $item.height(cellH * row - gutterY);
+ item.style.width = "";
+ width = $item.width();
+ col = !width ? 0 : Math.round((width + gutterX) / cellW);
+ }
+
+ // for none resize block;
+ if ((fixSize != null) && (col > runtime.limitCol || row > runtime.limitRow)) {
+ block = null;
+ } else {
+ // get smallest width and smallest height of block;
+ // using for image runtime;
+ row && row < runtime.minHoB && (runtime.minHoB = row);
+ col && col < runtime.minWoB && (runtime.minWoB = col);
+
+ // get biggest width and biggest height of block;
+ row > runtime.maxHoB && (runtime.maxHoB = row);
+ col > runtime.maxWoB && (runtime.maxWoB = col);
+
+ width == 0 && (col = 0);
+ height == 0 && (row = 0);
+
+ block = {
+ resize: false,
+ id: blockId,
+ width: col,
+ height: row,
+ fixSize: fixSize
+ };
+
+ // for fix position;
+ if (fixPos) {
+ fixPos = fixPos.split("-");
+ block.y = 1 * fixPos[0];
+ block.x = 1 * fixPos[1];
+ block.width = fixSize != null ? col : Math.min(col, runtime.limitCol - block.x);
+ block.height = fixSize != null ? row : Math.min(row, runtime.limitRow - block.y);
+ var holeId = block.y + "-" + block.x + "-" + block.width + "-" + block.height;
+ if (active) {
+ runtime.holes[holeId] = {
+ id: block.id,
+ top: block.y,
+ left: block.x,
+ width: block.width,
+ height: block.height
+ };
+ this.setBlock(block, setting);
+ } else {
+ delete runtime.holes[holeId];
+ }
+
+ }
+ }
+
+ // for css animation;
+ if ($item.attr("data-state") == null) {
+ $item.attr("data-state", "init");
+ } else {
+ $item.attr("data-state", "move");
+ }
+
+ setting.onBlockReady.call(item, block, setting);
+
+ return (fixPos && active) ? null : block;
+ },
+ setBlock: function (block, setting) {
+ var runtime = setting.runtime;
+ var gutterX = runtime.gutterX;
+ var gutterY = runtime.gutterY;
+ var height = block.height;
+ var width = block.width;
+ var cellH = runtime.cellH;
+ var cellW = runtime.cellW;
+ var x = block.x;
+ var y = block.y;
+
+ if (setting.rightToLeft) {
+ x = runtime.limitCol - x - width;
+ }
+ if (setting.bottomToTop) {
+ y = runtime.limitRow - y - height;
+ }
+
+ var realBlock = {
+ fixSize: block.fixSize,
+ resize: block.resize,
+ top: y * cellH,
+ left: x * cellW,
+ width: cellW * width - gutterX,
+ height: cellH * height - gutterY
+ };
+
+ realBlock.top = 1 * realBlock.top.toFixed(2);
+ realBlock.left = 1 * realBlock.left.toFixed(2);
+ realBlock.width = 1 * realBlock.width.toFixed(2);
+ realBlock.height = 1 * realBlock.height.toFixed(2);
+
+ //runtime.length += 1;
+ block.id && (runtime.blocks[block.id] = realBlock);
+
+ // for append feature;
+ return realBlock;
+ },
+ showBlock: function (item, setting) {
+ var runtime = setting.runtime;
+ var method = setting.animate && !this.transition ? 'animate' : 'css';
+ var block = runtime.blocks[item.id];
+ var $item = $(item);
+ var self = this;
+ var start = $item.attr("data-state") != "move";
+ var trans = start ? "width 0.5s, height 0.5s" : "top 0.5s, left 0.5s, width 0.5s, height 0.5s, opacity 0.5s";
+
+ item.delay && clearTimeout(item.delay);
+ //ignore dragging block;
+ if ($item.hasClass('fw-float')) return;
+
+ // kill the old transition;
+ self.setTransition(item, "");
+ item.style.position = "absolute";
+ setting.onBlockActive.call(item, block, setting);
+
+ function action() {
+ // start to arrange;
+ start && $item.attr("data-state", "start");
+ // add animation by using css3 transition;
+ if (setting.animate && self.transition) {
+ self.setTransition(item, trans);
+ }
+
+ // for hidden block;
+ if (!block) {
+ //var position = $item.position(); <= make speed so slow;
+ var height = parseInt(item.style.height) || 0;
+ var width = parseInt(item.style.width) || 0;
+ var left = parseInt(item.style.left) || 0;
+ var top = parseInt(item.style.top) || 0;
+ $item[method]({
+ left: left + width / 2,
+ top: top + height / 2,
+ width: 0,
+ height: 0,
+ opacity: 0
+ });
+ } else {
+ if (block.fixSize) {
+ block.height = 1 * $item.attr("data-height");
+ block.width = 1 * $item.attr("data-width");
+ }
+
+ $item["css"]({
+ opacity: 1,
+ width: block.width,
+ height: block.height
+ });
+
+ // for animating by javascript;
+ $item[method]({
+ top: block.top,
+ left: block.left
+ });
+
+ if ($item.attr('data-nested') != null) {
+ self.nestedGrid(item, setting);
+ }
+ }
+
+ runtime.length -= 1;
+
+ setting.onBlockFinish.call(item, block, setting);
+
+ runtime.length == 0 && setting.onComplete.call(item, block, setting);
+ }
+
+ block && block.resize && setting.onBlockResize.call(item, block, setting);
+
+ setting.delay > 0 ? (item.delay = setTimeout(action, setting.delay * $item.attr("data-delay"))) : action();
+ },
+ nestedGrid: function (item, setting) {
+ var innerWall, $item = $(item), runtime = setting.runtime;
+ var gutterX = $item.attr("data-gutterX") || setting.gutterX;
+ var gutterY = $item.attr("data-gutterY") || setting.gutterY;
+ var method = $item.attr("data-method") || "fitZone";
+ var nested = $item.attr('data-nested') || "> div";
+ var cellH = $item.attr("data-cellH") || setting.cellH;
+ var cellW = $item.attr("data-cellW") || setting.cellW;
+ var block = runtime.blocks[item.id];
+
+ if (block) {
+ innerWall = new freewall($item);
+ innerWall.reset({
+ cellH: cellH,
+ cellW: cellW,
+ gutterX: 1 * gutterX,
+ gutterY: 1 * gutterY,
+ selector: nested,
+ cacheSize: false
+ });
+
+ switch (method) {
+ case "fitHeight":
+ innerWall[method](block.height);
+ break;
+ case "fitWidth":
+ innerWall[method](block.width);
+ break;
+ case "fitZone":
+ innerWall[method](block.width, block.height);
+ break;
+ }
+ }
+ },
+ adjustBlock: function (block, setting) {
+ var runtime = setting.runtime;
+ var gutterX = runtime.gutterX;
+ var gutterY = runtime.gutterY;
+ var $item = $("#" + block.id);
+ var cellH = runtime.cellH;
+ var cellW = runtime.cellW;
+
+ if (setting.cellH == 'auto') {
+ $item.width(block.width * cellW - gutterX);
+ $item[0].style.height = "";
+ block.height = Math.round(($item.height() + gutterY) / cellH);
+ }
+ },
+ adjustUnit: function (width, height, setting) {
+ var gutterX = setting.gutterX;
+ var gutterY = setting.gutterY;
+ var runtime = setting.runtime;
+ var cellW = setting.cellW;
+ var cellH = setting.cellH;
+
+ $.isFunction(cellW) && (cellW = cellW(width));
+ cellW = 1 * cellW;
+ !$.isNumeric(cellW) && (cellW = 1);
+
+ $.isFunction(cellH) && (cellH = cellH(height));
+ cellH = 1 * cellH;
+ !$.isNumeric(cellH) && (cellH = 1);
+
+ if ($.isNumeric(width)) {
+ // adjust cell width via container;
+ cellW < 1 && (cellW = cellW * width);
+
+ // estimate total columns;
+ var limitCol = Math.max(1, Math.floor(width / cellW));
+
+ // adjust unit size for fit width;
+ if (!$.isNumeric(gutterX)) {
+ gutterX = (width - limitCol * cellW) / Math.max(1, (limitCol - 1));
+ gutterX = Math.max(0, gutterX);
+ }
+
+ limitCol = Math.floor((width + gutterX) / cellW);
+ runtime.cellW = (width + gutterX) / Math.max(limitCol, 1);
+ runtime.cellS = runtime.cellW / cellW;
+ runtime.gutterX = gutterX;
+ runtime.limitCol = limitCol;
+ }
+
+ if ($.isNumeric(height)) {
+ // adjust cell height via container;
+ cellH < 1 && (cellH = cellH * height);
+
+ // estimate total rows;
+ var limitRow = Math.max(1, Math.floor(height / cellH));
+
+ // adjust size unit for fit height;
+ if (!$.isNumeric(gutterY)) {
+ gutterY = (height - limitRow * cellH) / Math.max(1, (limitRow - 1));
+ gutterY = Math.max(0, gutterY);
+ }
+
+ limitRow = Math.floor((height + gutterY) / cellH);
+ runtime.cellH = (height + gutterY) / Math.max(limitRow, 1);
+ runtime.cellS = runtime.cellH / cellH;
+ runtime.gutterY = gutterY;
+ runtime.limitRow = limitRow;
+ }
+
+ if (!$.isNumeric(width)) {
+ // adjust cell width via cell height;
+ cellW < 1 && (cellW = runtime.cellH);
+ runtime.cellW = cellW != 1 ? cellW * runtime.cellS : 1;
+ runtime.gutterX = gutterX;
+ runtime.limitCol = 666666;
+ }
+
+ if (!$.isNumeric(height)) {
+ // adjust cell height via cell width;
+ cellH < 1 && (cellH = runtime.cellW);
+ runtime.cellH = cellH != 1 ? cellH * runtime.cellS : 1;
+ runtime.gutterY = gutterY;
+ runtime.limitRow = 666666;
+ }
+ },
+ resetGrid: function (runtime) {
+ runtime.blocks = {};
+ runtime.length = 0;
+ runtime.cellH = 0;
+ runtime.cellW = 0;
+ runtime.lastId = 1;
+ runtime.matrix = {};
+ runtime.totalCol = 0;
+ runtime.totalRow = 0;
+ },
+ setDraggable: function (item, option) {
+ var isTouch = false;
+ var config = {
+ startX: 0, //start clientX;
+ startY: 0,
+ top: 0,
+ left: 0,
+ handle: null,
+ onDrop: function () {
+ },
+ onDrag: function () {
+ },
+ onStart: function () {
+ }
+ };
+
+ $(item).each(function () {
+ var setting = $.extend({}, config, option);
+ var handle = setting.handle || this;
+ var ele = this;
+ var $E = $(ele);
+ var $H = $(handle);
+
+ var posStyle = $E.css("position");
+ posStyle != "absolute" && $E.css("position", "relative");
+
+
+ function mouseDown(evt) {
+ evt.stopPropagation();
+ evt = evt.originalEvent;
+
+ if (evt.touches) {
+ isTouch = true;
+ evt = evt.changedTouches[0];
+ }
+
+ if (evt.button != 2 && evt.which != 3) {
+ setting.onStart.call(ele, evt);
+
+ setting.startX = evt.clientX;
+ setting.startY = evt.clientY;
+ setting.top = parseInt($E.css("top")) || 0;
+ setting.left = parseInt($E.css("left")) || 0;
+
+ $D.bind("mouseup touchend", mouseUp);
+ $D.bind("mousemove touchmove", mouseMove);
+ }
+
+ return false;
+ };
+
+
+ function mouseMove(evt) {
+ evt = evt.originalEvent;
+ isTouch && (evt = evt.changedTouches[0]);
+
+ $E.css({
+ top: setting.top - (setting.startY - evt.clientY),
+ left: setting.left - (setting.startX - evt.clientX)
+ });
+
+ setting.onDrag.call(ele, evt);
+ };
+
+ function mouseUp(evt) {
+ evt = evt.originalEvent;
+ isTouch && (evt = evt.changedTouches[0]);
+
+ setting.onDrop.call(ele, evt);
+
+ $D.unbind("mouseup touchend", mouseUp);
+ $D.unbind("mousemove touchmove", mouseMove);
+ };
+
+ // ignore drag drop on text field;
+ $E.find("iframe, form, input, textarea, .ignore-drag")
+ .each(function () {
+ $(this).on("touchstart mousedown", function (evt) {
+ evt.stopPropagation();
+ });
+ });
+
+ $D.unbind("mouseup touchend", mouseUp);
+ $D.unbind("mousemove touchmove", mouseMove);
+ $H.unbind("mousedown touchstart").bind("mousedown touchstart", mouseDown);
+
+ });
+ },
+ setTransition: function (item, trans) {
+ var style = item.style;
+ var $item = $(item);
+
+ // remove animation;
+ if (!this.transition && $item.stop) {
+ $item.stop();
+ } else if (style.webkitTransition != null) {
+ style.webkitTransition = trans;
+ } else if (style.MozTransition != null) {
+ style.MozTransition = trans;
+ } else if (style.msTransition != null) {
+ style.msTransition = trans;
+ } else if (style.OTransition != null) {
+ style.OTransition = trans;
+ } else {
+ style.transition = trans;
+ }
+ },
+ getFreeArea: function (t, l, runtime) {
+ var maxY = Math.min(t + runtime.maxHoB, runtime.limitRow);
+ var maxX = Math.min(l + runtime.maxWoB, runtime.limitCol);
+ var minX = maxX;
+ var minY = maxY;
+ var matrix = runtime.matrix;
+
+ // find limit zone by horizon;
+ for (var y = t; y < minY; ++y) {
+ for (var x = l; x < maxX; ++x) {
+ if (matrix[y + '-' + x]) {
+ (l < x && x < minX) && (minX = x);
+ }
+ }
+ }
+
+ // find limit zone by vertical;
+ for (var y = t; y < maxY; ++y) {
+ for (var x = l; x < minX; ++x) {
+ if (matrix[y + '-' + x]) {
+ (t < y && y < minY) && (minY = y);
+ }
+ }
+ }
+
+ return {
+ top: t,
+ left: l,
+ width: minX - l,
+ height: minY - t
+ };
+
+ },
+ setWallSize: function (runtime, container) {
+ var totalRow = runtime.totalRow;
+ var totalCol = runtime.totalCol;
+ var gutterY = runtime.gutterY;
+ var gutterX = runtime.gutterX;
+ var cellH = runtime.cellH;
+ var cellW = runtime.cellW;
+ var totalWidth = Math.max(0, cellW * totalCol - gutterX);
+ var totalHeight = Math.max(0, cellH * totalRow - gutterY);
+
+ container.attr({
+ 'data-total-col': totalCol,
+ 'data-total-row': totalRow,
+ 'data-wall-width': Math.ceil(totalWidth),
+ 'data-wall-height': Math.ceil(totalHeight)
+ });
+
+ if (runtime.limitCol < runtime.limitRow) {
+ // do not set height with nesting grid;
+ !container.attr("data-height") && container.height(Math.ceil(totalHeight));
+ }
+ }
+ };
+
+
+ var engine = {
+ // Giot just a person name;
+ giot: function (items, setting) {
+ var runtime = setting.runtime,
+ row = runtime.limitRow,
+ col = runtime.limitCol,
+ x = 0,
+ y = 0,
+ maxX = runtime.totalCol,
+ maxY = runtime.totalRow,
+ wall = {},
+ holes = runtime.holes,
+ block = null,
+ matrix = runtime.matrix,
+ bigLoop = Math.max(col, row),
+ freeArea = null,
+ misBlock = null,
+ fitWidth = col < row ? 1 : 0,
+ lastBlock = null,
+ smallLoop = Math.min(col, row);
+
+ // fill area with top, left, width, height;
+ function fillMatrix(id, t, l, w, h) {
+ for (var y = t; y < t + h;) {
+ for (var x = l; x < l + w;) {
+ matrix[y + '-' + x] = id;
+ ++x > maxX && (maxX = x);
+ }
+ ++y > maxY && (maxY = y);
+ }
+ }
+
+ // set holes on the wall;
+ for (var i in holes) {
+ if (holes.hasOwnProperty(i)) {
+ fillMatrix(holes[i]["id"] || true, holes[i]['top'], holes[i]['left'], holes[i]['width'], holes[i]['height']);
+ }
+ }
+
+
+ for (var b = 0; b < bigLoop; ++b) {
+ if (!items.length) break;
+ fitWidth ? (y = b) : (x = b);
+ lastBlock = null;
+
+ for (var s = 0; s < smallLoop; ++s) {
+ if (!items.length) break;
+ block = null;
+ fitWidth ? (x = s) : (y = s);
+ if (runtime.matrix[y + '-' + x]) continue;
+ freeArea = layoutManager.getFreeArea(y, x, runtime);
+
+ // trying resize last block to fit free area;
+ if (setting.fixSize == null) {
+ // resize near block to fill gap;
+ if (lastBlock && !fitWidth && runtime.minHoB > freeArea.height) {
+ lastBlock.height += freeArea.height;
+ lastBlock.resize = true;
+ fillMatrix(lastBlock.id, lastBlock.y, lastBlock.x, lastBlock.width, lastBlock.height);
+ layoutManager.setBlock(lastBlock, setting);
+ continue;
+ } else if (lastBlock && fitWidth && runtime.minWoB > freeArea.width) {
+ lastBlock.width += freeArea.width;
+ lastBlock.resize = true;
+ fillMatrix(lastBlock.id, lastBlock.y, lastBlock.x, lastBlock.width, lastBlock.height);
+ layoutManager.setBlock(lastBlock, setting);
+ continue;
+ }
+ }
+
+ // get the next block to keep order;
+ if (setting.keepOrder) {
+ block = items.shift();
+ block.resize = true;
+ } else {
+ // find a suitable block to fit gap;
+ for (var i = 0; i < items.length; ++i) {
+ if (items[i].height > freeArea.height) continue;
+ if (items[i].width > freeArea.width) continue;
+ block = items.splice(i, 1)[0];
+ break;
+ }
+
+ // trying resize the other block to fit gap;
+ if (block == null && setting.fixSize == null) {
+ // get other block fill to gap;
+ for (var i = 0; i < items.length; ++i) {
+ if (items[i]['fixSize'] != null) continue;
+ block = items.splice(i, 1)[0];
+ block.resize = true;
+ break;
+ }
+
+ }
+ }
+
+
+ if (block != null) {
+ // resize block with free area;
+ if (block.resize) {
+ if (fitWidth) {
+ block.width = freeArea.width;
+ if (setting.cellH == 'auto') {
+ layoutManager.adjustBlock(block, setting);
+ }
+ // for fitZone;
+ block.height = Math.min(block.height, freeArea.height);
+ } else {
+ block.height = freeArea.height;
+ // for fitZone;
+ block.width = Math.min(block.width, freeArea.width);
+ }
+ }
+
+ wall[block.id] = {
+ id: block.id,
+ x: x,
+ y: y,
+ width: block.width,
+ height: block.height,
+ resize: block.resize,
+ fixSize: block.fixSize
+ };
+
+ // keep success block for next round;
+ lastBlock = wall[block.id];
+
+ fillMatrix(lastBlock.id, lastBlock.y, lastBlock.x, lastBlock.width, lastBlock.height);
+ layoutManager.setBlock(lastBlock, setting);
+ } else {
+ // get expect area;
+ var misBlock = {
+ x: x,
+ y: y,
+ fixSize: 0
+ };
+ if (fitWidth) {
+ misBlock.width = freeArea.width;
+ misBlock.height = 0;
+ var lastX = x - 1;
+ var lastY = y;
+
+ while (matrix[lastY + '-' + lastX]) {
+ matrix[lastY + '-' + x] = true;
+ misBlock.height += 1;
+ lastY += 1;
+ }
+ } else {
+ misBlock.height = freeArea.height;
+ misBlock.width = 0;
+ var lastY = y - 1;
+ var lastX = x;
+
+ while (matrix[lastY + '-' + lastX]) {
+ matrix[y + '-' + lastX] = true;
+ misBlock.width += 1;
+ lastX += 1;
+ }
+ }
+ setting.onGapFound(layoutManager.setBlock(misBlock, setting), setting);
+ }
+ }
+
+ }
+
+ runtime.matrix = matrix;
+ runtime.totalRow = maxY;
+ runtime.totalCol = maxX;
+ }
+ };
+
+
+ window.freewall = function (selector) {
+
+ var container = $(selector);
+ if (container.css('position') == 'static') {
+ container.css('position', 'relative');
+ }
+ var MAX = Number.MAX_VALUE;
+ var klass = this;
+ // increase the instance index;
+ layoutManager.totalGrid += 1;
+
+ var setting = $.extend({}, layoutManager.defaultConfig);
+ var runtime = {
+ blocks: {}, // store all items;
+ events: {}, // store custome events;
+ matrix: {},
+ holes: {}, // forbidden zone;
+
+ cellW: 0,
+ cellH: 0, // unit adjust;
+ cellS: 1, // unit scale;
+
+ filter: '', // filter selector;
+
+ lastId: 0,
+ length: 0,
+
+ maxWoB: 0, // max width of block;
+ maxHoB: 0,
+ minWoB: MAX,
+ minHoB: MAX, // min height of block;
+
+ running: 0, // flag to check layout arranging;
+
+ gutterX: 15,
+ gutterY: 15,
+
+ totalCol: 0,
+ totalRow: 0,
+
+ limitCol: 666666, // maximum column;
+ limitRow: 666666,
+
+ currentMethod: null,
+ currentArguments: []
+ };
+ setting.runtime = runtime;
+ runtime.totalGrid = layoutManager.totalGrid;
+
+ // check browser support transition;
+ var bodyStyle = document.body.style;
+ if (!layoutManager.transition) {
+ (bodyStyle.webkitTransition != null ||
+ bodyStyle.MozTransition != null ||
+ bodyStyle.msTransition != null ||
+ bodyStyle.OTransition != null ||
+ bodyStyle.transition != null) &&
+ (layoutManager.transition = true);
+ }
+
+
+ function setDraggable(item) {
+
+ var gutterX = runtime.gutterX;
+ var gutterY = runtime.gutterY;
+ var cellH = runtime.cellH;
+ var cellW = runtime.cellW;
+ var $item = $(item);
+ var handle = $item.find($item.attr("data-handle"));
+ layoutManager.setDraggable(item, {
+ handle: handle[0],
+ onStart: function (event) {
+ if (setting.animate && layoutManager.transition) {
+ layoutManager.setTransition(this, "");
+ }
+ $item.css('z-index', 9999).addClass('fw-float');
+
+ setting.onBlockDrag.call(item, event);
+ },
+ onDrag: function (event, tracker) {
+ var position = $item.position();
+ var top = Math.round(position.top / cellH);
+ var left = Math.round(position.left / cellW);
+ var width = Math.round($item.width() / cellW);
+ var height = Math.round($item.height() / cellH);
+ top = Math.min(Math.max(0, top), runtime.limitRow - height);
+ left = Math.min(Math.max(0, left), runtime.limitCol - width);
+ klass.setHoles({top: top, left: left, width: width, height: height});
+ klass.refresh();
+
+ setting.onBlockMove.call(item, event);
+ },
+ onDrop: function (event) {
+ var position = $item.position();
+ var top = Math.round(position.top / cellH);
+ var left = Math.round(position.left / cellW);
+ var width = Math.round($item.width() / cellW);
+ var height = Math.round($item.height() / cellH);
+ top = Math.min(Math.max(0, top), runtime.limitRow - height);
+ left = Math.min(Math.max(0, left), runtime.limitCol - width);
+
+ $item.removeClass('fw-float');
+ $item.css({
+ zIndex: "auto",
+ top: top * cellH,
+ left: left * cellW
+ });
+
+ //check old drag element;
+ var x, y, key, oldDropId;
+ for (y = 0; y < height; ++y) {
+ for (x = 0; x < width; ++x) {
+ key = (y + top) + "-" + (x + left);
+ oldDropId = runtime.matrix[key];
+ if (oldDropId && oldDropId != true) {
+ $("#" + oldDropId).removeAttr("data-position");
+ }
+ }
+ }
+
+ runtime.holes = {};
+
+ $item.attr({
+ "data-width": $item.width(),
+ "data-height": $item.height(),
+ "data-position": top + "-" + left
+ });
+
+ klass.refresh();
+
+ setting.onBlockDrop.call(item, event);
+ }
+ });
+ }
+
+
+ $.extend(klass, {
+
+ addCustomEvent: function (name, func) {
+ var events = runtime.events;
+ name = name.toLowerCase();
+ !events[name] && (events[name] = []);
+ func.eid = events[name].length;
+ events[name].push(func);
+ return this;
+ },
+
+ appendBlock: function (items) {
+ var allBlock = $(items).appendTo(container);
+ var block = null;
+ var activeBlock = [];
+
+ if (runtime.currentMethod) {
+ allBlock.each(function (index, item) {
+ item.index = ++index;
+ block = layoutManager.loadBlock(item, setting);
+ block && activeBlock.push(block);
+ });
+
+ engine[setting.engine](activeBlock, setting);
+
+ layoutManager.setWallSize(runtime, container);
+
+ runtime.length = allBlock.length;
+
+ allBlock.each(function (index, item) {
+ layoutManager.showBlock(item, setting);
+ if (setting.draggable || item.getAttribute('data-draggable')) {
+ setDraggable(item);
+ }
+ });
+ }
+ },
+ /*
+ add one or more blank area (hole) on layout;
+ example:
+
+ wall.appendHoles({
+ top: 10,
+ left: 36,
+ width: 2,
+ height: 6
+ });
+
+ wall.appendHoles([
+ {
+ top: 16,
+ left: 16,
+ width: 8,
+ height: 2
+ },
+ {
+ top: 10,
+ left: 36,
+ width: 2,
+ height: 6
+ }
+ ]);
+
+ */
+ appendHoles: function (holes) {
+ var newHoles = [].concat(holes), h = {}, i;
+ for (i = 0; i < newHoles.length; ++i) {
+ h = newHoles[i];
+ runtime.holes[h.top + "-" + h.left + "-" + h.width + "-" + h.height] = h;
+ }
+ return this;
+ },
+
+ container: container,
+
+ destroy: function () {
+ var allBlock = container.find(setting.selector).removeAttr('id'),
+ block = null,
+ activeBlock = [];
+
+ allBlock.each(function (index, item) {
+ $item = $(item);
+ var width = 1 * $item.attr('data-width') || "";
+ var height = 1 * $item.attr('data-height') || "";
+ $item.width(width).height(height).css({
+ position: 'static'
+ });
+ });
+ },
+
+ fillHoles: function (holes) {
+ if (arguments.length == 0) {
+ runtime.holes = {};
+ } else {
+ var newHoles = [].concat(holes), h = {}, i;
+ for (i = 0; i < newHoles.length; ++i) {
+ h = newHoles[i];
+ delete runtime.holes[h.top + "-" + h.left + "-" + h.width + "-" + h.height];
+ }
+ }
+ return this;
+ },
+
+ filter: function (filter) {
+ runtime.filter = filter;
+ runtime.currentMethod && this.refresh();
+ return this;
+ },
+
+ fireEvent: function (name, object, setting) {
+ var events = runtime.events;
+ name = name.toLowerCase();
+ if (events[name] && events[name].length) {
+ for (var i = 0; i < events[name].length; ++i) {
+ events[name][i].call(this, object, setting);
+ }
+ }
+ return this;
+ },
+
+ fitHeight: function (height) {
+ var allBlock = container.find(setting.selector).removeAttr('id'),
+ block = null,
+ activeBlock = [];
+
+ height = height ? height : container.height() || $W.height();
+
+ runtime.currentMethod = arguments.callee;
+ runtime.currentArguments = arguments;
+
+ layoutManager.resetGrid(runtime);
+ layoutManager.adjustUnit('auto', height, setting);
+
+ if (runtime.filter) {
+ allBlock.data('active', 0);
+ allBlock.filter(runtime.filter).data('active', 1);
+ } else {
+ allBlock.data('active', 1);
+ }
+
+ allBlock.each(function (index, item) {
+ var $item = $(item);
+ item.index = ++index;
+ block = layoutManager.loadBlock(item, setting);
+ block && $item.data("active") && activeBlock.push(block);
+ });
+
+ klass.fireEvent('onGridReady', container, setting);
+
+ engine[setting.engine](activeBlock, setting);
+
+ layoutManager.setWallSize(runtime, container);
+
+ klass.fireEvent('onGridArrange', container, setting);
+
+ runtime.length = allBlock.length;
+
+ allBlock.each(function (index, item) {
+ layoutManager.showBlock(item, setting);
+ if (setting.draggable || item.getAttribute('data-draggable')) {
+ setDraggable(item);
+ }
+ });
+ },
+
+ fitWidth: function (width) {
+ var allBlock = container.find(setting.selector).removeAttr('id'),
+ block = null,
+ activeBlock = [];
+
+ width = width ? width : container.width() || $W.width();
+
+ runtime.currentMethod = arguments.callee;
+ runtime.currentArguments = arguments;
+
+ layoutManager.resetGrid(runtime);
+ layoutManager.adjustUnit(width, 'auto', setting);
+
+ if (runtime.filter) {
+ allBlock.data('active', 0);
+ allBlock.filter(runtime.filter).data('active', 1);
+ } else {
+ allBlock.data('active', 1);
+ }
+
+ allBlock.each(function (index, item) {
+ var $item = $(item);
+ item.index = ++index;
+ block = layoutManager.loadBlock(item, setting);
+ block && $item.data("active") && activeBlock.push(block);
+ });
+
+ klass.fireEvent('onGridReady', container, setting);
+
+ engine[setting.engine](activeBlock, setting);
+
+ layoutManager.setWallSize(runtime, container);
+
+ klass.fireEvent('onGridArrange', container, setting);
+
+ runtime.length = allBlock.length;
+
+ allBlock.each(function (index, item) {
+ layoutManager.showBlock(item, setting);
+ if (setting.draggable || item.getAttribute('data-draggable')) {
+ setDraggable(item);
+ }
+ });
+ },
+
+ fitZone: function (width, height) {
+ var allBlock = container.find(setting.selector).removeAttr('id'),
+ block = null,
+ activeBlock = [];
+
+ height = height ? height : container.height() || $W.height();
+ width = width ? width : container.width() || $W.width();
+
+ runtime.currentMethod = arguments.callee;
+ runtime.currentArguments = arguments;
+
+ layoutManager.resetGrid(runtime);
+ layoutManager.adjustUnit(width, height, setting);
+
+ if (runtime.filter) {
+ allBlock.data('active', 0);
+ allBlock.filter(runtime.filter).data('active', 1);
+ } else {
+ allBlock.data('active', 1);
+ }
+
+ allBlock.each(function (index, item) {
+ var $item = $(item);
+ item.index = ++index;
+ block = layoutManager.loadBlock(item, setting);
+ block && $item.data("active") && activeBlock.push(block);
+ });
+
+ klass.fireEvent('onGridReady', container, setting);
+
+ engine[setting.engine](activeBlock, setting);
+
+ layoutManager.setWallSize(runtime, container);
+
+ klass.fireEvent('onGridArrange', container, setting);
+
+ runtime.length = allBlock.length;
+
+ allBlock.each(function (index, item) {
+ layoutManager.showBlock(item, setting);
+ if (setting.draggable || item.getAttribute('data-draggable')) {
+ setDraggable(item);
+ }
+ });
+ },
+
+ /*
+ set block with special position, the top and left are multiple of unit width/height;
+ example:
+
+ wall.fixPos({
+ top: 0,
+ left: 0,
+ block: $('.free')
+ });
+ */
+ fixPos: function (option) {
+ $(option.block).attr({'data-position': option.top + "-" + option.left});
+ return this;
+ },
+
+ /*
+ set block with special size, the width and height are multiple of unit width/height;
+ example:
+
+ wall.fixSize({
+ height: 5,
+ width: 2,
+ block: $('.free')
+ });
+ */
+ fixSize: function (option) {
+ option.height != null && $(option.block).attr({'data-height': option.height});
+ option.width != null && $(option.block).attr({'data-width': option.width});
+ return this;
+ },
+
+ prepend: function (items) {
+ container.prepend(items);
+ runtime.currentMethod && this.refresh();
+ return this;
+ },
+
+ refresh: function () {
+ var params = arguments.length ? arguments : runtime.currentArguments;
+ runtime.currentMethod == null && (runtime.currentMethod = this.fitWidth);
+ runtime.currentMethod.apply(this, Array.prototype.slice.call(params, 0));
+ return this;
+ },
+
+ /*
+ custom layout setting;
+ example:
+
+ wall.reset({
+ selector: '.brick',
+ animate: true,
+ cellW: 160,
+ cellH: 160,
+ delay: 50,
+ onResize: function() {
+ wall.fitWidth();
+ }
+ });
+ */
+ reset: function (option) {
+ $.extend(setting, option);
+ return this;
+ },
+
+ /*
+ create one or more blank area (hole) on layout;
+ example:
+
+ wall.setHoles({
+ top: 2,
+ left: 2,
+ width: 2,
+ height: 2
+ });
+ */
+
+ setHoles: function (holes) {
+ var newHoles = [].concat(holes), h = {}, i;
+ runtime.holes = {};
+ for (i = 0; i < newHoles.length; ++i) {
+ h = newHoles[i];
+ runtime.holes[h.top + "-" + h.left + "-" + h.width + "-" + h.height] = h;
+ }
+ return this;
+ },
+
+ unFilter: function () {
+ delete runtime.filter;
+ this.refresh();
+ return this;
+ }
+ });
+
+ container.attr('data-min-width', Math.floor($W.width() / 80) * 80);
+ // execute plugins;
+ for (var i in layoutManager.plugin) {
+ if (layoutManager.plugin.hasOwnProperty(i)) {
+ layoutManager.plugin[i].call(klass, setting, container);
+ }
+ }
+
+ // setup resize event;
+ $W.resize(function () {
+ if (runtime.running) return;
+ runtime.running = 1;
+ setTimeout(function () {
+ runtime.running = 0;
+ setting.onResize.call(klass, container);
+ }, 122);
+ container.attr('data-min-width', Math.floor($W.width() / 80) * 80);
+ });
+ };
+
+ /*
+ add default setting;
+ example:
+
+ freewall.addConfig({
+ offsetLeft: 0
+ });
+ */
+ freewall.addConfig = function (newConfig) {
+ // add default setting;
+ $.extend(layoutManager.defaultConfig, newConfig);
+ };
+
+
+ /*
+ support create new arrange algorithm;
+ example:
+
+ freewall.createEngine({
+ slice: function(items, setting) {
+ // slice engine;
+ }
+ });
+ */
+ freewall.createEngine = function (engineData) {
+ // create new engine;
+ $.extend(engine, engineData);
+ };
+
+ /*
+ support create new plugin;
+ example:
+
+ freewall.createPlugin({
+ centering: function(setting, container) {
+ console.log(this);
+ console.log(setting);
+ }
+ })l
+ */
+ freewall.createPlugin = function (pluginData) {
+ // register new plugin;
+ $.extend(layoutManager.plugin, pluginData);
+ };
+
+ /*
+ support access helper function;
+ example:
+
+ freewall.getMethod('setBlock')(block, setting);
+ */
+ freewall.getMethod = function (method) {
+ // get helper method;
+ return layoutManager[method];
+ };
+
+})(window.Zepto || window.jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/css/serverPageTable.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/css/serverPageTable.css
new file mode 100644
index 00000000..439aa157
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/css/serverPageTable.css
@@ -0,0 +1,29 @@
+div.dataTables_length, div.dataTables_info {
+ display: inline;
+}
+div.dataTables_paginate{
+ display: inline;
+ float: right;
+}
+div.dataTables_length label{
+ font-weight:100;
+}
+table.dataTable tbody th, table.dataTable tbody td {
+padding: 8px 10px;
+}
+.table-scrollable > .table-bordered > thead > tr:last-child > th, .table-scrollable > .table-bordered > tbody > tr:last-child > th, .table-scrollable > .table-bordered > tfoot > tr:last-child > th, .table-scrollable > .table-bordered > thead > tr:last-child > td, .table-scrollable > .table-bordered > tbody > tr:last-child > td, .table-scrollable > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+}
+input.pagination-panel-input{
+ width:50px;
+}
+input.pagination-panel-input{
+ width:50px;
+}
+select[size]{
+height:28px;
+border-radius:3px;
+}
+.dataTables_length{
+margin-top:15px;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_close.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_close.png
new file mode 100644
index 00000000..e6281bae
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_close.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_open.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_open.png
new file mode 100644
index 00000000..5bf4389c
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/images/details_open.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/readme.txt b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/readme.txt
new file mode 100644
index 00000000..55a40ae5
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/readme.txt
@@ -0,0 +1,70 @@
+1ܣ
+ jquery datatable÷˷ҳķʽ淭ҳʱ˽вѯ
+
+ кܶزֲҪУͨ+չһм¼ʾ
+
+2Ҫõļ
+
+ <link href="/ngict/iui/component/thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
+
+ <script src="/ngict/iui/component/thirdparty/data-tables/jquery.dataTables.js"></script>
+
+3ӿ
+
+ serverPageTable.initDataTable = function( setting ,cond , divId) {}
+
+ ӿڣԶѯݣõҳϡ
+
+4˵Ӧþ
+
+ var language = {
+ "sLengthMenu": $.i18n.prop("ngict-log-iui-table-sLengthMenu"),
+ "sZeroRecords": $.i18n.prop("ngict-log-iui-table-sZeroRecords"),
+ "sInfo": "<span class='seperator'> </span>" + $.i18n.prop("ngict-log-iui-table-sInfo"),
+ "sInfoEmpty": $.i18n.prop("ngict-log-iui-table-sInfoEmpty"),
+ "sGroupActions": $.i18n.prop("ngict-log-iui-table-sGroupActions"),
+ "sAjaxRequestGeneralError":$.i18n.prop("ngict-log-iui-table-sAjaxRequestGeneralError"),
+ "sEmptyTable": $.i18n.prop("ngict-log-iui-table-sEmptyTable"),
+ "oPaginate": {
+ "sPrevious": $.i18n.prop("ngict-log-iui-table-sPrevious"),
+ "sNext": $.i18n.prop("ngict-log-iui-table-sNext"),
+ "sPage": $.i18n.prop("ngict-log-iui-table-sPage"),
+ "sPageOf": $.i18n.prop("ngict-log-iui-table-sPageOf")
+ }
+ },
+
+ var operLog = [
+ {"mData": null, name: "", "sClass": 'details-control', "sWidth": '5%'},
+ {"mData": "id", name: "ID", "bVisible": false},
+ {"mData": "description", name: $.i18n.prop('ngict-log-iui-oper-field-description')},
+ {"mData": "userName", name: $.i18n.prop('ngict-log-iui-oper-field-userName')},
+ {"mData": "logRank", name: $.i18n.prop('ngict-log-iui-oper-field-logRank'), "sWidth": '12%', "fnRender": logUtil.cmdRankRender},
+ {"mData": "operateSet", name: $.i18n.prop('ngict-log-iui-oper-field-operateSet'), "sWidth": '12%'},
+ {"mData": "logDate", name: $.i18n.prop('ngict-log-iui-oper-field-logDate'), "fnRender": logUtil.timeRender},
+ {"mData": "logEndDate", name: $.i18n.prop('ngict-log-iui-oper-field-logEndDate'), "fnRender": logUtil.timeRender},
+ {"mData": "isSucceed", name: $.i18n.prop('ngict-log-iui-oper-field-isSucceed'), "sWidth": '9%', "fnRender": logUtil.cmdResultRender},
+ {"mData": "failReason", name: $.i18n.prop('ngict-log-iui-oper-field-failReason'), "bVisible": false},
+ {"mData": "host", name: $.i18n.prop('ngict-log-iui-oper-field-host')},
+ {"mData": "resourceDn", name: $.i18n.prop('ngict-log-iui-oper-field-resourceDn'), "bVisible": false},
+ {"mData": "detail", name: $.i18n.prop('ngict-log-iui-oper-field-detail'), "bVisible": false}
+ ]
+ var queryLogInfoUrl = '/ngict/rest/log/info/cmdlog',
+
+ var getCond = function () {
+ var cond = {};
+ //ͨõʱ
+ cond.startTime = new date();
+ return cond;
+ },
+
+
+ initTable = function () {
+ var setting = {};
+ setting.language = language ;
+ setting.columns = operLog;
+ setting.restUrl = queryLogInfoUrl ;
+ setting.tableId = "ict_log_table";
+ serverPageTable.initDataTable(setting, getCond(), 'ict_log_table_div');
+ }
+
+ \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable.js
new file mode 100644
index 00000000..31627768
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable.js
@@ -0,0 +1,217 @@
+var serverPageTable = {};
+/* Bootstrap style full number pagination control */
+$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
+{
+ return {
+ "iStart": oSettings._iDisplayStart,
+ "iEnd": oSettings.fnDisplayEnd(),
+ "iLength": oSettings._iDisplayLength,
+ "iTotal": oSettings.fnRecordsTotal(),
+ "iFilteredTotal": oSettings.fnRecordsDisplay(),
+ "iPage": Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
+ "iTotalPages": Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
+ };
+};
+
+$.extend( $.fn.dataTableExt.oPagination, {
+ "bootstrap_extended": {
+ "fnInit": function( oSettings, nPaging, fnDraw ) {
+ var oLang = oSettings.oLanguage.oPaginate;
+ var oPaging = oSettings.oInstance.fnPagingInfo();
+
+ var fnClickHandler = function ( e ) {
+ e.preventDefault();
+ if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
+ fnDraw( oSettings );
+ }
+ };
+
+ $(nPaging).append(
+ '<div class="pagination-panel"> ' + oLang.sPage + ' ' +
+ '<a href="#" class="btn btn-sm default prev disabled" title="' + oLang.sPrevious + '"><i class="fa fa-angle-left"></i></a>' +
+ '<input type="text" class="pagination-panel-input input-mini input-inline input-sm" maxlenght="5" style="text-align:center; margin: 0 4px; border: 1px solid rgb(169, 169, 169);height: 28px;">' +
+ '<a href="#" class="btn btn-sm default next disabled" title="' + oLang.sNext + '"><i class="fa fa-angle-right"></i></a> ' +
+ oLang.sPageOf + ' <span class="pagination-panel-total"></span>' +
+ '</div>'
+ );
+
+ var els = $('a', nPaging);
+
+ $(els[0]).bind('click.DT', { action: "previous" }, fnClickHandler );
+ $(els[1]).bind('click.DT', { action: "next" }, fnClickHandler);
+
+ $('.pagination-panel-input', nPaging).bind('change.DT', function(e) {
+ var oPaging = oSettings.oInstance.fnPagingInfo();
+ e.preventDefault();
+ var page = parseInt($(this).val());
+ if (page > 0 && page < oPaging.iTotalPages) {
+ if ( oSettings.oApi._fnPageChange(oSettings, page-1) ) {
+ fnDraw( oSettings );
+ }
+ } else {
+ $(this).val(oPaging.iPage + 1);
+ }
+ });
+
+ $('.pagination-panel-input', nPaging).bind('keypress.DT', function(e) {
+ var oPaging = oSettings.oInstance.fnPagingInfo();
+ if (e.which == 13) {
+ var page = parseInt($(this).val());
+ if (page > 0 && page < oSettings.oInstance.fnPagingInfo().iTotalPages) {
+ if ( oSettings.oApi._fnPageChange(oSettings, page-1) ) {
+ fnDraw( oSettings );
+ }
+ } else {
+ $(this).val(oPaging.iPage + 1);
+ }
+ e.preventDefault();
+ }
+ });
+ },
+
+ "fnUpdate": function ( oSettings, fnDraw ) {
+ var iListLength = 5;
+ var oPaging = oSettings.oInstance.fnPagingInfo();
+ var an = oSettings.aanFeatures.p;
+ var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
+
+ if ( oPaging.iTotalPages < iListLength) {
+ iStart = 1;
+ iEnd = oPaging.iTotalPages;
+ }
+ else if ( oPaging.iPage <= iHalf ) {
+ iStart = 1;
+ iEnd = iListLength;
+ } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
+ iStart = oPaging.iTotalPages - iListLength + 1;
+ iEnd = oPaging.iTotalPages;
+ } else {
+ iStart = oPaging.iPage - iHalf + 1;
+ iEnd = iStart + iListLength - 1;
+ }
+
+
+ for ( i=0, iLen=an.length ; i<iLen ; i++ ) {
+ var wrapper = $(an[i]).parents(".dataTables_wrapper");
+
+ if (oPaging.iTotalPages <= 0) {
+ $('.pagination-panel, .dataTables_length', wrapper).hide();
+ } else {
+ $('.pagination-panel, .dataTables_length', wrapper).show();
+ }
+
+ $('.pagination-panel-total', an[i]).html(oPaging.iTotalPages);
+ $('.pagination-panel-input', an[i]).val(oPaging.iPage + 1);
+
+ // Remove the middle elements
+ $('li:gt(1)', an[i]).filter(':not(.next)').remove();
+
+ // Add the new list items and their event handlers
+ for ( j=iStart ; j<=iEnd ; j++ ) {
+ sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
+ $('<li '+sClass+'><a href="#">'+j+'</a></li>')
+ .insertBefore( $('li.next:first', an[i])[0] )
+ .bind('click', function (e) {
+ e.preventDefault();
+ oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
+ fnDraw( oSettings );
+ } );
+ }
+
+ // Add / remove disabled classes from the static elements
+ if ( oPaging.iPage === 0 ) {
+ $('a.prev', an[i]).addClass('disabled');
+ } else {
+ $('a.prev', an[i]).removeClass('disabled');
+ }
+
+ if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
+ $('a.next', an[i]).addClass('disabled');
+ } else {
+ $('a.next', an[i]).removeClass('disabled');
+ }
+ }
+ }
+ }
+} );
+serverPageTable.initDataTable = function( setting , divId ,pageInfos) {
+ serverPageTable.pageInfo = pageInfos;
+ //转换colomn
+
+ var column = setting.columns;
+ //先把原来的表格清空
+ $('#'+ divId).children().remove();
+ var tableId = setting.tableId;
+ var tableEleStr = '<table class="table table-striped table-bordered table-hover" id= '+ tableId + '>'
+ + '<thead>'
+ +'<tr role="row" class="heading" >'
+ + '</tr>'
+ + '</thead>'
+ +'<tbody>'
+ +'</tbody>'
+ +'</table>';
+ $('#'+ divId).append(tableEleStr);
+ //$('#'+ tableId).append(' <thead><tr role="row" class="heading" ></tr></thead><tbody></tbody>');
+ var trEle = $('#'+ tableId + ' > thead >tr');
+ //var dataTableColumn = [];
+ for ( var one in column){
+ var th = '<th>' + column[one].name + '</th>';
+ trEle.append(th);
+ }
+ serverPageTable.pageInfo = pageInfos;
+ if(!setting.pageHtml){
+ pageHtml="<'row'<'col-md-12 col-sm-12'lip>r><'table-scrollable't>>";
+ }else{
+ pageHtml=setting.pageHtml;
+ }
+ var table = $("#" + tableId).dataTable({
+ //"sDom" : "tr<'row'<'col-md-6 col-sm-12'><'col-md-6 col-sm-12'pli>>", // datatable layout
+ "sDom" : pageHtml,
+ "oLanguage": setting.language,//汉化
+ "bJQueryUI": true,
+ "bPaginate": true,// 分页按钮
+ "bFilter": false,// 搜索栏
+ "bAutoWidth":true,//自动设置列宽
+ "bLengthChange": true,// 每行显示记录数
+ "iDisplayLength": 10,// 每页显示行数
+ "bSort": false,// 排序
+ "bInfo": true,// Showing 1 to 10 of 23 entries 总记录数没也显示多少等信息
+ "bWidth": true,
+ "bScrollCollapse": true,
+ "sPaginationType": "bootstrap_extended", // 分页,一共两种样式 另一种为two_button // 是datatables默认
+ "bProcessing": true,
+ "bServerSide": true,
+ "bDestroy": true,
+ "bSortCellsTop": true,
+ "sAjaxSource": setting.restUrl,
+ "aoColumns": setting.columns,
+ "fnServerData": function (sSource, aoData, fnCallback, oSettings) {
+ fnServerData(sSource, aoData, fnCallback, oSettings);
+ }
+ });
+ $('#'+ tableId + '>tbody').on('click', 'td.details-control', function () {
+ var tr = $(this).closest('tr');
+ //var nTr = $(this).parents('tr')[0];
+ //var row = table.row( tr );
+ if ( table.fnIsOpen(tr[0]) ){
+ table.fnClose( tr[0] );
+ //if ( row.child.isShown() ) {
+ // This row is already open - close it
+ //row.child.hide();
+ tr.removeClass('shown');
+ }
+ else {
+ // Open this row
+ table.fnOpen( tr[0], format_Detail(table, tr[0],column) );
+ //row.child( format_Detail(row.data()) ).show();
+ tr.addClass('shown');
+ }
+ } );
+ return table;
+
+
+};
+
+
+
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable_demo.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable_demo.html
new file mode 100644
index 00000000..a7b4fcb7
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverPageTable_demo.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+<head lang="en">
+ <meta charset="UTF-8">
+ <title></title>
+ <link href="/ngict/iui/component/thirdparty/font-awesome/css/font-awesome.min.css" rel="stylesheet"/>
+ <link href="../../thirdparty/bootstrap/css/bootstrap.min.css" rel="stylesheet"/>
+ <link href="serverpagetable.css" rel="stylesheet"/>
+ <script src="../../thirdparty/jquery/jquery-1.10.2.min.js"></script>
+ <script src="../../thirdparty/data-tables/jquery.dataTables.js"></script>
+ <script src="serverPageTable.js"></script>
+</head>
+<body>
+<div id="ict_serverPage_div" style="width:95%;margin-left:25px;"></div>
+<script>
+ var setting = {};
+
+ setting.language = {
+ "sLengthMenu": "每页 _MENU_ 条结果",
+ "sZeroRecords": "没有匹配结果",
+ "sInfo": "<span class='seperator'> </span>" + "总共找到 _TOTAL_ 条结果",
+ "sInfoEmpty": "共 0 项",
+ //"sGroupActions": $.i18n.prop("ngict-log-iui-table-sGroupActions"),
+ //"sAjaxRequestGeneralError": $.i18n.prop("ngict-log-iui-table-sAjaxRequestGeneralError"),
+ //"sEmptyTable": $.i18n.prop("ngict-log-iui-table-sEmptyTable"),
+ "oPaginate": {
+ "sPrevious": "前页",
+ "sNext": "后页",
+ "sPage": "第",
+ "sPageOf": "页,总页数"
+ }
+ };
+ setting.columns = [
+ {"mData": null, name: "", "sClass": 'details-control', "sWidth": '8%'},
+ {"mData": "id", name: "ID", "bVisible": false},
+ {"mData": "operate", name: "日志名称"},
+ {"mData": "userName", name: "用户名称"},
+ {"mData": "host", name: "主机地址"},
+ {"mData": "logDate", name: "时间"},
+ {"mData": "detail", name: "详细信息", "bVisible": false}
+ ];
+ setting.restUrl = '/ngict/rest/log/info/secLog';
+ setting.tableId = "ict_log_table_seclog";
+ var cond = {};
+ cond.startTime = 1437053600000;
+ cond.endTime = 1448358399999;
+ var pageInfo = null;
+ serverPageTable.initDataTable(setting, cond, 'ict_serverPage_div', pageInfo);
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverpagetable.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverpagetable.css
new file mode 100644
index 00000000..3385583e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-serverpagetable/serverpagetable.css
@@ -0,0 +1,70 @@
+td.details-control {
+ background: url('images/details_open.png') no-repeat center center;
+ cursor: pointer;
+}
+
+tr.shown td.details-control {
+ background: url('images/details_close.png') no-repeat center center;
+}
+
+.details table td {
+ word-wrap: break-word;
+ word-break: normal;
+ border-top: 1px solid #dddddd;
+}
+
+.details table tr:first-child td {
+ border-top: none;
+}
+
+.details table {
+ table-layout: fixed;
+ width: 100%;
+}
+
+td.title {
+ width: 10%;
+}
+
+table.dataTable tbody th, table.dataTable tbody td {
+ padding: 8px 10px;
+}
+
+div.dataTables_length, div.dataTables_info {
+ display: inline;
+}
+
+div.dataTables_paginate {
+ display: inline;
+ float: right;
+}
+
+div.pagination-panel {
+ margin-right: 10px;
+}
+
+input.pagination-panel-input {
+ width: 50px;
+}
+
+table {
+ width: 100% !important;
+}
+
+label {
+ font-weight: 100;
+}
+
+div.dataTables_length, div.dataTables_info {
+ display: inline;
+}
+
+.dataTables_wrapper select {
+ border-width: 1px;
+ padding: 4px 1px;
+ border-radius: 4px;
+}
+
+input.pagination-panel-input{
+ width:50px;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap-dt.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap-dt.css
new file mode 100644
index 00000000..1be9eb88
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap-dt.css
@@ -0,0 +1,7067 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+a {
+ background: transparent;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -.5em;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+hr {
+ height: 0;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+pre {
+ overflow: auto;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+
+button {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+
+legend {
+ padding: 0;
+ border: 0;
+}
+
+textarea {
+ overflow: auto;
+}
+
+optgroup {
+ font-weight: bold;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td,
+th {
+}
+
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ select {
+ background: #fff !important;
+ }
+
+ .navbar {
+ display: none;
+ }
+
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+
+.dataTableWrapperDiv div {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 62.5%;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+figure {
+ margin: 0;
+}
+
+img {
+ vertical-align: middle;
+}
+
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+.img-rounded {
+ border-radius: 6px;
+}
+
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.img-circle {
+ border-radius: 50%;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999;
+}
+
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+
+h1,
+.h1 {
+ font-size: 36px;
+}
+
+h2,
+.h2 {
+ font-size: 30px;
+}
+
+h3,
+.h3 {
+ font-size: 24px;
+}
+
+h4,
+.h4 {
+ font-size: 18px;
+}
+
+h5,
+.h5 {
+ font-size: 14px;
+}
+
+h6,
+.h6 {
+ font-size: 12px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 200;
+ line-height: 1.4;
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small,
+.small {
+ font-size: 85%;
+}
+
+cite {
+ font-style: normal;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-muted {
+ color: #999;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+a.text-primary:hover {
+ color: #3071a9;
+}
+
+.text-success {
+ color: #3c763d;
+}
+
+a.text-success:hover {
+ color: #2b542c;
+}
+
+.text-info {
+ color: #31708f;
+}
+
+a.text-info:hover {
+ color: #245269;
+}
+
+.text-warning {
+ color: #8a6d3b;
+}
+
+a.text-warning:hover {
+ color: #66512c;
+}
+
+.text-danger {
+ color: #a94442;
+}
+
+a.text-danger:hover {
+ color: #843534;
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #428bca;
+}
+
+a.bg-primary:hover {
+ background-color: #3071a9;
+}
+
+.bg-success {
+ background-color: #dff0d8;
+}
+
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #fcf8e3;
+}
+
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+
+.bg-danger {
+ background-color: #f2dede;
+}
+
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+dt,
+dd {
+ line-height: 1.42857143;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999;
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #999;
+}
+
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ white-space: nowrap;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-11 {
+ width: 91.66666667%;
+}
+
+.col-xs-10 {
+ width: 83.33333333%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-8 {
+ width: 66.66666667%;
+}
+
+.col-xs-7 {
+ width: 58.33333333%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-5 {
+ width: 41.66666667%;
+}
+
+.col-xs-4 {
+ width: 33.33333333%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-2 {
+ width: 16.66666667%;
+}
+
+.col-xs-1 {
+ width: 8.33333333%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+
+.col-xs-pull-0 {
+ right: 0;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+
+.col-xs-push-0 {
+ left: 0;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+
+ .col-sm-12 {
+ width: 100%;
+ }
+
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+
+ .col-sm-9 {
+ width: 75%;
+ }
+
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+
+ .col-sm-6 {
+ width: 50%;
+ }
+
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+
+ .col-sm-3 {
+ width: 25%;
+ }
+
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-sm-pull-0 {
+ right: 0;
+ }
+
+ .col-sm-push-12 {
+ left: 100%;
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-sm-push-9 {
+ left: 75%;
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-sm-push-6 {
+ left: 50%;
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-sm-push-3 {
+ left: 25%;
+ }
+
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-sm-push-0 {
+ left: 0;
+ }
+
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+
+ .col-md-12 {
+ width: 100%;
+ }
+
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+
+ .col-md-9 {
+ width: 75%;
+ }
+
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+
+ .col-md-6 {
+ width: 50%;
+ }
+
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+
+ .col-md-3 {
+ width: 25%;
+ }
+
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+
+ .col-md-pull-12 {
+ right: 100%;
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-md-pull-9 {
+ right: 75%;
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-md-pull-6 {
+ right: 50%;
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-md-pull-3 {
+ right: 25%;
+ }
+
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-md-pull-0 {
+ right: 0;
+ }
+
+ .col-md-push-12 {
+ left: 100%;
+ }
+
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-md-push-9 {
+ left: 75%;
+ }
+
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-md-push-6 {
+ left: 50%;
+ }
+
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-md-push-3 {
+ left: 25%;
+ }
+
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-md-push-0 {
+ left: 0;
+ }
+
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+
+ .col-lg-12 {
+ width: 100%;
+ }
+
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+
+ .col-lg-9 {
+ width: 75%;
+ }
+
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+
+ .col-lg-6 {
+ width: 50%;
+ }
+
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+
+ .col-lg-3 {
+ width: 25%;
+ }
+
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-lg-pull-0 {
+ right: 0;
+ }
+
+ .col-lg-push-12 {
+ left: 100%;
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-lg-push-9 {
+ left: 75%;
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-lg-push-6 {
+ left: 50%;
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-lg-push-3 {
+ left: 25%;
+ }
+
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-lg-push-0 {
+ left: 0;
+ }
+
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent;
+}
+
+th {
+ text-align: left;
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+
+.table .table {
+ background-color: #fff;
+}
+
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+
+.table-bordered {
+ border: 1px solid #ddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+ /*background-color: #f5f5f5;*/
+ background-color: #dbedff;
+}
+
+.dataTableTdSelected {
+ background-color: #dbedff !important;
+}
+
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+
+@media (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ /* IE8-9 */
+ line-height: normal;
+}
+
+input[type="file"] {
+ display: block;
+}
+
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1;
+}
+
+textarea.form-control {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+input[type="date"] {
+ line-height: 34px;
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+.radio,
+.checkbox {
+ display: block;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.radio label,
+.checkbox label {
+ display: inline;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+.radio[disabled],
+.radio-inline[disabled],
+.checkbox[disabled],
+.checkbox-inline[disabled],
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"],
+fieldset[disabled] .radio,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+
+.has-feedback {
+ position: relative;
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+
+.has-feedback .form-control-feedback {
+ position: absolute;
+ top: 25px;
+ right: 0;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+}
+
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+.form-control-static {
+ margin-bottom: 0;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+.form-horizontal .control-label,
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.form-horizontal .form-control-static {
+ padding-top: 7px;
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ top: 0;
+ right: 15px;
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn:hover,
+.btn:focus {
+ color: #333;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+
+.btn.default {
+ color: #333333;
+ text-shadow: none;
+ background-color: #e5e5e5;
+ height: 12px;
+}
+
+.btn.default:hover,
+.btn.default:focus,
+.btn.default:active,
+.btn.default.active,
+.btn.default[disabled],
+.btn.default.disabled {
+ color: #333333;
+ background-color: #d8d8d8 !important;
+ outline: none !important;
+}
+
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ cursor: pointer;
+ border-radius: 0;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none;
+}
+
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-sm {
+ padding: 2px 10px 8px 10px;
+}
+
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ display: none;
+}
+
+.collapse.in {
+ display: block;
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease;
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before {
+ content: "\20ac";
+}
+
+.glyphicon-minus:before {
+ content: "\2212";
+}
+
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+
+.glyphicon-glass:before {
+ content: "\e001";
+}
+
+.glyphicon-music:before {
+ content: "\e002";
+}
+
+.glyphicon-search:before {
+ content: "\e003";
+}
+
+.glyphicon-heart:before {
+ content: "\e005";
+}
+
+.glyphicon-star:before {
+ content: "\e006";
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+
+.glyphicon-user:before {
+ content: "\e008";
+}
+
+.glyphicon-film:before {
+ content: "\e009";
+}
+
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+
+.glyphicon-th:before {
+ content: "\e011";
+}
+
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+
+.glyphicon-ok:before {
+ content: "\e013";
+}
+
+.glyphicon-remove:before {
+ content: "\e014";
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+
+.glyphicon-off:before {
+ content: "\e017";
+}
+
+.glyphicon-signal:before {
+ content: "\e018";
+}
+
+.glyphicon-cog:before {
+ content: "\e019";
+}
+
+.glyphicon-trash:before {
+ content: "\e020";
+}
+
+.glyphicon-home:before {
+ content: "\e021";
+}
+
+.glyphicon-file:before {
+ content: "\e022";
+}
+
+.glyphicon-time:before {
+ content: "\e023";
+}
+
+.glyphicon-road:before {
+ content: "\e024";
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+
+.glyphicon-download:before {
+ content: "\e026";
+}
+
+.glyphicon-upload:before {
+ content: "\e027";
+}
+
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+
+.glyphicon-lock:before {
+ content: "\e033";
+}
+
+.glyphicon-flag:before {
+ content: "\e034";
+}
+
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+
+.glyphicon-tag:before {
+ content: "\e041";
+}
+
+.glyphicon-tags:before {
+ content: "\e042";
+}
+
+.glyphicon-book:before {
+ content: "\e043";
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+
+.glyphicon-print:before {
+ content: "\e045";
+}
+
+.glyphicon-camera:before {
+ content: "\e046";
+}
+
+.glyphicon-font:before {
+ content: "\e047";
+}
+
+.glyphicon-bold:before {
+ content: "\e048";
+}
+
+.glyphicon-italic:before {
+ content: "\e049";
+}
+
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+
+.glyphicon-list:before {
+ content: "\e056";
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+
+.glyphicon-picture:before {
+ content: "\e060";
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+
+.glyphicon-tint:before {
+ content: "\e064";
+}
+
+.glyphicon-edit:before {
+ content: "\e065";
+}
+
+.glyphicon-share:before {
+ content: "\e066";
+}
+
+.glyphicon-check:before {
+ content: "\e067";
+}
+
+.glyphicon-move:before {
+ content: "\e068";
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+
+.glyphicon-backward:before {
+ content: "\e071";
+}
+
+.glyphicon-play:before {
+ content: "\e072";
+}
+
+.glyphicon-pause:before {
+ content: "\e073";
+}
+
+.glyphicon-stop:before {
+ content: "\e074";
+}
+
+.glyphicon-forward:before {
+ content: "\e075";
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+
+.glyphicon-eject:before {
+ content: "\e078";
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+
+.glyphicon-gift:before {
+ content: "\e102";
+}
+
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+
+.glyphicon-fire:before {
+ content: "\e104";
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+
+.glyphicon-plane:before {
+ content: "\e108";
+}
+
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+
+.glyphicon-random:before {
+ content: "\e110";
+}
+
+.glyphicon-comment:before {
+ content: "\e111";
+}
+
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+
+.glyphicon-bell:before {
+ content: "\e123";
+}
+
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+
+.glyphicon-globe:before {
+ content: "\e135";
+}
+
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+
+.glyphicon-filter:before {
+ content: "\e138";
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+
+.glyphicon-link:before {
+ content: "\e144";
+}
+
+.glyphicon-phone:before {
+ content: "\e145";
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+
+.glyphicon-usd:before {
+ content: "\e148";
+}
+
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+
+.glyphicon-sort:before {
+ content: "\e150";
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+
+.glyphicon-expand:before {
+ content: "\e158";
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+
+.glyphicon-flash:before {
+ content: "\e162";
+}
+
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+
+.glyphicon-record:before {
+ content: "\e165";
+}
+
+.glyphicon-save:before {
+ content: "\e166";
+}
+
+.glyphicon-open:before {
+ content: "\e167";
+}
+
+.glyphicon-saved:before {
+ content: "\e168";
+}
+
+.glyphicon-import:before {
+ content: "\e169";
+}
+
+.glyphicon-export:before {
+ content: "\e170";
+}
+
+.glyphicon-send:before {
+ content: "\e171";
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+
+.glyphicon-header:before {
+ content: "\e180";
+}
+
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+
+.glyphicon-tower:before {
+ content: "\e184";
+}
+
+.glyphicon-stats:before {
+ content: "\e185";
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open > .dropdown-menu {
+ display: block;
+}
+
+.open > a {
+ outline: 0;
+}
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #999;
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus {
+ outline: none;
+}
+
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+
+.btn-toolbar {
+ margin-left: -5px;
+}
+
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group > .btn-group {
+ float: left;
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn .caret {
+ margin-left: 0;
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none;
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.input-group-btn > .btn {
+ position: relative;
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav > li {
+ position: relative;
+ display: block;
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.nav > li.disabled > a {
+ color: #999;
+}
+
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca;
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.nav > li > a > img {
+ max-width: none;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+
+.nav-pills > li {
+ float: left;
+}
+
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca;
+}
+
+.nav-stacked > li {
+ float: none;
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+
+.nav-justified {
+ width: 100%;
+}
+
+.nav-justified > li {
+ float: none;
+}
+
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+
+.tab-content > .tab-pane {
+ display: none;
+}
+
+.tab-content > .active {
+ display: block;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.navbar-toggle:focus {
+ outline: none;
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+
+ .navbar-nav > li {
+ float: left;
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+
+ .navbar-right {
+ float: right !important;
+ }
+}
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .navbar-form.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+
+ .navbar-text.navbar-right:last-child {
+ margin-right: 0;
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-brand {
+ color: #777;
+}
+
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-text {
+ color: #777;
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777;
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #999;
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999;
+}
+
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+}
+
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+
+.breadcrumb > .active {
+ color: #999;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+
+.pagination > li {
+ display: inline;
+}
+
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #428bca;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd;
+}
+
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+
+.label[href]:hover,
+.label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label:empty {
+ display: none;
+}
+
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+
+.label-default {
+ background-color: #999;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #808080;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #5cb85c;
+}
+
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+
+.label-info {
+ background-color: #5bc0de;
+}
+
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+
+.label-warning {
+ background-color: #f0ad4e;
+}
+
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
+
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999;
+ border-radius: 10px;
+}
+
+.badge:empty {
+ display: none;
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.container .jumbotron {
+ border-radius: 6px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #428bca;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+
+.alert .alert-link {
+ font-weight: bold;
+}
+
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+
+.alert > p + p {
+ margin-top: 5px;
+}
+
+.alert-dismissable {
+ padding-right: 35px;
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease;
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px;
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+.media,
+.media .media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-heading {
+ margin: 0 0 5px;
+}
+
+.media > .pull-left {
+ margin-right: 10px;
+}
+
+.media > .pull-right {
+ margin-left: 10px;
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.list-group-item > .badge {
+ float: right;
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+
+a.list-group-item {
+ color: #555;
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+
+a.list-group-item:hover,
+a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+a.list-group-item.active,
+a.list-group-item.active:hover,
+a.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+a.list-group-item.active .list-group-item-heading,
+a.list-group-item.active:hover .list-group-item-heading,
+a.list-group-item.active:focus .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item.active .list-group-item-text,
+a.list-group-item.active:hover .list-group-item-text,
+a.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7;
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+a.list-group-item-success {
+ color: #3c763d;
+}
+
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info {
+ color: #31708f;
+}
+
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+a.list-group-item-danger {
+ color: #a94442;
+}
+
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.panel-body {
+ padding: 15px;
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+
+.panel-title > a {
+ color: inherit;
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .list-group {
+ margin-bottom: 0;
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+
+.panel > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+
+.panel > .table,
+.panel > .table-responsive > .table {
+ margin-bottom: 0;
+}
+
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive {
+ border-top: 1px solid #ddd;
+}
+
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+
+.panel-group {
+ margin-bottom: 20px;
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ overflow: hidden;
+ border-radius: 4px;
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd;
+}
+
+.panel-group .panel-footer {
+ border-top: 0;
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+
+.panel-default {
+ border-color: #ddd;
+}
+
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd;
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca;
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+
+.modal-open {
+ overflow: hidden;
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ /*background-color: #000;*/
+ background-color: #fff;
+}
+
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px;
+}
+
+.modal-footer {
+ padding: 19px 20px 20px;
+ margin-top: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+
+ .modal-sm {
+ width: 300px;
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ visibility: visible;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+
+.popover.top {
+ margin-top: -10px;
+}
+
+.popover.right {
+ margin-left: 10px;
+}
+
+.popover.bottom {
+ margin-top: 10px;
+}
+
+.popover.left {
+ margin-left: -10px;
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.popover > .arrow {
+ border-width: 11px;
+}
+
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+
+.carousel-inner > .active {
+ left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.carousel-inner > .next {
+ left: 100%;
+}
+
+.carousel-inner > .prev {
+ left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+
+.carousel-inner > .active.left {
+ left: -100%;
+}
+
+.carousel-inner > .active.right {
+ left: 100%;
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: none;
+ opacity: .9;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+}
+
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif;
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+
+.carousel-caption .btn {
+ text-shadow: none;
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px;
+ }
+
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+
+.clearfix:before,
+.clearfix:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+
+.clearfix:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.pull-left {
+ float: left !important;
+}
+
+.hide {
+ display: none !important;
+}
+
+.show {
+ display: block !important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+.affix {
+ position: fixed;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+
+ table.visible-xs {
+ display: table;
+ }
+
+ tr.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+
+ table.visible-sm {
+ display: table;
+ }
+
+ tr.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+
+ table.visible-md {
+ display: table;
+ }
+
+ tr.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+
+ table.visible-lg {
+ display: table;
+ }
+
+ tr.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+
+.visible-print {
+ display: none !important;
+}
+
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+
+ table.visible-print {
+ display: table;
+ }
+
+ tr.visible-print {
+ display: table-row !important;
+ }
+
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap.min.css
new file mode 100644
index 00000000..d8ea28de
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,6235 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%
+}
+
+body {
+ margin: 0
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+ display: block
+}
+
+audio, canvas, progress, video {
+ display: inline-block;
+ vertical-align: baseline
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0
+}
+
+[hidden], template {
+ display: none
+}
+
+a {
+ background: 0 0
+}
+
+a:active, a:hover {
+ outline: 0
+}
+
+abbr[title] {
+ border-bottom: 1px dotted
+}
+
+b, strong {
+ font-weight: 700
+}
+
+dfn {
+ font-style: italic
+}
+
+h1 {
+ font-size: 2em;
+ margin: .67em 0
+}
+
+mark {
+ background: #ff0;
+ color: #000
+}
+
+small {
+ font-size: 80%
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline
+}
+
+sup {
+ top: -.5em
+}
+
+sub {
+ bottom: -.25em
+}
+
+img {
+ border: 0
+}
+
+svg:not(:root) {
+ overflow: hidden
+}
+
+figure {
+ margin: 1em 40px
+}
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0
+}
+
+pre {
+ overflow: auto
+}
+
+code, kbd, pre, samp {
+ font-family: monospace, monospace;
+ font-size: 1em
+}
+
+button, input, optgroup, select, textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0
+}
+
+button {
+ overflow: visible
+}
+
+button, select {
+ text-transform: none
+}
+
+button, html input[type=button], input[type=reset], input[type=submit] {
+ -webkit-appearance: button;
+ cursor: pointer
+}
+
+button[disabled], html input[disabled] {
+ cursor: default
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0
+}
+
+input {
+ line-height: normal
+}
+
+input[type=checkbox], input[type=radio] {
+ box-sizing: border-box;
+ padding: 0
+}
+
+input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button {
+ height: auto
+}
+
+input[type=search] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box
+}
+
+input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+fieldset {
+ border: 1px solid silver;
+ margin: 0 2px;
+ padding: .35em .625em .75em
+}
+
+legend {
+ border: 0;
+ padding: 0
+}
+
+textarea {
+ overflow: auto
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0
+}
+
+td, th {
+ padding: 0
+}
+
+@media print {
+ * {
+ text-shadow: none !important;
+ color: #000 !important;
+ background: transparent !important;
+ box-shadow: none !important
+ }
+
+ a, a:visited {
+ text-decoration: underline
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")"
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")"
+ }
+
+ a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: ""
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid
+ }
+
+ thead {
+ display: table-header-group
+ }
+
+ tr, img {
+ page-break-inside: avoid
+ }
+
+ img {
+ max-width: 100% !important
+ }
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3
+ }
+
+ h2, h3 {
+ page-break-after: avoid
+ }
+
+ select {
+ background: #fff !important
+ }
+
+ .navbar {
+ display: none
+ }
+
+ .table td, .table th {
+ background-color: #fff !important
+ }
+
+ .btn > .caret, .dropup > .btn > .caret {
+ border-top-color: #000 !important
+ }
+
+ .label {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse !important
+ }
+
+ .table-bordered th, .table-bordered td {
+ border: 1px solid #ddd !important
+ }
+}
+
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+:before, :after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+html {
+ font-size: 62.5%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff
+}
+
+input, button, select, textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+a {
+ color: #428bca;
+ text-decoration: none
+}
+
+a:hover, a:focus {
+ color: #2a6496;
+ text-decoration: underline
+}
+
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+figure {
+ margin: 0
+}
+
+img {
+ vertical-align: middle
+}
+
+.img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto
+}
+
+.img-rounded {
+ border-radius: 6px
+}
+
+.img-thumbnail {
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ display: inline-block;
+ max-width: 100%;
+ height: auto
+}
+
+.img-circle {
+ border-radius: 50%
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0
+}
+
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit
+}
+
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
+ font-weight: 400;
+ line-height: 1;
+ color: #999
+}
+
+h1, .h1, h2, .h2, h3, .h3 {
+ margin-top: 20px;
+ margin-bottom: 10px
+}
+
+h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small {
+ font-size: 65%
+}
+
+h4, .h4, h5, .h5, h6, .h6 {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small {
+ font-size: 75%
+}
+
+h1, .h1 {
+ font-size: 36px
+}
+
+h2, .h2 {
+ font-size: 30px
+}
+
+h3, .h3 {
+ font-size: 24px
+}
+
+h4, .h4 {
+ font-size: 18px
+}
+
+h5, .h5 {
+ font-size: 14px
+}
+
+h6, .h6 {
+ font-size: 12px
+}
+
+p {
+ margin: 0 0 10px
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 200;
+ line-height: 1.4
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px
+ }
+}
+
+small, .small {
+ font-size: 85%
+}
+
+cite {
+ font-style: normal
+}
+
+.text-left {
+ text-align: left
+}
+
+.text-right {
+ text-align: right
+}
+
+.text-center {
+ text-align: center
+}
+
+.text-justify {
+ text-align: justify
+}
+
+.text-muted {
+ color: #999
+}
+
+.text-primary {
+ color: #428bca
+}
+
+a.text-primary:hover {
+ color: #3071a9
+}
+
+.text-success {
+ color: #3c763d
+}
+
+a.text-success:hover {
+ color: #2b542c
+}
+
+.text-info {
+ color: #31708f
+}
+
+a.text-info:hover {
+ color: #245269
+}
+
+.text-warning {
+ color: #8a6d3b
+}
+
+a.text-warning:hover {
+ color: #66512c
+}
+
+.text-danger {
+ color: #a94442
+}
+
+a.text-danger:hover {
+ color: #843534
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #428bca
+}
+
+a.bg-primary:hover {
+ background-color: #3071a9
+}
+
+.bg-success {
+ background-color: #dff0d8
+}
+
+a.bg-success:hover {
+ background-color: #c1e2b3
+}
+
+.bg-info {
+ background-color: #d9edf7
+}
+
+a.bg-info:hover {
+ background-color: #afd9ee
+}
+
+.bg-warning {
+ background-color: #fcf8e3
+}
+
+a.bg-warning:hover {
+ background-color: #f7ecb5
+}
+
+.bg-danger {
+ background-color: #f2dede
+}
+
+a.bg-danger:hover {
+ background-color: #e4b9b9
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee
+}
+
+ul, ol {
+ margin-top: 0;
+ margin-bottom: 10px
+}
+
+ul ul, ol ul, ul ol, ol ol {
+ margin-bottom: 0
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none;
+ margin-left: -5px
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px
+}
+
+dt, dd {
+ line-height: 1.42857143
+}
+
+dd {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ clear: left;
+ text-align: right;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px
+ }
+}
+
+abbr[title], abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee
+}
+
+blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child {
+ margin-bottom: 0
+}
+
+blockquote footer, blockquote small, blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #999
+}
+
+blockquote footer:before, blockquote small:before, blockquote .small:before {
+ content: '\2014 \00A0'
+}
+
+.blockquote-reverse, blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eee;
+ border-left: 0;
+ text-align: right
+}
+
+.blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before {
+ content: ''
+}
+
+.blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after {
+ content: '\00A0 \2014'
+}
+
+blockquote:before, blockquote:after {
+ content: ""
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143
+}
+
+code, kbd, pre, samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ white-space: nowrap;
+ border-radius: 4px
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25)
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: #333;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+@media (min-width: 768px) {
+ .container {
+ width: 750px
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 970px
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px
+ }
+}
+
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.row {
+ margin-left: -15px;
+ margin-right: -15px
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left
+}
+
+.col-xs-12 {
+ width: 100%
+}
+
+.col-xs-11 {
+ width: 91.66666667%
+}
+
+.col-xs-10 {
+ width: 83.33333333%
+}
+
+.col-xs-9 {
+ width: 75%
+}
+
+.col-xs-8 {
+ width: 66.66666667%
+}
+
+.col-xs-7 {
+ width: 58.33333333%
+}
+
+.col-xs-6 {
+ width: 50%
+}
+
+.col-xs-5 {
+ width: 41.66666667%
+}
+
+.col-xs-4 {
+ width: 33.33333333%
+}
+
+.col-xs-3 {
+ width: 25%
+}
+
+.col-xs-2 {
+ width: 16.66666667%
+}
+
+.col-xs-1 {
+ width: 8.33333333%
+}
+
+.col-xs-pull-12 {
+ right: 100%
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%
+}
+
+.col-xs-pull-9 {
+ right: 75%
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%
+}
+
+.col-xs-pull-6 {
+ right: 50%
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%
+}
+
+.col-xs-pull-3 {
+ right: 25%
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%
+}
+
+.col-xs-pull-0 {
+ right: 0
+}
+
+.col-xs-push-12 {
+ left: 100%
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%
+}
+
+.col-xs-push-9 {
+ left: 75%
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%
+}
+
+.col-xs-push-6 {
+ left: 50%
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%
+}
+
+.col-xs-push-3 {
+ left: 25%
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%
+}
+
+.col-xs-push-0 {
+ left: 0
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%
+}
+
+.col-xs-offset-0 {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left
+ }
+
+ .col-sm-12 {
+ width: 100%
+ }
+
+ .col-sm-11 {
+ width: 91.66666667%
+ }
+
+ .col-sm-10 {
+ width: 83.33333333%
+ }
+
+ .col-sm-9 {
+ width: 75%
+ }
+
+ .col-sm-8 {
+ width: 66.66666667%
+ }
+
+ .col-sm-7 {
+ width: 58.33333333%
+ }
+
+ .col-sm-6 {
+ width: 50%
+ }
+
+ .col-sm-5 {
+ width: 41.66666667%
+ }
+
+ .col-sm-4 {
+ width: 33.33333333%
+ }
+
+ .col-sm-3 {
+ width: 25%
+ }
+
+ .col-sm-2 {
+ width: 16.66666667%
+ }
+
+ .col-sm-1 {
+ width: 8.33333333%
+ }
+
+ .col-sm-pull-12 {
+ right: 100%
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-sm-pull-9 {
+ right: 75%
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-sm-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-sm-pull-6 {
+ right: 50%
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-sm-pull-3 {
+ right: 25%
+ }
+
+ .col-sm-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-sm-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-sm-pull-0 {
+ right: 0
+ }
+
+ .col-sm-push-12 {
+ left: 100%
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-sm-push-9 {
+ left: 75%
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-sm-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-sm-push-6 {
+ left: 50%
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-sm-push-3 {
+ left: 25%
+ }
+
+ .col-sm-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-sm-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-sm-push-0 {
+ left: 0
+ }
+
+ .col-sm-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0
+ }
+}
+
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left
+ }
+
+ .col-md-12 {
+ width: 100%
+ }
+
+ .col-md-11 {
+ width: 91.66666667%
+ }
+
+ .col-md-10 {
+ width: 83.33333333%
+ }
+
+ .col-md-9 {
+ width: 75%
+ }
+
+ .col-md-8 {
+ width: 66.66666667%
+ }
+
+ .col-md-7 {
+ width: 58.33333333%
+ }
+
+ .col-md-6 {
+ width: 50%
+ }
+
+ .col-md-5 {
+ width: 41.66666667%
+ }
+
+ .col-md-4 {
+ width: 33.33333333%
+ }
+
+ .col-md-3 {
+ width: 25%
+ }
+
+ .col-md-2 {
+ width: 16.66666667%
+ }
+
+ .col-md-1 {
+ width: 8.33333333%
+ }
+
+ .col-md-pull-12 {
+ right: 100%
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-md-pull-9 {
+ right: 75%
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-md-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-md-pull-6 {
+ right: 50%
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-md-pull-3 {
+ right: 25%
+ }
+
+ .col-md-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-md-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-md-pull-0 {
+ right: 0
+ }
+
+ .col-md-push-12 {
+ left: 100%
+ }
+
+ .col-md-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-md-push-9 {
+ left: 75%
+ }
+
+ .col-md-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-md-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-md-push-6 {
+ left: 50%
+ }
+
+ .col-md-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-md-push-3 {
+ left: 25%
+ }
+
+ .col-md-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-md-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-md-push-0 {
+ left: 0
+ }
+
+ .col-md-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left
+ }
+
+ .col-lg-12 {
+ width: 100%
+ }
+
+ .col-lg-11 {
+ width: 91.66666667%
+ }
+
+ .col-lg-10 {
+ width: 83.33333333%
+ }
+
+ .col-lg-9 {
+ width: 75%
+ }
+
+ .col-lg-8 {
+ width: 66.66666667%
+ }
+
+ .col-lg-7 {
+ width: 58.33333333%
+ }
+
+ .col-lg-6 {
+ width: 50%
+ }
+
+ .col-lg-5 {
+ width: 41.66666667%
+ }
+
+ .col-lg-4 {
+ width: 33.33333333%
+ }
+
+ .col-lg-3 {
+ width: 25%
+ }
+
+ .col-lg-2 {
+ width: 16.66666667%
+ }
+
+ .col-lg-1 {
+ width: 8.33333333%
+ }
+
+ .col-lg-pull-12 {
+ right: 100%
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-lg-pull-9 {
+ right: 75%
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-lg-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-lg-pull-6 {
+ right: 50%
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-lg-pull-3 {
+ right: 25%
+ }
+
+ .col-lg-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-lg-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-lg-pull-0 {
+ right: 0
+ }
+
+ .col-lg-push-12 {
+ left: 100%
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-lg-push-9 {
+ left: 75%
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-lg-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-lg-push-6 {
+ left: 50%
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-lg-push-3 {
+ left: 25%
+ }
+
+ .col-lg-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-lg-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-lg-push-0 {
+ left: 0
+ }
+
+ .col-lg-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent
+}
+
+th {
+ text-align: left
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px
+}
+
+.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd
+}
+
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd
+}
+
+.table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td {
+ border-top: 0
+}
+
+.table > tbody + tbody {
+ border-top: 2px solid #ddd
+}
+
+.table .table {
+ background-color: #fff
+}
+
+.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td {
+ padding: 5px
+}
+
+.table-bordered {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {
+ border-bottom-width: 2px
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9
+}
+
+.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
+ background-color: #f5f5f5
+}
+
+table col[class*=col-] {
+ position: static;
+ float: none;
+ display: table-column
+}
+
+table td[class*=col-], table th[class*=col-] {
+ position: static;
+ float: none;
+ display: table-cell
+}
+
+.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th {
+ background-color: #f5f5f5
+}
+
+.table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8
+}
+
+.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th {
+ background-color: #dff0d8
+}
+
+.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6
+}
+
+.table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th {
+ background-color: #d9edf7
+}
+
+.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3
+}
+
+.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th {
+ background-color: #fcf8e3
+}
+
+.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc
+}
+
+.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th {
+ background-color: #f2dede
+}
+
+.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc
+}
+
+@media (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0
+ }
+
+ .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0
+ }
+
+ .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0
+ }
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ min-width: 0
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px
+}
+
+input[type=search] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+input[type=radio], input[type=checkbox] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal
+}
+
+input[type=file] {
+ display: block
+}
+
+input[type=range] {
+ display: block;
+ width: 100%
+}
+
+select[multiple], select[size] {
+ height: auto
+}
+
+input[type=file]:focus, input[type=radio]:focus, input[type=checkbox]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1
+}
+
+textarea.form-control {
+ height: auto
+}
+
+input[type=search] {
+ -webkit-appearance: none
+}
+
+input[type=date] {
+ line-height: 34px
+}
+
+.form-group {
+ margin-bottom: 15px
+}
+
+.radio, .checkbox {
+ display: block;
+ min-height: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding-left: 20px
+}
+
+.radio label, .checkbox label {
+ display: inline;
+ font-weight: 400;
+ cursor: pointer
+}
+
+.radio input[type=radio], .radio-inline input[type=radio], .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox] {
+ float: left;
+ margin-left: -20px
+}
+
+.radio + .radio, .checkbox + .checkbox {
+ margin-top: -5px
+}
+
+.radio-inline, .checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ font-weight: 400;
+ cursor: pointer
+}
+
+.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px
+}
+
+input[type=radio][disabled], input[type=checkbox][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type=radio], fieldset[disabled] input[type=checkbox], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-sm, select[multiple].input-sm {
+ height: auto
+}
+
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-lg {
+ height: 46px;
+ line-height: 46px
+}
+
+textarea.input-lg, select[multiple].input-lg {
+ height: auto
+}
+
+.has-feedback {
+ position: relative
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px
+}
+
+.has-feedback .form-control-feedback {
+ position: absolute;
+ top: 25px;
+ right: 0;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center
+}
+
+.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline {
+ color: #3c763d
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ border-color: #3c763d;
+ background-color: #dff0d8
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d
+}
+
+.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline {
+ color: #8a6d3b
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ border-color: #8a6d3b;
+ background-color: #fcf8e3
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b
+}
+
+.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline {
+ color: #a94442
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ border-color: #a94442;
+ background-color: #f2dede
+}
+
+.has-error .form-control-feedback {
+ color: #a94442
+}
+
+.form-control-static {
+ margin-bottom: 0
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .form-inline .input-group > .form-control {
+ width: 100%
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .radio, .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .radio input[type=radio], .form-inline .checkbox input[type=checkbox] {
+ float: none;
+ margin-left: 0
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0
+ }
+}
+
+.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: 7px
+}
+
+.form-horizontal .radio, .form-horizontal .checkbox {
+ min-height: 27px
+}
+
+.form-horizontal .form-group {
+ margin-left: -15px;
+ margin-right: -15px
+}
+
+.form-horizontal .form-control-static {
+ padding-top: 7px
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ top: 0;
+ right: 15px
+}
+
+.btn {
+ display: inline-block;
+ margin-bottom: 0;
+ font-weight: 400;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ background-image: none;
+ border: 1px solid transparent;
+ white-space: nowrap;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none
+}
+
+.btn:focus, .btn:active:focus, .btn.active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+.btn:hover, .btn:focus {
+ color: #333;
+ text-decoration: none
+}
+
+.btn:active, .btn.active {
+ outline: 0;
+ background-image: none;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
+}
+
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+ cursor: not-allowed;
+ pointer-events: none;
+ opacity: .65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad
+}
+
+.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ background-image: none
+}
+
+.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e
+}
+
+.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ background-image: none
+}
+
+.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439
+}
+
+.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ background-image: none
+}
+
+.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc
+}
+
+.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ background-image: none
+}
+
+.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512
+}
+
+.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ background-image: none
+}
+
+.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925
+}
+
+.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ background-image: none
+}
+
+.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff
+}
+
+.btn-link {
+ color: #428bca;
+ font-weight: 400;
+ cursor: pointer;
+ border-radius: 0
+}
+
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+ border-color: transparent
+}
+
+.btn-link:hover, .btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent
+}
+
+.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none
+}
+
+.btn-lg, .btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-sm, .btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-xs, .btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px
+}
+
+input[type=submit].btn-block, input[type=reset].btn-block, input[type=button].btn-block {
+ width: 100%
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear
+}
+
+.fade.in {
+ opacity: 1
+}
+
+.collapse {
+ display: none
+}
+
+.collapse.in {
+ display: block
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url(../fonts/glyphicons-halflings-regular.eot);
+ src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'), url(../fonts/glyphicons-halflings-regular.woff) format('woff'), url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'), url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a"
+}
+
+.glyphicon-plus:before {
+ content: "\2b"
+}
+
+.glyphicon-euro:before {
+ content: "\20ac"
+}
+
+.glyphicon-minus:before {
+ content: "\2212"
+}
+
+.glyphicon-cloud:before {
+ content: "\2601"
+}
+
+.glyphicon-envelope:before {
+ content: "\2709"
+}
+
+.glyphicon-pencil:before {
+ content: "\270f"
+}
+
+.glyphicon-glass:before {
+ content: "\e001"
+}
+
+.glyphicon-music:before {
+ content: "\e002"
+}
+
+.glyphicon-search:before {
+ content: "\e003"
+}
+
+.glyphicon-heart:before {
+ content: "\e005"
+}
+
+.glyphicon-star:before {
+ content: "\e006"
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007"
+}
+
+.glyphicon-user:before {
+ content: "\e008"
+}
+
+.glyphicon-film:before {
+ content: "\e009"
+}
+
+.glyphicon-th-large:before {
+ content: "\e010"
+}
+
+.glyphicon-th:before {
+ content: "\e011"
+}
+
+.glyphicon-th-list:before {
+ content: "\e012"
+}
+
+.glyphicon-ok:before {
+ content: "\e013"
+}
+
+.glyphicon-remove:before {
+ content: "\e014"
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015"
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016"
+}
+
+.glyphicon-off:before {
+ content: "\e017"
+}
+
+.glyphicon-signal:before {
+ content: "\e018"
+}
+
+.glyphicon-cog:before {
+ content: "\e019"
+}
+
+.glyphicon-trash:before {
+ content: "\e020"
+}
+
+.glyphicon-home:before {
+ content: "\e021"
+}
+
+.glyphicon-file:before {
+ content: "\e022"
+}
+
+.glyphicon-time:before {
+ content: "\e023"
+}
+
+.glyphicon-road:before {
+ content: "\e024"
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025"
+}
+
+.glyphicon-download:before {
+ content: "\e026"
+}
+
+.glyphicon-upload:before {
+ content: "\e027"
+}
+
+.glyphicon-inbox:before {
+ content: "\e028"
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029"
+}
+
+.glyphicon-repeat:before {
+ content: "\e030"
+}
+
+.glyphicon-refresh:before {
+ content: "\e031"
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032"
+}
+
+.glyphicon-lock:before {
+ content: "\e033"
+}
+
+.glyphicon-flag:before {
+ content: "\e034"
+}
+
+.glyphicon-headphones:before {
+ content: "\e035"
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036"
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037"
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038"
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039"
+}
+
+.glyphicon-barcode:before {
+ content: "\e040"
+}
+
+.glyphicon-tag:before {
+ content: "\e041"
+}
+
+.glyphicon-tags:before {
+ content: "\e042"
+}
+
+.glyphicon-book:before {
+ content: "\e043"
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044"
+}
+
+.glyphicon-print:before {
+ content: "\e045"
+}
+
+.glyphicon-camera:before {
+ content: "\e046"
+}
+
+.glyphicon-font:before {
+ content: "\e047"
+}
+
+.glyphicon-bold:before {
+ content: "\e048"
+}
+
+.glyphicon-italic:before {
+ content: "\e049"
+}
+
+.glyphicon-text-height:before {
+ content: "\e050"
+}
+
+.glyphicon-text-width:before {
+ content: "\e051"
+}
+
+.glyphicon-align-left:before {
+ content: "\e052"
+}
+
+.glyphicon-align-center:before {
+ content: "\e053"
+}
+
+.glyphicon-align-right:before {
+ content: "\e054"
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055"
+}
+
+.glyphicon-list:before {
+ content: "\e056"
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057"
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058"
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059"
+}
+
+.glyphicon-picture:before {
+ content: "\e060"
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062"
+}
+
+.glyphicon-adjust:before {
+ content: "\e063"
+}
+
+.glyphicon-tint:before {
+ content: "\e064"
+}
+
+.glyphicon-edit:before {
+ content: "\e065"
+}
+
+.glyphicon-share:before {
+ content: "\e066"
+}
+
+.glyphicon-check:before {
+ content: "\e067"
+}
+
+.glyphicon-move:before {
+ content: "\e068"
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069"
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070"
+}
+
+.glyphicon-backward:before {
+ content: "\e071"
+}
+
+.glyphicon-play:before {
+ content: "\e072"
+}
+
+.glyphicon-pause:before {
+ content: "\e073"
+}
+
+.glyphicon-stop:before {
+ content: "\e074"
+}
+
+.glyphicon-forward:before {
+ content: "\e075"
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076"
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077"
+}
+
+.glyphicon-eject:before {
+ content: "\e078"
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079"
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080"
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081"
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082"
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083"
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084"
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085"
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086"
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087"
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088"
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089"
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090"
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091"
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092"
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093"
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094"
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095"
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096"
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097"
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101"
+}
+
+.glyphicon-gift:before {
+ content: "\e102"
+}
+
+.glyphicon-leaf:before {
+ content: "\e103"
+}
+
+.glyphicon-fire:before {
+ content: "\e104"
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105"
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106"
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107"
+}
+
+.glyphicon-plane:before {
+ content: "\e108"
+}
+
+.glyphicon-calendar:before {
+ content: "\e109"
+}
+
+.glyphicon-random:before {
+ content: "\e110"
+}
+
+.glyphicon-comment:before {
+ content: "\e111"
+}
+
+.glyphicon-magnet:before {
+ content: "\e112"
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113"
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114"
+}
+
+.glyphicon-retweet:before {
+ content: "\e115"
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116"
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117"
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118"
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119"
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120"
+}
+
+.glyphicon-hdd:before {
+ content: "\e121"
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122"
+}
+
+.glyphicon-bell:before {
+ content: "\e123"
+}
+
+.glyphicon-certificate:before {
+ content: "\e124"
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125"
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126"
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127"
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128"
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129"
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130"
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131"
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132"
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133"
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134"
+}
+
+.glyphicon-globe:before {
+ content: "\e135"
+}
+
+.glyphicon-wrench:before {
+ content: "\e136"
+}
+
+.glyphicon-tasks:before {
+ content: "\e137"
+}
+
+.glyphicon-filter:before {
+ content: "\e138"
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139"
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140"
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141"
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142"
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143"
+}
+
+.glyphicon-link:before {
+ content: "\e144"
+}
+
+.glyphicon-phone:before {
+ content: "\e145"
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146"
+}
+
+.glyphicon-usd:before {
+ content: "\e148"
+}
+
+.glyphicon-gbp:before {
+ content: "\e149"
+}
+
+.glyphicon-sort:before {
+ content: "\e150"
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151"
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152"
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153"
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154"
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155"
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156"
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157"
+}
+
+.glyphicon-expand:before {
+ content: "\e158"
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159"
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160"
+}
+
+.glyphicon-log-in:before {
+ content: "\e161"
+}
+
+.glyphicon-flash:before {
+ content: "\e162"
+}
+
+.glyphicon-log-out:before {
+ content: "\e163"
+}
+
+.glyphicon-new-window:before {
+ content: "\e164"
+}
+
+.glyphicon-record:before {
+ content: "\e165"
+}
+
+.glyphicon-save:before {
+ content: "\e166"
+}
+
+.glyphicon-open:before {
+ content: "\e167"
+}
+
+.glyphicon-saved:before {
+ content: "\e168"
+}
+
+.glyphicon-import:before {
+ content: "\e169"
+}
+
+.glyphicon-export:before {
+ content: "\e170"
+}
+
+.glyphicon-send:before {
+ content: "\e171"
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172"
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173"
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174"
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175"
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176"
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177"
+}
+
+.glyphicon-transfer:before {
+ content: "\e178"
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179"
+}
+
+.glyphicon-header:before {
+ content: "\e180"
+}
+
+.glyphicon-compressed:before {
+ content: "\e181"
+}
+
+.glyphicon-earphone:before {
+ content: "\e182"
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183"
+}
+
+.glyphicon-tower:before {
+ content: "\e184"
+}
+
+.glyphicon-stats:before {
+ content: "\e185"
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186"
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187"
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188"
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189"
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190"
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191"
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192"
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193"
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194"
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195"
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197"
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198"
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199"
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200"
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent
+}
+
+.dropdown {
+ position: relative
+}
+
+.dropdown-toggle:focus {
+ outline: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ font-size: 14px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ background-clip: padding-box
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: 400;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #262626;
+ background-color: #f5f5f5
+}
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #428bca
+}
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ color: #999
+}
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ cursor: not-allowed
+}
+
+.open > .dropdown-menu {
+ display: block
+}
+
+.open > a {
+ outline: 0
+}
+
+.dropdown-menu-right {
+ left: auto;
+ right: 0
+}
+
+.dropdown-menu-left {
+ left: 0;
+ right: auto
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #999
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: 990
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto
+}
+
+.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+ border-top: 0;
+ border-bottom: 4px solid;
+ content: ""
+}
+
+.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ left: auto;
+ right: 0
+ }
+
+ .navbar-right .dropdown-menu-left {
+ left: 0;
+ right: auto
+ }
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle
+}
+
+.btn-group > .btn, .btn-group-vertical > .btn {
+ position: relative;
+ float: left
+}
+
+.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
+ z-index: 2
+}
+
+.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+ outline: 0
+}
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
+ margin-left: -1px
+}
+
+.btn-toolbar {
+ margin-left: -5px
+}
+
+.btn-toolbar .btn-group, .btn-toolbar .input-group {
+ float: left
+}
+
+.btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group {
+ margin-left: 5px
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group > .btn-group {
+ float: left
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn .caret {
+ margin-left: 0
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate
+}
+
+.btn-group-justified > .btn, .btn-group-justified > .btn-group {
+ float: none;
+ display: table-cell;
+ width: 1%
+}
+
+.btn-group-justified > .btn-group .btn {
+ width: 100%
+}
+
+[data-toggle=buttons] > .btn > input[type=radio], [data-toggle=buttons] > .btn > input[type=checkbox] {
+ display: none
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate
+}
+
+.input-group[class*=col-] {
+ float: none;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0
+}
+
+.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px
+}
+
+textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-addon, .input-group-btn, .input-group .form-control {
+ display: table-cell
+}
+
+.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.input-group-addon, .input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px
+}
+
+.input-group-addon input[type=radio], .input-group-addon input[type=checkbox] {
+ margin-top: 0
+}
+
+.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.input-group-addon:first-child {
+ border-right: 0
+}
+
+.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.input-group-addon:last-child {
+ border-left: 0
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap
+}
+
+.input-group-btn > .btn {
+ position: relative
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -1px
+}
+
+.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {
+ z-index: 2
+}
+
+.input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group {
+ margin-right: -1px
+}
+
+.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group {
+ margin-left: -1px
+}
+
+.nav {
+ margin-bottom: 0;
+ padding-left: 0;
+ list-style: none
+}
+
+.nav > li {
+ position: relative;
+ display: block
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px
+}
+
+.nav > li > a:hover, .nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.nav > li.disabled > a {
+ color: #999
+}
+
+.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed
+}
+
+.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.nav > li > a > img {
+ max-width: none
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd
+}
+
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+ color: #555;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0
+}
+
+.nav-tabs.nav-justified > li {
+ float: none
+}
+
+.nav-tabs.nav-justified > li > a {
+ text-align: center;
+ margin-bottom: 5px
+}
+
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px
+}
+
+.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0
+ }
+
+ .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff
+ }
+}
+
+.nav-pills > li {
+ float: left
+}
+
+.nav-pills > li > a {
+ border-radius: 4px
+}
+
+.nav-pills > li + li {
+ margin-left: 2px
+}
+
+.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca
+}
+
+.nav-stacked > li {
+ float: none
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0
+}
+
+.nav-justified {
+ width: 100%
+}
+
+.nav-justified > li {
+ float: none
+}
+
+.nav-justified > li > a {
+ text-align: center;
+ margin-bottom: 5px
+}
+
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+
+ .nav-justified > li > a {
+ margin-bottom: 0
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px
+}
+
+.nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd
+}
+
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0
+ }
+
+ .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff
+ }
+}
+
+.tab-content > .tab-pane {
+ display: none
+}
+
+.tab-content > .active {
+ display: block
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ overflow-x: visible;
+ padding-right: 15px;
+ padding-left: 15px;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ -webkit-overflow-scrolling: touch
+}
+
+.navbar-collapse.in {
+ overflow-y: auto
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible
+ }
+
+ .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse {
+ padding-left: 0;
+ padding-right: 0
+ }
+}
+
+.container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top, .navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top, .navbar-fixed-bottom {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0
+}
+
+.navbar-brand {
+ float: left;
+ padding: 15px;
+ font-size: 18px;
+ line-height: 20px;
+ height: 50px
+}
+
+.navbar-brand:hover, .navbar-brand:focus {
+ text-decoration: none
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: 15px;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.navbar-toggle:focus {
+ outline: 0
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0
+ }
+
+ .navbar-nav > li {
+ float: left
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px
+ }
+
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -15px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important
+ }
+
+ .navbar-right {
+ float: right !important
+ }
+}
+
+.navbar-form {
+ margin-left: -15px;
+ margin-right: -15px;
+ padding: 10px 15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .navbar-form .input-group > .form-control {
+ width: 100%
+ }
+
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .radio, .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .radio input[type=radio], .navbar-form .checkbox input[type=checkbox] {
+ float: none;
+ margin-left: 0
+ }
+
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+ }
+
+ .navbar-form.navbar-right:last-child {
+ margin-right: -15px
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-left: 15px;
+ margin-right: 15px
+ }
+
+ .navbar-text.navbar-right:last-child {
+ margin-right: 0
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7
+}
+
+.navbar-default .navbar-brand {
+ color: #777
+}
+
+.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent
+}
+
+.navbar-default .navbar-text {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent
+}
+
+.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd
+}
+
+.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
+ background-color: #ddd
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888
+}
+
+.navbar-default .navbar-collapse, .navbar-default .navbar-form {
+ border-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {
+ background-color: #e7e7e7;
+ color: #555
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999
+}
+
+.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-text {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+}
+
+.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333
+}
+
+.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
+ background-color: #333
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff
+}
+
+.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
+ border-color: #101010
+}
+
+.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
+ background-color: #080808;
+ color: #fff
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px
+}
+
+.breadcrumb > li {
+ display: inline-block
+}
+
+.breadcrumb > li + li:before {
+ content: "/\00a0";
+ padding: 0 5px;
+ color: #ccc
+}
+
+.breadcrumb > .active {
+ color: #999
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px
+}
+
+.pagination > li {
+ display: inline
+}
+
+.pagination > li > a, .pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ line-height: 1.42857143;
+ text-decoration: none;
+ color: #428bca;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ margin-left: -1px
+}
+
+.pagination > li:first-child > a, .pagination > li:first-child > span {
+ margin-left: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.pagination > li:last-child > a, .pagination > li:last-child > span {
+ border-bottom-right-radius: 4px;
+ border-top-right-radius: 4px
+}
+
+.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd
+}
+
+.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+ cursor: default
+}
+
+.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus {
+ color: #999;
+ background-color: #fff;
+ border-color: #ddd;
+ cursor: not-allowed
+}
+
+.pagination-lg > li > a, .pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px
+}
+
+.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px
+}
+
+.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span {
+ border-bottom-right-radius: 6px;
+ border-top-right-radius: 6px
+}
+
+.pagination-sm > li > a, .pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px
+}
+
+.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ list-style: none;
+ text-align: center
+}
+
+.pager li {
+ display: inline
+}
+
+.pager li > a, .pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px
+}
+
+.pager li > a:hover, .pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.pager .next > a, .pager .next > span {
+ float: right
+}
+
+.pager .previous > a, .pager .previous > span {
+ float: left
+}
+
+.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span {
+ color: #999;
+ background-color: #fff;
+ cursor: not-allowed
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em
+}
+
+.label[href]:hover, .label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.label:empty {
+ display: none
+}
+
+.btn .label {
+ position: relative;
+ top: -1px
+}
+
+.label-default {
+ background-color: #999
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: gray
+}
+
+.label-primary {
+ background-color: #428bca
+}
+
+.label-primary[href]:hover, .label-primary[href]:focus {
+ background-color: #3071a9
+}
+
+.label-success {
+ background-color: #5cb85c
+}
+
+.label-success[href]:hover, .label-success[href]:focus {
+ background-color: #449d44
+}
+
+.label-info {
+ background-color: #5bc0de
+}
+
+.label-info[href]:hover, .label-info[href]:focus {
+ background-color: #31b0d5
+}
+
+.label-warning {
+ background-color: #f0ad4e
+}
+
+.label-warning[href]:hover, .label-warning[href]:focus {
+ background-color: #ec971f
+}
+
+.label-danger {
+ background-color: #d9534f
+}
+
+.label-danger[href]:hover, .label-danger[href]:focus {
+ background-color: #c9302c
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ color: #fff;
+ line-height: 1;
+ vertical-align: baseline;
+ white-space: nowrap;
+ text-align: center;
+ background-color: #999;
+ border-radius: 10px
+}
+
+.badge:empty {
+ display: none
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px
+}
+
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px
+}
+
+a.badge:hover, a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+a.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee
+}
+
+.jumbotron h1, .jumbotron .h1 {
+ color: inherit
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200
+}
+
+.container .jumbotron {
+ border-radius: 6px
+}
+
+.jumbotron .container {
+ max-width: 100%
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px
+ }
+
+ .container .jumbotron {
+ padding-left: 60px;
+ padding-right: 60px
+ }
+
+ .jumbotron h1, .jumbotron .h1 {
+ font-size: 63px
+ }
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out
+}
+
+.thumbnail > img, .thumbnail a > img {
+ margin-left: auto;
+ margin-right: auto
+}
+
+a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active {
+ border-color: #428bca
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit
+}
+
+.alert .alert-link {
+ font-weight: 700
+}
+
+.alert > p, .alert > ul {
+ margin-bottom: 0
+}
+
+.alert > p + p {
+ margin-top: 5px
+}
+
+.alert-dismissable {
+ padding-right: 35px
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit
+}
+
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3
+}
+
+.alert-success .alert-link {
+ color: #2b542c
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+ color: #31708f
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec
+}
+
+.alert-info .alert-link {
+ color: #245269
+}
+
+.alert-warning {
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+ color: #8a6d3b
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5
+}
+
+.alert-warning .alert-link {
+ color: #66512c
+}
+
+.alert-danger {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0
+}
+
+.alert-danger .alert-link {
+ color: #843534
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+.progress {
+ overflow: hidden;
+ height: 20px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1)
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite
+}
+
+.progress-bar-success {
+ background-color: #5cb85c
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-info {
+ background-color: #5bc0de
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-danger {
+ background-color: #d9534f
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.media, .media-body {
+ overflow: hidden;
+ zoom: 1
+}
+
+.media, .media .media {
+ margin-top: 15px
+}
+
+.media:first-child {
+ margin-top: 0
+}
+
+.media-object {
+ display: block
+}
+
+.media-heading {
+ margin: 0 0 5px
+}
+
+.media > .pull-left {
+ margin-right: 10px
+}
+
+.media > .pull-right {
+ margin-left: 10px
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-group {
+ margin-bottom: 20px;
+ padding-left: 0
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd
+}
+
+.list-group-item:first-child {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px
+}
+
+.list-group-item > .badge {
+ float: right
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px
+}
+
+a.list-group-item {
+ color: #555
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333
+}
+
+a.list-group-item:hover, a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5
+}
+
+a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8
+}
+
+a.list-group-item-success {
+ color: #3c763d
+}
+
+a.list-group-item-success .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-success:hover, a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6
+}
+
+a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7
+}
+
+a.list-group-item-info {
+ color: #31708f
+}
+
+a.list-group-item-info .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-info:hover, a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3
+}
+
+a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3
+}
+
+a.list-group-item-warning {
+ color: #8a6d3b
+}
+
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-warning:hover, a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc
+}
+
+a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede
+}
+
+a.list-group-item-danger {
+ color: #a94442
+}
+
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-danger:hover, a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc
+}
+
+a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05)
+}
+
+.panel-body {
+ padding: 15px
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit
+}
+
+.panel-title > a {
+ color: inherit
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel > .list-group {
+ margin-bottom: 0
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0
+}
+
+.panel > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0
+}
+
+.panel > .table, .panel > .table-responsive > .table {
+ margin-bottom: 0
+}
+
+.panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child {
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px
+}
+
+.panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px
+}
+
+.panel > .panel-body + .table, .panel > .panel-body + .table-responsive {
+ border-top: 1px solid #ddd
+}
+
+.panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0
+}
+
+.panel > .table-bordered, .panel > .table-responsive > .table-bordered {
+ border: 0
+}
+
+.panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0
+}
+
+.panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0
+}
+
+.panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0
+}
+
+.panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0
+}
+
+.panel > .table-responsive {
+ border: 0;
+ margin-bottom: 0
+}
+
+.panel-group {
+ margin-bottom: 20px
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+ overflow: hidden
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd
+}
+
+.panel-group .panel-footer {
+ border-top: 0
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd
+}
+
+.panel-default {
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd
+}
+
+.panel-primary {
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca
+}
+
+.panel-success {
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6
+}
+
+.panel-info {
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1
+}
+
+.panel-warning {
+ border-color: #faebcc
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc
+}
+
+.panel-danger {
+ border-color: #ebccd1
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05)
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15)
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .2;
+ filter: alpha(opacity=20)
+}
+
+.close:hover, .close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: 0 0;
+ border: 0;
+ -webkit-appearance: none
+}
+
+.modal-open {
+ overflow: hidden
+}
+
+.modal {
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ -webkit-overflow-scrolling: touch;
+ outline: 0
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0)
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ background-clip: padding-box;
+ outline: 0
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+.modal-backdrop.in {
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+.modal-header {
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+ min-height: 16.42857143px
+}
+
+.modal-header .close {
+ margin-top: -2px
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px
+}
+
+.modal-footer {
+ margin-top: 15px;
+ padding: 19px 20px 20px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5
+}
+
+.modal-footer .btn + .btn {
+ margin-left: 5px;
+ margin-bottom: 0
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
+ }
+
+ .modal-sm {
+ width: 300px
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ visibility: visible;
+ font-size: 12px;
+ line-height: 1.4;
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+.tooltip.in {
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.tooltip.top {
+ margin-top: -3px;
+ padding: 5px 0
+}
+
+.tooltip.right {
+ margin-left: 3px;
+ padding: 0 5px
+}
+
+.tooltip.bottom {
+ margin-top: 3px;
+ padding: 5px 0
+}
+
+.tooltip.left {
+ margin-left: -3px;
+ padding: 0 5px
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ right: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ white-space: normal
+}
+
+.popover.top {
+ margin-top: -10px
+}
+
+.popover.right {
+ margin-left: 10px
+}
+
+.popover.bottom {
+ margin-top: 10px
+}
+
+.popover.left {
+ margin-left: -10px
+}
+
+.popover-title {
+ margin: 0;
+ padding: 8px 14px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0
+}
+
+.popover-content {
+ padding: 9px 14px
+}
+
+.popover > .arrow, .popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.popover > .arrow {
+ border-width: 11px
+}
+
+.popover > .arrow:after {
+ border-width: 10px;
+ content: ""
+}
+
+.popover.top > .arrow {
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-width: 0;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ bottom: -11px
+}
+
+.popover.top > .arrow:after {
+ content: " ";
+ bottom: 1px;
+ margin-left: -10px;
+ border-bottom-width: 0;
+ border-top-color: #fff
+}
+
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-left-width: 0;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25)
+}
+
+.popover.right > .arrow:after {
+ content: " ";
+ left: 1px;
+ bottom: -10px;
+ border-left-width: 0;
+ border-right-color: #fff
+}
+
+.popover.bottom > .arrow {
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+ top: -11px
+}
+
+.popover.bottom > .arrow:after {
+ content: " ";
+ top: 1px;
+ margin-left: -10px;
+ border-top-width: 0;
+ border-bottom-color: #fff
+}
+
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25)
+}
+
+.popover.left > .arrow:after {
+ content: " ";
+ right: 1px;
+ border-right-width: 0;
+ border-left-color: #fff;
+ bottom: -10px
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%
+}
+
+.carousel-inner > .item {
+ display: none;
+ position: relative;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left
+}
+
+.carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ line-height: 1
+}
+
+.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev {
+ display: block
+}
+
+.carousel-inner > .active {
+ left: 0
+}
+
+.carousel-inner > .next, .carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%
+}
+
+.carousel-inner > .next {
+ left: 100%
+}
+
+.carousel-inner > .prev {
+ left: -100%
+}
+
+.carousel-inner > .next.left, .carousel-inner > .prev.right {
+ left: 0
+}
+
+.carousel-inner > .active.left {
+ left: -100%
+}
+
+.carousel-inner > .active.right {
+ left: 100%
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 15%;
+ opacity: .5;
+ filter: alpha(opacity=50);
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)
+}
+
+.carousel-control.right {
+ left: auto;
+ right: 0;
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)
+}
+
+.carousel-control:hover, .carousel-control:focus {
+ outline: 0;
+ color: #fff;
+ text-decoration: none;
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block
+}
+
+.carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left {
+ left: 50%
+}
+
+.carousel-control .icon-next, .carousel-control .glyphicon-chevron-right {
+ right: 50%
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039'
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a'
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid #fff;
+ border-radius: 10px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0)
+}
+
+.carousel-indicators .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: #fff
+}
+
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
+}
+
+.carousel-caption .btn {
+ text-shadow: none
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px
+ }
+
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px
+ }
+
+ .carousel-indicators {
+ bottom: 20px
+ }
+}
+
+.clearfix:before, .clearfix:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .modal-footer:before, .modal-footer:after {
+ content: " ";
+ display: table
+}
+
+.clearfix:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .modal-footer:after {
+ clear: both
+}
+
+.center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto
+}
+
+.pull-right {
+ float: right !important
+}
+
+.pull-left {
+ float: left !important
+}
+
+.hide {
+ display: none !important
+}
+
+.show {
+ display: block !important
+}
+
+.invisible {
+ visibility: hidden
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important
+}
+
+.affix {
+ position: fixed
+}
+
+@-ms-viewport {
+ width: device-width
+}
+
+.visible-xs, .visible-sm, .visible-md, .visible-lg {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important
+ }
+
+ table.visible-xs {
+ display: table
+ }
+
+ tr.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-xs, td.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important
+ }
+
+ table.visible-sm {
+ display: table
+ }
+
+ tr.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-sm, td.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important
+ }
+
+ table.visible-md {
+ display: table
+ }
+
+ tr.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-md, td.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important
+ }
+
+ table.visible-lg {
+ display: table
+ }
+
+ tr.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-lg, td.visible-lg {
+ display: table-cell !important
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important
+ }
+}
+
+.visible-print {
+ display: none !important
+}
+
+@media print {
+ .visible-print {
+ display: block !important
+ }
+
+ table.visible-print {
+ display: table
+ }
+
+ tr.visible-print {
+ display: table-row !important
+ }
+
+ th.visible-print, td.visible-print {
+ display: table-cell !important
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important
+ }
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.js
new file mode 100644
index 00000000..89c5c94f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.js
@@ -0,0 +1,1972 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.1.1
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ 'WebkitTransition': 'webkitTransitionEnd',
+ 'MozTransition': 'transitionend',
+ 'OTransition': 'oTransitionEnd otransitionend',
+ 'transition': 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return {end: transEndEventNames[name]}
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false, $el = this
+ $(this).one($.support.transition.end, function () {
+ called = true
+ })
+ var callback = function () {
+ if (!called) $($el).trigger($.support.transition.end)
+ }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.1.1
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.hasClass('alert') ? $this : $this.parent()
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ $parent.trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one($.support.transition.end, removeElement)
+ .emulateTransitionEnd(150) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.alert
+
+ $.fn.alert = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.1.1
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state = state + 'Text'
+
+ if (!data.resetText) $el.data('resetText', $el[val]())
+
+ $el[val](data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
+ else $parent.find('.active').removeClass('active')
+ }
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ }
+
+ if (changed) this.$element.toggleClass('active')
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ var old = $.fn.button
+
+ $.fn.button = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ $btn.button('toggle')
+ e.preventDefault()
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.1.1
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused =
+ this.sliding =
+ this.interval =
+ this.$active =
+ this.$items = null
+
+ this.options.pause == 'hover' && this.$element
+ .on('mouseenter', $.proxy(this.pause, this))
+ .on('mouseleave', $.proxy(this.cycle, this))
+ }
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getActiveIndex = function () {
+ this.$active = this.$element.find('.item.active')
+ this.$items = this.$active.parent().children()
+
+ return this.$items.index(this.$active)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getActiveIndex()
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () {
+ that.to(pos)
+ })
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || $active[type]()
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var fallback = type == 'next' ? 'first' : 'last'
+ var that = this
+
+ if (!$next.length) {
+ if (!this.options.wrap) return
+ $next = this.$element.find('.item')[fallback]()
+ }
+
+ if ($next.hasClass('active')) return this.sliding = false
+
+ var e = $.Event('slide.bs.carousel', {relatedTarget: $next[0], direction: direction})
+ this.$element.trigger(e)
+ if (e.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ this.$element.one('slid.bs.carousel', function () {
+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
+ $nextIndicator && $nextIndicator.addClass('active')
+ })
+ }
+
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one($.support.transition.end, function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger('slid.bs.carousel')
+ }, 0)
+ })
+ .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger('slid.bs.carousel')
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
+ var $this = $(this), href
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ $target.carousel(options)
+
+ if (slideIndex = $this.attr('data-slide-to')) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ })
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ $carousel.carousel($carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.1.1
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.transitioning = null
+
+ if (this.options.parent) this.$parent = $(this.options.parent)
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var actives = this.$parent && this.$parent.find('> .panel > .in')
+
+ if (actives && actives.length) {
+ var hasData = actives.data('bs.collapse')
+ if (hasData && hasData.transitioning) return
+ actives.collapse('hide')
+ hasData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')
+ [dimension](0)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')
+ [dimension]('auto')
+ this.transitioning = 0
+ this.$element.trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one($.support.transition.end, $.proxy(complete, this))
+ .emulateTransitionEnd(350)
+ [dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element
+ [dimension](this.$element[dimension]())
+ [0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse')
+ .removeClass('in')
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .trigger('hidden.bs.collapse')
+ .removeClass('collapsing')
+ .addClass('collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one($.support.transition.end, $.proxy(complete, this))
+ .emulateTransitionEnd(350)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && option == 'show') option = !option
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
+ var $this = $(this), href
+ var target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+ var $target = $(target)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+ var parent = $this.attr('data-parent')
+ var $parent = parent && $(parent)
+
+ if (!data || !data.transitioning) {
+ if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
+ }
+
+ $target.collapse(option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.1.1
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle=dropdown]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
+ }
+
+ var relatedTarget = {relatedTarget: this}
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+
+ $this.focus()
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27)/.test(e.keyCode)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive || (isActive && e.keyCode == 27)) {
+ if (e.which == 27) $parent.find(toggle).focus()
+ return $this.click()
+ }
+
+ var desc = ' li:not(.divider):visible a'
+ var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index($items.filter(':focus'))
+
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).focus()
+ }
+
+ function clearMenus(e) {
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $parent = getParent($(this))
+ var relatedTarget = {relatedTarget: this}
+ if (!$parent.hasClass('open')) return
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+ if (e.isDefaultPrevented()) return
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) {
+ e.stopPropagation()
+ })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.1.1
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$element = $(element)
+ this.$backdrop =
+ this.isShown = null
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget})
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.escape()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(document.body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass('in')
+ .attr('aria-hidden', false)
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', {relatedTarget: _relatedTarget})
+
+ transition ?
+ that.$element.find('.modal-dialog') // wait for modal to slide in
+ .one($.support.transition.end, function () {
+ that.$element.focus().trigger(e)
+ })
+ .emulateTransitionEnd(300) :
+ that.$element.focus().trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .attr('aria-hidden', true)
+ .off('click.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one($.support.transition.end, $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(300) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.focus()
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keyup.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.removeBackdrop()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+ .appendTo(document.body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call(this.$element[0])
+ : this.hide.call(this)
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one($.support.transition.end, callback)
+ .emulateTransitionEnd(150) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one($.support.transition.end, callback)
+ .emulateTransitionEnd(150) :
+ callback()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.modal
+
+ $.fn.modal = function (option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({remote: !/#/.test(href) && href}, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target
+ .modal(option, this)
+ .one('hide', function () {
+ $this.is(':visible') && $this.focus()
+ })
+ })
+
+ $(document)
+ .on('show.bs.modal', '.modal', function () {
+ $(document.body).addClass('modal-open')
+ })
+ .on('hidden.bs.modal', '.modal', function () {
+ $(document.body).removeClass('modal-open')
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.1.1
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type =
+ this.options =
+ this.enabled =
+ this.timeout =
+ this.hoverState =
+ this.$element = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+ var that = this;
+
+ var $tip = this.tip()
+
+ this.setContent()
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({top: 0, left: 0, display: 'block'})
+ .addClass(placement)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var $parent = this.$element.parent()
+
+ var orgPlacement = placement
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
+
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+ this.hoverState = null
+
+ var complete = function () {
+ that.$element.trigger('shown.bs.' + that.type)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one($.support.transition.end, complete)
+ .emulateTransitionEnd(150) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var replace
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top = offset.top + marginTop
+ offset.left = offset.left + marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ replace = true
+ offset.top = offset.top + height - actualHeight
+ }
+
+ if (/bottom|top/.test(placement)) {
+ var delta = 0
+
+ if (offset.left < 0) {
+ delta = offset.left * -2
+ offset.left = 0
+
+ $tip.offset(offset)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+ }
+
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
+ } else {
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
+ }
+
+ if (replace) $tip.offset(offset)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function () {
+ var that = this
+ var $tip = this.tip()
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element.trigger('hidden.bs.' + that.type)
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one($.support.transition.end, complete)
+ .emulateTransitionEnd(150) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function () {
+ var el = this.$element[0]
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
+ width: el.offsetWidth,
+ height: el.offsetHeight
+ }, this.$element.offset())
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} :
+ placement == 'top' ? {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} :
+ placement == 'left' ? {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} :
+ /* placement == 'right' */ {
+ top: pos.top + pos.height / 2 - actualHeight / 2,
+ left: pos.left + pos.width
+ }
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.tip = function () {
+ return this.$tip = this.$tip || $(this.options.template)
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
+ }
+
+ Tooltip.prototype.validate = function () {
+ if (!this.$element[0].parentNode) {
+ this.hide()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+
+ Tooltip.prototype.destroy = function () {
+ clearTimeout(this.timeout)
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && option == 'destroy') return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.1.1
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content')[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find('.arrow')
+ }
+
+ Popover.prototype.tip = function () {
+ if (!this.$tip) this.$tip = $(this.options.template)
+ return this.$tip
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.popover
+
+ $.fn.popover = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && option == 'destroy') return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.1.1
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ var href
+ var process = $.proxy(this.process, this)
+
+ this.$element = $(element).is('body') ? $(window) : $(element)
+ this.$body = $('body')
+ this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.offsets = $([])
+ this.targets = $([])
+ this.activeTarget = null
+
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
+
+ this.offsets = $([])
+ this.targets = $([])
+
+ var self = this
+ var $targets = this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href]]) || null
+ })
+ .sort(function (a, b) {
+ return a[0] - b[0]
+ })
+ .each(function () {
+ self.offsets.push(this[0])
+ self.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
+ var maxScroll = scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets.last()[0]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop <= offsets[0]) {
+ return activeTarget != (i = targets[0]) && this.activate(i)
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ $spy.scrollspy($spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.1.1
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ this.element = $(element)
+ }
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var previous = $ul.find('.active:last a')[0]
+ var e = $.Event('show.bs.tab', {
+ relatedTarget: previous
+ })
+
+ $this.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.parent('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: previous
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && $active.hasClass('fade')
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+
+ element.addClass('active')
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu')) {
+ element.closest('li.dropdown').addClass('active')
+ }
+
+ callback && callback()
+ }
+
+ transition ?
+ $active
+ .one($.support.transition.end, next)
+ .emulateTransitionEnd(150) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ var old = $.fn.tab
+
+ $.fn.tab = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.1.1
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+ this.$window = $(window)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed =
+ this.unpin =
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$window.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var scrollHeight = $(document).height()
+ var scrollTop = this.$window.scrollTop()
+ var position = this.$element.offset()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+
+ if (this.affixed == 'top') position.top += scrollTop
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+
+ if (this.affixed === affix) return
+ if (this.unpin) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger($.Event(affixType.replace('affix', 'affixed')))
+
+ if (affix == 'bottom') {
+ this.$element.offset({top: scrollHeight - offsetBottom - this.$element.height()})
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.affix
+
+ $.fn.affix = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop) data.offset.top = data.offsetTop
+
+ $spy.affix(data)
+ })
+ })
+
+}(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.min.js
new file mode 100644
index 00000000..4d171b85
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,619 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+if ("undefined" == typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");
++function (a) {
+ "use strict";
+ function b() {
+ var a = document.createElement("bootstrap"), b = {
+ WebkitTransition: "webkitTransitionEnd",
+ MozTransition: "transitionend",
+ OTransition: "oTransitionEnd otransitionend",
+ transition: "transitionend"
+ };
+ for (var c in b)if (void 0 !== a.style[c])return {end: b[c]};
+ return !1
+ }
+
+ a.fn.emulateTransitionEnd = function (b) {
+ var c = !1, d = this;
+ a(this).one(a.support.transition.end, function () {
+ c = !0
+ });
+ var e = function () {
+ c || a(d).trigger(a.support.transition.end)
+ };
+ return setTimeout(e, b), this
+ }, a(function () {
+ a.support.transition = b()
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = '[data-dismiss="alert"]', c = function (c) {
+ a(c).on("click", b, this.close)
+ };
+ c.prototype.close = function (b) {
+ function c() {
+ f.trigger("closed.bs.alert").remove()
+ }
+
+ var d = a(this), e = d.attr("data-target");
+ e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, ""));
+ var f = a(e);
+ b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one(a.support.transition.end, c).emulateTransitionEnd(150) : c())
+ };
+ var d = a.fn.alert;
+ a.fn.alert = function (b) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.alert");
+ e || d.data("bs.alert", e = new c(this)), "string" == typeof b && e[b].call(d)
+ })
+ }, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function () {
+ return a.fn.alert = d, this
+ }, a(document).on("click.bs.alert.data-api", b, c.prototype.close)
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.isLoading = !1
+ };
+ b.DEFAULTS = {loadingText: "loading..."}, b.prototype.setState = function (b) {
+ var c = "disabled", d = this.$element, e = d.is("input") ? "val" : "html", f = d.data();
+ b += "Text", f.resetText || d.data("resetText", d[e]()), d[e](f[b] || this.options[b]), setTimeout(a.proxy(function () {
+ "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c))
+ }, this), 0)
+ }, b.prototype.toggle = function () {
+ var a = !0, b = this.$element.closest('[data-toggle="buttons"]');
+ if (b.length) {
+ var c = this.$element.find("input");
+ "radio" == c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? a = !1 : b.find(".active").removeClass("active")), a && c.prop("checked", !this.$element.hasClass("active")).trigger("change")
+ }
+ a && this.$element.toggleClass("active")
+ };
+ var c = a.fn.button;
+ a.fn.button = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.button"), f = "object" == typeof c && c;
+ e || d.data("bs.button", e = new b(this, f)), "toggle" == c ? e.toggle() : c && e.setState(c)
+ })
+ }, a.fn.button.Constructor = b, a.fn.button.noConflict = function () {
+ return a.fn.button = c, this
+ }, a(document).on("click.bs.button.data-api", "[data-toggle^=button]", function (b) {
+ var c = a(b.target);
+ c.hasClass("btn") || (c = c.closest(".btn")), c.button("toggle"), b.preventDefault()
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b, c) {
+ this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on("mouseenter", a.proxy(this.pause, this)).on("mouseleave", a.proxy(this.cycle, this))
+ };
+ b.DEFAULTS = {interval: 5e3, pause: "hover", wrap: !0}, b.prototype.cycle = function (b) {
+ return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this
+ }, b.prototype.getActiveIndex = function () {
+ return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
+ }, b.prototype.to = function (b) {
+ var c = this, d = this.getActiveIndex();
+ return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function () {
+ c.to(b)
+ }) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b]))
+ }, b.prototype.pause = function (b) {
+ return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
+ }, b.prototype.next = function () {
+ return this.sliding ? void 0 : this.slide("next")
+ }, b.prototype.prev = function () {
+ return this.sliding ? void 0 : this.slide("prev")
+ }, b.prototype.slide = function (b, c) {
+ var d = this.$element.find(".item.active"), e = c || d[b](), f = this.interval, g = "next" == b ? "left" : "right", h = "next" == b ? "first" : "last", i = this;
+ if (!e.length) {
+ if (!this.options.wrap)return;
+ e = this.$element.find(".item")[h]()
+ }
+ if (e.hasClass("active"))return this.sliding = !1;
+ var j = a.Event("slide.bs.carousel", {relatedTarget: e[0], direction: g});
+ return this.$element.trigger(j), j.isDefaultPrevented() ? void 0 : (this.sliding = !0, f && this.pause(), this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid.bs.carousel", function () {
+ var b = a(i.$indicators.children()[i.getActiveIndex()]);
+ b && b.addClass("active")
+ })), a.support.transition && this.$element.hasClass("slide") ? (e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one(a.support.transition.end, function () {
+ e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join(" ")), i.sliding = !1, setTimeout(function () {
+ i.$element.trigger("slid.bs.carousel")
+ }, 0)
+ }).emulateTransitionEnd(1e3 * d.css("transition-duration").slice(0, -1))) : (d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger("slid.bs.carousel")), f && this.cycle(), this)
+ };
+ var c = a.fn.carousel;
+ a.fn.carousel = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.carousel"), f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c), g = "string" == typeof c ? c : f.slide;
+ e || d.data("bs.carousel", e = new b(this, f)), "number" == typeof c ? e.to(c) : g ? e[g]() : f.interval && e.pause().cycle()
+ })
+ }, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function () {
+ return a.fn.carousel = c, this
+ }, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function (b) {
+ var c, d = a(this), e = a(d.attr("data-target") || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")), f = a.extend({}, e.data(), d.data()), g = d.attr("data-slide-to");
+ g && (f.interval = !1), e.carousel(f), (g = d.attr("data-slide-to")) && e.data("bs.carousel").to(g), b.preventDefault()
+ }), a(window).on("load", function () {
+ a('[data-ride="carousel"]').each(function () {
+ var b = a(this);
+ b.carousel(b.data())
+ })
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle()
+ };
+ b.DEFAULTS = {toggle: !0}, b.prototype.dimension = function () {
+ var a = this.$element.hasClass("width");
+ return a ? "width" : "height"
+ }, b.prototype.show = function () {
+ if (!this.transitioning && !this.$element.hasClass("in")) {
+ var b = a.Event("show.bs.collapse");
+ if (this.$element.trigger(b), !b.isDefaultPrevented()) {
+ var c = this.$parent && this.$parent.find("> .panel > .in");
+ if (c && c.length) {
+ var d = c.data("bs.collapse");
+ if (d && d.transitioning)return;
+ c.collapse("hide"), d || c.data("bs.collapse", null)
+ }
+ var e = this.dimension();
+ this.$element.removeClass("collapse").addClass("collapsing")[e](0), this.transitioning = 1;
+ var f = function () {
+ this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
+ };
+ if (!a.support.transition)return f.call(this);
+ var g = a.camelCase(["scroll", e].join("-"));
+ this.$element.one(a.support.transition.end, a.proxy(f, this)).emulateTransitionEnd(350)[e](this.$element[0][g])
+ }
+ }
+ }, b.prototype.hide = function () {
+ if (!this.transitioning && this.$element.hasClass("in")) {
+ var b = a.Event("hide.bs.collapse");
+ if (this.$element.trigger(b), !b.isDefaultPrevented()) {
+ var c = this.dimension();
+ this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
+ var d = function () {
+ this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")
+ };
+ return a.support.transition ? void this.$element[c](0).one(a.support.transition.end, a.proxy(d, this)).emulateTransitionEnd(350) : d.call(this)
+ }
+ }
+ }, b.prototype.toggle = function () {
+ this[this.$element.hasClass("in") ? "hide" : "show"]()
+ };
+ var c = a.fn.collapse;
+ a.fn.collapse = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.collapse"), f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c);
+ !e && f.toggle && "show" == c && (c = !c), e || d.data("bs.collapse", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function () {
+ return a.fn.collapse = c, this
+ }, a(document).on("click.bs.collapse.data-api", "[data-toggle=collapse]", function (b) {
+ var c, d = a(this), e = d.attr("data-target") || b.preventDefault() || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, ""), f = a(e), g = f.data("bs.collapse"), h = g ? "toggle" : d.data(), i = d.attr("data-parent"), j = i && a(i);
+ g && g.transitioning || (j && j.find('[data-toggle=collapse][data-parent="' + i + '"]').not(d).addClass("collapsed"), d[f.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), f.collapse(h)
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ function b(b) {
+ a(d).remove(), a(e).each(function () {
+ var d = c(a(this)), e = {relatedTarget: this};
+ d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown", e)), b.isDefaultPrevented() || d.removeClass("open").trigger("hidden.bs.dropdown", e))
+ })
+ }
+
+ function c(b) {
+ var c = b.attr("data-target");
+ c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
+ var d = c && a(c);
+ return d && d.length ? d : b.parent()
+ }
+
+ var d = ".dropdown-backdrop", e = "[data-toggle=dropdown]", f = function (b) {
+ a(b).on("click.bs.dropdown", this.toggle)
+ };
+ f.prototype.toggle = function (d) {
+ var e = a(this);
+ if (!e.is(".disabled, :disabled")) {
+ var f = c(e), g = f.hasClass("open");
+ if (b(), !g) {
+ "ontouchstart"in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b);
+ var h = {relatedTarget: this};
+ if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented())return;
+ f.toggleClass("open").trigger("shown.bs.dropdown", h), e.focus()
+ }
+ return !1
+ }
+ }, f.prototype.keydown = function (b) {
+ if (/(38|40|27)/.test(b.keyCode)) {
+ var d = a(this);
+ if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
+ var f = c(d), g = f.hasClass("open");
+ if (!g || g && 27 == b.keyCode)return 27 == b.which && f.find(e).focus(), d.click();
+ var h = " li:not(.divider):visible a", i = f.find("[role=menu]" + h + ", [role=listbox]" + h);
+ if (i.length) {
+ var j = i.index(i.filter(":focus"));
+ 38 == b.keyCode && j > 0 && j--, 40 == b.keyCode && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).focus()
+ }
+ }
+ }
+ };
+ var g = a.fn.dropdown;
+ a.fn.dropdown = function (b) {
+ return this.each(function () {
+ var c = a(this), d = c.data("bs.dropdown");
+ d || c.data("bs.dropdown", d = new f(this)), "string" == typeof b && d[b].call(c)
+ })
+ }, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function () {
+ return a.fn.dropdown = g, this
+ }, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function (a) {
+ a.stopPropagation()
+ }).on("click.bs.dropdown.data-api", e, f.prototype.toggle).on("keydown.bs.dropdown.data-api", e + ", [role=menu], [role=listbox]", f.prototype.keydown)
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b, c) {
+ this.options = c, this.$element = a(b), this.$backdrop = this.isShown = null, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function () {
+ this.$element.trigger("loaded.bs.modal")
+ }, this))
+ };
+ b.DEFAULTS = {backdrop: !0, keyboard: !0, show: !0}, b.prototype.toggle = function (a) {
+ return this[this.isShown ? "hide" : "show"](a)
+ }, b.prototype.show = function (b) {
+ var c = this, d = a.Event("show.bs.modal", {relatedTarget: b});
+ this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.escape(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function () {
+ var d = a.support.transition && c.$element.hasClass("fade");
+ c.$element.parent().length || c.$element.appendTo(document.body), c.$element.show().scrollTop(0), d && c.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c.enforceFocus();
+ var e = a.Event("shown.bs.modal", {relatedTarget: b});
+ d ? c.$element.find(".modal-dialog").one(a.support.transition.end, function () {
+ c.$element.focus().trigger(e)
+ }).emulateTransitionEnd(300) : c.$element.focus().trigger(e)
+ }))
+ }, b.prototype.hide = function (b) {
+ b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one(a.support.transition.end, a.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
+ }, b.prototype.enforceFocus = function () {
+ a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) {
+ this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.focus()
+ }, this))
+ }, b.prototype.escape = function () {
+ this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function (a) {
+ 27 == a.which && this.hide()
+ }, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
+ }, b.prototype.hideModal = function () {
+ var a = this;
+ this.$element.hide(), this.backdrop(function () {
+ a.removeBackdrop(), a.$element.trigger("hidden.bs.modal")
+ })
+ }, b.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
+ }, b.prototype.backdrop = function (b) {
+ var c = this.$element.hasClass("fade") ? "fade" : "";
+ if (this.isShown && this.options.backdrop) {
+ var d = a.support.transition && c;
+ if (this.$backdrop = a('<div class="modal-backdrop ' + c + '" />').appendTo(document.body), this.$element.on("click.dismiss.bs.modal", a.proxy(function (a) {
+ a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
+ }, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b)return;
+ d ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()
+ } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()) : b && b()
+ };
+ var c = a.fn.modal;
+ a.fn.modal = function (c, d) {
+ return this.each(function () {
+ var e = a(this), f = e.data("bs.modal"), g = a.extend({}, b.DEFAULTS, e.data(), "object" == typeof c && c);
+ f || e.data("bs.modal", f = new b(this, g)), "string" == typeof c ? f[c](d) : g.show && f.show(d)
+ })
+ }, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function () {
+ return a.fn.modal = c, this
+ }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (b) {
+ var c = a(this), d = c.attr("href"), e = a(c.attr("data-target") || d && d.replace(/.*(?=#[^\s]+$)/, "")), f = e.data("bs.modal") ? "toggle" : a.extend({remote: !/#/.test(d) && d}, e.data(), c.data());
+ c.is("a") && b.preventDefault(), e.modal(f, this).one("hide", function () {
+ c.is(":visible") && c.focus()
+ })
+ }), a(document).on("show.bs.modal", ".modal", function () {
+ a(document.body).addClass("modal-open")
+ }).on("hidden.bs.modal", ".modal", function () {
+ a(document.body).removeClass("modal-open")
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (a, b) {
+ this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
+ };
+ b.DEFAULTS = {
+ animation: !0,
+ placement: "top",
+ selector: !1,
+ template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: "hover focus",
+ title: "",
+ delay: 0,
+ html: !1,
+ container: !1
+ }, b.prototype.init = function (b, c, d) {
+ this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d);
+ for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
+ var g = e[f];
+ if ("click" == g)this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this)); else if ("manual" != g) {
+ var h = "hover" == g ? "mouseenter" : "focusin", i = "hover" == g ? "mouseleave" : "focusout";
+ this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
+ }
+ }
+ this.options.selector ? this._options = a.extend({}, this.options, {
+ trigger: "manual",
+ selector: ""
+ }) : this.fixTitle()
+ }, b.prototype.getDefaults = function () {
+ return b.DEFAULTS
+ }, b.prototype.getOptions = function (b) {
+ return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
+ show: b.delay,
+ hide: b.delay
+ }), b
+ }, b.prototype.getDelegateOptions = function () {
+ var b = {}, c = this.getDefaults();
+ return this._options && a.each(this._options, function (a, d) {
+ c[a] != d && (b[a] = d)
+ }), b
+ }, b.prototype.enter = function (b) {
+ var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
+ return clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function () {
+ "in" == c.hoverState && c.show()
+ }, c.options.delay.show)) : c.show()
+ }, b.prototype.leave = function (b) {
+ var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
+ return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function () {
+ "out" == c.hoverState && c.hide()
+ }, c.options.delay.hide)) : c.hide()
+ }, b.prototype.show = function () {
+ var b = a.Event("show.bs." + this.type);
+ if (this.hasContent() && this.enabled) {
+ if (this.$element.trigger(b), b.isDefaultPrevented())return;
+ var c = this, d = this.tip();
+ this.setContent(), this.options.animation && d.addClass("fade");
+ var e = "function" == typeof this.options.placement ? this.options.placement.call(this, d[0], this.$element[0]) : this.options.placement, f = /\s?auto?\s?/i, g = f.test(e);
+ g && (e = e.replace(f, "") || "top"), d.detach().css({
+ top: 0,
+ left: 0,
+ display: "block"
+ }).addClass(e), this.options.container ? d.appendTo(this.options.container) : d.insertAfter(this.$element);
+ var h = this.getPosition(), i = d[0].offsetWidth, j = d[0].offsetHeight;
+ if (g) {
+ var k = this.$element.parent(), l = e, m = document.documentElement.scrollTop || document.body.scrollTop, n = "body" == this.options.container ? window.innerWidth : k.outerWidth(), o = "body" == this.options.container ? window.innerHeight : k.outerHeight(), p = "body" == this.options.container ? 0 : k.offset().left;
+ e = "bottom" == e && h.top + h.height + j - m > o ? "top" : "top" == e && h.top - m - j < 0 ? "bottom" : "right" == e && h.right + i > n ? "left" : "left" == e && h.left - i < p ? "right" : e, d.removeClass(l).addClass(e)
+ }
+ var q = this.getCalculatedOffset(e, h, i, j);
+ this.applyPlacement(q, e), this.hoverState = null;
+ var r = function () {
+ c.$element.trigger("shown.bs." + c.type)
+ };
+ a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, r).emulateTransitionEnd(150) : r()
+ }
+ }, b.prototype.applyPlacement = function (b, c) {
+ var d, e = this.tip(), f = e[0].offsetWidth, g = e[0].offsetHeight, h = parseInt(e.css("margin-top"), 10), i = parseInt(e.css("margin-left"), 10);
+ isNaN(h) && (h = 0), isNaN(i) && (i = 0), b.top = b.top + h, b.left = b.left + i, a.offset.setOffset(e[0], a.extend({
+ using: function (a) {
+ e.css({top: Math.round(a.top), left: Math.round(a.left)})
+ }
+ }, b), 0), e.addClass("in");
+ var j = e[0].offsetWidth, k = e[0].offsetHeight;
+ if ("top" == c && k != g && (d = !0, b.top = b.top + g - k), /bottom|top/.test(c)) {
+ var l = 0;
+ b.left < 0 && (l = -2 * b.left, b.left = 0, e.offset(b), j = e[0].offsetWidth, k = e[0].offsetHeight), this.replaceArrow(l - f + j, j, "left")
+ } else this.replaceArrow(k - g, k, "top");
+ d && e.offset(b)
+ }, b.prototype.replaceArrow = function (a, b, c) {
+ this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "")
+ }, b.prototype.setContent = function () {
+ var a = this.tip(), b = this.getTitle();
+ a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
+ }, b.prototype.hide = function () {
+ function b() {
+ "in" != c.hoverState && d.detach(), c.$element.trigger("hidden.bs." + c.type)
+ }
+
+ var c = this, d = this.tip(), e = a.Event("hide.bs." + this.type);
+ return this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, b).emulateTransitionEnd(150) : b(), this.hoverState = null, this)
+ }, b.prototype.fixTitle = function () {
+ var a = this.$element;
+ (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "")
+ }, b.prototype.hasContent = function () {
+ return this.getTitle()
+ }, b.prototype.getPosition = function () {
+ var b = this.$element[0];
+ return a.extend({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect() : {
+ width: b.offsetWidth,
+ height: b.offsetHeight
+ }, this.$element.offset())
+ }, b.prototype.getCalculatedOffset = function (a, b, c, d) {
+ return "bottom" == a ? {
+ top: b.top + b.height,
+ left: b.left + b.width / 2 - c / 2
+ } : "top" == a ? {
+ top: b.top - d,
+ left: b.left + b.width / 2 - c / 2
+ } : "left" == a ? {top: b.top + b.height / 2 - d / 2, left: b.left - c} : {
+ top: b.top + b.height / 2 - d / 2,
+ left: b.left + b.width
+ }
+ }, b.prototype.getTitle = function () {
+ var a, b = this.$element, c = this.options;
+ return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
+ }, b.prototype.tip = function () {
+ return this.$tip = this.$tip || a(this.options.template)
+ }, b.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
+ }, b.prototype.validate = function () {
+ this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
+ }, b.prototype.enable = function () {
+ this.enabled = !0
+ }, b.prototype.disable = function () {
+ this.enabled = !1
+ }, b.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }, b.prototype.toggle = function (b) {
+ var c = b ? a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this;
+ c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
+ }, b.prototype.destroy = function () {
+ clearTimeout(this.timeout), this.hide().$element.off("." + this.type).removeData("bs." + this.type)
+ };
+ var c = a.fn.tooltip;
+ a.fn.tooltip = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.tooltip"), f = "object" == typeof c && c;
+ (e || "destroy" != c) && (e || d.data("bs.tooltip", e = new b(this, f)), "string" == typeof c && e[c]())
+ })
+ }, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function () {
+ return a.fn.tooltip = c, this
+ }
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (a, b) {
+ this.init("popover", a, b)
+ };
+ if (!a.fn.tooltip)throw new Error("Popover requires tooltip.js");
+ b.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
+ placement: "right",
+ trigger: "click",
+ content: "",
+ template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ }), b.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype.getDefaults = function () {
+ return b.DEFAULTS
+ }, b.prototype.setContent = function () {
+ var a = this.tip(), b = this.getTitle(), c = this.getContent();
+ a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content")[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
+ }, b.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }, b.prototype.getContent = function () {
+ var a = this.$element, b = this.options;
+ return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
+ }, b.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find(".arrow")
+ }, b.prototype.tip = function () {
+ return this.$tip || (this.$tip = a(this.options.template)), this.$tip
+ };
+ var c = a.fn.popover;
+ a.fn.popover = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.popover"), f = "object" == typeof c && c;
+ (e || "destroy" != c) && (e || d.data("bs.popover", e = new b(this, f)), "string" == typeof c && e[c]())
+ })
+ }, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function () {
+ return a.fn.popover = c, this
+ }
+}(jQuery), +function (a) {
+ "use strict";
+ function b(c, d) {
+ var e, f = a.proxy(this.process, this);
+ this.$element = a(a(c).is("body") ? window : c), this.$body = a("body"), this.$scrollElement = this.$element.on("scroll.bs.scroll-spy.data-api", f), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || (e = a(c).attr("href")) && e.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.offsets = a([]), this.targets = a([]), this.activeTarget = null, this.refresh(), this.process()
+ }
+
+ b.DEFAULTS = {offset: 10}, b.prototype.refresh = function () {
+ var b = this.$element[0] == window ? "offset" : "position";
+ this.offsets = a([]), this.targets = a([]);
+ {
+ var c = this;
+ this.$body.find(this.selector).map(function () {
+ var d = a(this), e = d.data("target") || d.attr("href"), f = /^#./.test(e) && a(e);
+ return f && f.length && f.is(":visible") && [[f[b]().top + (!a.isWindow(c.$scrollElement.get(0)) && c.$scrollElement.scrollTop()), e]] || null
+ }).sort(function (a, b) {
+ return a[0] - b[0]
+ }).each(function () {
+ c.offsets.push(this[0]), c.targets.push(this[1])
+ })
+ }
+ }, b.prototype.process = function () {
+ var a, b = this.$scrollElement.scrollTop() + this.options.offset, c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, d = c - this.$scrollElement.height(), e = this.offsets, f = this.targets, g = this.activeTarget;
+ if (b >= d)return g != (a = f.last()[0]) && this.activate(a);
+ if (g && b <= e[0])return g != (a = f[0]) && this.activate(a);
+ for (a = e.length; a--;)g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
+ }, b.prototype.activate = function (b) {
+ this.activeTarget = b, a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active");
+ var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', d = a(c).parents("li").addClass("active");
+ d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
+ };
+ var c = a.fn.scrollspy;
+ a.fn.scrollspy = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.scrollspy"), f = "object" == typeof c && c;
+ e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () {
+ return a.fn.scrollspy = c, this
+ }, a(window).on("load", function () {
+ a('[data-spy="scroll"]').each(function () {
+ var b = a(this);
+ b.scrollspy(b.data())
+ })
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b) {
+ this.element = a(b)
+ };
+ b.prototype.show = function () {
+ var b = this.element, c = b.closest("ul:not(.dropdown-menu)"), d = b.data("target");
+ if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
+ var e = c.find(".active:last a")[0], f = a.Event("show.bs.tab", {relatedTarget: e});
+ if (b.trigger(f), !f.isDefaultPrevented()) {
+ var g = a(d);
+ this.activate(b.parent("li"), c), this.activate(g, g.parent(), function () {
+ b.trigger({type: "shown.bs.tab", relatedTarget: e})
+ })
+ }
+ }
+ }, b.prototype.activate = function (b, c, d) {
+ function e() {
+ f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active"), d && d()
+ }
+
+ var f = c.find("> .active"), g = d && a.support.transition && f.hasClass("fade");
+ g ? f.one(a.support.transition.end, e).emulateTransitionEnd(150) : e(), f.removeClass("in")
+ };
+ var c = a.fn.tab;
+ a.fn.tab = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.tab");
+ e || d.data("bs.tab", e = new b(this)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function () {
+ return a.fn.tab = c, this
+ }, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function (b) {
+ b.preventDefault(), a(this).tab("show")
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.options = a.extend({}, b.DEFAULTS, d), this.$window = a(window).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(c), this.affixed = this.unpin = this.pinnedOffset = null, this.checkPosition()
+ };
+ b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = {offset: 0}, b.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset)return this.pinnedOffset;
+ this.$element.removeClass(b.RESET).addClass("affix");
+ var a = this.$window.scrollTop(), c = this.$element.offset();
+ return this.pinnedOffset = c.top - a
+ }, b.prototype.checkPositionWithEventLoop = function () {
+ setTimeout(a.proxy(this.checkPosition, this), 1)
+ }, b.prototype.checkPosition = function () {
+ if (this.$element.is(":visible")) {
+ var c = a(document).height(), d = this.$window.scrollTop(), e = this.$element.offset(), f = this.options.offset, g = f.top, h = f.bottom;
+ "top" == this.affixed && (e.top += d), "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top(this.$element)), "function" == typeof h && (h = f.bottom(this.$element));
+ var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height() >= c - h ? "bottom" : null != g && g >= d ? "top" : !1;
+ if (this.affixed !== i) {
+ this.unpin && this.$element.css("top", "");
+ var j = "affix" + (i ? "-" + i : ""), k = a.Event(j + ".bs.affix");
+ this.$element.trigger(k), k.isDefaultPrevented() || (this.affixed = i, this.unpin = "bottom" == i ? this.getPinnedOffset() : null, this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix", "affixed"))), "bottom" == i && this.$element.offset({top: c - h - this.$element.height()}))
+ }
+ }
+ };
+ var c = a.fn.affix;
+ a.fn.affix = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.affix"), f = "object" == typeof c && c;
+ e || d.data("bs.affix", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function () {
+ return a.fn.affix = c, this
+ }, a(window).on("load", function () {
+ a('[data-spy="affix"]').each(function () {
+ var b = a(this), c = b.data();
+ c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c.offsetTop && (c.offset.top = c.offsetTop), b.affix(c)
+ })
+ })
+}(jQuery); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap2-typeahead.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap2-typeahead.min.js
new file mode 100644
index 00000000..a8447c20
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/bootstrap/js/bootstrap2-typeahead.min.js
@@ -0,0 +1,145 @@
+/* =============================================================
+ * bootstrap-typeahead.js v2.3.2
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function (t) {
+ "use strict";
+ var e = function (e, s) {
+ this.$element = t(e), this.options = t.extend({}, t.fn.typeahead.defaults, s), this.matcher = this.options.matcher || this.matcher, this.sorter = this.options.sorter || this.sorter, this.highlighter = this.options.highlighter || this.highlighter, this.updater = this.options.updater || this.updater, this.source = this.options.source, this.$menu = t(this.options.menu), this.shown = !1, this.listen()
+ };
+ e.prototype = {
+ constructor: e, select: function () {
+ var t = this.$menu.find(".active").attr("data-value");
+ return this.$element.val(this.updater(t)).change(), this.hide()
+ }, updater: function (t) {
+ return t
+ }, show: function () {
+ var e = t.extend({}, this.$element.position(), {height: this.$element[0].offsetHeight});
+ return this.$menu.insertAfter(this.$element).css({
+ top: e.top + e.height,
+ left: e.left
+ }).show(), this.shown = !0, this
+ }, hide: function () {
+ return this.$menu.hide(), this.shown = !1, this
+ }, lookup: function () {
+ var e;
+ return this.query = this.$element.val(), !this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (e = t.isFunction(this.source) ? this.source(this.query, t.proxy(this.process, this)) : this.source, e ? this.process(e) : this)
+ }, process: function (e) {
+ var s = this;
+ return e = t.grep(e, function (t) {
+ return s.matcher(t)
+ }), e = this.sorter(e), e.length ? this.render(e.slice(0, this.options.items)).show() : this.shown ? this.hide() : this
+ }, matcher: function (t) {
+ return ~t.toLowerCase().indexOf(this.query.toLowerCase())
+ }, sorter: function (t) {
+ for (var e, s = [], i = [], n = []; e = t.shift();)e.toLowerCase().indexOf(this.query.toLowerCase()) ? ~e.indexOf(this.query) ? i.push(e) : n.push(e) : s.push(e);
+ return s.concat(i, n)
+ }, highlighter: function (t) {
+ var e = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+ return t.replace(new RegExp("(" + e + ")", "ig"), function (t, e) {
+ return "<strong>" + e + "</strong>"
+ })
+ }, render: function (e) {
+ var s = this;
+ return e = t(e).map(function (e, i) {
+ return e = t(s.options.item).attr("data-value", i), e.find("a").html(s.highlighter(i)), e[0]
+ }), e.first().addClass("active"), this.$menu.html(e), this
+ }, next: function () {
+ var e = this.$menu.find(".active").removeClass("active"), s = e.next();
+ s.length || (s = t(this.$menu.find("li")[0])), s.addClass("active")
+ }, prev: function () {
+ var t = this.$menu.find(".active").removeClass("active"), e = t.prev();
+ e.length || (e = this.$menu.find("li").last()), e.addClass("active")
+ }, listen: function () {
+ this.$element.on("focus", t.proxy(this.focus, this)).on("blur", t.proxy(this.blur, this)).on("keypress", t.proxy(this.keypress, this)).on("keyup", t.proxy(this.keyup, this)), this.eventSupported("keydown") && this.$element.on("keydown", t.proxy(this.keydown, this)), this.$menu.on("click", t.proxy(this.click, this)).on("mouseenter", "li", t.proxy(this.mouseenter, this)).on("mouseleave", "li", t.proxy(this.mouseleave, this))
+ }, eventSupported: function (t) {
+ var e = t in this.$element;
+ return e || (this.$element.setAttribute(t, "return;"), e = "function" == typeof this.$element[t]), e
+ }, move: function (t) {
+ if (this.shown) {
+ switch (t.keyCode) {
+ case 9:
+ case 13:
+ case 27:
+ t.preventDefault();
+ break;
+ case 38:
+ t.preventDefault(), this.prev();
+ break;
+ case 40:
+ t.preventDefault(), this.next()
+ }
+ t.stopPropagation()
+ }
+ }, keydown: function (e) {
+ this.suppressKeyPressRepeat = ~t.inArray(e.keyCode, [40, 38, 9, 13, 27]), this.move(e)
+ }, keypress: function (t) {
+ this.suppressKeyPressRepeat || this.move(t)
+ }, keyup: function (t) {
+ switch (t.keyCode) {
+ case 40:
+ case 38:
+ case 16:
+ case 17:
+ case 18:
+ break;
+ case 9:
+ case 13:
+ if (!this.shown)return;
+ this.select();
+ break;
+ case 27:
+ if (!this.shown)return;
+ this.hide();
+ break;
+ default:
+ this.lookup()
+ }
+ t.stopPropagation(), t.preventDefault()
+ }, focus: function () {
+ this.focused = !0
+ }, blur: function () {
+ this.focused = !1, !this.mousedover && this.shown && this.hide()
+ }, click: function (t) {
+ t.stopPropagation(), t.preventDefault(), this.select(), this.$element.focus()
+ }, mouseenter: function (e) {
+ this.mousedover = !0, this.$menu.find(".active").removeClass("active"), t(e.currentTarget).addClass("active")
+ }, mouseleave: function () {
+ this.mousedover = !1, !this.focused && this.shown && this.hide()
+ }
+ };
+ var s = t.fn.typeahead;
+ t.fn.typeahead = function (s) {
+ return this.each(function () {
+ var i = t(this), n = i.data("typeahead"), h = "object" == typeof s && s;
+ n || i.data("typeahead", n = new e(this, h)), "string" == typeof s && n[s]()
+ })
+ }, t.fn.typeahead.defaults = {
+ source: [],
+ items: 8,
+ menu: '<ul class="typeahead dropdown-menu"></ul>',
+ item: '<li><a href="#"></a></li>',
+ minLength: 1
+ }, t.fn.typeahead.Constructor = e, t.fn.typeahead.noConflict = function () {
+ return t.fn.typeahead = s, this
+ }, t(document).on("focus.typeahead.data-api", '[data-provide="typeahead"]', function () {
+ var e = t(this);
+ e.data("typeahead") || e.typeahead(e.data())
+ })
+}(window.jQuery); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/jquery-ui.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/jquery-ui.css
new file mode 100644
index 00000000..50fd7674
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/jquery-ui.css
@@ -0,0 +1,1908 @@
+/*! jQuery UI - v1.11.2 - 2014-10-16
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+
+.ui-helper-clearfix:after {
+ clear: both;
+}
+
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+
+.ui-button-icons-only {
+ width: 3.4em;
+}
+
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+
+.ui-menu .ui-menu {
+ position: absolute;
+}
+
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden;
+}
+
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,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");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+
+.ui-resizable {
+ position: relative;
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+
+.ui-selectmenu-open {
+ display: block;
+}
+
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+
+.ui-spinner-up {
+ top: 0;
+}
+
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+
+.ui-tabs {
+ position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 1.1em;
+}
+
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Verdana, Arial, sans-serif;
+ font-size: 1em;
+}
+
+.ui-widget-content {
+ border: 1px solid #aaaaaa;
+ background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x;
+ color: #222222;
+}
+
+.ui-widget-content a {
+ color: #222222;
+}
+
+.ui-widget-header {
+ border: 1px solid #aaaaaa;
+ background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;
+ color: #222222;
+ font-weight: bold;
+}
+
+.ui-widget-header a {
+ color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #d3d3d3;
+ background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;
+ font-weight: normal;
+ color: #555555;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #555555;
+ text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #999999;
+ background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;
+ font-weight: normal;
+ color: #212121;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #212121;
+ text-decoration: none;
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #aaaaaa;
+ background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+ font-weight: normal;
+ color: #212121;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #212121;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #fcefa1;
+ background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;
+ color: #363636;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #363636;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;
+ color: #cd0a0a;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #cd0a0a;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #cd0a0a;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png");
+}
+
+.ui-state-default .ui-icon {
+ background-image: url("images/ui-icons_888888_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("images/ui-icons_454545_256x240.png");
+}
+
+.ui-state-active .ui-icon {
+ background-image: url("images/ui-icons_454545_256x240.png");
+}
+
+.ui-state-highlight .ui-icon {
+ background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_cd0a0a_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank {
+ background-position: 16px 16px;
+}
+
+.ui-icon-carat-1-n {
+ background-position: 0 0;
+}
+
+.ui-icon-carat-1-ne {
+ background-position: -16px 0;
+}
+
+.ui-icon-carat-1-e {
+ background-position: -32px 0;
+}
+
+.ui-icon-carat-1-se {
+ background-position: -48px 0;
+}
+
+.ui-icon-carat-1-s {
+ background-position: -64px 0;
+}
+
+.ui-icon-carat-1-sw {
+ background-position: -80px 0;
+}
+
+.ui-icon-carat-1-w {
+ background-position: -96px 0;
+}
+
+.ui-icon-carat-1-nw {
+ background-position: -112px 0;
+}
+
+.ui-icon-carat-2-n-s {
+ background-position: -128px 0;
+}
+
+.ui-icon-carat-2-e-w {
+ background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -64px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -64px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 0 -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px;
+}
+
+.ui-icon-document {
+ background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px;
+}
+
+.ui-icon-note {
+ background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px;
+}
+
+.ui-icon-person {
+ background-position: -144px -96px;
+}
+
+.ui-icon-print {
+ background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px;
+}
+
+.ui-icon-home {
+ background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px;
+}
+
+.ui-icon-search {
+ background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px;
+}
+
+.ui-icon-star {
+ background-position: -224px -112px;
+}
+
+.ui-icon-link {
+ background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px;
+}
+
+.ui-icon-close {
+ background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px;
+}
+
+.ui-icon-key {
+ background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px;
+}
+
+.ui-icon-image {
+ background-position: -208px -128px;
+}
+
+.ui-icon-video {
+ background-position: -224px -128px;
+}
+
+.ui-icon-script {
+ background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px;
+}
+
+.ui-icon-info {
+ background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px;
+}
+
+.ui-icon-help {
+ background-position: -48px -144px;
+}
+
+.ui-icon-check {
+ background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px;
+}
+
+.ui-icon-play {
+ background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px;
+}
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first {
+ background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px;
+}
+
+.ui-icon-power {
+ background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+}
+
+.ui-widget-shadow {
+ margin: -8px 0 0 -8px;
+ padding: 8px;
+ background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x;
+ opacity: .3;
+ filter: Alpha(Opacity=30); /* support: IE8 */
+ border-radius: 8px;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/multi-handle-slider.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/multi-handle-slider.css
new file mode 100644
index 00000000..cf6c1b9b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/css/multi-handle-slider.css
@@ -0,0 +1,53 @@
+div, span {
+ border-radius: 0 !important;
+}
+
+.sliderWrapper {
+ display: block;
+ position: absolute;
+ background-color: #629bcd;
+ opacity: 0.9;
+ border: 'solid 0px';
+ width: 682px;
+ height: 80px;
+ top: 10%;
+ left: 5%;
+}
+
+.tooltip-style {
+ opacity: 1;
+ left: -14px;
+ top: -25px;
+ background-color: rgb(59, 173, 240) !important;
+}
+
+.tooltip-style-bottom {
+ opacity: 1;
+ left: -12px;
+ top: 18px;
+ white-space: nowrap;
+ background-color: rgb(59, 173, 240) !important;
+}
+
+.centerRail {
+ text-align: left;
+ margin-top: 35px;
+ margin-left: auto;
+ margin-right: auto;
+ width: 575px;
+}
+
+.tooltip-inner {
+ background-color: #629bcd;
+!important;
+}
+
+.tooltip-text {
+ opacity: 1 !important;
+}
+
+.sliderValues {
+ left: 5%;
+ top: 30%;
+ position: absolute;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/index.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/index.html
new file mode 100644
index 00000000..8c8658db
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/index.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title></title>
+ <link rel="stylesheet" href="css/jquery-ui.css">
+ <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
+ <link rel="stylesheet" href="css/multi-handle-slider.css">
+</head>
+<body style="overflow: auto;">
+<div id="slider" ms-controller="multiHandleSliderController">
+ <div class="sliderWrapper">
+ <div class="centerRail">
+ <div id="slider-multi-handles"></div>
+ </div>
+ </div>
+ <div class="row" data-name="tab_zone">
+ <div class="col-md-12 sliderValues">
+ <ul>
+ <li ms-repeat-el="items">{{el.name}}:{{el.value}}%</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<div id="slider1" ms-controller="multiHandleSliderController1" style="position:absolute;top:300px;left:5%">
+ <div class="sliderWrapper">
+ <div class="centerRail">
+ <div id="slider-multi-handles-1"></div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-12 sliderValues" style="width: 200px;top: 120px;">
+ <ul>
+ <li ms-repeat-e="items">{{e.name}}:{{e.value}}%</li>
+ </ul>
+ </div>
+ </div>
+</div>
+<script src="js/jquery-1.10.2.min.js"></script>
+<script src="jquery-ui-1.11.4.custom/jquery-ui.js"></script>
+<!-- <script src="bootstrap/js/bootstrap.min.js"></script> -->
+<script src="js/avalon.modern.js"></script>
+<script src="js/multi-handle-slider.js"></script>
+<script>
+ var items = [
+ {name: "警告", value: 20},
+ {name: "次要", value: 40},
+ {name: "主要", value: 60},
+ {name: "严重", value: 80}
+ ];
+ var items1 = [
+ {name: "警告1", value: 20},
+ {name: "次要1", value: 40},
+ {name: "主要1", value: 60},
+ {name: "严重1", value: 80}
+ ];
+ var vm = vmMultiHandleSlider("multiHandleSliderController");
+ vm.$setItems(items);
+ vm.$initSlider("slider-multi-handles", "slider");
+ //vmMultiHandleSlider.$setItems(items1);
+ //vmMultiHandleSlider.$initSlider("slider-multi-handles-1");
+ var vm1 = vmMultiHandleSlider("multiHandleSliderController1");
+ vm1.$setItems(items1);
+ vm1.$initSlider("slider-multi-handles-1", "slider1");
+</script>
+</body>
+</html>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/external/jquery/jquery.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/external/jquery/jquery.js
new file mode 100644
index 00000000..d513758a
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/external/jquery/jquery.js
@@ -0,0 +1,9815 @@
+/*!
+ * jQuery JavaScript Library v1.10.2
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03T13:48Z
+ */
+(function (window, undefined) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//"use strict";
+ var
+ // The deferred used on DOM ready
+ readyList,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // Support: IE<10
+ // For `typeof xmlNode.method` instead of `xmlNode.method !== undefined`
+ core_strundefined = typeof undefined,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ location = window.location,
+ document = window.document,
+ docElem = document.documentElement,
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // [[Class]] -> type pairs
+ class2type = {},
+
+ // List of deleted data cache ids, so we can reuse them
+ core_deletedIds = [],
+
+ core_version = "1.10.2",
+
+ // Save a reference to some core methods
+ core_concat = core_deletedIds.concat,
+ core_push = core_deletedIds.push,
+ core_slice = core_deletedIds.slice,
+ core_indexOf = core_deletedIds.indexOf,
+ core_toString = class2type.toString,
+ core_hasOwn = class2type.hasOwnProperty,
+ core_trim = core_version.trim,
+
+ // Define a local copy of jQuery
+ jQuery = function (selector, context) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init(selector, context, rootjQuery);
+ },
+
+ // Used for matching numbers
+ core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
+
+ // Used for splitting on whitespace
+ core_rnotwhite = /\S+/g,
+
+ // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function (all, letter) {
+ return letter.toUpperCase();
+ },
+
+ // The ready event handler
+ completed = function (event) {
+
+ // readyState === "complete" is good enough for us to call the dom ready in oldIE
+ if (document.addEventListener || event.type === "load" || document.readyState === "complete") {
+ detach();
+ jQuery.ready();
+ }
+ },
+ // Clean-up method for dom ready events
+ detach = function () {
+ if (document.addEventListener) {
+ document.removeEventListener("DOMContentLoaded", completed, false);
+ window.removeEventListener("load", completed, false);
+
+ } else {
+ document.detachEvent("onreadystatechange", completed);
+ window.detachEvent("onload", completed);
+ }
+ };
+
+ jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: core_version,
+
+ constructor: jQuery,
+ init: function (selector, context, rootjQuery) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if (!selector) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if (typeof selector === "string") {
+ if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [null, selector, null];
+
+ } else {
+ match = rquickExpr.exec(selector);
+ }
+
+ // Match html or make sure no context is specified for #id
+ if (match && (match[1] || !context)) {
+
+ // HANDLE: $(html) -> $(array)
+ if (match[1]) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // scripts is true for back-compat
+ jQuery.merge(this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ));
+
+ // HANDLE: $(html, props)
+ if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
+ for (match in context) {
+ // Properties of context are called as methods if possible
+ if (jQuery.isFunction(this[match])) {
+ this[match](context[match]);
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr(match, context[match]);
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById(match[2]);
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if (elem && elem.parentNode) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if (elem.id !== match[2]) {
+ return rootjQuery.find(selector);
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if (!context || context.jquery) {
+ return ( context || rootjQuery ).find(selector);
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor(context).find(selector);
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if (selector.nodeType) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if (jQuery.isFunction(selector)) {
+ return rootjQuery.ready(selector);
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray(selector, this);
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function () {
+ return core_slice.call(this);
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function (num) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this[this.length + num] : this[num] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function (elems) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge(this.constructor(), elems);
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function (callback, args) {
+ return jQuery.each(this, callback, args);
+ },
+
+ ready: function (fn) {
+ // Add the callback
+ jQuery.ready.promise().done(fn);
+
+ return this;
+ },
+
+ slice: function () {
+ return this.pushStack(core_slice.apply(this, arguments));
+ },
+
+ first: function () {
+ return this.eq(0);
+ },
+
+ last: function () {
+ return this.eq(-1);
+ },
+
+ eq: function (i) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
+ },
+
+ map: function (callback) {
+ return this.pushStack(jQuery.map(this, function (elem, i) {
+ return callback.call(elem, i, elem);
+ }));
+ },
+
+ end: function () {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: core_push,
+ sort: [].sort,
+ splice: [].splice
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+ jQuery.fn.init.prototype = jQuery.fn;
+
+ jQuery.extend = jQuery.fn.extend = function () {
+ var src, copyIsArray, copy, name, options, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === "boolean") {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if (typeof target !== "object" && !jQuery.isFunction(target)) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if (length === i) {
+ target = this;
+ --i;
+ }
+
+ for (; i < length; i++) {
+ // Only deal with non-null/undefined values
+ if ((options = arguments[i]) != null) {
+ // Extend the base object
+ for (name in options) {
+ src = target[name];
+ copy = options[name];
+
+ // Prevent never-ending loop
+ if (target === copy) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) )) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[name] = jQuery.extend(deep, clone, copy);
+
+ // Don't bring in undefined values
+ } else if (copy !== undefined) {
+ target[name] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+ };
+
+ jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ // Non-digits removed to match rinlinejQuery
+ expando: "jQuery" + ( core_version + Math.random() ).replace(/\D/g, ""),
+
+ noConflict: function (deep) {
+ if (window.$ === jQuery) {
+ window.$ = _$;
+ }
+
+ if (deep && window.jQuery === jQuery) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function (hold) {
+ if (hold) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready(true);
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function (wait) {
+
+ // Abort if there are pending holds or we're already ready
+ if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
+ return;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if (!document.body) {
+ return setTimeout(jQuery.ready);
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if (wait !== true && --jQuery.readyWait > 0) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith(document, [jQuery]);
+
+ // Trigger any bound ready events
+ if (jQuery.fn.trigger) {
+ jQuery(document).trigger("ready").off("ready");
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function (obj) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function (obj) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function (obj) {
+ /* jshint eqeqeq: false */
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function (obj) {
+ return !isNaN(parseFloat(obj)) && isFinite(obj);
+ },
+
+ type: function (obj) {
+ if (obj == null) {
+ return String(obj);
+ }
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[core_toString.call(obj)] || "object" :
+ typeof obj;
+ },
+
+ isPlainObject: function (obj) {
+ var key;
+
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if (obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
+ return false;
+ }
+ } catch (e) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Support: IE<9
+ // Handle iteration over inherited properties before own properties.
+ if (jQuery.support.ownLast) {
+ for (key in obj) {
+ return core_hasOwn.call(obj, key);
+ }
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ for (key in obj) {
+ }
+
+ return key === undefined || core_hasOwn.call(obj, key);
+ },
+
+ isEmptyObject: function (obj) {
+ var name;
+ for (name in obj) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function (msg) {
+ throw new Error(msg);
+ },
+
+ // data: string of html
+ // context (optional): If specified, the fragment will be created in this context, defaults to document
+ // keepScripts (optional): If true, will include scripts passed in the html string
+ parseHTML: function (data, context, keepScripts) {
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ if (typeof context === "boolean") {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec(data),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if (parsed) {
+ return [context.createElement(parsed[1])];
+ }
+
+ parsed = jQuery.buildFragment([data], context, scripts);
+ if (scripts) {
+ jQuery(scripts).remove();
+ }
+ return jQuery.merge([], parsed.childNodes);
+ },
+
+ parseJSON: function (data) {
+ // Attempt to parse using the native JSON parser first
+ if (window.JSON && window.JSON.parse) {
+ return window.JSON.parse(data);
+ }
+
+ if (data === null) {
+ return data;
+ }
+
+ if (typeof data === "string") {
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim(data);
+
+ if (data) {
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if (rvalidchars.test(data.replace(rvalidescape, "@")
+ .replace(rvalidtokens, "]")
+ .replace(rvalidbraces, ""))) {
+
+ return ( new Function("return " + data) )();
+ }
+ }
+ }
+
+ jQuery.error("Invalid JSON: " + data);
+ },
+
+ // Cross-browser xml parsing
+ parseXML: function (data) {
+ var xml, tmp;
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ try {
+ if (window.DOMParser) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString(data, "text/xml");
+ } else { // IE
+ xml = new ActiveXObject("Microsoft.XMLDOM");
+ xml.async = "false";
+ xml.loadXML(data);
+ }
+ } catch (e) {
+ xml = undefined;
+ }
+ if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) {
+ jQuery.error("Invalid XML: " + data);
+ }
+ return xml;
+ },
+
+ noop: function () {
+ },
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function (data) {
+ if (data && jQuery.trim(data)) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function (data) {
+ window["eval"].call(window, data);
+ } )(data);
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function (string) {
+ return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
+ },
+
+ nodeName: function (elem, name) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function (obj, callback, args) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike(obj);
+
+ if (args) {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+ function (text) {
+ return text == null ?
+ "" :
+ core_trim.call(text);
+ } :
+
+ // Otherwise use our own trimming functionality
+ function (text) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace(rtrim, "");
+ },
+
+ // results is for internal usage only
+ makeArray: function (arr, results) {
+ var ret = results || [];
+
+ if (arr != null) {
+ if (isArraylike(Object(arr))) {
+ jQuery.merge(ret,
+ typeof arr === "string" ?
+ [arr] : arr
+ );
+ } else {
+ core_push.call(ret, arr);
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function (elem, arr, i) {
+ var len;
+
+ if (arr) {
+ if (core_indexOf) {
+ return core_indexOf.call(arr, elem, i);
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
+
+ for (; i < len; i++) {
+ // Skip accessing in sparse arrays
+ if (i in arr && arr[i] === elem) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function (first, second) {
+ var l = second.length,
+ i = first.length,
+ j = 0;
+
+ if (typeof l === "number") {
+ for (; j < l; j++) {
+ first[i++] = second[j];
+ }
+ } else {
+ while (second[j] !== undefined) {
+ first[i++] = second[j++];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function (elems, callback, inv) {
+ var retVal,
+ ret = [],
+ i = 0,
+ length = elems.length;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for (; i < length; i++) {
+ retVal = !!callback(elems[i], i);
+ if (inv !== retVal) {
+ ret.push(elems[i]);
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function (elems, callback, arg) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike(elems),
+ ret = [];
+
+ // Go through the array, translating each of the items to their
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret[ret.length] = value;
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for (i in elems) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret[ret.length] = value;
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return core_concat.apply([], ret);
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function (fn, context) {
+ var args, proxy, tmp;
+
+ if (typeof context === "string") {
+ tmp = fn[context];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if (!jQuery.isFunction(fn)) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = core_slice.call(arguments, 2);
+ proxy = function () {
+ return fn.apply(context || this, args.concat(core_slice.call(arguments)));
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ // Multifunctional method to get and set values of a collection
+ // The value/s can optionally be executed if it's a function
+ access: function (elems, fn, key, value, chainable, emptyGet, raw) {
+ var i = 0,
+ length = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if (jQuery.type(key) === "object") {
+ chainable = true;
+ for (i in key) {
+ jQuery.access(elems, fn, i, key[i], true, emptyGet, raw);
+ }
+
+ // Sets one value
+ } else if (value !== undefined) {
+ chainable = true;
+
+ if (!jQuery.isFunction(value)) {
+ raw = true;
+ }
+
+ if (bulk) {
+ // Bulk operations run against the entire set
+ if (raw) {
+ fn.call(elems, value);
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function (elem, key, value) {
+ return bulk.call(jQuery(elem), value);
+ };
+ }
+ }
+
+ if (fn) {
+ for (; i < length; i++) {
+ fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call(elems) :
+ length ? fn(elems[0], key) : emptyGet;
+ },
+
+ now: function () {
+ return ( new Date() ).getTime();
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations.
+ // Note: this method belongs to the css module but it's needed here for the support module.
+ // If support gets modularized, this method should be moved back to the css module.
+ swap: function (elem, options, callback, args) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for (name in options) {
+ old[name] = elem.style[name];
+ elem.style[name] = options[name];
+ }
+
+ ret = callback.apply(elem, args || []);
+
+ // Revert the old values
+ for (name in options) {
+ elem.style[name] = old[name];
+ }
+
+ return ret;
+ }
+ });
+
+ jQuery.ready.promise = function (obj) {
+ if (!readyList) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if (document.readyState === "complete") {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout(jQuery.ready);
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if (document.addEventListener) {
+ // Use the handy event callback
+ document.addEventListener("DOMContentLoaded", completed, false);
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener("load", completed, false);
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent("onreadystatechange", completed);
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent("onload", completed);
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch (e) {
+ }
+
+ if (top && top.doScroll) {
+ (function doScrollCheck() {
+ if (!jQuery.isReady) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch (e) {
+ return setTimeout(doScrollCheck, 50);
+ }
+
+ // detach all dom ready events
+ detach();
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise(obj);
+ };
+
+// Populate the class2type map
+ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
+ class2type["[object " + name + "]"] = name.toLowerCase();
+ });
+
+ function isArraylike(obj) {
+ var length = obj.length,
+ type = jQuery.type(obj);
+
+ if (jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ if (obj.nodeType === 1 && length) {
+ return true;
+ }
+
+ return type === "array" || type !== "function" &&
+ ( length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj );
+ }
+
+// All jQuery objects should point back to these
+ rootjQuery = jQuery(document);
+ /*!
+ * Sizzle CSS Selector Engine v1.10.2
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2013-07-03
+ */
+ (function (window, undefined) {
+
+ var i,
+ support,
+ cachedruns,
+ Expr,
+ getText,
+ isXML,
+ compile,
+ outermostContext,
+ sortInput,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + -(new Date()),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ hasDuplicate = false,
+ sortOrder = function (a, b) {
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ strundefined = typeof undefined,
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf if we can't use a native one
+ indexOf = arr.indexOf || function (elem) {
+ var i = 0,
+ len = this.length;
+ for (; i < len; i++) {
+ if (this[i] === elem) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace("w", "w#"),
+
+ // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
+ "*(?:([*^$|!~]?=)" + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
+
+ // Prefer arguments quoted,
+ // then not containing pseudos/brackets,
+ // then attribute selectors/non-parenthetical expressions,
+ // then anything else
+ // These preferences are here to reduce the number of selectors
+ // needing tokenize in the PSEUDO preFilter
+ pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace(3, 8) + ")*)|.*)\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
+
+ rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
+ rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
+
+ rsibling = new RegExp(whitespace + "*[+~]"),
+ rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*)" + whitespace + "*\\]", "g"),
+
+ rpseudo = new RegExp(pseudos),
+ ridentifier = new RegExp("^" + identifier + "$"),
+
+ matchExpr = {
+ "ID": new RegExp("^#(" + characterEncoding + ")"),
+ "CLASS": new RegExp("^\\.(" + characterEncoding + ")"),
+ "TAG": new RegExp("^(" + characterEncoding.replace("w", "w*") + ")"),
+ "ATTR": new RegExp("^" + attributes),
+ "PSEUDO": new RegExp("^" + pseudos),
+ "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
+ "bool": new RegExp("^(?:" + booleans + ")$", "i"),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
+ },
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"),
+ funescape = function (_, escaped, escapedWhitespace) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ // BMP codepoint
+ high < 0 ?
+ String.fromCharCode(high + 0x10000) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
+ };
+
+// Optimize for push.apply( _, NodeList )
+ try {
+ push.apply(
+ (arr = slice.call(preferredDoc.childNodes)),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push = {
+ apply: arr.length ?
+
+ // Leverage slice if possible
+ function (target, els) {
+ push_native.apply(target, slice.call(els));
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function (target, els) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ((target[j++] = els[i++])) {
+ }
+ target.length = j - 1;
+ }
+ };
+ }
+
+ function Sizzle(selector, context, results, seed) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if (( context ? context.ownerDocument || context : preferredDoc ) !== document) {
+ setDocument(context);
+ }
+
+ context = context || document;
+ results = results || [];
+
+ if (!selector || typeof selector !== "string") {
+ return results;
+ }
+
+ if ((nodeType = context.nodeType) !== 1 && nodeType !== 9) {
+ return [];
+ }
+
+ if (documentIsHTML && !seed) {
+
+ // Shortcuts
+ if ((match = rquickExpr.exec(selector))) {
+ // Speed-up: Sizzle("#ID")
+ if ((m = match[1])) {
+ if (nodeType === 9) {
+ elem = context.getElementById(m);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if (elem && elem.parentNode) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if (elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) &&
+ contains(context, elem) && elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if (match[2]) {
+ push.apply(results, context.getElementsByTagName(selector));
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
+ push.apply(results, context.getElementsByClassName(m));
+ return results;
+ }
+ }
+
+ // QSA path
+ if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType === 9 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if (nodeType === 1 && context.nodeName.toLowerCase() !== "object") {
+ groups = tokenize(selector);
+
+ if ((old = context.getAttribute("id"))) {
+ nid = old.replace(rescape, "\\$&");
+ } else {
+ context.setAttribute("id", nid);
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while (i--) {
+ groups[i] = nid + toSelector(groups[i]);
+ }
+ newContext = rsibling.test(selector) && context.parentNode || context;
+ newSelector = groups.join(",");
+ }
+
+ if (newSelector) {
+ try {
+ push.apply(results,
+ newContext.querySelectorAll(newSelector)
+ );
+ return results;
+ } catch (qsaError) {
+ } finally {
+ if (!old) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select(selector.replace(rtrim, "$1"), context, results, seed);
+ }
+
+ /**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+ function createCache() {
+ var keys = [];
+
+ function cache(key, value) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if (keys.push(key += " ") > Expr.cacheLength) {
+ // Only keep the most recent entries
+ delete cache[keys.shift()];
+ }
+ return (cache[key] = value);
+ }
+
+ return cache;
+ }
+
+ /**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+ function markFunction(fn) {
+ fn[expando] = true;
+ return fn;
+ }
+
+ /**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+ function assert(fn) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn(div);
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if (div.parentNode) {
+ div.parentNode.removeChild(div);
+ }
+ // release memory in IE
+ div = null;
+ }
+ }
+
+ /**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+ function addHandle(attrs, handler) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while (i--) {
+ Expr.attrHandle[arr[i]] = handler;
+ }
+ }
+
+ /**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+ function siblingCheck(a, b) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if (diff) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if (cur) {
+ while ((cur = cur.nextSibling)) {
+ if (cur === b) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+ }
+
+ /**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+ function createInputPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+ function createButtonPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+ function createPositionalPseudo(fn) {
+ return markFunction(function (argument) {
+ argument = +argument;
+ return markFunction(function (seed, matches) {
+ var j,
+ matchIndexes = fn([], seed.length, argument),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while (i--) {
+ if (seed[(j = matchIndexes[i])]) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+ }
+
+ /**
+ * Detect xml
+ * @param {Element|Object} elem An element or a document
+ */
+ isXML = Sizzle.isXML = function (elem) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+ };
+
+// Expose support vars for convenience
+ support = Sizzle.support = {};
+
+ /**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+ setDocument = Sizzle.setDocument = function (node) {
+ var doc = node ? node.ownerDocument || node : preferredDoc,
+ parent = doc.defaultView;
+
+ // If no document and documentElement is available, return
+ if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+
+ // Support tests
+ documentIsHTML = !isXML(doc);
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if (parent && parent.attachEvent && parent !== parent.top) {
+ parent.attachEvent("onbeforeunload", function () {
+ setDocument();
+ });
+ }
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+ support.attributes = assert(function (div) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function (div) {
+ div.appendChild(doc.createComment(""));
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Check if getElementsByClassName can be trusted
+ support.getElementsByClassName = assert(function (div) {
+ div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+ // Support: Safari<4
+ // Catch class over-caching
+ div.firstChild.className = "i";
+ // Support: Opera<10
+ // Catch gEBCN failure to find non-leading classes
+ return div.getElementsByClassName("i").length === 2;
+ });
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function (div) {
+ docElem.appendChild(div).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName(expando).length;
+ });
+
+ // ID find and filter
+ if (support.getById) {
+ Expr.find["ID"] = function (id, context) {
+ if (typeof context.getElementById !== strundefined && documentIsHTML) {
+ var m = context.getElementById(id);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ };
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function (tag, context) {
+ if (typeof context.getElementsByTagName !== strundefined) {
+ return context.getElementsByTagName(tag);
+ }
+ } :
+ function (tag, context) {
+ var elem,
+ tmp = [],
+ i = 0,
+ results = context.getElementsByTagName(tag);
+
+ // Filter out possible comments
+ if (tag === "*") {
+ while ((elem = results[i++])) {
+ if (elem.nodeType === 1) {
+ tmp.push(elem);
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
+ if (typeof context.getElementsByClassName !== strundefined && documentIsHTML) {
+ return context.getElementsByClassName(className);
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ((support.qsa = rnative.test(doc.querySelectorAll))) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function (div) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ div.innerHTML = "<select><option selected=''></option></select>";
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if (!div.querySelectorAll("[selected]").length) {
+ rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":checked").length) {
+ rbuggyQSA.push(":checked");
+ }
+ });
+
+ assert(function (div) {
+
+ // Support: Opera 10-12/IE8
+ // ^= $= *= and empty values
+ // Should not select anything
+ // Support: Windows 8 Native Apps
+ // The type attribute is restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute("type", "hidden");
+ div.appendChild(input).setAttribute("t", "");
+
+ if (div.querySelectorAll("[t^='']").length) {
+ rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":enabled").length) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ((support.matchesSelector = rnative.test((matches = docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector)))) {
+
+ assert(function (div) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call(div, "div");
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call(div, "[s!='']:x");
+ rbuggyMatches.push("!=", pseudos);
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
+ rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = rnative.test(docElem.contains) || docElem.compareDocumentPosition ?
+ function (a, b) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains(bup) :
+ a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16
+ ));
+ } :
+ function (a, b) {
+ if (b) {
+ while ((b = b.parentNode)) {
+ if (b === a) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = docElem.compareDocumentPosition ?
+ function (a, b) {
+
+ // Flag for duplicate removal
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition(b);
+
+ if (compare) {
+ // Disconnected nodes
+ if (compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition(a) === compare)) {
+
+ // Choose the first element that is related to our preferred document
+ if (a === doc || contains(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === doc || contains(preferredDoc, b)) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf.call(sortInput, a) - indexOf.call(sortInput, b) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ }
+
+ // Not directly comparable, sort on existence of method
+ return a.compareDocumentPosition ? -1 : 1;
+ } :
+ function (a, b) {
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [a],
+ bp = [b];
+
+ // Exit early if the nodes are identical
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+
+ // Parentless nodes are either documents or disconnected
+ } else if (!aup || !bup) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf.call(sortInput, a) - indexOf.call(sortInput, b) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if (aup === bup) {
+ return siblingCheck(a, b);
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ((cur = cur.parentNode)) {
+ ap.unshift(cur);
+ }
+ cur = b;
+ while ((cur = cur.parentNode)) {
+ bp.unshift(cur);
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while (ap[i] === bp[i]) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck(ap[i], bp[i]) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+ };
+
+ Sizzle.matches = function (expr, elements) {
+ return Sizzle(expr, null, null, elements);
+ };
+
+ Sizzle.matchesSelector = function (elem, expr) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(rattributeQuotes, "='$1']");
+
+ if (support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test(expr) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test(expr) )) {
+
+ try {
+ var ret = matches.call(elem, expr);
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if (ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11) {
+ return ret;
+ }
+ } catch (e) {
+ }
+ }
+
+ return Sizzle(expr, document, null, [elem]).length > 0;
+ };
+
+ Sizzle.contains = function (context, elem) {
+ // Set document vars if needed
+ if (( context.ownerDocument || context ) !== document) {
+ setDocument(context);
+ }
+ return contains(context, elem);
+ };
+
+ Sizzle.attr = function (elem, name) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ var fn = Expr.attrHandle[name.toLowerCase()],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?
+ fn(elem, name, !documentIsHTML) :
+ undefined;
+
+ return val === undefined ?
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute(name) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null :
+ val;
+ };
+
+ Sizzle.error = function (msg) {
+ throw new Error("Syntax error, unrecognized expression: " + msg);
+ };
+
+ /**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+ Sizzle.uniqueSort = function (results) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice(0);
+ results.sort(sortOrder);
+
+ if (hasDuplicate) {
+ while ((elem = results[i++])) {
+ if (elem === results[i]) {
+ j = duplicates.push(i);
+ }
+ }
+ while (j--) {
+ results.splice(duplicates[j], 1);
+ }
+ }
+
+ return results;
+ };
+
+ /**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+ getText = Sizzle.getText = function (elem) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if (!nodeType) {
+ // If no nodeType, this is expected to be an array
+ for (; (node = elem[i]); i++) {
+ // Do not traverse comment nodes
+ ret += getText(node);
+ }
+ } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (see #11153)
+ if (typeof elem.textContent === "string") {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText(elem);
+ }
+ }
+ } else if (nodeType === 3 || nodeType === 4) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+ };
+
+ Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": {dir: "parentNode", first: true},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: true},
+ "~": {dir: "previousSibling"}
+ },
+
+ preFilter: {
+ "ATTR": function (match) {
+ match[1] = match[1].replace(runescape, funescape);
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[4] || match[5] || "" ).replace(runescape, funescape);
+
+ if (match[2] === "~=") {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice(0, 4);
+ },
+
+ "CHILD": function (match) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if (match[1].slice(0, 3) === "nth") {
+ // nth-* requires argument
+ if (!match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if (match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function (match) {
+ var excess,
+ unquoted = !match[5] && match[2];
+
+ if (matchExpr["CHILD"].test(match[0])) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if (match[3] && match[4] !== undefined) {
+ match[2] = match[4];
+
+ // Strip excess characters from unquoted arguments
+ } else if (unquoted && rpseudo.test(unquoted) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize(unquoted, true)) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
+
+ // excess is a negative index
+ match[0] = match[0].slice(0, excess);
+ match[2] = unquoted.slice(0, excess);
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice(0, 3);
+ }
+ },
+
+ filter: {
+
+ "TAG": function (nodeNameSelector) {
+ var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function () {
+ return true;
+ } :
+ function (elem) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function (className) {
+ var pattern = classCache[className + " "];
+
+ return pattern ||
+ (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) &&
+ classCache(className, function (elem) {
+ return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "");
+ });
+ },
+
+ "ATTR": function (name, operator, check) {
+ return function (elem) {
+ var result = Sizzle.attr(elem, name);
+
+ if (result == null) {
+ return operator === "!=";
+ }
+ if (!operator) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf(check) === 0 :
+ operator === "*=" ? check && result.indexOf(check) > -1 :
+ operator === "$=" ? check && result.slice(-check.length) === check :
+ operator === "~=" ? ( " " + result + " " ).indexOf(check) > -1 :
+ operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function (type, what, argument, first, last) {
+ var simple = type.slice(0, 3) !== "nth",
+ forward = type.slice(-4) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function (elem) {
+ return !!elem.parentNode;
+ } :
+
+ function (elem, context, xml) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if (parent) {
+
+ // :(first|last|only)-(child|of-type)
+ if (simple) {
+ while (dir) {
+ node = elem;
+ while ((node = node[dir])) {
+ if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [forward ? parent.firstChild : parent.lastChild];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if (forward && useCache) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[expando] || (parent[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[nodeIndex];
+
+ while ((node = ++nodeIndex && node && node[dir] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ // When found, cache indexes on `parent` and break
+ if (node.nodeType === 1 && ++diff && node === elem) {
+ outerCache[type] = [dirruns, nodeIndex, diff];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ((node = ++nodeIndex && node && node[dir] ||
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ if (( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff) {
+ // Cache the index of each encountered element
+ if (useCache) {
+ (node[expando] || (node[expando] = {}))[type] = [dirruns, diff];
+ }
+
+ if (node === elem) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function (pseudo, argument) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||
+ Sizzle.error("unsupported pseudo: " + pseudo);
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if (fn[expando]) {
+ return fn(argument);
+ }
+
+ // But maintain support for old signatures
+ if (fn.length > 1) {
+ args = [pseudo, pseudo, "", argument];
+ return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?
+ markFunction(function (seed, matches) {
+ var idx,
+ matched = fn(seed, argument),
+ i = matched.length;
+ while (i--) {
+ idx = indexOf.call(seed, matched[i]);
+ seed[idx] = !( matches[idx] = matched[i] );
+ }
+ }) :
+ function (elem) {
+ return fn(elem, 0, args);
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function (selector) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile(selector.replace(rtrim, "$1"));
+
+ return matcher[expando] ?
+ markFunction(function (seed, matches, context, xml) {
+ var elem,
+ unmatched = matcher(seed, null, xml, []),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while (i--) {
+ if ((elem = unmatched[i])) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function (elem, context, xml) {
+ input[0] = elem;
+ matcher(input, null, xml, results);
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function (selector) {
+ return function (elem) {
+ return Sizzle(selector, elem).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function (text) {
+ return function (elem) {
+ return ( elem.textContent || elem.innerText || getText(elem) ).indexOf(text) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction(function (lang) {
+ // lang value must be a valid identifier
+ if (!ridentifier.test(lang || "")) {
+ Sizzle.error("unsupported lang: " + lang);
+ }
+ lang = lang.replace(runescape, funescape).toLowerCase();
+ return function (elem) {
+ var elemLang;
+ do {
+ if ((elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
+ }
+ } while ((elem = elem.parentNode) && elem.nodeType === 1);
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function (elem) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice(1) === elem.id;
+ },
+
+ "root": function (elem) {
+ return elem === docElem;
+ },
+
+ "focus": function (elem) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function (elem) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function (elem) {
+ return elem.disabled === true;
+ },
+
+ "checked": function (elem) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function (elem) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if (elem.parentNode) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function (elem) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
+ // not comment, processing instructions, or others
+ // Thanks to Diego Perini for the nodeName shortcut
+ // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ if (elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function (elem) {
+ return !Expr.pseudos["empty"](elem);
+ },
+
+ // Element/input types
+ "header": function (elem) {
+ return rheader.test(elem.nodeName);
+ },
+
+ "input": function (elem) {
+ return rinputs.test(elem.nodeName);
+ },
+
+ "button": function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function (elem) {
+ var attr;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function () {
+ return [0];
+ }),
+
+ "last": createPositionalPseudo(function (matchIndexes, length) {
+ return [length - 1];
+ }),
+
+ "eq": createPositionalPseudo(function (matchIndexes, length, argument) {
+ return [argument < 0 ? argument + length : argument];
+ }),
+
+ "even": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 0;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 1;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; --i >= 0;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; ++i < length;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+
+ Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+ for (i in {radio: true, checkbox: true, file: true, password: true, image: true}) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in {submit: true, reset: true}) {
+ Expr.pseudos[i] = createButtonPseudo(i);
+ }
+
+// Easy API for creating new setFilters
+ function setFilters() {
+ }
+
+ setFilters.prototype = Expr.filters = Expr.pseudos;
+ Expr.setFilters = new setFilters();
+
+ function tokenize(selector, parseOnly) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[selector + " "];
+
+ if (cached) {
+ return parseOnly ? 0 : cached.slice(0);
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while (soFar) {
+
+ // Comma and first run
+ if (!matched || (match = rcomma.exec(soFar))) {
+ if (match) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice(match[0].length) || soFar;
+ }
+ groups.push(tokens = []);
+ }
+
+ matched = false;
+
+ // Combinators
+ if ((match = rcombinators.exec(soFar))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace(rtrim, " ")
+ });
+ soFar = soFar.slice(matched.length);
+ }
+
+ // Filters
+ for (type in Expr.filter) {
+ if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||
+ (match = preFilters[type](match)))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice(matched.length);
+ }
+ }
+
+ if (!matched) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error(selector) :
+ // Cache the tokens
+ tokenCache(selector, groups).slice(0);
+ }
+
+ function toSelector(tokens) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for (; i < len; i++) {
+ selector += tokens[i].value;
+ }
+ return selector;
+ }
+
+ function addCombinator(matcher, combinator, base) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function (elem, context, xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ return matcher(elem, context, xml);
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function (elem, context, xml) {
+ var data, cache, outerCache,
+ dirkey = dirruns + " " + doneName;
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if (xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ if (matcher(elem, context, xml)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ outerCache = elem[expando] || (elem[expando] = {});
+ if ((cache = outerCache[dir]) && cache[0] === dirkey) {
+ if ((data = cache[1]) === true || data === cachedruns) {
+ return data === true;
+ }
+ } else {
+ cache = outerCache[dir] = [dirkey];
+ cache[1] = matcher(elem, context, xml) || cachedruns;
+ if (cache[1] === true) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+ }
+
+ function elementMatcher(matchers) {
+ return matchers.length > 1 ?
+ function (elem, context, xml) {
+ var i = matchers.length;
+ while (i--) {
+ if (!matchers[i](elem, context, xml)) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+ }
+
+ function condense(unmatched, map, filter, context, xml) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for (; i < len; i++) {
+ if ((elem = unmatched[i])) {
+ if (!filter || filter(elem, context, xml)) {
+ newUnmatched.push(elem);
+ if (mapped) {
+ map.push(i);
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+ }
+
+ function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
+ if (postFilter && !postFilter[expando]) {
+ postFilter = setMatcher(postFilter);
+ }
+ if (postFinder && !postFinder[expando]) {
+ postFinder = setMatcher(postFinder, postSelector);
+ }
+ return markFunction(function (seed, results, context, xml) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense(elems, preMap, preFilter, context, xml) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if (matcher) {
+ matcher(matcherIn, matcherOut, context, xml);
+ }
+
+ // Apply postFilter
+ if (postFilter) {
+ temp = condense(matcherOut, postMap);
+ postFilter(temp, [], context, xml);
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while (i--) {
+ if ((elem = temp[i])) {
+ matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
+ }
+ }
+ }
+
+ if (seed) {
+ if (postFinder || preFilter) {
+ if (postFinder) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i])) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push((matcherIn[i] = elem));
+ }
+ }
+ postFinder(null, (matcherOut = []), temp, xml);
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice(preexisting, matcherOut.length) :
+ matcherOut
+ );
+ if (postFinder) {
+ postFinder(null, results, matcherOut, xml);
+ } else {
+ push.apply(results, matcherOut);
+ }
+ }
+ });
+ }
+
+ function matcherFromTokens(tokens) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[tokens[0].type],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator(function (elem) {
+ return elem === checkContext;
+ }, implicitRelative, true),
+ matchAnyContext = addCombinator(function (elem) {
+ return indexOf.call(checkContext, elem) > -1;
+ }, implicitRelative, true),
+ matchers = [function (elem, context, xml) {
+ return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext(elem, context, xml) :
+ matchAnyContext(elem, context, xml) );
+ }];
+
+ for (; i < len; i++) {
+ if ((matcher = Expr.relative[tokens[i].type])) {
+ matchers = [addCombinator(elementMatcher(matchers), matcher)];
+ } else {
+ matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
+
+ // Return special upon seeing a positional matcher
+ if (matcher[expando]) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for (; j < len; j++) {
+ if (Expr.relative[tokens[j].type]) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher(matchers),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice(0, i - 1).concat({value: tokens[i - 2].type === " " ? "*" : ""})
+ ).replace(rtrim, "$1"),
+ matcher,
+ i < j && matcherFromTokens(tokens.slice(i, j)),
+ j < len && matcherFromTokens((tokens = tokens.slice(j))),
+ j < len && toSelector(tokens)
+ );
+ }
+ matchers.push(matcher);
+ }
+ }
+
+ return elementMatcher(matchers);
+ }
+
+ function matcherFromGroupMatchers(elementMatchers, setMatchers) {
+ // A counter to specify which element is currently being matched
+ var matcherCachedRuns = 0,
+ bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function (seed, context, xml, results, expandContext) {
+ var elem, j, matcher,
+ setMatched = [],
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ outermost = expandContext != null,
+ contextBackup = outermostContext,
+ // We must always have either seed elements or context
+ elems = seed || byElement && Expr.find["TAG"]("*", expandContext && context.parentNode || context),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
+
+ if (outermost) {
+ outermostContext = context !== document && context;
+ cachedruns = matcherCachedRuns;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ for (; (elem = elems[i]) != null; i++) {
+ if (byElement && elem) {
+ j = 0;
+ while ((matcher = elementMatchers[j++])) {
+ if (matcher(elem, context, xml)) {
+ results.push(elem);
+ break;
+ }
+ }
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ cachedruns = ++matcherCachedRuns;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if (bySet) {
+ // They will have gone through all possible matchers
+ if ((elem = !matcher && elem)) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if (seed) {
+ unmatched.push(elem);
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if (bySet && i !== matchedCount) {
+ j = 0;
+ while ((matcher = setMatchers[j++])) {
+ matcher(unmatched, setMatched, context, xml);
+ }
+
+ if (seed) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if (matchedCount > 0) {
+ while (i--) {
+ if (!(unmatched[i] || setMatched[i])) {
+ setMatched[i] = pop.call(results);
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense(setMatched);
+ }
+
+ // Add matches to results
+ push.apply(results, setMatched);
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if (outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1) {
+
+ Sizzle.uniqueSort(results);
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction(superMatcher) :
+ superMatcher;
+ }
+
+ compile = Sizzle.compile = function (selector, group /* Internal Use Only */) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[selector + " "];
+
+ if (!cached) {
+ // Generate a function of recursive functions that can be used to check each element
+ if (!group) {
+ group = tokenize(selector);
+ }
+ i = group.length;
+ while (i--) {
+ cached = matcherFromTokens(group[i]);
+ if (cached[expando]) {
+ setMatchers.push(cached);
+ } else {
+ elementMatchers.push(cached);
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
+ }
+ return cached;
+ };
+
+ function multipleContexts(selector, contexts, results) {
+ var i = 0,
+ len = contexts.length;
+ for (; i < len; i++) {
+ Sizzle(selector, contexts[i], results);
+ }
+ return results;
+ }
+
+ function select(selector, context, results, seed) {
+ var i, tokens, token, type, find,
+ match = tokenize(selector);
+
+ if (!seed) {
+ // Try to minimize operations if there is only one group
+ if (match.length === 1) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice(0);
+ if (tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[tokens[1].type]) {
+
+ context = ( Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [] )[0];
+ if (!context) {
+ return results;
+ }
+ selector = selector.slice(tokens.shift().value.length);
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
+ while (i--) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if (Expr.relative[(type = token.type)]) {
+ break;
+ }
+ if ((find = Expr.find[type])) {
+ // Search, expanding context for leading sibling combinators
+ if ((seed = find(
+ token.matches[0].replace(runescape, funescape),
+ rsibling.test(tokens[0].type) && context.parentNode || context
+ ))) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice(i, 1);
+ selector = seed.length && toSelector(tokens);
+ if (!selector) {
+ push.apply(results, seed);
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function
+ // Provide `match` to avoid retokenization if we modified the selector above
+ compile(selector, match)(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test(selector)
+ );
+ return results;
+ }
+
+// One-time assignments
+
+// Sort stability
+ support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+ support.detectDuplicates = hasDuplicate;
+
+// Initialize against the default document
+ setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+ support.sortDetached = assert(function (div1) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition(document.createElement("div")) & 1;
+ });
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+ if (!assert(function (div) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#";
+ })) {
+ addHandle("type|href|height|width", function (elem, name, isXML) {
+ if (!isXML) {
+ return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
+ }
+ });
+ }
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+ if (!support.attributes || !assert(function (div) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute("value", "");
+ return div.firstChild.getAttribute("value") === "";
+ })) {
+ addHandle("value", function (elem, name, isXML) {
+ if (!isXML && elem.nodeName.toLowerCase() === "input") {
+ return elem.defaultValue;
+ }
+ });
+ }
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+ if (!assert(function (div) {
+ return div.getAttribute("disabled") == null;
+ })) {
+ addHandle(booleans, function (elem, name, isXML) {
+ var val;
+ if (!isXML) {
+ return (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ elem[name] === true ? name.toLowerCase() : null;
+ }
+ });
+ }
+
+ jQuery.find = Sizzle;
+ jQuery.expr = Sizzle.selectors;
+ jQuery.expr[":"] = jQuery.expr.pseudos;
+ jQuery.unique = Sizzle.uniqueSort;
+ jQuery.text = Sizzle.getText;
+ jQuery.isXMLDoc = Sizzle.isXML;
+ jQuery.contains = Sizzle.contains;
+
+
+ })(window);
+// String to Object options format cache
+ var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+ function createOptions(options) {
+ var object = optionsCache[options] = {};
+ jQuery.each(options.match(core_rnotwhite) || [], function (_, flag) {
+ object[flag] = true;
+ });
+ return object;
+ }
+
+ /*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+ jQuery.Callbacks = function (options) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[options] || createOptions(options) ) :
+ jQuery.extend({}, options);
+
+ var // Flag to know if list is currently firing
+ firing,
+ // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function (data) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for (; list && firingIndex < firingLength; firingIndex++) {
+ if (list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if (list) {
+ if (stack) {
+ if (stack.length) {
+ fire(stack.shift());
+ }
+ } else if (memory) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function () {
+ if (list) {
+ // First, we save the current length
+ var start = list.length;
+ (function add(args) {
+ jQuery.each(args, function (_, arg) {
+ var type = jQuery.type(arg);
+ if (type === "function") {
+ if (!options.unique || !self.has(arg)) {
+ list.push(arg);
+ }
+ } else if (arg && arg.length && type !== "string") {
+ // Inspect recursively
+ add(arg);
+ }
+ });
+ })(arguments);
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if (firing) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if (memory) {
+ firingStart = start;
+ fire(memory);
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function () {
+ if (list) {
+ jQuery.each(arguments, function (_, arg) {
+ var index;
+ while (( index = jQuery.inArray(arg, list, index) ) > -1) {
+ list.splice(index, 1);
+ // Handle firing indexes
+ if (firing) {
+ if (index <= firingLength) {
+ firingLength--;
+ }
+ if (index <= firingIndex) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function (fn) {
+ return fn ? jQuery.inArray(fn, list) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function () {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function () {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function () {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function () {
+ stack = undefined;
+ if (!memory) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function () {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function (context, args) {
+ if (list && ( !fired || stack )) {
+ args = args || [];
+ args = [context, args.slice ? args.slice() : args];
+ if (firing) {
+ stack.push(args);
+ } else {
+ fire(args);
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function () {
+ self.fireWith(this, arguments);
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function () {
+ return !!fired;
+ }
+ };
+
+ return self;
+ };
+ jQuery.extend({
+
+ Deferred: function (func) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"],
+ ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"],
+ ["notify", "progress", jQuery.Callbacks("memory")]
+ ],
+ state = "pending",
+ promise = {
+ state: function () {
+ return state;
+ },
+ always: function () {
+ deferred.done(arguments).fail(arguments);
+ return this;
+ },
+ then: function (/* fnDone, fnFail, fnProgress */) {
+ var fns = arguments;
+ return jQuery.Deferred(function (newDefer) {
+ jQuery.each(tuples, function (i, tuple) {
+ var action = tuple[0],
+ fn = jQuery.isFunction(fns[i]) && fns[i];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[tuple[1]](function () {
+ var returned = fn && fn.apply(this, arguments);
+ if (returned && jQuery.isFunction(returned.promise)) {
+ returned.promise()
+ .done(newDefer.resolve)
+ .fail(newDefer.reject)
+ .progress(newDefer.notify);
+ } else {
+ newDefer[action + "With"](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments);
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function (obj) {
+ return obj != null ? jQuery.extend(obj, promise) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each(tuples, function (i, tuple) {
+ var list = tuple[2],
+ stateString = tuple[3];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[tuple[1]] = list.add;
+
+ // Handle state
+ if (stateString) {
+ list.add(function () {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[i ^ 1][2].disable, tuples[2][2].lock);
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[tuple[0]] = function () {
+ deferred[tuple[0] + "With"](this === deferred ? promise : this, arguments);
+ return this;
+ };
+ deferred[tuple[0] + "With"] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise(deferred);
+
+ // Call given func if any
+ if (func) {
+ func.call(deferred, deferred);
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function (subordinate /* , ..., subordinateN */) {
+ var i = 0,
+ resolveValues = core_slice.call(arguments),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction(subordinate.promise) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function (i, contexts, values) {
+ return function (value) {
+ contexts[i] = this;
+ values[i] = arguments.length > 1 ? core_slice.call(arguments) : value;
+ if (values === progressValues) {
+ deferred.notifyWith(contexts, values);
+ } else if (!( --remaining )) {
+ deferred.resolveWith(contexts, values);
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if (length > 1) {
+ progressValues = new Array(length);
+ progressContexts = new Array(length);
+ resolveContexts = new Array(length);
+ for (; i < length; i++) {
+ if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) {
+ resolveValues[i].promise()
+ .done(updateFunc(i, resolveContexts, resolveValues))
+ .fail(deferred.reject)
+ .progress(updateFunc(i, progressContexts, progressValues));
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if (!remaining) {
+ deferred.resolveWith(resolveContexts, resolveValues);
+ }
+
+ return deferred.promise();
+ }
+ });
+ jQuery.support = (function (support) {
+
+ var all, a, input, select, fragment, opt, eventName, isSupported, i,
+ div = document.createElement("div");
+
+ // Setup
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+ // Finish early in limited (non-browser) environments
+ all = div.getElementsByTagName("*") || [];
+ a = div.getElementsByTagName("a")[0];
+ if (!a || !a.style || !all.length) {
+ return support;
+ }
+
+ // First batch of tests
+ select = document.createElement("select");
+ opt = select.appendChild(document.createElement("option"));
+ input = div.getElementsByTagName("input")[0];
+
+ a.style.cssText = "top:1px;float:left;opacity:.5";
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ support.getSetAttribute = div.className !== "t";
+
+ // IE strips leading whitespace when .innerHTML is used
+ support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ support.tbody = !div.getElementsByTagName("tbody").length;
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ support.htmlSerialize = !!div.getElementsByTagName("link").length;
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ support.style = /top/.test(a.getAttribute("style"));
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ support.hrefNormalized = a.getAttribute("href") === "/a";
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ support.opacity = /^0.5/.test(a.style.opacity);
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ support.cssFloat = !!a.style.cssFloat;
+
+ // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+ support.checkOn = !!input.value;
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ support.optSelected = opt.selected;
+
+ // Tests for enctype support on a form (#6743)
+ support.enctype = !!document.createElement("form").enctype;
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ support.html5Clone = document.createElement("nav").cloneNode(true).outerHTML !== "<:nav></:nav>";
+
+ // Will be defined later
+ support.inlineBlockNeedsLayout = false;
+ support.shrinkWrapBlocks = false;
+ support.pixelPosition = false;
+ support.deleteExpando = true;
+ support.noCloneEvent = true;
+ support.reliableMarginRight = true;
+ support.boxSizingReliable = true;
+
+ // Make sure checked status is properly cloned
+ input.checked = true;
+ support.noCloneChecked = input.cloneNode(true).checked;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<9
+ try {
+ delete div.test;
+ } catch (e) {
+ support.deleteExpando = false;
+ }
+
+ // Check if we can trust getAttribute("value")
+ input = document.createElement("input");
+ input.setAttribute("value", "");
+ support.input = input.getAttribute("value") === "";
+
+ // Check if an input maintains its value after becoming a radio
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ input.setAttribute("checked", "t");
+ input.setAttribute("name", "t");
+
+ fragment = document.createDocumentFragment();
+ fragment.appendChild(input);
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ support.appendChecked = input.checked;
+
+ // WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+ // Support: IE<9
+ // Opera does not clone events (and typeof div.attachEvent === undefined).
+ // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+ if (div.attachEvent) {
+ div.attachEvent("onclick", function () {
+ support.noCloneEvent = false;
+ });
+
+ div.cloneNode(true).click();
+ }
+
+ // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
+ // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+ for (i in {submit: true, change: true, focusin: true}) {
+ div.setAttribute(eventName = "on" + i, "t");
+
+ support[i + "Bubbles"] = eventName in window || div.attributes[eventName].expando === false;
+ }
+
+ div.style.backgroundClip = "content-box";
+ div.cloneNode(true).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ // Support: IE<9
+ // Iteration over object's inherited properties before its own.
+ for (i in jQuery(support)) {
+ break;
+ }
+ support.ownLast = i !== "0";
+
+ // Run tests that need a body at doc ready
+ jQuery(function () {
+ var container, marginDiv, tds,
+ divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
+ body = document.getElementsByTagName("body")[0];
+
+ if (!body) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ container = document.createElement("div");
+ container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
+
+ body.appendChild(container).appendChild(div);
+
+ // Support: IE8
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+ tds = div.getElementsByTagName("td");
+ tds[0].style.cssText = "padding:0;margin:0;border:0;display:none";
+ isSupported = ( tds[0].offsetHeight === 0 );
+
+ tds[0].style.display = "";
+ tds[1].style.display = "none";
+
+ // Support: IE8
+ // Check if empty table cells still have offsetWidth/Height
+ support.reliableHiddenOffsets = isSupported && ( tds[0].offsetHeight === 0 );
+
+ // Check box-sizing and margin behavior.
+ div.innerHTML = "";
+ div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+
+ // Workaround failing boxSizing test due to offsetWidth returning wrong value
+ // with some non-1 values of body zoom, ticket #13543
+ jQuery.swap(body, body.style.zoom != null ? {zoom: 1} : {}, function () {
+ support.boxSizing = div.offsetWidth === 4;
+ });
+
+ // Use window.getComputedStyle because jsdom on node.js will break without it.
+ if (window.getComputedStyle) {
+ support.pixelPosition = ( window.getComputedStyle(div, null) || {} ).top !== "1%";
+ support.boxSizingReliable = ( window.getComputedStyle(div, null) || {width: "4px"} ).width === "4px";
+
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. (#3333)
+ // Fails in WebKit before Feb 2011 nightlies
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ marginDiv = div.appendChild(document.createElement("div"));
+ marginDiv.style.cssText = div.style.cssText = divReset;
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+
+ support.reliableMarginRight = !parseFloat(( window.getComputedStyle(marginDiv, null) || {} ).marginRight);
+ }
+
+ if (typeof div.style.zoom !== core_strundefined) {
+ // Support: IE<8
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ div.innerHTML = "";
+ div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+ support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+ // Support: IE6
+ // Check if elements with layout shrink-wrap their children
+ div.style.display = "block";
+ div.innerHTML = "<div></div>";
+ div.firstChild.style.width = "5px";
+ support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+ if (support.inlineBlockNeedsLayout) {
+ // Prevent IE 6 from affecting layout for positioned elements #11048
+ // Prevent IE from shrinking the body in IE 7 mode #12869
+ // Support: IE<8
+ body.style.zoom = 1;
+ }
+ }
+
+ body.removeChild(container);
+
+ // Null elements to avoid leaks in IE
+ container = div = tds = marginDiv = null;
+ });
+
+ // Null elements to avoid leaks in IE
+ all = select = fragment = opt = a = input = null;
+
+ return support;
+ })({});
+
+ var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+ function internalData(elem, name, data, pvt /* Internal Use Only */) {
+ if (!jQuery.acceptData(elem)) {
+ return;
+ }
+
+ var ret, thisCache,
+ internalKey = jQuery.expando,
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[internalKey] : elem[internalKey] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ((!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string") {
+ return;
+ }
+
+ if (!id) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if (isNode) {
+ id = elem[internalKey] = core_deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if (!cache[id]) {
+ // Avoid exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ cache[id] = isNode ? {} : {toJSON: jQuery.noop};
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if (typeof name === "object" || typeof name === "function") {
+ if (pvt) {
+ cache[id] = jQuery.extend(cache[id], name);
+ } else {
+ cache[id].data = jQuery.extend(cache[id].data, name);
+ }
+ }
+
+ thisCache = cache[id];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if (!pvt) {
+ if (!thisCache.data) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if (data !== undefined) {
+ thisCache[jQuery.camelCase(name)] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if (typeof name === "string") {
+
+ // First Try to find as-is property data
+ ret = thisCache[name];
+
+ // Test for null|undefined property data
+ if (ret == null) {
+
+ // Try to find the camelCased property
+ ret = thisCache[jQuery.camelCase(name)];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ }
+
+ function internalRemoveData(elem, name, pvt) {
+ if (!jQuery.acceptData(elem)) {
+ return;
+ }
+
+ var thisCache, i,
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[jQuery.expando] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if (!cache[id]) {
+ return;
+ }
+
+ if (name) {
+
+ thisCache = pvt ? cache[id] : cache[id].data;
+
+ if (thisCache) {
+
+ // Support array or space separated string names for data keys
+ if (!jQuery.isArray(name)) {
+
+ // try the string as a key before any manipulation
+ if (name in thisCache) {
+ name = [name];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase(name);
+ if (name in thisCache) {
+ name = [name];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ } else {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = name.concat(jQuery.map(name, jQuery.camelCase));
+ }
+
+ i = name.length;
+ while (i--) {
+ delete thisCache[name[i]];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if (pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache)) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if (!pvt) {
+ delete cache[id].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if (!isEmptyDataObject(cache[id])) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if (isNode) {
+ jQuery.cleanData([elem], true);
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ /* jshint eqeqeq: false */
+ } else if (jQuery.support.deleteExpando || cache != cache.window) {
+ /* jshint eqeqeq: true */
+ delete cache[id];
+
+ // When all else fails, null
+ } else {
+ cache[id] = null;
+ }
+ }
+
+ jQuery.extend({
+ cache: {},
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "applet": true,
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ },
+
+ hasData: function (elem) {
+ elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando];
+ return !!elem && !isEmptyDataObject(elem);
+ },
+
+ data: function (elem, name, data) {
+ return internalData(elem, name, data);
+ },
+
+ removeData: function (elem, name) {
+ return internalRemoveData(elem, name);
+ },
+
+ // For internal use only.
+ _data: function (elem, name, data) {
+ return internalData(elem, name, data, true);
+ },
+
+ _removeData: function (elem, name) {
+ return internalRemoveData(elem, name, true);
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function (elem) {
+ // Do not set data on non-element because it will not be cleared (#8335).
+ if (elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9) {
+ return false;
+ }
+
+ var noData = elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()];
+
+ // nodes accept data unless otherwise specified; rejection can be conditional
+ return !noData || noData !== true && elem.getAttribute("classid") === noData;
+ }
+ });
+
+ jQuery.fn.extend({
+ data: function (key, value) {
+ var attrs, name,
+ data = null,
+ i = 0,
+ elem = this[0];
+
+ // Special expections of .data basically thwart jQuery.access,
+ // so implement the relevant behavior ourselves
+
+ // Gets all values
+ if (key === undefined) {
+ if (this.length) {
+ data = jQuery.data(elem);
+
+ if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) {
+ attrs = elem.attributes;
+ for (; i < attrs.length; i++) {
+ name = attrs[i].name;
+
+ if (name.indexOf("data-") === 0) {
+ name = jQuery.camelCase(name.slice(5));
+
+ dataAttr(elem, name, data[name]);
+ }
+ }
+ jQuery._data(elem, "parsedAttrs", true);
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if (typeof key === "object") {
+ return this.each(function () {
+ jQuery.data(this, key);
+ });
+ }
+
+ return arguments.length > 1 ?
+
+ // Sets one value
+ this.each(function () {
+ jQuery.data(this, key, value);
+ }) :
+
+ // Gets one value
+ // Try to fetch any internally stored data first
+ elem ? dataAttr(elem, key, jQuery.data(elem, key)) : null;
+ },
+
+ removeData: function (key) {
+ return this.each(function () {
+ jQuery.removeData(this, key);
+ });
+ }
+ });
+
+ function dataAttr(elem, key, data) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if (data === undefined && elem.nodeType === 1) {
+
+ var name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase();
+
+ data = elem.getAttribute(name);
+
+ if (typeof data === "string") {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test(data) ? jQuery.parseJSON(data) :
+ data;
+ } catch (e) {
+ }
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data(elem, key, data);
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+ }
+
+// checks a cache object for emptiness
+ function isEmptyDataObject(obj) {
+ var name;
+ for (name in obj) {
+
+ // if the public data object is empty, the private is still empty
+ if (name === "data" && jQuery.isEmptyObject(obj[name])) {
+ continue;
+ }
+ if (name !== "toJSON") {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ jQuery.extend({
+ queue: function (elem, type, data) {
+ var queue;
+
+ if (elem) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data(elem, type);
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if (data) {
+ if (!queue || jQuery.isArray(data)) {
+ queue = jQuery._data(elem, type, jQuery.makeArray(data));
+ } else {
+ queue.push(data);
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function (elem, type) {
+ type = type || "fx";
+
+ var queue = jQuery.queue(elem, type),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks(elem, type),
+ next = function () {
+ jQuery.dequeue(elem, type);
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if (fn === "inprogress") {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if (fn) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if (type === "fx") {
+ queue.unshift("inprogress");
+ }
+
+ // clear up the last queue stop function
+ delete hooks.stop;
+ fn.call(elem, next, hooks);
+ }
+
+ if (!startLength && hooks) {
+ hooks.empty.fire();
+ }
+ },
+
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function (elem, type) {
+ var key = type + "queueHooks";
+ return jQuery._data(elem, key) || jQuery._data(elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function () {
+ jQuery._removeData(elem, type + "queue");
+ jQuery._removeData(elem, key);
+ })
+ });
+ }
+ });
+
+ jQuery.fn.extend({
+ queue: function (type, data) {
+ var setter = 2;
+
+ if (typeof type !== "string") {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if (arguments.length < setter) {
+ return jQuery.queue(this[0], type);
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function () {
+ var queue = jQuery.queue(this, type, data);
+
+ // ensure a hooks for this queue
+ jQuery._queueHooks(this, type);
+
+ if (type === "fx" && queue[0] !== "inprogress") {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ dequeue: function (type) {
+ return this.each(function () {
+ jQuery.dequeue(this, type);
+ });
+ },
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function (time, type) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue(type, function (next, hooks) {
+ var timeout = setTimeout(next, time);
+ hooks.stop = function () {
+ clearTimeout(timeout);
+ };
+ });
+ },
+ clearQueue: function (type) {
+ return this.queue(type || "fx", []);
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function (type, obj) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function () {
+ if (!( --count )) {
+ defer.resolveWith(elements, [elements]);
+ }
+ };
+
+ if (typeof type !== "string") {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while (i--) {
+ tmp = jQuery._data(elements[i], type + "queueHooks");
+ if (tmp && tmp.empty) {
+ count++;
+ tmp.empty.add(resolve);
+ }
+ }
+ resolve();
+ return defer.promise(obj);
+ }
+ });
+ var nodeHook, boolHook,
+ rclass = /[\t\r\n\f]/g,
+ rreturn = /\r/g,
+ rfocusable = /^(?:input|select|textarea|button|object)$/i,
+ rclickable = /^(?:a|area)$/i,
+ ruseDefault = /^(?:checked|selected)$/i,
+ getSetAttribute = jQuery.support.getSetAttribute,
+ getSetInput = jQuery.support.input;
+
+ jQuery.fn.extend({
+ attr: function (name, value) {
+ return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1);
+ },
+
+ removeAttr: function (name) {
+ return this.each(function () {
+ jQuery.removeAttr(this, name);
+ });
+ },
+
+ prop: function (name, value) {
+ return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1);
+ },
+
+ removeProp: function (name) {
+ name = jQuery.propFix[name] || name;
+ return this.each(function () {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[name] = undefined;
+ delete this[name];
+ } catch (e) {
+ }
+ });
+ },
+
+ addClass: function (value) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = typeof value === "string" && value;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).addClass(value.call(this, j, this.className));
+ });
+ }
+
+ if (proceed) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match(core_rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ " "
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ if (cur.indexOf(" " + clazz + " ") < 0) {
+ cur += clazz + " ";
+ }
+ }
+ elem.className = jQuery.trim(cur);
+
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function (value) {
+ var classes, elem, cur, clazz, j,
+ i = 0,
+ len = this.length,
+ proceed = arguments.length === 0 || typeof value === "string" && value;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).removeClass(value.call(this, j, this.className));
+ });
+ }
+ if (proceed) {
+ classes = ( value || "" ).match(core_rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ ""
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ // Remove *all* instances
+ while (cur.indexOf(" " + clazz + " ") >= 0) {
+ cur = cur.replace(" " + clazz + " ", " ");
+ }
+ }
+ elem.className = value ? jQuery.trim(cur) : "";
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function (value, stateVal) {
+ var type = typeof value;
+
+ if (typeof stateVal === "boolean" && type === "string") {
+ return stateVal ? this.addClass(value) : this.removeClass(value);
+ }
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (i) {
+ jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal);
+ });
+ }
+
+ return this.each(function () {
+ if (type === "string") {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery(this),
+ classNames = value.match(core_rnotwhite) || [];
+
+ while ((className = classNames[i++])) {
+ // check each className given, space separated list
+ if (self.hasClass(className)) {
+ self.removeClass(className);
+ } else {
+ self.addClass(className);
+ }
+ }
+
+ // Toggle whole class name
+ } else if (type === core_strundefined || type === "boolean") {
+ if (this.className) {
+ // store className if set
+ jQuery._data(this, "__className__", this.className);
+ }
+
+ // If the element has a class name or if we're passed "false",
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || "";
+ }
+ });
+ },
+
+ hasClass: function (selector) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for (; i < l; i++) {
+ if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) >= 0) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function (value) {
+ var ret, hooks, isFunction,
+ elem = this[0];
+
+ if (!arguments.length) {
+ if (elem) {
+ hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
+
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction(value);
+
+ return this.each(function (i) {
+ var val;
+
+ if (this.nodeType !== 1) {
+ return;
+ }
+
+ if (isFunction) {
+ val = value.call(this, i, jQuery(this).val());
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if (val == null) {
+ val = "";
+ } else if (typeof val === "number") {
+ val += "";
+ } else if (jQuery.isArray(val)) {
+ val = jQuery.map(val, function (value) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
+
+ // If set returns undefined, fall back to normal setting
+ if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
+ this.value = val;
+ }
+ });
+ }
+ });
+
+ jQuery.extend({
+ valHooks: {
+ option: {
+ get: function (elem) {
+ // Use proper attribute retrieval(#6932, #12072)
+ var val = jQuery.find.attr(elem, "value");
+ return val != null ?
+ val :
+ elem.text;
+ }
+ },
+ select: {
+ get: function (elem) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for (; i < max; i++) {
+ option = options[i];
+
+ // oldIE doesn't update selected after form reset (#2551)
+ if (( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName(option.parentNode, "optgroup") )) {
+
+ // Get the specific value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if (one) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push(value);
+ }
+ }
+
+ return values;
+ },
+
+ set: function (elem, value) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray(value),
+ i = options.length;
+
+ while (i--) {
+ option = options[i];
+ if ((option.selected = jQuery.inArray(jQuery(option).val(), values) >= 0)) {
+ optionSet = true;
+ }
+ }
+
+ // force browsers to behave consistently when non-matching value is set
+ if (!optionSet) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ },
+
+ attr: function (elem, name, value) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if (typeof elem.getAttribute === core_strundefined) {
+ return jQuery.prop(elem, name, value);
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[name] ||
+ ( jQuery.expr.match.bool.test(name) ? boolHook : nodeHook );
+ }
+
+ if (value !== undefined) {
+
+ if (value === null) {
+ jQuery.removeAttr(elem, name);
+
+ } else if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
+ return ret;
+
+ } else {
+ elem.setAttribute(name, value + "");
+ return value;
+ }
+
+ } else if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr(elem, name);
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function (elem, value) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match(core_rnotwhite);
+
+ if (attrNames && elem.nodeType === 1) {
+ while ((name = attrNames[i++])) {
+ propName = jQuery.propFix[name] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if (jQuery.expr.match.bool.test(name)) {
+ // Set corresponding property to false
+ if (getSetInput && getSetAttribute || !ruseDefault.test(name)) {
+ elem[propName] = false;
+ // Support: IE<9
+ // Also clear defaultChecked/defaultSelected (if appropriate)
+ } else {
+ elem[jQuery.camelCase("default-" + name)] =
+ elem[propName] = false;
+ }
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ } else {
+ jQuery.attr(elem, name, "");
+ }
+
+ elem.removeAttribute(getSetAttribute ? name : propName);
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function (elem, value) {
+ if (!jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input")) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to default in case type is set after value during creation
+ var val = elem.value;
+ elem.setAttribute("type", value);
+ if (val) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ },
+
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function (elem, name, value) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc(elem);
+
+ if (notxml) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[name] || name;
+ hooks = jQuery.propHooks[name];
+ }
+
+ if (value !== undefined) {
+ return hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined ?
+ ret :
+ ( elem[name] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null ?
+ ret :
+ elem[name];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function (elem) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr(elem, "tabindex");
+
+ return tabindex ?
+ parseInt(tabindex, 10) :
+ rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ?
+ 0 :
+ -1;
+ }
+ }
+ }
+ });
+
+// Hooks for boolean attributes
+ boolHook = {
+ set: function (elem, value, name) {
+ if (value === false) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr(elem, name);
+ } else if (getSetInput && getSetAttribute || !ruseDefault.test(name)) {
+ // IE<8 needs the *property* name
+ elem.setAttribute(!getSetAttribute && jQuery.propFix[name] || name, name);
+
+ // Use defaultChecked and defaultSelected for oldIE
+ } else {
+ elem[jQuery.camelCase("default-" + name)] = elem[name] = true;
+ }
+
+ return name;
+ }
+ };
+ jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) {
+ var getter = jQuery.expr.attrHandle[name] || jQuery.find.attr;
+
+ jQuery.expr.attrHandle[name] = getSetInput && getSetAttribute || !ruseDefault.test(name) ?
+ function (elem, name, isXML) {
+ var fn = jQuery.expr.attrHandle[name],
+ ret = isXML ?
+ undefined :
+ /* jshint eqeqeq: false */
+ (jQuery.expr.attrHandle[name] = undefined) !=
+ getter(elem, name, isXML) ?
+
+ name.toLowerCase() :
+ null;
+ jQuery.expr.attrHandle[name] = fn;
+ return ret;
+ } :
+ function (elem, name, isXML) {
+ return isXML ?
+ undefined :
+ elem[jQuery.camelCase("default-" + name)] ?
+ name.toLowerCase() :
+ null;
+ };
+ });
+
+// fix oldIE attroperties
+ if (!getSetInput || !getSetAttribute) {
+ jQuery.attrHooks.value = {
+ set: function (elem, value, name) {
+ if (jQuery.nodeName(elem, "input")) {
+ // Does not return so that setAttribute is also used
+ elem.defaultValue = value;
+ } else {
+ // Use nodeHook if defined (#1954); otherwise setAttribute is fine
+ return nodeHook && nodeHook.set(elem, value, name);
+ }
+ }
+ };
+ }
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+ if (!getSetAttribute) {
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = {
+ set: function (elem, value, name) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode(name);
+ if (!ret) {
+ elem.setAttributeNode(
+ (ret = elem.ownerDocument.createAttribute(name))
+ );
+ }
+
+ ret.value = value += "";
+
+ // Break association with cloned elements by also using setAttribute (#9646)
+ return name === "value" || value === elem.getAttribute(name) ?
+ value :
+ undefined;
+ }
+ };
+ jQuery.expr.attrHandle.id = jQuery.expr.attrHandle.name = jQuery.expr.attrHandle.coords =
+ // Some attributes are constructed with empty-string values when not defined
+ function (elem, name, isXML) {
+ var ret;
+ return isXML ?
+ undefined :
+ (ret = elem.getAttributeNode(name)) && ret.value !== "" ?
+ ret.value :
+ null;
+ };
+ jQuery.valHooks.button = {
+ get: function (elem, name) {
+ var ret = elem.getAttributeNode(name);
+ return ret && ret.specified ?
+ ret.value :
+ undefined;
+ },
+ set: nodeHook.set
+ };
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ set: function (elem, value, name) {
+ nodeHook.set(elem, value === "" ? false : value, name);
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each(["width", "height"], function (i, name) {
+ jQuery.attrHooks[name] = {
+ set: function (elem, value) {
+ if (value === "") {
+ elem.setAttribute(name, "auto");
+ return value;
+ }
+ }
+ };
+ });
+ }
+
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+ if (!jQuery.support.hrefNormalized) {
+ // href/src property should get the full normalized URL (#10299/#12915)
+ jQuery.each(["href", "src"], function (i, name) {
+ jQuery.propHooks[name] = {
+ get: function (elem) {
+ return elem.getAttribute(name, 4);
+ }
+ };
+ });
+ }
+
+ if (!jQuery.support.style) {
+ jQuery.attrHooks.style = {
+ get: function (elem) {
+ // Return undefined in the case of empty string
+ // Note: IE uppercases css property names, but if we were to .toLowerCase()
+ // .cssText, that would destroy case senstitivity in URL's, like in "background"
+ return elem.style.cssText || undefined;
+ },
+ set: function (elem, value) {
+ return ( elem.style.cssText = value + "" );
+ }
+ };
+ }
+
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+ if (!jQuery.support.optSelected) {
+ jQuery.propHooks.selected = {
+ get: function (elem) {
+ var parent = elem.parentNode;
+
+ if (parent) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if (parent.parentNode) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ };
+ }
+
+ jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+ ], function () {
+ jQuery.propFix[this.toLowerCase()] = this;
+ });
+
+// IE6/7 call enctype encoding
+ if (!jQuery.support.enctype) {
+ jQuery.propFix.enctype = "encoding";
+ }
+
+// Radios and checkboxes getter/setter
+ jQuery.each(["radio", "checkbox"], function () {
+ jQuery.valHooks[this] = {
+ set: function (elem, value) {
+ if (jQuery.isArray(value)) {
+ return ( elem.checked = jQuery.inArray(jQuery(elem).val(), value) >= 0 );
+ }
+ }
+ };
+ if (!jQuery.support.checkOn) {
+ jQuery.valHooks[this].get = function (elem) {
+ // Support: Webkit
+ // "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+ });
+ var rformElems = /^(?:input|select|textarea)$/i,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+ function returnTrue() {
+ return true;
+ }
+
+ function returnFalse() {
+ return false;
+ }
+
+ function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch (err) {
+ }
+ }
+
+ /*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+ jQuery.event = {
+
+ global: {},
+
+ add: function (elem, types, handler, data, selector) {
+ var tmp, events, t, handleObjIn,
+ special, eventHandle, handleObj,
+ handlers, type, namespaces, origType,
+ elemData = jQuery._data(elem);
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if (!elemData) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if (handler.handler) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if (!handler.guid) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if (!(events = elemData.events)) {
+ events = elemData.events = {};
+ }
+ if (!(eventHandle = elemData.handle)) {
+ eventHandle = elemData.handle = function (e) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply(eventHandle.elem, arguments) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match(core_rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if (!type) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[type] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[type] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test(selector),
+ namespace: namespaces.join(".")
+ }, handleObjIn);
+
+ // Init the event handler queue if we're the first
+ if (!(handlers = events[type])) {
+ handlers = events[type] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
+ // Bind the global event handler to the element
+ if (elem.addEventListener) {
+ elem.addEventListener(type, eventHandle, false);
+
+ } else if (elem.attachEvent) {
+ elem.attachEvent("on" + type, eventHandle);
+ }
+ }
+ }
+
+ if (special.add) {
+ special.add.call(elem, handleObj);
+
+ if (!handleObj.handler.guid) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if (selector) {
+ handlers.splice(handlers.delegateCount++, 0, handleObj);
+ } else {
+ handlers.push(handleObj);
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[type] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ // Detach an event or set of events from an element
+ remove: function (elem, types, handler, selector, mappedTypes) {
+ var j, handleObj, tmp,
+ origCount, t, events,
+ special, handlers, type,
+ namespaces, origType,
+ elemData = jQuery.hasData(elem) && jQuery._data(elem);
+
+ if (!elemData || !(events = elemData.events)) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match(core_rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if (!type) {
+ for (type in events) {
+ jQuery.event.remove(elem, type + types[t], handler, selector, true);
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[type] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[type] || [];
+ tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while (j--) {
+ handleObj = handlers[j];
+
+ if (( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test(handleObj.namespace) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector )) {
+ handlers.splice(j, 1);
+
+ if (handleObj.selector) {
+ handlers.delegateCount--;
+ }
+ if (special.remove) {
+ special.remove.call(elem, handleObj);
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if (origCount && !handlers.length) {
+ if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
+ jQuery.removeEvent(elem, type, elemData.handle);
+ }
+
+ delete events[type];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if (jQuery.isEmptyObject(events)) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery._removeData(elem, "events");
+ }
+ },
+
+ trigger: function (event, data, elem, onlyHandlers) {
+ var handle, ontype, cur,
+ bubbleType, special, tmp, i,
+ eventPath = [elem || document],
+ type = core_hasOwn.call(event, "type") ? event.type : event,
+ namespaces = core_hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if (elem.nodeType === 3 || elem.nodeType === 8) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if (rfocusMorph.test(type + jQuery.event.triggered)) {
+ return;
+ }
+
+ if (type.indexOf(".") >= 0) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[jQuery.expando] ?
+ event :
+ new jQuery.Event(type, typeof event === "object" && event);
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if (!event.target) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [event] :
+ jQuery.makeArray(data, [event]);
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[type] || {};
+ if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) {
+
+ bubbleType = special.delegateType || type;
+ if (!rfocusMorph.test(bubbleType + type)) {
+ cur = cur.parentNode;
+ }
+ for (; cur; cur = cur.parentNode) {
+ eventPath.push(cur);
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if (tmp === (elem.ownerDocument || document)) {
+ eventPath.push(tmp.defaultView || tmp.parentWindow || window);
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( jQuery._data(cur, "events") || {} )[event.type] && jQuery._data(cur, "handle");
+ if (handle) {
+ handle.apply(cur, data);
+ }
+
+ // Native handler
+ handle = ontype && cur[ontype];
+ if (handle && jQuery.acceptData(cur) && handle.apply && handle.apply(cur, data) === false) {
+ event.preventDefault();
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if (!onlyHandlers && !event.isDefaultPrevented()) {
+
+ if ((!special._default || special._default.apply(eventPath.pop(), data) === false) &&
+ jQuery.acceptData(elem)) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if (ontype && elem[type] && !jQuery.isWindow(elem)) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ontype];
+
+ if (tmp) {
+ elem[ontype] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ try {
+ elem[type]();
+ } catch (e) {
+ // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+ // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+ }
+ jQuery.event.triggered = undefined;
+
+ if (tmp) {
+ elem[ontype] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function (event) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix(event);
+
+ var i, ret, handleObj, matched, j,
+ handlerQueue = [],
+ args = core_slice.call(arguments),
+ handlers = ( jQuery._data(this, "events") || {} )[event.type] || [],
+ special = jQuery.event.special[event.type] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if (special.preDispatch && special.preDispatch.call(this, event) === false) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call(this, event, handlers);
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
+
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if (!event.namespace_re || event.namespace_re.test(handleObj.namespace)) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler )
+ .apply(matched.elem, args);
+
+ if (ret !== undefined) {
+ if ((event.result = ret) === false) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if (special.postDispatch) {
+ special.postDispatch.call(this, event);
+ }
+
+ return event.result;
+ },
+
+ handlers: function (event, handlers) {
+ var sel, handleObj, matches, i,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if (delegateCount && cur.nodeType && (!event.button || event.type !== "click")) {
+
+ /* jshint eqeqeq: false */
+ for (; cur != this; cur = cur.parentNode || this) {
+ /* jshint eqeqeq: true */
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if (cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click")) {
+ matches = [];
+ for (i = 0; i < delegateCount; i++) {
+ handleObj = handlers[i];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if (matches[sel] === undefined) {
+ matches[sel] = handleObj.needsContext ?
+ jQuery(sel, this).index(cur) >= 0 :
+ jQuery.find(sel, this, null, [cur]).length;
+ }
+ if (matches[sel]) {
+ matches.push(handleObj);
+ }
+ }
+ if (matches.length) {
+ handlerQueue.push({elem: cur, handlers: matches});
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if (delegateCount < handlers.length) {
+ handlerQueue.push({elem: this, handlers: handlers.slice(delegateCount)});
+ }
+
+ return handlerQueue;
+ },
+
+ fix: function (event) {
+ if (event[jQuery.expando]) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[type];
+
+ if (!fixHook) {
+ this.fixHooks[type] = fixHook =
+ rmouseEvent.test(type) ? this.mouseHooks :
+ rkeyEvent.test(type) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat(fixHook.props) : this.props;
+
+ event = new jQuery.Event(originalEvent);
+
+ i = copy.length;
+ while (i--) {
+ prop = copy[i];
+ event[prop] = originalEvent[prop];
+ }
+
+ // Support: IE<9
+ // Fix target property (#1925)
+ if (!event.target) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Support: Chrome 23+, Safari?
+ // Target should not be a text node (#504, #13143)
+ if (event.target.nodeType === 3) {
+ event.target = event.target.parentNode;
+ }
+
+ // Support: IE<9
+ // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+ event.metaKey = !!event.metaKey;
+
+ return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function (event, original) {
+
+ // Add which for key events
+ if (event.which == null) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (event, original) {
+ var body, eventDoc, doc,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if (event.pageX == null && original.clientX != null) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if (!event.relatedTarget && fromElement) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if (!event.which && button !== undefined) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function () {
+ if (this !== safeActiveElement() && this.focus) {
+ try {
+ this.focus();
+ return false;
+ } catch (e) {
+ // Support: IE<9
+ // If we error on focus to hidden element (#1486, #12518),
+ // let .trigger() run the handlers
+ }
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function () {
+ if (this === safeActiveElement() && this.blur) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function () {
+ if (jQuery.nodeName(this, "input") && this.type === "checkbox" && this.click) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function (event) {
+ return jQuery.nodeName(event.target, "a");
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function (event) {
+
+ // Even when returnValue equals to undefined Firefox will still show alert
+ if (event.result !== undefined) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function (type, elem, event, bubble) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if (bubble) {
+ jQuery.event.trigger(e, null, elem);
+ } else {
+ jQuery.event.dispatch.call(elem, e);
+ }
+ if (e.isDefaultPrevented()) {
+ event.preventDefault();
+ }
+ }
+ };
+
+ jQuery.removeEvent = document.removeEventListener ?
+ function (elem, type, handle) {
+ if (elem.removeEventListener) {
+ elem.removeEventListener(type, handle, false);
+ }
+ } :
+ function (elem, type, handle) {
+ var name = "on" + type;
+
+ if (elem.detachEvent) {
+
+ // #8545, #7054, preventing memory leaks for custom events in IE6-8
+ // detachEvent needed property on element, by name of that event, to properly expose it to GC
+ if (typeof elem[name] === core_strundefined) {
+ elem[name] = null;
+ }
+
+ elem.detachEvent(name, handle);
+ }
+ };
+
+ jQuery.Event = function (src, props) {
+ // Allow instantiation without the 'new' keyword
+ if (!(this instanceof jQuery.Event)) {
+ return new jQuery.Event(src, props);
+ }
+
+ // Event object
+ if (src && src.type) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+ src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if (props) {
+ jQuery.extend(this, props);
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[jQuery.expando] = true;
+ };
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+ jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function () {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+ if (!e) {
+ return;
+ }
+
+ // If preventDefault exists, run it on the original event
+ if (e.preventDefault) {
+ e.preventDefault();
+
+ // Support: IE
+ // Otherwise set the returnValue property of the original event to false
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function () {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+ if (!e) {
+ return;
+ }
+ // If stopPropagation exists, run it on the original event
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
+
+ // Support: IE
+ // Set the cancelBubble property of the original event to true
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function () {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ }
+ };
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+ jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ }, function (orig, fix) {
+ jQuery.event.special[orig] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function (event) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if (!related || (related !== target && !jQuery.contains(target, related))) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply(this, arguments);
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+ });
+
+// IE submit delegation
+ if (!jQuery.support.submitBubbles) {
+
+ jQuery.event.special.submit = {
+ setup: function () {
+ // Only need this for delegated form submit events
+ if (jQuery.nodeName(this, "form")) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add(this, "click._submit keypress._submit", function (e) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName(elem, "input") || jQuery.nodeName(elem, "button") ? elem.form : undefined;
+ if (form && !jQuery._data(form, "submitBubbles")) {
+ jQuery.event.add(form, "submit._submit", function (event) {
+ event._submit_bubble = true;
+ });
+ jQuery._data(form, "submitBubbles", true);
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function (event) {
+ // If form was submitted by the user, bubble the event up the tree
+ if (event._submit_bubble) {
+ delete event._submit_bubble;
+ if (this.parentNode && !event.isTrigger) {
+ jQuery.event.simulate("submit", this.parentNode, event, true);
+ }
+ }
+ },
+
+ teardown: function () {
+ // Only need this for delegated form submit events
+ if (jQuery.nodeName(this, "form")) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove(this, "._submit");
+ }
+ };
+ }
+
+// IE change delegation and checkbox/radio fix
+ if (!jQuery.support.changeBubbles) {
+
+ jQuery.event.special.change = {
+
+ setup: function () {
+
+ if (rformElems.test(this.nodeName)) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if (this.type === "checkbox" || this.type === "radio") {
+ jQuery.event.add(this, "propertychange._change", function (event) {
+ if (event.originalEvent.propertyName === "checked") {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add(this, "click._change", function (event) {
+ if (this._just_changed && !event.isTrigger) {
+ this._just_changed = false;
+ }
+ // Allow triggered, simulated change events (#11500)
+ jQuery.event.simulate("change", this, event, true);
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add(this, "beforeactivate._change", function (e) {
+ var elem = e.target;
+
+ if (rformElems.test(elem.nodeName) && !jQuery._data(elem, "changeBubbles")) {
+ jQuery.event.add(elem, "change._change", function (event) {
+ if (this.parentNode && !event.isSimulated && !event.isTrigger) {
+ jQuery.event.simulate("change", this.parentNode, event, true);
+ }
+ });
+ jQuery._data(elem, "changeBubbles", true);
+ }
+ });
+ },
+
+ handle: function (event) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if (this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox")) {
+ return event.handleObj.handler.apply(this, arguments);
+ }
+ },
+
+ teardown: function () {
+ jQuery.event.remove(this, "._change");
+
+ return !rformElems.test(this.nodeName);
+ }
+ };
+ }
+
+// Create "bubbling" focus and blur events
+ if (!jQuery.support.focusinBubbles) {
+ jQuery.each({focus: "focusin", blur: "focusout"}, function (orig, fix) {
+
+ // Attach a single capturing handler while someone wants focusin/focusout
+ var attaches = 0,
+ handler = function (event) {
+ jQuery.event.simulate(fix, event.target, jQuery.event.fix(event), true);
+ };
+
+ jQuery.event.special[fix] = {
+ setup: function () {
+ if (attaches++ === 0) {
+ document.addEventListener(orig, handler, true);
+ }
+ },
+ teardown: function () {
+ if (--attaches === 0) {
+ document.removeEventListener(orig, handler, true);
+ }
+ }
+ };
+ });
+ }
+
+ jQuery.fn.extend({
+
+ on: function (types, selector, data, fn, /*INTERNAL*/ one) {
+ var type, origFn;
+
+ // Types can be a map of types/handlers
+ if (typeof types === "object") {
+ // ( types-Object, selector, data )
+ if (typeof selector !== "string") {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for (type in types) {
+ this.on(type, selector, data, types[type], one);
+ }
+ return this;
+ }
+
+ if (data == null && fn == null) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if (fn == null) {
+ if (typeof selector === "string") {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ } else if (!fn) {
+ return this;
+ }
+
+ if (one === 1) {
+ origFn = fn;
+ fn = function (event) {
+ // Can use an empty set, since event contains the info
+ jQuery().off(event);
+ return origFn.apply(this, arguments);
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each(function () {
+ jQuery.event.add(this, types, fn, data, selector);
+ });
+ },
+ one: function (types, selector, data, fn) {
+ return this.on(types, selector, data, fn, 1);
+ },
+ off: function (types, selector, fn) {
+ var handleObj, type;
+ if (types && types.preventDefault && types.handleObj) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery(types.delegateTarget).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if (typeof types === "object") {
+ // ( types-object [, selector] )
+ for (type in types) {
+ this.off(type, selector, types[type]);
+ }
+ return this;
+ }
+ if (selector === false || typeof selector === "function") {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ }
+ return this.each(function () {
+ jQuery.event.remove(this, types, fn, selector);
+ });
+ },
+
+ trigger: function (type, data) {
+ return this.each(function () {
+ jQuery.event.trigger(type, data, this);
+ });
+ },
+ triggerHandler: function (type, data) {
+ var elem = this[0];
+ if (elem) {
+ return jQuery.event.trigger(type, data, elem, true);
+ }
+ }
+ });
+ var isSimple = /^.[^:#\[\.,]*$/,
+ rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ rneedsContext = jQuery.expr.match.needsContext,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+ jQuery.fn.extend({
+ find: function (selector) {
+ var i,
+ ret = [],
+ self = this,
+ len = self.length;
+
+ if (typeof selector !== "string") {
+ return this.pushStack(jQuery(selector).filter(function () {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(self[i], this)) {
+ return true;
+ }
+ }
+ }));
+ }
+
+ for (i = 0; i < len; i++) {
+ jQuery.find(selector, self[i], ret);
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret);
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+
+ has: function (target) {
+ var i,
+ targets = jQuery(target, this),
+ len = targets.length;
+
+ return this.filter(function () {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(this, targets[i])) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function (selector) {
+ return this.pushStack(winnow(this, selector || [], true));
+ },
+
+ filter: function (selector) {
+ return this.pushStack(winnow(this, selector || [], false));
+ },
+
+ is: function (selector) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test(selector) ?
+ jQuery(selector) :
+ selector || [],
+ false
+ ).length;
+ },
+
+ closest: function (selectors, context) {
+ var cur,
+ i = 0,
+ l = this.length,
+ ret = [],
+ pos = rneedsContext.test(selectors) || typeof selectors !== "string" ?
+ jQuery(selectors, context || this.context) :
+ 0;
+
+ for (; i < l; i++) {
+ for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
+ // Always skip document fragments
+ if (cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors))) {
+
+ cur = ret.push(cur);
+ break;
+ }
+ }
+ }
+
+ return this.pushStack(ret.length > 1 ? jQuery.unique(ret) : ret);
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function (elem) {
+
+ // No argument, return index in parent
+ if (!elem) {
+ return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // index in selector
+ if (typeof elem === "string") {
+ return jQuery.inArray(this[0], jQuery(elem));
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this);
+ },
+
+ add: function (selector, context) {
+ var set = typeof selector === "string" ?
+ jQuery(selector, context) :
+ jQuery.makeArray(selector && selector.nodeType ? [selector] : selector),
+ all = jQuery.merge(this.get(), set);
+
+ return this.pushStack(jQuery.unique(all));
+ },
+
+ addBack: function (selector) {
+ return this.add(selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+ });
+
+ function sibling(cur, dir) {
+ do {
+ cur = cur[dir];
+ } while (cur && cur.nodeType !== 1);
+
+ return cur;
+ }
+
+ jQuery.each({
+ parent: function (elem) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function (elem) {
+ return jQuery.dir(elem, "parentNode");
+ },
+ parentsUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "parentNode", until);
+ },
+ next: function (elem) {
+ return sibling(elem, "nextSibling");
+ },
+ prev: function (elem) {
+ return sibling(elem, "previousSibling");
+ },
+ nextAll: function (elem) {
+ return jQuery.dir(elem, "nextSibling");
+ },
+ prevAll: function (elem) {
+ return jQuery.dir(elem, "previousSibling");
+ },
+ nextUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "nextSibling", until);
+ },
+ prevUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "previousSibling", until);
+ },
+ siblings: function (elem) {
+ return jQuery.sibling(( elem.parentNode || {} ).firstChild, elem);
+ },
+ children: function (elem) {
+ return jQuery.sibling(elem.firstChild);
+ },
+ contents: function (elem) {
+ return jQuery.nodeName(elem, "iframe") ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge([], elem.childNodes);
+ }
+ }, function (name, fn) {
+ jQuery.fn[name] = function (until, selector) {
+ var ret = jQuery.map(this, fn, until);
+
+ if (name.slice(-5) !== "Until") {
+ selector = until;
+ }
+
+ if (selector && typeof selector === "string") {
+ ret = jQuery.filter(selector, ret);
+ }
+
+ if (this.length > 1) {
+ // Remove duplicates
+ if (!guaranteedUnique[name]) {
+ ret = jQuery.unique(ret);
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if (rparentsprev.test(name)) {
+ ret = ret.reverse();
+ }
+ }
+
+ return this.pushStack(ret);
+ };
+ });
+
+ jQuery.extend({
+ filter: function (expr, elems, not) {
+ var elem = elems[0];
+
+ if (not) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector(elem, expr) ? [elem] : [] :
+ jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
+ return elem.nodeType === 1;
+ }));
+ },
+
+ dir: function (elem, dir, until) {
+ var matched = [],
+ cur = elem[dir];
+
+ while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) {
+ if (cur.nodeType === 1) {
+ matched.push(cur);
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function (n, elem) {
+ var r = [];
+
+ for (; n; n = n.nextSibling) {
+ if (n.nodeType === 1 && n !== elem) {
+ r.push(n);
+ }
+ }
+
+ return r;
+ }
+ });
+
+// Implement the identical functionality for filter and not
+ function winnow(elements, qualifier, not) {
+ if (jQuery.isFunction(qualifier)) {
+ return jQuery.grep(elements, function (elem, i) {
+ /* jshint -W018 */
+ return !!qualifier.call(elem, i, elem) !== not;
+ });
+
+ }
+
+ if (qualifier.nodeType) {
+ return jQuery.grep(elements, function (elem) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if (typeof qualifier === "string") {
+ if (isSimple.test(qualifier)) {
+ return jQuery.filter(qualifier, elements, not);
+ }
+
+ qualifier = jQuery.filter(qualifier, elements);
+ }
+
+ return jQuery.grep(elements, function (elem) {
+ return ( jQuery.inArray(elem, qualifier) >= 0 ) !== not;
+ });
+ }
+
+ function createSafeFragment(document) {
+ var list = nodeNames.split("|"),
+ safeFrag = document.createDocumentFragment();
+
+ if (safeFrag.createElement) {
+ while (list.length) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+ }
+
+ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+ option: [1, "<select multiple='multiple'>", "</select>"],
+ legend: [1, "<fieldset>", "</fieldset>"],
+ area: [1, "<map>", "</map>"],
+ param: [1, "<object>", "</object>"],
+ thead: [1, "<table>", "</table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+
+ // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+ // unless wrapped in a div with non-breaking characters in front of it.
+ _default: jQuery.support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
+ },
+ safeFragment = createSafeFragment(document),
+ fragmentDiv = safeFragment.appendChild(document.createElement("div"));
+
+ wrapMap.optgroup = wrapMap.option;
+ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+ wrapMap.th = wrapMap.td;
+
+ jQuery.fn.extend({
+ text: function (value) {
+ return jQuery.access(this, function (value) {
+ return value === undefined ?
+ jQuery.text(this) :
+ this.empty().append(( this[0] && this[0].ownerDocument || document ).createTextNode(value));
+ }, null, value, arguments.length);
+ },
+
+ append: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.appendChild(elem);
+ }
+ });
+ },
+
+ prepend: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.insertBefore(elem, target.firstChild);
+ }
+ });
+ },
+
+ before: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this);
+ }
+ });
+ },
+
+ after: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this.nextSibling);
+ }
+ });
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function (selector, keepData) {
+ var elem,
+ elems = selector ? jQuery.filter(selector, this) : this,
+ i = 0;
+
+ for (; (elem = elems[i]) != null; i++) {
+
+ if (!keepData && elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem));
+ }
+
+ if (elem.parentNode) {
+ if (keepData && jQuery.contains(elem.ownerDocument, elem)) {
+ setGlobalEval(getAll(elem, "script"));
+ }
+ elem.parentNode.removeChild(elem);
+ }
+ }
+
+ return this;
+ },
+
+ empty: function () {
+ var elem,
+ i = 0;
+
+ for (; (elem = this[i]) != null; i++) {
+ // Remove element nodes and prevent memory leaks
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ }
+
+ // Remove any remaining nodes
+ while (elem.firstChild) {
+ elem.removeChild(elem.firstChild);
+ }
+
+ // If this is a select, ensure that it displays empty (#12336)
+ // Support: IE<9
+ if (elem.options && jQuery.nodeName(elem, "select")) {
+ elem.options.length = 0;
+ }
+ }
+
+ return this;
+ },
+
+ clone: function (dataAndEvents, deepDataAndEvents) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map(function () {
+ return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
+ });
+ },
+
+ html: function (value) {
+ return jQuery.access(this, function (value) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if (value === undefined) {
+ return elem.nodeType === 1 ?
+ elem.innerHTML.replace(rinlinejQuery, "") :
+ undefined;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if (typeof value === "string" && !rnoInnerhtml.test(value) &&
+ ( jQuery.support.htmlSerialize || !rnoshimcache.test(value) ) &&
+ ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value) ) && !wrapMap[( rtagName.exec(value) || ["", ""] )[1].toLowerCase()]) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for (; i < l; i++) {
+ // Remove element nodes and prevent memory leaks
+ elem = this[i] || {};
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch (e) {
+ }
+ }
+
+ if (elem) {
+ this.empty().append(value);
+ }
+ }, null, value, arguments.length);
+ },
+
+ replaceWith: function () {
+ var
+ // Snapshot the DOM in case .domManip sweeps something relevant into its fragment
+ args = jQuery.map(this, function (elem) {
+ return [elem.nextSibling, elem.parentNode];
+ }),
+ i = 0;
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip(arguments, function (elem) {
+ var next = args[i++],
+ parent = args[i++];
+
+ if (parent) {
+ // Don't use the snapshot next if it has moved (#13810)
+ if (next && next.parentNode !== parent) {
+ next = this.nextSibling;
+ }
+ jQuery(this).remove();
+ parent.insertBefore(elem, next);
+ }
+ // Allow new content to include elements from the context set
+ }, true);
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return i ? this : this.remove();
+ },
+
+ detach: function (selector) {
+ return this.remove(selector, true);
+ },
+
+ domManip: function (args, callback, allowIntersection) {
+
+ // Flatten any nested arrays
+ args = core_concat.apply([], args);
+
+ var first, node, hasScripts,
+ scripts, doc, fragment,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[0],
+ isFunction = jQuery.isFunction(value);
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if (isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test(value) )) {
+ return this.each(function (index) {
+ var self = set.eq(index);
+ if (isFunction) {
+ args[0] = value.call(this, index, self.html());
+ }
+ self.domManip(args, callback, allowIntersection);
+ });
+ }
+
+ if (l) {
+ fragment = jQuery.buildFragment(args, this[0].ownerDocument, false, !allowIntersection && this);
+ first = fragment.firstChild;
+
+ if (fragment.childNodes.length === 1) {
+ fragment = first;
+ }
+
+ if (first) {
+ scripts = jQuery.map(getAll(fragment, "script"), disableScript);
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for (; i < l; i++) {
+ node = fragment;
+
+ if (i !== iNoClone) {
+ node = jQuery.clone(node, true, true);
+
+ // Keep references to cloned scripts for later restoration
+ if (hasScripts) {
+ jQuery.merge(scripts, getAll(node, "script"));
+ }
+ }
+
+ callback.call(this[i], node, i);
+ }
+
+ if (hasScripts) {
+ doc = scripts[scripts.length - 1].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map(scripts, restoreScript);
+
+ // Evaluate executable scripts on first document insertion
+ for (i = 0; i < hasScripts; i++) {
+ node = scripts[i];
+ if (rscriptType.test(node.type || "") && !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) {
+
+ if (node.src) {
+ // Hope ajax is available...
+ jQuery._evalUrl(node.src);
+ } else {
+ jQuery.globalEval(( node.text || node.textContent || node.innerHTML || "" ).replace(rcleanScript, ""));
+ }
+ }
+ }
+ }
+
+ // Fix #11809: Avoid leaking memory
+ fragment = first = null;
+ }
+ }
+
+ return this;
+ }
+ });
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+ function manipulationTarget(elem, content) {
+ return jQuery.nodeName(elem, "table") &&
+ jQuery.nodeName(content.nodeType === 1 ? content : content.firstChild, "tr") ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody")) :
+ elem;
+ }
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+ function disableScript(elem) {
+ elem.type = (jQuery.find.attr(elem, "type") !== null) + "/" + elem.type;
+ return elem;
+ }
+
+ function restoreScript(elem) {
+ var match = rscriptTypeMasked.exec(elem.type);
+ if (match) {
+ elem.type = match[1];
+ } else {
+ elem.removeAttribute("type");
+ }
+ return elem;
+ }
+
+// Mark scripts as having already been evaluated
+ function setGlobalEval(elems, refElements) {
+ var elem,
+ i = 0;
+ for (; (elem = elems[i]) != null; i++) {
+ jQuery._data(elem, "globalEval", !refElements || jQuery._data(refElements[i], "globalEval"));
+ }
+ }
+
+ function cloneCopyEvent(src, dest) {
+
+ if (dest.nodeType !== 1 || !jQuery.hasData(src)) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data(src),
+ curData = jQuery._data(dest, oldData),
+ events = oldData.events;
+
+ if (events) {
+ delete curData.handle;
+ curData.events = {};
+
+ for (type in events) {
+ for (i = 0, l = events[type].length; i < l; i++) {
+ jQuery.event.add(dest, type, events[type][i]);
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if (curData.data) {
+ curData.data = jQuery.extend({}, curData.data);
+ }
+ }
+
+ function fixCloneNodeIssues(src, dest) {
+ var nodeName, e, data;
+
+ // We do not need to do anything for non-Elements
+ if (dest.nodeType !== 1) {
+ return;
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 copies events bound via attachEvent when using cloneNode.
+ if (!jQuery.support.noCloneEvent && dest[jQuery.expando]) {
+ data = jQuery._data(dest);
+
+ for (e in data.events) {
+ jQuery.removeEvent(dest, e, data.handle);
+ }
+
+ // Event data gets referenced instead of copied if the expando gets copied too
+ dest.removeAttribute(jQuery.expando);
+ }
+
+ // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+ if (nodeName === "script" && dest.text !== src.text) {
+ disableScript(dest).text = src.text;
+ restoreScript(dest);
+
+ // IE6-10 improperly clones children of object elements using classid.
+ // IE10 throws NoModificationAllowedError if parent is null, #12132.
+ } else if (nodeName === "object") {
+ if (dest.parentNode) {
+ dest.outerHTML = src.outerHTML;
+ }
+
+ // This path appears unavoidable for IE9. When cloning an object
+ // element in IE9, the outerHTML strategy above is not sufficient.
+ // If the src has innerHTML and the destination does not,
+ // copy the src.innerHTML into the dest.innerHTML. #10324
+ if (jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) )) {
+ dest.innerHTML = src.innerHTML;
+ }
+
+ } else if (nodeName === "input" && manipulation_rcheckableType.test(src.type)) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+
+ dest.defaultChecked = dest.checked = src.checked;
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if (dest.value !== src.value) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if (nodeName === "option") {
+ dest.defaultSelected = dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if (nodeName === "input" || nodeName === "textarea") {
+ dest.defaultValue = src.defaultValue;
+ }
+ }
+
+ jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (name, original) {
+ jQuery.fn[name] = function (selector) {
+ var elems,
+ i = 0,
+ ret = [],
+ insert = jQuery(selector),
+ last = insert.length - 1;
+
+ for (; i <= last; i++) {
+ elems = i === last ? this : this.clone(true);
+ jQuery(insert[i])[original](elems);
+
+ // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+ core_push.apply(ret, elems.get());
+ }
+
+ return this.pushStack(ret);
+ };
+ });
+
+ function getAll(context, tag) {
+ var elems, elem,
+ i = 0,
+ found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName(tag || "*") :
+ typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll(tag || "*") :
+ undefined;
+
+ if (!found) {
+ for (found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++) {
+ if (!tag || jQuery.nodeName(elem, tag)) {
+ found.push(elem);
+ } else {
+ jQuery.merge(found, getAll(elem, tag));
+ }
+ }
+ }
+
+ return tag === undefined || tag && jQuery.nodeName(context, tag) ?
+ jQuery.merge([context], found) :
+ found;
+ }
+
+// Used in buildFragment, fixes the defaultChecked property
+ function fixDefaultChecked(elem) {
+ if (manipulation_rcheckableType.test(elem.type)) {
+ elem.defaultChecked = elem.checked;
+ }
+ }
+
+ jQuery.extend({
+ clone: function (elem, dataAndEvents, deepDataAndEvents) {
+ var destElements, node, clone, i, srcElements,
+ inPage = jQuery.contains(elem.ownerDocument, elem);
+
+ if (jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">")) {
+ clone = elem.cloneNode(true);
+
+ // IE<=8 does not properly clone detached, unknown element nodes
+ } else {
+ fragmentDiv.innerHTML = elem.outerHTML;
+ fragmentDiv.removeChild(clone = fragmentDiv.firstChild);
+ }
+
+ if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll(clone);
+ srcElements = getAll(elem);
+
+ // Fix all IE cloning issues
+ for (i = 0; (node = srcElements[i]) != null; ++i) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if (destElements[i]) {
+ fixCloneNodeIssues(node, destElements[i]);
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if (dataAndEvents) {
+ if (deepDataAndEvents) {
+ srcElements = srcElements || getAll(elem);
+ destElements = destElements || getAll(clone);
+
+ for (i = 0; (node = srcElements[i]) != null; i++) {
+ cloneCopyEvent(node, destElements[i]);
+ }
+ } else {
+ cloneCopyEvent(elem, clone);
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll(clone, "script");
+ if (destElements.length > 0) {
+ setGlobalEval(destElements, !inPage && getAll(elem, "script"));
+ }
+
+ destElements = srcElements = node = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function (elems, context, scripts, selection) {
+ var j, elem, contains,
+ tmp, tag, tbody, wrap,
+ l = elems.length,
+
+ // Ensure a safe fragment
+ safe = createSafeFragment(context),
+
+ nodes = [],
+ i = 0;
+
+ for (; i < l; i++) {
+ elem = elems[i];
+
+ if (elem || elem === 0) {
+
+ // Add nodes directly
+ if (jQuery.type(elem) === "object") {
+ jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
+
+ // Convert non-html into a text node
+ } else if (!rhtml.test(elem)) {
+ nodes.push(context.createTextNode(elem));
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || safe.appendChild(context.createElement("div"));
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec(elem) || ["", ""] )[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+
+ tmp.innerHTML = wrap[1] + elem.replace(rxhtmlTag, "<$1></$2>") + wrap[2];
+
+ // Descend through wrappers to the right content
+ j = wrap[0];
+ while (j--) {
+ tmp = tmp.lastChild;
+ }
+
+ // Manually add leading whitespace removed by IE
+ if (!jQuery.support.leadingWhitespace && rleadingWhitespace.test(elem)) {
+ nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0]));
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if (!jQuery.support.tbody) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ elem = tag === "table" && !rtbody.test(elem) ?
+ tmp.firstChild :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !rtbody.test(elem) ?
+ tmp :
+ 0;
+
+ j = elem && elem.childNodes.length;
+ while (j--) {
+ if (jQuery.nodeName((tbody = elem.childNodes[j]), "tbody") && !tbody.childNodes.length) {
+ elem.removeChild(tbody);
+ }
+ }
+ }
+
+ jQuery.merge(nodes, tmp.childNodes);
+
+ // Fix #12392 for WebKit and IE > 9
+ tmp.textContent = "";
+
+ // Fix #12392 for oldIE
+ while (tmp.firstChild) {
+ tmp.removeChild(tmp.firstChild);
+ }
+
+ // Remember the top-level container for proper cleanup
+ tmp = safe.lastChild;
+ }
+ }
+ }
+
+ // Fix #11356: Clear elements from fragment
+ if (tmp) {
+ safe.removeChild(tmp);
+ }
+
+ // Reset defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ if (!jQuery.support.appendChecked) {
+ jQuery.grep(getAll(nodes, "input"), fixDefaultChecked);
+ }
+
+ i = 0;
+ while ((elem = nodes[i++])) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if (selection && jQuery.inArray(elem, selection) !== -1) {
+ continue;
+ }
+
+ contains = jQuery.contains(elem.ownerDocument, elem);
+
+ // Append to fragment
+ tmp = getAll(safe.appendChild(elem), "script");
+
+ // Preserve script evaluation history
+ if (contains) {
+ setGlobalEval(tmp);
+ }
+
+ // Capture executables
+ if (scripts) {
+ j = 0;
+ while ((elem = tmp[j++])) {
+ if (rscriptType.test(elem.type || "")) {
+ scripts.push(elem);
+ }
+ }
+ }
+ }
+
+ tmp = null;
+
+ return safe;
+ },
+
+ cleanData: function (elems, /* internal */ acceptData) {
+ var elem, type, id, data,
+ i = 0,
+ internalKey = jQuery.expando,
+ cache = jQuery.cache,
+ deleteExpando = jQuery.support.deleteExpando,
+ special = jQuery.event.special;
+
+ for (; (elem = elems[i]) != null; i++) {
+
+ if (acceptData || jQuery.acceptData(elem)) {
+
+ id = elem[internalKey];
+ data = id && cache[id];
+
+ if (data) {
+ if (data.events) {
+ for (type in data.events) {
+ if (special[type]) {
+ jQuery.event.remove(elem, type);
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent(elem, type, data.handle);
+ }
+ }
+ }
+
+ // Remove cache only if it was not already removed by jQuery.event.remove
+ if (cache[id]) {
+
+ delete cache[id];
+
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if (deleteExpando) {
+ delete elem[internalKey];
+
+ } else if (typeof elem.removeAttribute !== core_strundefined) {
+ elem.removeAttribute(internalKey);
+
+ } else {
+ elem[internalKey] = null;
+ }
+
+ core_deletedIds.push(id);
+ }
+ }
+ }
+ }
+ },
+
+ _evalUrl: function (url) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ }
+ });
+ jQuery.fn.extend({
+ wrapAll: function (html) {
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapAll(html.call(this, i));
+ });
+ }
+
+ if (this[0]) {
+ // The elements to wrap the target around
+ var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
+
+ if (this[0].parentNode) {
+ wrap.insertBefore(this[0]);
+ }
+
+ wrap.map(function () {
+ var elem = this;
+
+ while (elem.firstChild && elem.firstChild.nodeType === 1) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function (html) {
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapInner(html.call(this, i));
+ });
+ }
+
+ return this.each(function () {
+ var self = jQuery(this),
+ contents = self.contents();
+
+ if (contents.length) {
+ contents.wrapAll(html);
+
+ } else {
+ self.append(html);
+ }
+ });
+ },
+
+ wrap: function (html) {
+ var isFunction = jQuery.isFunction(html);
+
+ return this.each(function (i) {
+ jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
+ });
+ },
+
+ unwrap: function () {
+ return this.parent().each(function () {
+ if (!jQuery.nodeName(this, "body")) {
+ jQuery(this).replaceWith(this.childNodes);
+ }
+ }).end();
+ }
+ });
+ var iframe, getStyles, curCSS,
+ ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity\s*=\s*([^)]*)/,
+ rposition = /^(top|right|bottom|left)$/,
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rmargin = /^margin/,
+ rnumsplit = new RegExp("^(" + core_pnum + ")(.*)$", "i"),
+ rnumnonpx = new RegExp("^(" + core_pnum + ")(?!px)[a-z%]+$", "i"),
+ rrelNum = new RegExp("^([+-])=(" + core_pnum + ")", "i"),
+ elemdisplay = {BODY: "block"},
+
+ cssShow = {position: "absolute", visibility: "hidden", display: "block"},
+ cssNormalTransform = {
+ letterSpacing: 0,
+ fontWeight: 400
+ },
+
+ cssExpand = ["Top", "Right", "Bottom", "Left"],
+ cssPrefixes = ["Webkit", "O", "Moz", "ms"];
+
+// return a css property mapped to a potentially vendor prefixed property
+ function vendorPropName(style, name) {
+
+ // shortcut for names that are not vendor prefixed
+ if (name in style) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while (i--) {
+ name = cssPrefixes[i] + capName;
+ if (name in style) {
+ return name;
+ }
+ }
+
+ return origName;
+ }
+
+ function isHidden(elem, el) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css(elem, "display") === "none" || !jQuery.contains(elem.ownerDocument, elem);
+ }
+
+ function showHide(elements, show) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for (; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+
+ values[index] = jQuery._data(elem, "olddisplay");
+ display = elem.style.display;
+ if (show) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if (!values[index] && display === "none") {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if (elem.style.display === "" && isHidden(elem)) {
+ values[index] = jQuery._data(elem, "olddisplay", css_defaultDisplay(elem.nodeName));
+ }
+ } else {
+
+ if (!values[index]) {
+ hidden = isHidden(elem);
+
+ if (display && display !== "none" || !hidden) {
+ jQuery._data(elem, "olddisplay", hidden ? display : jQuery.css(elem, "display"));
+ }
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for (index = 0; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+ if (!show || elem.style.display === "none" || elem.style.display === "") {
+ elem.style.display = show ? values[index] || "" : "none";
+ }
+ }
+
+ return elements;
+ }
+
+ jQuery.fn.extend({
+ css: function (name, value) {
+ return jQuery.access(this, function (elem, name, value) {
+ var len, styles,
+ map = {},
+ i = 0;
+
+ if (jQuery.isArray(name)) {
+ styles = getStyles(elem);
+ len = name.length;
+
+ for (; i < len; i++) {
+ map[name[i]] = jQuery.css(elem, name[i], false, styles);
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style(elem, name, value) :
+ jQuery.css(elem, name);
+ }, name, value, arguments.length > 1);
+ },
+ show: function () {
+ return showHide(this, true);
+ },
+ hide: function () {
+ return showHide(this);
+ },
+ toggle: function (state) {
+ if (typeof state === "boolean") {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function () {
+ if (isHidden(this)) {
+ jQuery(this).show();
+ } else {
+ jQuery(this).hide();
+ }
+ });
+ }
+ });
+
+ jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function (elem, computed) {
+ if (computed) {
+ // We should always get a number back from opacity
+ var ret = curCSS(elem, "opacity");
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function (elem, name, value, extra) {
+ // Don't set styles on text and comment nodes
+ if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase(name),
+ style = elem.style;
+
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(style, origName) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // Check if we're setting a value
+ if (value !== undefined) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if (type === "string" && (ret = rrelNum.exec(value))) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat(jQuery.css(elem, name));
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that NaN and null values aren't set. See: #7116
+ if (value == null || type === "number" && isNaN(value)) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if (type === "number" && !jQuery.cssNumber[origName]) {
+ value += "px";
+ }
+
+ // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+ // but it would mean to define eight (for every problematic property) identical functions
+ if (!jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
+ style[name] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
+
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[name] = value;
+ } catch (e) {
+ }
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[name];
+ }
+ },
+
+ css: function (elem, name, extra, styles) {
+ var num, val, hooks,
+ origName = jQuery.camelCase(name);
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(elem.style, origName) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // If a hook was provided get the computed value from there
+ if (hooks && "get" in hooks) {
+ val = hooks.get(elem, true, extra);
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if (val === undefined) {
+ val = curCSS(elem, name, styles);
+ }
+
+ //convert "normal" to computed value
+ if (val === "normal" && name in cssNormalTransform) {
+ val = cssNormalTransform[name];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if (extra === "" || extra) {
+ num = parseFloat(val);
+ return extra === true || jQuery.isNumeric(num) ? num || 0 : val;
+ }
+ return val;
+ }
+ });
+
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+ if (window.getComputedStyle) {
+ getStyles = function (elem) {
+ return window.getComputedStyle(elem, null);
+ };
+
+ curCSS = function (elem, name, _computed) {
+ var width, minWidth, maxWidth,
+ computed = _computed || getStyles(elem),
+
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+ ret = computed ? computed.getPropertyValue(name) || computed[name] : undefined,
+ style = elem.style;
+
+ if (computed) {
+
+ if (ret === "" && !jQuery.contains(elem.ownerDocument, elem)) {
+ ret = jQuery.style(elem, name);
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if (rnumnonpx.test(ret) && rmargin.test(name)) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret;
+ };
+ } else if (document.documentElement.currentStyle) {
+ getStyles = function (elem) {
+ return elem.currentStyle;
+ };
+
+ curCSS = function (elem, name, _computed) {
+ var left, rs, rsLeft,
+ computed = _computed || getStyles(elem),
+ ret = computed ? computed[name] : undefined,
+ style = elem.style;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if (ret == null && style && style[name]) {
+ ret = style[name];
+ }
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ // but not position css attributes, as those are proportional to the parent element instead
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+ if (rnumnonpx.test(ret) && !rposition.test(name)) {
+
+ // Remember the original values
+ left = style.left;
+ rs = elem.runtimeStyle;
+ rsLeft = rs && rs.left;
+
+ // Put in the new values to get a computed value out
+ if (rsLeft) {
+ rs.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ret;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if (rsLeft) {
+ rs.left = rsLeft;
+ }
+ }
+
+ return ret === "" ? "auto" : ret;
+ };
+ }
+
+ function setPositiveNumber(elem, value, subtract) {
+ var matches = rnumsplit.exec(value);
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max(0, matches[1] - ( subtract || 0 )) + ( matches[2] || "px" ) :
+ value;
+ }
+
+ function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for (; i < 4; i += 2) {
+ // both box models exclude margin, so add it if we want it
+ if (extra === "margin") {
+ val += jQuery.css(elem, extra + cssExpand[i], true, styles);
+ }
+
+ if (isBorderBox) {
+ // border-box includes padding, so remove it if we want content
+ if (extra === "content") {
+ val -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if (extra !== "margin") {
+ val -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+
+ // at this point, extra isn't content nor padding, so add border
+ if (extra !== "padding") {
+ val += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ }
+ }
+
+ return val;
+ }
+
+ function getWidthOrHeight(elem, name, extra) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles(elem),
+ isBorderBox = jQuery.support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box";
+
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if (val <= 0 || val == null) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS(elem, name, styles);
+ if (val < 0 || val == null) {
+ val = elem.style[name];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if (rnumnonpx.test(val)) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[name] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat(val) || 0;
+ }
+
+ // use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+ }
+
+// Try to determine the default display value of an element
+ function css_defaultDisplay(nodeName) {
+ var doc = document,
+ display = elemdisplay[nodeName];
+
+ if (!display) {
+ display = actualDisplay(nodeName, doc);
+
+ // If the simple way fails, read from inside an iframe
+ if (display === "none" || !display) {
+ // Use the already-created iframe if possible
+ iframe = ( iframe ||
+ jQuery("<iframe frameborder='0' width='0' height='0'/>")
+ .css("cssText", "display:block !important")
+ ).appendTo(doc.documentElement);
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+ doc.write("<!doctype html><html><body>");
+ doc.close();
+
+ display = actualDisplay(nodeName, doc);
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[nodeName] = display;
+ }
+
+ return display;
+ }
+
+// Called ONLY from within css_defaultDisplay
+ function actualDisplay(name, doc) {
+ var elem = jQuery(doc.createElement(name)).appendTo(doc.body),
+ display = jQuery.css(elem[0], "display");
+ elem.remove();
+ return display;
+ }
+
+ jQuery.each(["height", "width"], function (i, name) {
+ jQuery.cssHooks[name] = {
+ get: function (elem, computed, extra) {
+ if (computed) {
+ // certain elements can have dimension info if we invisibly show them
+ // however, it must have a current display style that would benefit from this
+ return elem.offsetWidth === 0 && rdisplayswap.test(jQuery.css(elem, "display")) ?
+ jQuery.swap(elem, cssShow, function () {
+ return getWidthOrHeight(elem, name, extra);
+ }) :
+ getWidthOrHeight(elem, name, extra);
+ }
+ },
+
+ set: function (elem, value, extra) {
+ var styles = extra && getStyles(elem);
+ return setPositiveNumber(elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+ });
+
+ if (!jQuery.support.opacity) {
+ jQuery.cssHooks.opacity = {
+ get: function (elem, computed) {
+ // IE uses filters for opacity
+ return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
+ ( 0.01 * parseFloat(RegExp.$1) ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function (elem, value) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric(value) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ // if value === "", then remove inline opacity #12685
+ if (( value >= 1 || value === "" ) &&
+ jQuery.trim(filter.replace(ralpha, "")) === "" &&
+ style.removeAttribute) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute("filter");
+
+ // if there is no filter style applied in a css rule or unset inline opacity, we are done
+ if (value === "" || currentStyle && !currentStyle.filter) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test(filter) ?
+ filter.replace(ralpha, opacity) :
+ filter + " " + opacity;
+ }
+ };
+ }
+
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+ jQuery(function () {
+ if (!jQuery.support.reliableMarginRight) {
+ jQuery.cssHooks.marginRight = {
+ get: function (elem, computed) {
+ if (computed) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap(elem, {"display": "inline-block"},
+ curCSS, [elem, "marginRight"]);
+ }
+ }
+ };
+ }
+
+ // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+ // getComputedStyle returns percent when specified for top/left/bottom/right
+ // rather than make the css module depend on the offset module, we just check for it here
+ if (!jQuery.support.pixelPosition && jQuery.fn.position) {
+ jQuery.each(["top", "left"], function (i, prop) {
+ jQuery.cssHooks[prop] = {
+ get: function (elem, computed) {
+ if (computed) {
+ computed = curCSS(elem, prop);
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test(computed) ?
+ jQuery(elem).position()[prop] + "px" :
+ computed;
+ }
+ }
+ };
+ });
+ }
+
+ });
+
+ if (jQuery.expr && jQuery.expr.filters) {
+ jQuery.expr.filters.hidden = function (elem) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+ (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css(elem, "display")) === "none");
+ };
+
+ jQuery.expr.filters.visible = function (elem) {
+ return !jQuery.expr.filters.hidden(elem);
+ };
+ }
+
+// These hooks are used by animate to expand properties
+ jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function (prefix, suffix) {
+ jQuery.cssHooks[prefix + suffix] = {
+ expand: function (value) {
+ var i = 0,
+ expanded = {},
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [value];
+
+ for (; i < 4; i++) {
+ expanded[prefix + cssExpand[i] + suffix] =
+ parts[i] || parts[i - 2] || parts[0];
+ }
+
+ return expanded;
+ }
+ };
+
+ if (!rmargin.test(prefix)) {
+ jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
+ }
+ });
+ var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+ jQuery.fn.extend({
+ serialize: function () {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function () {
+ return this.map(function () {
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop(this, "elements");
+ return elements ? jQuery.makeArray(elements) : this;
+ })
+ .filter(function () {
+ var type = this.type;
+ // Use .is(":disabled") so that fieldset[disabled] works
+ return this.name && !jQuery(this).is(":disabled") &&
+ rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
+ ( this.checked || !manipulation_rcheckableType.test(type) );
+ })
+ .map(function (i, elem) {
+ var val = jQuery(this).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray(val) ?
+ jQuery.map(val, function (val) {
+ return {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }) :
+ {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }).get();
+ }
+ });
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+ jQuery.param = function (a, traditional) {
+ var prefix,
+ s = [],
+ add = function (key, value) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction(value) ? value() : ( value == null ? "" : value );
+ s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if (traditional === undefined) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if (jQuery.isArray(a) || ( a.jquery && !jQuery.isPlainObject(a) )) {
+ // Serialize the form elements
+ jQuery.each(a, function () {
+ add(this.name, this.value);
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for (prefix in a) {
+ buildParams(prefix, a[prefix], traditional, add);
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join("&").replace(r20, "+");
+ };
+
+ function buildParams(prefix, obj, traditional, add) {
+ var name;
+
+ if (jQuery.isArray(obj)) {
+ // Serialize array item.
+ jQuery.each(obj, function (i, v) {
+ if (traditional || rbracket.test(prefix)) {
+ // Treat each array item as a scalar.
+ add(prefix, v);
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add);
+ }
+ });
+
+ } else if (!traditional && jQuery.type(obj) === "object") {
+ // Serialize object item.
+ for (name in obj) {
+ buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
+ }
+
+ } else {
+ // Serialize scalar item.
+ add(prefix, obj);
+ }
+ }
+
+ jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) {
+
+ // Handle event binding
+ jQuery.fn[name] = function (data, fn) {
+ return arguments.length > 0 ?
+ this.on(name, null, data, fn) :
+ this.trigger(name);
+ };
+ });
+
+ jQuery.fn.extend({
+ hover: function (fnOver, fnOut) {
+ return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
+ },
+
+ bind: function (types, data, fn) {
+ return this.on(types, null, data, fn);
+ },
+ unbind: function (types, fn) {
+ return this.off(types, null, fn);
+ },
+
+ delegate: function (selector, types, data, fn) {
+ return this.on(types, selector, data, fn);
+ },
+ undelegate: function (selector, types, fn) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
+ }
+ });
+ var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+ ajax_nonce = jQuery.now(),
+
+ ajax_rquery = /\?/,
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+ try {
+ ajaxLocation = location.href;
+ } catch (e) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement("a");
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+ }
+
+// Segment location into parts
+ ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+ function addToPrefiltersOrTransports(structure) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function (dataTypeExpression, func) {
+
+ if (typeof dataTypeExpression !== "string") {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match(core_rnotwhite) || [];
+
+ if (jQuery.isFunction(func)) {
+ // For each dataType in the dataTypeExpression
+ while ((dataType = dataTypes[i++])) {
+ // Prepend if requested
+ if (dataType[0] === "+") {
+ dataType = dataType.slice(1) || "*";
+ (structure[dataType] = structure[dataType] || []).unshift(func);
+
+ // Otherwise append
+ } else {
+ (structure[dataType] = structure[dataType] || []).push(func);
+ }
+ }
+ }
+ };
+ }
+
+// Base inspection function for prefilters and transports
+ function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect(dataType) {
+ var selected;
+ inspected[dataType] = true;
+ jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
+ var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
+ if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
+ options.dataTypes.unshift(dataTypeOrTransport);
+ inspect(dataTypeOrTransport);
+ return false;
+ } else if (seekingTransport) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
+ }
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+ function ajaxExtend(target, src) {
+ var deep, key,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for (key in src) {
+ if (src[key] !== undefined) {
+ ( flatOptions[key] ? target : ( deep || (deep = {}) ) )[key] = src[key];
+ }
+ }
+ if (deep) {
+ jQuery.extend(true, target, deep);
+ }
+
+ return target;
+ }
+
+ jQuery.fn.load = function (url, params, callback) {
+ if (typeof url !== "string" && _load) {
+ return _load.apply(this, arguments);
+ }
+
+ var selector, response, type,
+ self = this,
+ off = url.indexOf(" ");
+
+ if (off >= 0) {
+ selector = url.slice(off, url.length);
+ url = url.slice(0, off);
+ }
+
+ // If it's a function
+ if (jQuery.isFunction(params)) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if (params && typeof params === "object") {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if (self.length > 0) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function (responseText) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html(selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
+
+ // Otherwise use the full result
+ responseText);
+
+ }).complete(callback && function (jqXHR, status) {
+ self.each(callback, response || [jqXHR.responseText, status, jqXHR]);
+ });
+ }
+
+ return this;
+ };
+
+// Attach a bunch of functions for handling common AJAX events
+ jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (i, type) {
+ jQuery.fn[type] = function (fn) {
+ return this.on(type, fn);
+ };
+ });
+
+ jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test(ajaxLocParts[1]),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function (target, settings) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :
+
+ // Extending ajaxSettings
+ ajaxExtend(jQuery.ajaxSettings, target);
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
+ ajaxTransport: addToPrefiltersOrTransports(transports),
+
+ // Main method
+ ajax: function (url, options) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if (typeof url === "object") {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Cross-domain detection vars
+ parts,
+ // Loop variable
+ i,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers as string
+ responseHeadersString,
+ // timeout handle
+ timeoutTimer,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ transport,
+ // Response headers
+ responseHeaders,
+ // Create the final options object
+ s = jQuery.ajaxSetup({}, options),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery(callbackContext) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function (key) {
+ var match;
+ if (state === 2) {
+ if (!responseHeaders) {
+ responseHeaders = {};
+ while ((match = rheaders.exec(responseHeadersString))) {
+ responseHeaders[match[1].toLowerCase()] = match[2];
+ }
+ }
+ match = responseHeaders[key.toLowerCase()];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function () {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function (name, value) {
+ var lname = name.toLowerCase();
+ if (!state) {
+ name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;
+ requestHeaders[name] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function (type) {
+ if (!state) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function (map) {
+ var code;
+ if (map) {
+ if (state < 2) {
+ for (code in map) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[code] = [statusCode[code], map[code]];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always(map[jqXHR.status]);
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function (statusText) {
+ var finalText = statusText || strAbort;
+ if (transport) {
+ transport.abort(finalText);
+ }
+ done(0, finalText);
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise(jqXHR).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//");
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(core_rnotwhite) || [""];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if (s.crossDomain == null) {
+ parts = rurl.exec(s.url.toLowerCase());
+ s.crossDomain = !!( parts &&
+ ( parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] ||
+ ( parts[3] || ( parts[1] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[3] || ( ajaxLocParts[1] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if (s.data && s.processData && typeof s.data !== "string") {
+ s.data = jQuery.param(s.data, s.traditional);
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
+
+ // If request was aborted inside a prefilter, stop there
+ if (state === 2) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ fireGlobals = s.global;
+
+ // Watch for a new set of requests
+ if (fireGlobals && jQuery.active++ === 0) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test(s.type);
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if (!s.hasContent) {
+
+ // If data is available, append data to url
+ if (s.data) {
+ cacheURL = ( s.url += ( ajax_rquery.test(cacheURL) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if (s.cache === false) {
+ s.url = rts.test(cacheURL) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace(rts, "$1_=" + ajax_nonce++) :
+
+ // Otherwise add one to the end
+ cacheURL + ( ajax_rquery.test(cacheURL) ? "&" : "?" ) + "_=" + ajax_nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ if (jQuery.lastModified[cacheURL]) {
+ jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
+ }
+ if (jQuery.etag[cacheURL]) {
+ jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
+ jqXHR.setRequestHeader("Content-Type", s.contentType);
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[0] && s.accepts[s.dataTypes[0]] ?
+ s.accepts[s.dataTypes[0]] + ( s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts["*"]
+ );
+
+ // Check for headers option
+ for (i in s.headers) {
+ jqXHR.setRequestHeader(i, s.headers[i]);
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if (s.beforeSend && ( s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2 )) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for (i in {success: 1, error: 1, complete: 1}) {
+ jqXHR[i](s[i]);
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
+
+ // If no transport, we auto-abort
+ if (!transport) {
+ done(-1, "No Transport");
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxSend", [jqXHR, s]);
+ }
+ // Timeout
+ if (s.async && s.timeout > 0) {
+ timeoutTimer = setTimeout(function () {
+ jqXHR.abort("timeout");
+ }, s.timeout);
+ }
+
+ try {
+ state = 1;
+ transport.send(requestHeaders, done);
+ } catch (e) {
+ // Propagate exception as error if not done
+ if (state < 2) {
+ done(-1, e);
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done(status, nativeStatusText, responses, headers) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if (state === 2) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if (timeoutTimer) {
+ clearTimeout(timeoutTimer);
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if (responses) {
+ response = ajaxHandleResponses(s, jqXHR, responses);
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert(s, response, jqXHR, isSuccess);
+
+ // If successful, handle type chaining
+ if (isSuccess) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if (modified) {
+ jQuery.lastModified[cacheURL] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if (modified) {
+ jQuery.etag[cacheURL] = modified;
+ }
+ }
+
+ // if no content
+ if (status === 204 || s.type === "HEAD") {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if (status === 304) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if (status || !statusText) {
+ statusText = "error";
+ if (status < 0) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if (isSuccess) {
+ deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
+ } else {
+ deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode(statusCode);
+ statusCode = undefined;
+
+ if (fireGlobals) {
+ globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError",
+ [jqXHR, s, isSuccess ? success : error]);
+ }
+
+ // Complete
+ completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
+
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
+ // Handle the global AJAX counter
+ if (!( --jQuery.active )) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function (url, data, callback) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ getScript: function (url, callback) {
+ return jQuery.get(url, undefined, callback, "script");
+ }
+ });
+
+ jQuery.each(["get", "post"], function (i, method) {
+ jQuery[method] = function (url, data, callback, type) {
+ // shift arguments if data argument was omitted
+ if (jQuery.isFunction(data)) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+ });
+
+ /* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+ function ajaxHandleResponses(s, jqXHR, responses) {
+ var firstDataType, ct, finalDataType, type,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while (dataTypes[0] === "*") {
+ dataTypes.shift();
+ if (ct === undefined) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if (ct) {
+ for (type in contents) {
+ if (contents[type] && contents[type].test(ct)) {
+ dataTypes.unshift(type);
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if (dataTypes[0] in responses) {
+ finalDataType = dataTypes[0];
+ } else {
+ // Try convertible dataTypes
+ for (type in responses) {
+ if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
+ finalDataType = type;
+ break;
+ }
+ if (!firstDataType) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if (finalDataType) {
+ if (finalDataType !== dataTypes[0]) {
+ dataTypes.unshift(finalDataType);
+ }
+ return responses[finalDataType];
+ }
+ }
+
+ /* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+ function ajaxConvert(s, response, jqXHR, isSuccess) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if (dataTypes[1]) {
+ for (conv in s.converters) {
+ converters[conv.toLowerCase()] = s.converters[conv];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while (current) {
+
+ if (s.responseFields[current]) {
+ jqXHR[s.responseFields[current]] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if (!prev && isSuccess && s.dataFilter) {
+ response = s.dataFilter(response, s.dataType);
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if (current) {
+
+ // There's only work to do if current dataType is non-auto
+ if (current === "*") {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if (prev !== "*" && prev !== current) {
+
+ // Seek a direct converter
+ conv = converters[prev + " " + current] || converters["* " + current];
+
+ // If none found, seek a pair
+ if (!conv) {
+ for (conv2 in converters) {
+
+ // If conv2 outputs current
+ tmp = conv2.split(" ");
+ if (tmp[1] === current) {
+
+ // If prev can be converted to accepted input
+ conv = converters[prev + " " + tmp[0]] ||
+ converters["* " + tmp[0]];
+ if (conv) {
+ // Condense equivalence converters
+ if (conv === true) {
+ conv = converters[conv2];
+
+ // Otherwise, insert the intermediate dataType
+ } else if (converters[conv2] !== true) {
+ current = tmp[0];
+ dataTypes.unshift(tmp[1]);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if (conv !== true) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if (conv && s["throws"]) {
+ response = conv(response);
+ } else {
+ try {
+ response = conv(response);
+ } catch (e) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return {state: "success", data: response};
+ }
+
+// Install script dataType
+ jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function (text) {
+ jQuery.globalEval(text);
+ return text;
+ }
+ }
+ });
+
+// Handle cache's special case and global
+ jQuery.ajaxPrefilter("script", function (s) {
+ if (s.cache === undefined) {
+ s.cache = false;
+ }
+ if (s.crossDomain) {
+ s.type = "GET";
+ s.global = false;
+ }
+ });
+
+// Bind script tag hack transport
+ jQuery.ajaxTransport("script", function (s) {
+
+ // This transport only deals with cross domain requests
+ if (s.crossDomain) {
+
+ var script,
+ head = document.head || jQuery("head")[0] || document.documentElement;
+
+ return {
+
+ send: function (_, callback) {
+
+ script = document.createElement("script");
+
+ script.async = true;
+
+ if (s.scriptCharset) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function (_, isAbort) {
+
+ if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if (script.parentNode) {
+ script.parentNode.removeChild(script);
+ }
+
+ // Dereference the script
+ script = null;
+
+ // Callback if not abort
+ if (!isAbort) {
+ callback(200, "success");
+ }
+ }
+ };
+
+ // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ head.insertBefore(script, head.firstChild);
+ },
+
+ abort: function () {
+ if (script) {
+ script.onload(undefined, true);
+ }
+ }
+ };
+ }
+ });
+ var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+ jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function () {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
+ this[callback] = true;
+ return callback;
+ }
+ });
+
+// Detect, normalize options and install callbacks for jsonp requests
+ jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test(s.url) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test(s.data) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if (jsonProp || s.dataTypes[0] === "jsonp") {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if (jsonProp) {
+ s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
+ } else if (s.jsonp !== false) {
+ s.url += ( ajax_rquery.test(s.url) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function () {
+ if (!responseContainer) {
+ jQuery.error(callbackName + " was not called");
+ }
+ return responseContainer[0];
+ };
+
+ // force json dataType
+ s.dataTypes[0] = "json";
+
+ // Install callback
+ overwritten = window[callbackName];
+ window[callbackName] = function () {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function () {
+ // Restore preexisting value
+ window[callbackName] = overwritten;
+
+ // Save back as free
+ if (s[callbackName]) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push(callbackName);
+ }
+
+ // Call if it was a function and we have a response
+ if (responseContainer && jQuery.isFunction(overwritten)) {
+ overwritten(responseContainer[0]);
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+ });
+ var xhrCallbacks, xhrSupported,
+ xhrId = 0,
+ // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+ xhrOnUnloadAbort = window.ActiveXObject && function () {
+ // Abort all pending requests
+ var key;
+ for (key in xhrCallbacks) {
+ xhrCallbacks[key](undefined, true);
+ }
+ };
+
+// Functions to create xhrs
+ function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch (e) {
+ }
+ }
+
+ function createActiveXHR() {
+ try {
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e) {
+ }
+ }
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+ jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+ /* Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+ function () {
+ return !this.isLocal && createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+// Determine support properties
+ xhrSupported = jQuery.ajaxSettings.xhr();
+ jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+ xhrSupported = jQuery.support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+ if (xhrSupported) {
+
+ jQuery.ajaxTransport(function (s) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if (!s.crossDomain || jQuery.support.cors) {
+
+ var callback;
+
+ return {
+ send: function (headers, complete) {
+
+ // Get a new xhr
+ var handle, i,
+ xhr = s.xhr();
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if (s.username) {
+ xhr.open(s.type, s.url, s.async, s.username, s.password);
+ } else {
+ xhr.open(s.type, s.url, s.async);
+ }
+
+ // Apply custom fields if provided
+ if (s.xhrFields) {
+ for (i in s.xhrFields) {
+ xhr[i] = s.xhrFields[i];
+ }
+ }
+
+ // Override mime type if needed
+ if (s.mimeType && xhr.overrideMimeType) {
+ xhr.overrideMimeType(s.mimeType);
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if (!s.crossDomain && !headers["X-Requested-With"]) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ for (i in headers) {
+ xhr.setRequestHeader(i, headers[i]);
+ }
+ } catch (err) {
+ }
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send(( s.hasContent && s.data ) || null);
+
+ // Listener
+ callback = function (_, isAbort) {
+ var status, responseHeaders, statusText, responses;
+
+ // Firefox throws exceptions when accessing properties
+ // of an xhr when a network error occurred
+ // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+ try {
+
+ // Was never called and is aborted or complete
+ if (callback && ( isAbort || xhr.readyState === 4 )) {
+
+ // Only called once
+ callback = undefined;
+
+ // Do not keep as active anymore
+ if (handle) {
+ xhr.onreadystatechange = jQuery.noop;
+ if (xhrOnUnloadAbort) {
+ delete xhrCallbacks[handle];
+ }
+ }
+
+ // If it's an abort
+ if (isAbort) {
+ // Abort it manually if needed
+ if (xhr.readyState !== 4) {
+ xhr.abort();
+ }
+ } else {
+ responses = {};
+ status = xhr.status;
+ responseHeaders = xhr.getAllResponseHeaders();
+
+ // When requesting binary data, IE6-9 will throw an exception
+ // on any attempt to access responseText (#11426)
+ if (typeof xhr.responseText === "string") {
+ responses.text = xhr.responseText;
+ }
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch (e) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if (!status && s.isLocal && !s.crossDomain) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if (status === 1223) {
+ status = 204;
+ }
+ }
+ }
+ } catch (firefoxAccessException) {
+ if (!isAbort) {
+ complete(-1, firefoxAccessException);
+ }
+ }
+
+ // Call complete if needed
+ if (responses) {
+ complete(status, statusText, responses, responseHeaders);
+ }
+ };
+
+ if (!s.async) {
+ // if we're in sync mode we fire the callback
+ callback();
+ } else if (xhr.readyState === 4) {
+ // (IE6 & IE7) if it's in cache and has been
+ // retrieved directly we need to fire the callback
+ setTimeout(callback);
+ } else {
+ handle = ++xhrId;
+ if (xhrOnUnloadAbort) {
+ // Create the active xhrs callbacks list if needed
+ // and attach the unload handler
+ if (!xhrCallbacks) {
+ xhrCallbacks = {};
+ jQuery(window).unload(xhrOnUnloadAbort);
+ }
+ // Add to list of active xhrs callbacks
+ xhrCallbacks[handle] = callback;
+ }
+ xhr.onreadystatechange = callback;
+ }
+ },
+
+ abort: function () {
+ if (callback) {
+ callback(undefined, true);
+ }
+ }
+ };
+ }
+ });
+ }
+ var fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp("^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i"),
+ rrun = /queueHooks$/,
+ animationPrefilters = [defaultPrefilter],
+ tweeners = {
+ "*": [function (prop, value) {
+ var tween = this.createTween(prop, value),
+ target = tween.cur(),
+ parts = rfxnum.exec(value),
+ unit = parts && parts[3] || ( jQuery.cssNumber[prop] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[prop] || unit !== "px" && +target ) &&
+ rfxnum.exec(jQuery.css(tween.elem, prop)),
+ scale = 1,
+ maxIterations = 20;
+
+ if (start && start[3] !== unit) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[3];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*
+ // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style(tween.elem, prop, start + unit);
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while (scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations);
+ }
+
+ // Update tween properties
+ if (parts) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[1] ?
+ start + ( parts[1] + 1 ) * parts[2] :
+ +parts[2];
+ }
+
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+ function createFxNow() {
+ setTimeout(function () {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+ }
+
+ function createTween(value, prop, animation) {
+ var tween,
+ collection = ( tweeners[prop] || [] ).concat(tweeners["*"]),
+ index = 0,
+ length = collection.length;
+ for (; index < length; index++) {
+ if ((tween = collection[index].call(animation, prop, value))) {
+
+ // we're done with this property
+ return tween;
+ }
+ }
+ }
+
+ function Animation(elem, properties, options) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always(function () {
+ // don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function () {
+ if (stopped) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
+ // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for (; index < length; index++) {
+ animation.tweens[index].run(percent);
+ }
+
+ deferred.notifyWith(elem, [animation, percent, remaining]);
+
+ if (percent < 1 && length) {
+ return remaining;
+ } else {
+ deferred.resolveWith(elem, [animation]);
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend({}, properties),
+ opts: jQuery.extend(true, {specialEasing: {}}, options),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function (prop, end) {
+ var tween = jQuery.Tween(elem, animation.opts, prop, end,
+ animation.opts.specialEasing[prop] || animation.opts.easing);
+ animation.tweens.push(tween);
+ return tween;
+ },
+ stop: function (gotoEnd) {
+ var index = 0,
+ // if we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if (stopped) {
+ return this;
+ }
+ stopped = true;
+ for (; index < length; index++) {
+ animation.tweens[index].run(1);
+ }
+
+ // resolve when we played the last frame
+ // otherwise, reject
+ if (gotoEnd) {
+ deferred.resolveWith(elem, [animation, gotoEnd]);
+ } else {
+ deferred.rejectWith(elem, [animation, gotoEnd]);
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter(props, animation.opts.specialEasing);
+
+ for (; index < length; index++) {
+ result = animationPrefilters[index].call(animation, elem, props, animation.opts);
+ if (result) {
+ return result;
+ }
+ }
+
+ jQuery.map(props, createTween, animation);
+
+ if (jQuery.isFunction(animation.opts.start)) {
+ animation.opts.start.call(elem, animation);
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend(tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress(animation.opts.progress)
+ .done(animation.opts.done, animation.opts.complete)
+ .fail(animation.opts.fail)
+ .always(animation.opts.always);
+ }
+
+ function propFilter(props, specialEasing) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for (index in props) {
+ name = jQuery.camelCase(index);
+ easing = specialEasing[name];
+ value = props[index];
+ if (jQuery.isArray(value)) {
+ easing = value[1];
+ value = props[index] = value[0];
+ }
+
+ if (index !== name) {
+ props[name] = value;
+ delete props[index];
+ }
+
+ hooks = jQuery.cssHooks[name];
+ if (hooks && "expand" in hooks) {
+ value = hooks.expand(value);
+ delete props[name];
+
+ // not quite $.extend, this wont overwrite keys already present.
+ // also - reusing 'index' from above because we have the correct "name"
+ for (index in value) {
+ if (!( index in props )) {
+ props[index] = value[index];
+ specialEasing[index] = easing;
+ }
+ }
+ } else {
+ specialEasing[name] = easing;
+ }
+ }
+ }
+
+ jQuery.Animation = jQuery.extend(Animation, {
+
+ tweener: function (props, callback) {
+ if (jQuery.isFunction(props)) {
+ callback = props;
+ props = ["*"];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for (; index < length; index++) {
+ prop = props[index];
+ tweeners[prop] = tweeners[prop] || [];
+ tweeners[prop].unshift(callback);
+ }
+ },
+
+ prefilter: function (callback, prepend) {
+ if (prepend) {
+ animationPrefilters.unshift(callback);
+ } else {
+ animationPrefilters.push(callback);
+ }
+ }
+ });
+
+ function defaultPrefilter(elem, props, opts) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden(elem),
+ dataShow = jQuery._data(elem, "fxshow");
+
+ // handle queue: false promises
+ if (!opts.queue) {
+ hooks = jQuery._queueHooks(elem, "fx");
+ if (hooks.unqueued == null) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function () {
+ if (!hooks.unqueued) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function () {
+ // doing this makes sure that the complete handler will be called
+ // before this completes
+ anim.always(function () {
+ hooks.unqueued--;
+ if (!jQuery.queue(elem, "fx").length) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // height/width overflow pass
+ if (elem.nodeType === 1 && ( "height" in props || "width" in props )) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [style.overflow, style.overflowX, style.overflowY];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ if (jQuery.css(elem, "display") === "inline" &&
+ jQuery.css(elem, "float") === "none") {
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if (!jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay(elem.nodeName) === "inline") {
+ style.display = "inline-block";
+
+ } else {
+ style.zoom = 1;
+ }
+ }
+ }
+
+ if (opts.overflow) {
+ style.overflow = "hidden";
+ if (!jQuery.support.shrinkWrapBlocks) {
+ anim.always(function () {
+ style.overflow = opts.overflow[0];
+ style.overflowX = opts.overflow[1];
+ style.overflowY = opts.overflow[2];
+ });
+ }
+ }
+
+
+ // show/hide pass
+ for (prop in props) {
+ value = props[prop];
+ if (rfxtypes.exec(value)) {
+ delete props[prop];
+ toggle = toggle || value === "toggle";
+ if (value === ( hidden ? "hide" : "show" )) {
+ continue;
+ }
+ orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
+ }
+ }
+
+ if (!jQuery.isEmptyObject(orig)) {
+ if (dataShow) {
+ if ("hidden" in dataShow) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = jQuery._data(elem, "fxshow", {});
+ }
+
+ // store state if its toggle - enables .stop().toggle() to "reverse"
+ if (toggle) {
+ dataShow.hidden = !hidden;
+ }
+ if (hidden) {
+ jQuery(elem).show();
+ } else {
+ anim.done(function () {
+ jQuery(elem).hide();
+ });
+ }
+ anim.done(function () {
+ var prop;
+ jQuery._removeData(elem, "fxshow");
+ for (prop in orig) {
+ jQuery.style(elem, prop, orig[prop]);
+ }
+ });
+ for (prop in orig) {
+ tween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
+
+ if (!( prop in dataShow )) {
+ dataShow[prop] = tween.start;
+ if (hidden) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+ }
+ }
+
+ function Tween(elem, options, prop, end, easing) {
+ return new Tween.prototype.init(elem, options, prop, end, easing);
+ }
+
+ jQuery.Tween = Tween;
+
+ Tween.prototype = {
+ constructor: Tween,
+ init: function (elem, options, prop, end, easing, unit) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[prop] ? "" : "px" );
+ },
+ cur: function () {
+ var hooks = Tween.propHooks[this.prop];
+
+ return hooks && hooks.get ?
+ hooks.get(this) :
+ Tween.propHooks._default.get(this);
+ },
+ run: function (percent) {
+ var eased,
+ hooks = Tween.propHooks[this.prop];
+
+ if (this.options.duration) {
+ this.pos = eased = jQuery.easing[this.easing](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if (this.options.step) {
+ this.options.step.call(this.elem, this.now, this);
+ }
+
+ if (hooks && hooks.set) {
+ hooks.set(this);
+ } else {
+ Tween.propHooks._default.set(this);
+ }
+ return this;
+ }
+ };
+
+ Tween.prototype.init.prototype = Tween.prototype;
+
+ Tween.propHooks = {
+ _default: {
+ get: function (tween) {
+ var result;
+
+ if (tween.elem[tween.prop] != null &&
+ (!tween.elem.style || tween.elem.style[tween.prop] == null)) {
+ return tween.elem[tween.prop];
+ }
+
+ // passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails
+ // so, simple values such as "10px" are parsed to Float.
+ // complex values such as "rotate(1rad)" are returned as is.
+ result = jQuery.css(tween.elem, tween.prop, "");
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function (tween) {
+ // use step hook for back compat - use cssHook if its there - use .style if its
+ // available and use plain properties where available
+ if (jQuery.fx.step[tween.prop]) {
+ jQuery.fx.step[tween.prop](tween);
+ } else if (tween.elem.style && ( tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop] )) {
+ jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
+ } else {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ }
+ };
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+ Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function (tween) {
+ if (tween.elem.nodeType && tween.elem.parentNode) {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ };
+
+ jQuery.each(["toggle", "show", "hide"], function (i, name) {
+ var cssFn = jQuery.fn[name];
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply(this, arguments) :
+ this.animate(genFx(name, true), speed, easing, callback);
+ };
+ });
+
+ jQuery.fn.extend({
+ fadeTo: function (speed, to, easing, callback) {
+
+ // show any hidden elements after setting opacity to 0
+ return this.filter(isHidden).css("opacity", 0).show()
+
+ // animate to the value specified
+ .end().animate({opacity: to}, speed, easing, callback);
+ },
+ animate: function (prop, speed, easing, callback) {
+ var empty = jQuery.isEmptyObject(prop),
+ optall = jQuery.speed(speed, easing, callback),
+ doAnimation = function () {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation(this, jQuery.extend({}, prop), optall);
+
+ // Empty animations, or finishing resolves immediately
+ if (empty || jQuery._data(this, "finish")) {
+ anim.stop(true);
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each(doAnimation) :
+ this.queue(optall.queue, doAnimation);
+ },
+ stop: function (type, clearQueue, gotoEnd) {
+ var stopQueue = function (hooks) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop(gotoEnd);
+ };
+
+ if (typeof type !== "string") {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if (clearQueue && type !== false) {
+ this.queue(type || "fx", []);
+ }
+
+ return this.each(function () {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = jQuery._data(this);
+
+ if (index) {
+ if (data[index] && data[index].stop) {
+ stopQueue(data[index]);
+ }
+ } else {
+ for (index in data) {
+ if (data[index] && data[index].stop && rrun.test(index)) {
+ stopQueue(data[index]);
+ }
+ }
+ }
+
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
+ timers[index].anim.stop(gotoEnd);
+ dequeue = false;
+ timers.splice(index, 1);
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if (dequeue || !gotoEnd) {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ finish: function (type) {
+ if (type !== false) {
+ type = type || "fx";
+ }
+ return this.each(function () {
+ var index,
+ data = jQuery._data(this),
+ queue = data[type + "queue"],
+ hooks = data[type + "queueHooks"],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // enable finishing flag on private data
+ data.finish = true;
+
+ // empty the queue first
+ jQuery.queue(this, type, []);
+
+ if (hooks && hooks.stop) {
+ hooks.stop.call(this, true);
+ }
+
+ // look for any active animations, and finish them
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && timers[index].queue === type) {
+ timers[index].anim.stop(true);
+ timers.splice(index, 1);
+ }
+ }
+
+ // look for any animations in the old queue and finish them
+ for (index = 0; index < length; index++) {
+ if (queue[index] && queue[index].finish) {
+ queue[index].finish.call(this);
+ }
+ }
+
+ // turn off finishing flag
+ delete data.finish;
+ });
+ }
+ });
+
+// Generate parameters to create a standard animation
+ function genFx(type, includeWidth) {
+ var which,
+ attrs = {height: type},
+ i = 0;
+
+ // if we include width, step value is 1 to do all cssExpand values,
+ // if we don't include width, step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for (; i < 4; i += 2 - includeWidth) {
+ which = cssExpand[i];
+ attrs["margin" + which] = attrs["padding" + which] = type;
+ }
+
+ if (includeWidth) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+ }
+
+// Generate shortcuts for custom animations
+ jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (name, props) {
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return this.animate(props, speed, easing, callback);
+ };
+ });
+
+ jQuery.speed = function (speed, easing, fn) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction(speed) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if (opt.queue == null || opt.queue === true) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function () {
+ if (jQuery.isFunction(opt.old)) {
+ opt.old.call(this);
+ }
+
+ if (opt.queue) {
+ jQuery.dequeue(this, opt.queue);
+ }
+ };
+
+ return opt;
+ };
+
+ jQuery.easing = {
+ linear: function (p) {
+ return p;
+ },
+ swing: function (p) {
+ return 0.5 - Math.cos(p * Math.PI) / 2;
+ }
+ };
+
+ jQuery.timers = [];
+ jQuery.fx = Tween.prototype.init;
+ jQuery.fx.tick = function () {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ fxNow = jQuery.now();
+
+ for (; i < timers.length; i++) {
+ timer = timers[i];
+ // Checks the timer has not already been removed
+ if (!timer() && timers[i] === timer) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if (!timers.length) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+ };
+
+ jQuery.fx.timer = function (timer) {
+ if (timer() && jQuery.timers.push(timer)) {
+ jQuery.fx.start();
+ }
+ };
+
+ jQuery.fx.interval = 13;
+
+ jQuery.fx.start = function () {
+ if (!timerId) {
+ timerId = setInterval(jQuery.fx.tick, jQuery.fx.interval);
+ }
+ };
+
+ jQuery.fx.stop = function () {
+ clearInterval(timerId);
+ timerId = null;
+ };
+
+ jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ };
+
+// Back Compat <1.8 extension point
+ jQuery.fx.step = {};
+
+ if (jQuery.expr && jQuery.expr.filters) {
+ jQuery.expr.filters.animated = function (elem) {
+ return jQuery.grep(jQuery.timers, function (fn) {
+ return elem === fn.elem;
+ }).length;
+ };
+ }
+ jQuery.fn.offset = function (options) {
+ if (arguments.length) {
+ return options === undefined ?
+ this :
+ this.each(function (i) {
+ jQuery.offset.setOffset(this, options, i);
+ });
+ }
+
+ var docElem, win,
+ box = {top: 0, left: 0},
+ elem = this[0],
+ doc = elem && elem.ownerDocument;
+
+ if (!doc) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if (!jQuery.contains(docElem, elem)) {
+ return box;
+ }
+
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if (typeof elem.getBoundingClientRect !== core_strundefined) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow(doc);
+ return {
+ top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
+ left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+ };
+ };
+
+ jQuery.offset = {
+
+ setOffset: function (elem, options, i) {
+ var position = jQuery.css(elem, "position");
+
+ // set position first, in-case top/left are set even on static elem
+ if (position === "static") {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery(elem),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css(elem, "top"),
+ curCSSLeft = jQuery.css(elem, "left"),
+ calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if (calculatePosition) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat(curCSSTop) || 0;
+ curLeft = parseFloat(curCSSLeft) || 0;
+ }
+
+ if (jQuery.isFunction(options)) {
+ options = options.call(elem, i, curOffset);
+ }
+
+ if (options.top != null) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if (options.left != null) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ("using" in options) {
+ options.using.call(elem, props);
+ } else {
+ curElem.css(props);
+ }
+ }
+ };
+
+
+ jQuery.fn.extend({
+
+ position: function () {
+ if (!this[0]) {
+ return;
+ }
+
+ var offsetParent, offset,
+ parentOffset = {top: 0, left: 0},
+ elem = this[0];
+
+ // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
+ if (jQuery.css(elem, "position") === "fixed") {
+ // we assume that getBoundingClientRect is available when computed position is fixed
+ offset = elem.getBoundingClientRect();
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if (!jQuery.nodeName(offsetParent[0], "html")) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true);
+ parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true);
+ }
+
+ // Subtract parent offsets and element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ return {
+ top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
+ left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
+ };
+ },
+
+ offsetParent: function () {
+ return this.map(function () {
+ var offsetParent = this.offsetParent || docElem;
+ while (offsetParent && ( !jQuery.nodeName(offsetParent, "html") && jQuery.css(offsetParent, "position") === "static" )) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || docElem;
+ });
+ }
+ });
+
+
+// Create scrollLeft and scrollTop methods
+ jQuery.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (method, prop) {
+ var top = /Y/.test(prop);
+
+ jQuery.fn[method] = function (val) {
+ return jQuery.access(this, function (elem, method, val) {
+ var win = getWindow(elem);
+
+ if (val === undefined) {
+ return win ? (prop in win) ? win[prop] :
+ win.document.documentElement[method] :
+ elem[method];
+ }
+
+ if (win) {
+ win.scrollTo(
+ !top ? val : jQuery(win).scrollLeft(),
+ top ? val : jQuery(win).scrollTop()
+ );
+
+ } else {
+ elem[method] = val;
+ }
+ }, method, val, arguments.length, null);
+ };
+ });
+
+ function getWindow(elem) {
+ return jQuery.isWindow(elem) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+ }
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+ jQuery.each({Height: "height", Width: "width"}, function (name, type) {
+ jQuery.each({padding: "inner" + name, content: type, "": "outer" + name}, function (defaultExtra, funcName) {
+ // margin is only for outerHeight, outerWidth
+ jQuery.fn[funcName] = function (margin, value) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return jQuery.access(this, function (elem, type, value) {
+ var doc;
+
+ if (jQuery.isWindow(elem)) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement["client" + name];
+ }
+
+ // Get document width or height
+ if (elem.nodeType === 9) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+ // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+ return Math.max(
+ elem.body["scroll" + name], doc["scroll" + name],
+ elem.body["offset" + name], doc["offset" + name],
+ doc["client" + name]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css(elem, type, extra) :
+
+ // Set width or height on the element
+ jQuery.style(elem, type, value, extra);
+ }, type, chainable ? margin : undefined, chainable, null);
+ };
+ });
+ });
+// Limit scope pollution from any deprecated API
+// (function() {
+
+// The number of elements contained in the matched element set
+ jQuery.fn.size = function () {
+ return this.length;
+ };
+
+ jQuery.fn.andSelf = jQuery.fn.addBack;
+
+// })();
+ if (typeof module === "object" && module && typeof module.exports === "object") {
+ // Expose jQuery as module.exports in loaders that implement the Node
+ // module pattern (including browserify). Do not create the global, since
+ // the user will be storing it themselves locally, and globals are frowned
+ // upon in the Node module world.
+ module.exports = jQuery;
+ } else {
+ // Otherwise expose jQuery to the global object as usual
+ window.jQuery = window.$ = jQuery;
+
+ // Register as a named AMD module, since jQuery can be concatenated with other
+ // files that may use define, but not via a proper concatenation script that
+ // understands anonymous AMD modules. A named AMD is safest and most robust
+ // way to register. Lowercase jquery is used because AMD module names are
+ // derived from file names, and jQuery is normally delivered in a lowercase
+ // file name. Do this after creating the global so that if an AMD module wants
+ // to call noConflict to hide this version of jQuery, it will work.
+ if (typeof define === "function" && define.amd) {
+ define("jquery", [], function () {
+ return jQuery;
+ });
+ }
+ }
+
+})(window);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/Thumbs.db b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/Thumbs.db
new file mode 100644
index 00000000..db4be920
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/Thumbs.db
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_18_b81900_40x40.png
new file mode 100644
index 00000000..993e5313
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_20_666666_40x40.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_20_666666_40x40.png
new file mode 100644
index 00000000..1d5a926e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_diagonals-thick_20_666666_40x40.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_flat_10_000000_40x100.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_flat_10_000000_40x100.png
new file mode 100644
index 00000000..41c12149
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_flat_10_000000_40x100.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_f6f6f6_1x400.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_f6f6f6_1x400.png
new file mode 100644
index 00000000..23e558b3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_f6f6f6_1x400.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_fdf5ce_1x400.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_fdf5ce_1x400.png
new file mode 100644
index 00000000..fa412f54
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_100_fdf5ce_1x400.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_65_ffffff_1x400.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_65_ffffff_1x400.png
new file mode 100644
index 00000000..d27cbce9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_glass_65_ffffff_1x400.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_gloss-wave_35_f6a828_500x100.png
new file mode 100644
index 00000000..5eb316d0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
new file mode 100644
index 00000000..99fc8beb
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
new file mode 100644
index 00000000..6994a1c6
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_222222_256x240.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_222222_256x240.png
new file mode 100644
index 00000000..e9c8e16a
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_222222_256x240.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_228ef1_256x240.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_228ef1_256x240.png
new file mode 100644
index 00000000..8d68c543
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_228ef1_256x240.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ef8c08_256x240.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ef8c08_256x240.png
new file mode 100644
index 00000000..18bbfe82
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ef8c08_256x240.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffd27a_256x240.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffd27a_256x240.png
new file mode 100644
index 00000000..4435b497
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffd27a_256x240.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffffff_256x240.png b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 00000000..4d66f596
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/index.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/index.html
new file mode 100644
index 00000000..6ce5ce11
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/index.html
@@ -0,0 +1,684 @@
+<!doctype html>
+<html lang="us">
+<head>
+ <meta charset="utf-8">
+ <title>jQuery UI Example Page</title>
+ <link href="jquery-ui.css" rel="stylesheet">
+ <style>
+ body {
+ font: 62.5% "Trebuchet MS", sans-serif;
+ margin: 50px;
+ }
+
+ .demoHeaders {
+ margin-top: 2em;
+ }
+
+ #dialog-link {
+ padding: .4em 1em .4em 20px;
+ text-decoration: none;
+ position: relative;
+ }
+
+ #dialog-link span.ui-icon {
+ margin: 0 5px 0 0;
+ position: absolute;
+ left: .2em;
+ top: 50%;
+ margin-top: -8px;
+ }
+
+ #icons {
+ margin: 0;
+ padding: 0;
+ }
+
+ #icons li {
+ margin: 2px;
+ position: relative;
+ padding: 4px 0;
+ cursor: pointer;
+ float: left;
+ list-style: none;
+ }
+
+ #icons span.ui-icon {
+ float: left;
+ margin: 0 4px;
+ }
+
+ .fakewindowcontain .ui-widget-overlay {
+ position: absolute;
+ }
+
+ select {
+ width: 200px;
+ }
+ </style>
+</head>
+<body>
+
+<h1>Welcome to jQuery UI!</h1>
+
+<div class="ui-widget">
+ <p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using
+ them with a compatible jQuery version.</p>
+</div>
+
+<h1>YOUR COMPONENTS:</h1>
+
+
+<!-- Accordion -->
+<h2 class="demoHeaders">Accordion</h2>
+
+<div id="accordion">
+ <h3>First</h3>
+
+ <div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
+ <h3>Second</h3>
+
+ <div>Phasellus mattis tincidunt nibh.</div>
+ <h3>Third</h3>
+
+ <div>Nam dui erat, auctor a, dignissim quis.</div>
+</div>
+
+
+<!-- Autocomplete -->
+<h2 class="demoHeaders">Autocomplete</h2>
+
+<div>
+ <input id="autocomplete" title="type &quot;a&quot;">
+</div>
+
+
+<!-- Button -->
+<h2 class="demoHeaders">Button</h2>
+<button id="button">A button element</button>
+<form style="margin-top: 1em;">
+ <div id="radioset">
+ <input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
+ <input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
+ <input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
+ </div>
+</form>
+
+
+<!-- Tabs -->
+<h2 class="demoHeaders">Tabs</h2>
+
+<div id="tabs">
+ <ul>
+ <li><a href="#tabs-1">First</a></li>
+ <li><a href="#tabs-2">Second</a></li>
+ <li><a href="#tabs-3">Third</a></li>
+ </ul>
+ <div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
+ labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut
+ aliquip ex ea commodo consequat.
+ </div>
+ <div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis.
+ Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
+ </div>
+ <div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum
+ eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.
+ </div>
+</div>
+
+
+<!-- Dialog NOTE: Dialog is not generated by UI in this demo so it can be visually styled in themeroller-->
+<h2 class="demoHeaders">Dialog</h2>
+
+<p><a href="#" id="dialog-link" class="ui-state-default ui-corner-all"><span class="ui-icon ui-icon-newwin"></span>Open
+ Dialog</a></p>
+
+<h2 class="demoHeaders">Overlay and Shadow Classes <em>(not currently used in UI widgets)</em></h2>
+
+<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
+ <p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p>
+
+ <p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante.
+ Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi
+ in orci. </p>
+
+ <p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat
+ cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra
+ mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p>
+
+ <p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante.
+ Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi
+ in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p>
+
+ <p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo
+ vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam
+ congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p>
+
+ <p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi
+ in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam
+ feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae,
+ pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue
+ semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
+
+ <!-- ui-dialog -->
+ <div class="ui-overlay">
+ <div class="ui-widget-overlay"></div>
+ <div class="ui-widget-shadow ui-corner-all"
+ style="width: 302px; height: 152px; position: absolute; left: 50px; top: 30px;"></div>
+ </div>
+ <div style="position: absolute; width: 280px; height: 130px;left: 50px; top: 30px; padding: 10px;"
+ class="ui-widget ui-widget-content ui-corner-all">
+ <div class="ui-dialog-content ui-widget-content" style="background: none; border: 0;">
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
+ dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ ex ea commodo consequat.</p>
+ </div>
+ </div>
+
+</div>
+
+<!-- ui-dialog -->
+<div id="dialog" title="Dialog Title">
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+ consequat.</p>
+</div>
+
+
+<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
+<ul id="icons" class="ui-widget ui-helper-clearfix">
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-n"><span
+ class="ui-icon ui-icon-carat-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-ne"><span
+ class="ui-icon ui-icon-carat-1-ne"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-e"><span
+ class="ui-icon ui-icon-carat-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-se"><span
+ class="ui-icon ui-icon-carat-1-se"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-s"><span
+ class="ui-icon ui-icon-carat-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-sw"><span
+ class="ui-icon ui-icon-carat-1-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-w"><span
+ class="ui-icon ui-icon-carat-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-1-nw"><span
+ class="ui-icon ui-icon-carat-1-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-n-s"><span
+ class="ui-icon ui-icon-carat-2-n-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-carat-2-e-w"><span
+ class="ui-icon ui-icon-carat-2-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span
+ class="ui-icon ui-icon-triangle-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span
+ class="ui-icon ui-icon-triangle-1-ne"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span
+ class="ui-icon ui-icon-triangle-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span
+ class="ui-icon ui-icon-triangle-1-se"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span
+ class="ui-icon ui-icon-triangle-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span
+ class="ui-icon ui-icon-triangle-1-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span
+ class="ui-icon ui-icon-triangle-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span
+ class="ui-icon ui-icon-triangle-1-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span
+ class="ui-icon ui-icon-triangle-2-n-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span
+ class="ui-icon ui-icon-triangle-2-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span
+ class="ui-icon ui-icon-arrow-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span
+ class="ui-icon ui-icon-arrow-1-ne"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span
+ class="ui-icon ui-icon-arrow-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span
+ class="ui-icon ui-icon-arrow-1-se"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span
+ class="ui-icon ui-icon-arrow-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span
+ class="ui-icon ui-icon-arrow-1-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span
+ class="ui-icon ui-icon-arrow-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span
+ class="ui-icon ui-icon-arrow-1-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span
+ class="ui-icon ui-icon-arrow-2-n-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span
+ class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span
+ class="ui-icon ui-icon-arrow-2-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span
+ class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span
+ class="ui-icon ui-icon-arrowstop-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span
+ class="ui-icon ui-icon-arrowstop-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span
+ class="ui-icon ui-icon-arrowstop-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span
+ class="ui-icon ui-icon-arrowstop-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span
+ class="ui-icon ui-icon-arrowthick-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span
+ class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span
+ class="ui-icon ui-icon-arrowthick-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span
+ class="ui-icon ui-icon-arrowthick-1-se"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span
+ class="ui-icon ui-icon-arrowthick-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span
+ class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span
+ class="ui-icon ui-icon-arrowthick-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span
+ class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span
+ class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span
+ class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span
+ class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span
+ class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span
+ class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span
+ class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span
+ class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span
+ class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span
+ class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span
+ class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span
+ class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span
+ class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span
+ class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span
+ class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span
+ class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span
+ class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span
+ class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span
+ class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span
+ class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span
+ class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span
+ class="ui-icon ui-icon-arrow-4-diag"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span
+ class="ui-icon ui-icon-transfer-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span
+ class="ui-icon ui-icon-transferthick-e-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span
+ class="ui-icon ui-icon-folder-collapsed"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span
+ class="ui-icon ui-icon-folder-open"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span
+ class="ui-icon ui-icon-document-b"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span
+ class="ui-icon ui-icon-mail-closed"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span
+ class="ui-icon ui-icon-mail-open"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span
+ class="ui-icon ui-icon-calculator"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span
+ class="ui-icon ui-icon-plusthick"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span
+ class="ui-icon ui-icon-minusthick"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span
+ class="ui-icon ui-icon-closethick"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span
+ class="ui-icon ui-icon-lightbulb"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span
+ class="ui-icon ui-icon-clipboard"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span
+ class="ui-icon ui-icon-radio-off"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span
+ class="ui-icon ui-icon-seek-next"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span
+ class="ui-icon ui-icon-seek-prev"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span>
+ </li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span
+ class="ui-icon ui-icon-seek-first"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span
+ class="ui-icon ui-icon-volume-off"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span
+ class="ui-icon ui-icon-volume-on"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span
+ class="ui-icon ui-icon-signal-diag"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span
+ class="ui-icon ui-icon-battery-0"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span
+ class="ui-icon ui-icon-battery-1"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span
+ class="ui-icon ui-icon-battery-2"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span
+ class="ui-icon ui-icon-battery-3"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span
+ class="ui-icon ui-icon-circle-plus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span
+ class="ui-icon ui-icon-circle-minus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span
+ class="ui-icon ui-icon-circle-close"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span
+ class="ui-icon ui-icon-circle-triangle-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span
+ class="ui-icon ui-icon-circle-triangle-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span
+ class="ui-icon ui-icon-circle-triangle-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span
+ class="ui-icon ui-icon-circle-triangle-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span
+ class="ui-icon ui-icon-circle-arrow-e"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span
+ class="ui-icon ui-icon-circle-arrow-s"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span
+ class="ui-icon ui-icon-circle-arrow-w"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span
+ class="ui-icon ui-icon-circle-arrow-n"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span
+ class="ui-icon ui-icon-circle-zoomin"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span
+ class="ui-icon ui-icon-circle-zoomout"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span
+ class="ui-icon ui-icon-circle-check"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span
+ class="ui-icon ui-icon-circlesmall-plus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span
+ class="ui-icon ui-icon-circlesmall-minus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span
+ class="ui-icon ui-icon-circlesmall-close"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span
+ class="ui-icon ui-icon-squaresmall-plus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span
+ class="ui-icon ui-icon-squaresmall-minus"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span
+ class="ui-icon ui-icon-squaresmall-close"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span
+ class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span
+ class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span
+ class="ui-icon ui-icon-grip-solid-vertical"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span
+ class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span
+ class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
+ <li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span
+ class="ui-icon ui-icon-grip-diagonal-se"></span></li>
+</ul>
+
+
+<!-- Slider -->
+<h2 class="demoHeaders">Slider</h2>
+
+<div id="slider"></div>
+
+
+<!-- Datepicker -->
+<h2 class="demoHeaders">Datepicker</h2>
+
+<div id="datepicker"></div>
+
+
+<!-- Progressbar -->
+<h2 class="demoHeaders">Progressbar</h2>
+
+<div id="progressbar"></div>
+
+
+<!-- Progressbar -->
+<h2 class="demoHeaders">Selectmenu</h2>
+<select id="selectmenu">
+ <option>Slower</option>
+ <option>Slow</option>
+ <option selected="selected">Medium</option>
+ <option>Fast</option>
+ <option>Faster</option>
+</select>
+
+
+<!-- Spinner -->
+<h2 class="demoHeaders">Spinner</h2>
+<input id="spinner">
+
+
+<!-- Menu -->
+<h2 class="demoHeaders">Menu</h2>
+<ul style="width:100px;" id="menu">
+ <li>Item 1</li>
+ <li>Item 2</li>
+ <li>Item 3
+ <ul>
+ <li>Item 3-1</li>
+ <li>Item 3-2</li>
+ <li>Item 3-3</li>
+ <li>Item 3-4</li>
+ <li>Item 3-5</li>
+ </ul>
+ </li>
+ <li>Item 4</li>
+ <li>Item 5</li>
+</ul>
+
+
+<!-- Tooltip -->
+<h2 class="demoHeaders">Tooltip</h2>
+
+<p id="tooltip">
+ <a href="#" title="That&apos;s what this widget is">Tooltips</a> can be attached to any element. When you hover
+ the element with your mouse, the title attribute is displayed in a little box next to the element, just like a
+ native tooltip.
+</p>
+
+
+<!-- Highlight / Error -->
+<h2 class="demoHeaders">Highlight / Error</h2>
+
+<div class="ui-widget">
+ <div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
+ <p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
+ <strong>Hey!</strong> Sample ui-state-highlight style.</p>
+ </div>
+</div>
+<br>
+
+<div class="ui-widget">
+ <div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
+ <p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
+ <strong>Alert:</strong> Sample ui-state-error style.</p>
+ </div>
+</div>
+
+<script src="external/jquery/jquery.js"></script>
+<script src="jquery-ui.js"></script>
+<script>
+
+ $("#accordion").accordion();
+
+
+ var availableTags = [
+ "ActionScript",
+ "AppleScript",
+ "Asp",
+ "BASIC",
+ "C",
+ "C++",
+ "Clojure",
+ "COBOL",
+ "ColdFusion",
+ "Erlang",
+ "Fortran",
+ "Groovy",
+ "Haskell",
+ "Java",
+ "JavaScript",
+ "Lisp",
+ "Perl",
+ "PHP",
+ "Python",
+ "Ruby",
+ "Scala",
+ "Scheme"
+ ];
+ $("#autocomplete").autocomplete({
+ source: availableTags
+ });
+
+
+ $("#button").button();
+ $("#radioset").buttonset();
+
+
+ $("#tabs").tabs();
+
+
+ $("#dialog").dialog({
+ autoOpen: false,
+ width: 400,
+ buttons: [
+ {
+ text: "Ok",
+ click: function () {
+ $(this).dialog("close");
+ }
+ },
+ {
+ text: "Cancel",
+ click: function () {
+ $(this).dialog("close");
+ }
+ }
+ ]
+ });
+
+ // Link to open the dialog
+ $("#dialog-link").click(function (event) {
+ $("#dialog").dialog("open");
+ event.preventDefault();
+ });
+
+
+ $("#datepicker").datepicker({
+ inline: true
+ });
+
+
+ $("#slider").slider({
+ range: true,
+ values: [17, 67]
+ });
+
+
+ $("#progressbar").progressbar({
+ value: 20
+ });
+
+
+ $("#spinner").spinner();
+
+
+ $("#menu").menu();
+
+
+ $("#tooltip").tooltip();
+
+
+ $("#selectmenu").selectmenu();
+
+
+ // Hover states on the static widgets
+ $("#dialog-link, #icons li").hover(
+ function () {
+ $(this).addClass("ui-state-hover");
+ },
+ function () {
+ $(this).removeClass("ui-state-hover");
+ }
+ );
+</script>
+</body>
+</html>
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.css
new file mode 100644
index 00000000..c7ec789e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.css
@@ -0,0 +1,1908 @@
+/*! jQuery UI - v1.11.4 - 2015-04-16
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+
+.ui-helper-clearfix:after {
+ clear: both;
+}
+
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable {
+ position: relative;
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+
+.ui-button-icons-only {
+ width: 3.4em;
+}
+
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+
+.ui-menu .ui-menu {
+ position: absolute;
+}
+
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden;
+}
+
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,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");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+
+.ui-selectmenu-open {
+ display: block;
+}
+
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+
+.ui-spinner-up {
+ top: 0;
+}
+
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+
+.ui-tabs {
+ position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1.1em;
+}
+
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1em;
+}
+
+.ui-widget-content {
+ border: 1px solid #dddddd;
+ background: #eeeeee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;
+ color: #333333;
+}
+
+.ui-widget-content a {
+ color: #333333;
+}
+
+.ui-widget-header {
+ border: 1px solid #e78f08;
+ background: #f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+ font-weight: bold;
+}
+
+.ui-widget-header a {
+ color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1c94c4;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #1c94c4;
+ text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #fbcb09;
+ background: #fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #c77405;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #c77405;
+ text-decoration: none;
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #fbd850;
+ background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #eb8f00;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #eb8f00;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #fed22f;
+ background: #ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
+ color: #363636;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #363636;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;
+ color: #ffffff;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-state-default .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-active .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-highlight .ui-icon {
+ background-image: url("images/ui-icons_228ef1_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_ffd27a_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank {
+ background-position: 16px 16px;
+}
+
+.ui-icon-carat-1-n {
+ background-position: 0 0;
+}
+
+.ui-icon-carat-1-ne {
+ background-position: -16px 0;
+}
+
+.ui-icon-carat-1-e {
+ background-position: -32px 0;
+}
+
+.ui-icon-carat-1-se {
+ background-position: -48px 0;
+}
+
+.ui-icon-carat-1-s {
+ background-position: -64px 0;
+}
+
+.ui-icon-carat-1-sw {
+ background-position: -80px 0;
+}
+
+.ui-icon-carat-1-w {
+ background-position: -96px 0;
+}
+
+.ui-icon-carat-1-nw {
+ background-position: -112px 0;
+}
+
+.ui-icon-carat-2-n-s {
+ background-position: -128px 0;
+}
+
+.ui-icon-carat-2-e-w {
+ background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -64px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -64px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 0 -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px;
+}
+
+.ui-icon-document {
+ background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px;
+}
+
+.ui-icon-note {
+ background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px;
+}
+
+.ui-icon-person {
+ background-position: -144px -96px;
+}
+
+.ui-icon-print {
+ background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px;
+}
+
+.ui-icon-home {
+ background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px;
+}
+
+.ui-icon-search {
+ background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px;
+}
+
+.ui-icon-star {
+ background-position: -224px -112px;
+}
+
+.ui-icon-link {
+ background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px;
+}
+
+.ui-icon-close {
+ background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px;
+}
+
+.ui-icon-key {
+ background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px;
+}
+
+.ui-icon-image {
+ background-position: -208px -128px;
+}
+
+.ui-icon-video {
+ background-position: -224px -128px;
+}
+
+.ui-icon-script {
+ background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px;
+}
+
+.ui-icon-info {
+ background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px;
+}
+
+.ui-icon-help {
+ background-position: -48px -144px;
+}
+
+.ui-icon-check {
+ background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px;
+}
+
+.ui-icon-play {
+ background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px;
+}
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first {
+ background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px;
+}
+
+.ui-icon-power {
+ background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #666666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;
+ opacity: .5;
+ filter: Alpha(Opacity=50); /* support: IE8 */
+}
+
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20); /* support: IE8 */
+ border-radius: 5px;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.js
new file mode 100644
index 00000000..cbaf2b50
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.js
@@ -0,0 +1,16753 @@
+/*! jQuery UI - v1.11.4 - 2015-04-12
+ * http://jqueryui.com
+ * Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function (factory) {
+ if (typeof define === "function" && define.amd) {
+
+ // AMD. Register as an anonymous module.
+ define(["jquery"], factory);
+ } else {
+
+ // Browser globals
+ factory(jQuery);
+ }
+}(function ($) {
+ /*!
+ * jQuery UI Core 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+ $.ui = $.ui || {};
+
+ $.extend($.ui, {
+ version: "1.11.4",
+
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+ });
+
+// plugins
+ $.fn.extend({
+ scrollParent: function (includeHidden) {
+ var position = this.css("position"),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter(function () {
+ var parent = $(this);
+ if (excludeStaticParent && parent.css("position") === "static") {
+ return false;
+ }
+ return overflowRegex.test(parent.css("overflow") + parent.css("overflow-y") + parent.css("overflow-x"));
+ }).eq(0);
+
+ return position === "fixed" || !scrollParent.length ? $(this[0].ownerDocument || document) : scrollParent;
+ },
+
+ uniqueId: (function () {
+ var uuid = 0;
+
+ return function () {
+ return this.each(function () {
+ if (!this.id) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ });
+ };
+ })(),
+
+ removeUniqueId: function () {
+ return this.each(function () {
+ if (/^ui-id-\d+$/.test(this.id)) {
+ $(this).removeAttr("id");
+ }
+ });
+ }
+ });
+
+// selectors
+ function focusable(element, isTabIndexNotNaN) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ("area" === nodeName) {
+ map = element.parentNode;
+ mapName = map.name;
+ if (!element.href || !mapName || map.nodeName.toLowerCase() !== "map") {
+ return false;
+ }
+ img = $("img[usemap='#" + mapName + "']")[0];
+ return !!img && visible(img);
+ }
+ return ( /^(input|select|textarea|button|object)$/.test(nodeName) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || isTabIndexNotNaN :
+ isTabIndexNotNaN) &&
+ // the element and all of its ancestors must be visible
+ visible(element);
+ }
+
+ function visible(element) {
+ return $.expr.filters.visible(element) && !$(element).parents().addBack().filter(function () {
+ return $.css(this, "visibility") === "hidden";
+ }).length;
+ }
+
+ $.extend($.expr[":"], {
+ data: $.expr.createPseudo ?
+ $.expr.createPseudo(function (dataName) {
+ return function (elem) {
+ return !!$.data(elem, dataName);
+ };
+ }) :
+ // support: jQuery <1.8
+ function (elem, i, match) {
+ return !!$.data(elem, match[3]);
+ },
+
+ focusable: function (element) {
+ return focusable(element, !isNaN($.attr(element, "tabindex")));
+ },
+
+ tabbable: function (element) {
+ var tabIndex = $.attr(element, "tabindex"),
+ isTabIndexNaN = isNaN(tabIndex);
+ return ( isTabIndexNaN || tabIndex >= 0 ) && focusable(element, !isTabIndexNaN);
+ }
+ });
+
+// support: jQuery <1.8
+ if (!$("<a>").outerWidth(1).jquery) {
+ $.each(["Width", "Height"], function (i, name) {
+ var side = name === "Width" ? ["Left", "Right"] : ["Top", "Bottom"],
+ type = name.toLowerCase(),
+ orig = {
+ innerWidth: $.fn.innerWidth,
+ innerHeight: $.fn.innerHeight,
+ outerWidth: $.fn.outerWidth,
+ outerHeight: $.fn.outerHeight
+ };
+
+ function reduce(elem, size, border, margin) {
+ $.each(side, function () {
+ size -= parseFloat($.css(elem, "padding" + this)) || 0;
+ if (border) {
+ size -= parseFloat($.css(elem, "border" + this + "Width")) || 0;
+ }
+ if (margin) {
+ size -= parseFloat($.css(elem, "margin" + this)) || 0;
+ }
+ });
+ return size;
+ }
+
+ $.fn["inner" + name] = function (size) {
+ if (size === undefined) {
+ return orig["inner" + name].call(this);
+ }
+
+ return this.each(function () {
+ $(this).css(type, reduce(this, size) + "px");
+ });
+ };
+
+ $.fn["outer" + name] = function (size, margin) {
+ if (typeof size !== "number") {
+ return orig["outer" + name].call(this, size);
+ }
+
+ return this.each(function () {
+ $(this).css(type, reduce(this, size, true, margin) + "px");
+ });
+ };
+ });
+ }
+
+// support: jQuery <1.8
+ if (!$.fn.addBack) {
+ $.fn.addBack = function (selector) {
+ return this.add(selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ };
+ }
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+ if ($("<a>").data("a-b", "a").removeData("a-b").data("a-b")) {
+ $.fn.removeData = (function (removeData) {
+ return function (key) {
+ if (arguments.length) {
+ return removeData.call(this, $.camelCase(key));
+ } else {
+ return removeData.call(this);
+ }
+ };
+ })($.fn.removeData);
+ }
+
+// deprecated
+ $.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());
+
+ $.fn.extend({
+ focus: (function (orig) {
+ return function (delay, fn) {
+ return typeof delay === "number" ?
+ this.each(function () {
+ var elem = this;
+ setTimeout(function () {
+ $(elem).focus();
+ if (fn) {
+ fn.call(elem);
+ }
+ }, delay);
+ }) :
+ orig.apply(this, arguments);
+ };
+ })($.fn.focus),
+
+ disableSelection: (function () {
+ var eventType = "onselectstart" in document.createElement("div") ?
+ "selectstart" :
+ "mousedown";
+
+ return function () {
+ return this.bind(eventType + ".ui-disableSelection", function (event) {
+ event.preventDefault();
+ });
+ };
+ })(),
+
+ enableSelection: function () {
+ return this.unbind(".ui-disableSelection");
+ },
+
+ zIndex: function (zIndex) {
+ if (zIndex !== undefined) {
+ return this.css("zIndex", zIndex);
+ }
+
+ if (this.length) {
+ var elem = $(this[0]), position, value;
+ while (elem.length && elem[0] !== document) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css("position");
+ if (position === "absolute" || position === "relative" || position === "fixed") {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt(elem.css("zIndex"), 10);
+ if (!isNaN(value) && value !== 0) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+ }
+
+ return 0;
+ }
+ });
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+ $.ui.plugin = {
+ add: function (module, option, set) {
+ var i,
+ proto = $.ui[module].prototype;
+ for (i in set) {
+ proto.plugins[i] = proto.plugins[i] || [];
+ proto.plugins[i].push([option, set[i]]);
+ }
+ },
+ call: function (instance, name, args, allowDisconnected) {
+ var i,
+ set = instance.plugins[name];
+
+ if (!set) {
+ return;
+ }
+
+ if (!allowDisconnected && ( !instance.element[0].parentNode || instance.element[0].parentNode.nodeType === 11 )) {
+ return;
+ }
+
+ for (i = 0; i < set.length; i++) {
+ if (instance.options[set[i][0]]) {
+ set[i][1].apply(instance.element, args);
+ }
+ }
+ }
+ };
+
+
+ /*!
+ * jQuery UI Widget 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+ var widget_uuid = 0,
+ widget_slice = Array.prototype.slice;
+
+ $.cleanData = (function (orig) {
+ return function (elems) {
+ var events, elem, i;
+ for (i = 0; (elem = elems[i]) != null; i++) {
+ try {
+
+ // Only trigger remove when necessary to save time
+ events = $._data(elem, "events");
+ if (events && events.remove) {
+ $(elem).triggerHandler("remove");
+ }
+
+ // http://bugs.jquery.com/ticket/8235
+ } catch (e) {
+ }
+ }
+ orig(elems);
+ };
+ })($.cleanData);
+
+ $.widget = function (name, base, prototype) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split(".")[0];
+
+ name = name.split(".")[1];
+ fullName = namespace + "-" + name;
+
+ if (!prototype) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[":"][fullName.toLowerCase()] = function (elem) {
+ return !!$.data(elem, fullName);
+ };
+
+ $[namespace] = $[namespace] || {};
+ existingConstructor = $[namespace][name];
+ constructor = $[namespace][name] = function (options, element) {
+ // allow instantiation without "new" keyword
+ if (!this._createWidget) {
+ return new constructor(options, element);
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if (arguments.length) {
+ this._createWidget(options, element);
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend(constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend({}, prototype),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend({}, basePrototype.options);
+ $.each(prototype, function (prop, value) {
+ if (!$.isFunction(value)) {
+ proxiedPrototype[prop] = value;
+ return;
+ }
+ proxiedPrototype[prop] = (function () {
+ var _super = function () {
+ return base.prototype[prop].apply(this, arguments);
+ },
+ _superApply = function (args) {
+ return base.prototype[prop].apply(this, args);
+ };
+ return function () {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply(this, arguments);
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend(basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if (existingConstructor) {
+ $.each(existingConstructor._childConstructors, function (i, child) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget(childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto);
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push(constructor);
+ }
+
+ $.widget.bridge(name, constructor);
+
+ return constructor;
+ };
+
+ $.widget.extend = function (target) {
+ var input = widget_slice.call(arguments, 1),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for (; inputIndex < inputLength; inputIndex++) {
+ for (key in input[inputIndex]) {
+ value = input[inputIndex][key];
+ if (input[inputIndex].hasOwnProperty(key) && value !== undefined) {
+ // Clone objects
+ if ($.isPlainObject(value)) {
+ target[key] = $.isPlainObject(target[key]) ?
+ $.widget.extend({}, target[key], value) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend({}, value);
+ // Copy everything else by reference
+ } else {
+ target[key] = value;
+ }
+ }
+ }
+ }
+ return target;
+ };
+
+ $.widget.bridge = function (name, object) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[name] = function (options) {
+ var isMethodCall = typeof options === "string",
+ args = widget_slice.call(arguments, 1),
+ returnValue = this;
+
+ if (isMethodCall) {
+ this.each(function () {
+ var methodValue,
+ instance = $.data(this, fullName);
+ if (options === "instance") {
+ returnValue = instance;
+ return false;
+ }
+ if (!instance) {
+ return $.error("cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'");
+ }
+ if (!$.isFunction(instance[options]) || options.charAt(0) === "_") {
+ return $.error("no such method '" + options + "' for " + name + " widget instance");
+ }
+ methodValue = instance[options].apply(instance, args);
+ if (methodValue !== instance && methodValue !== undefined) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack(methodValue.get()) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+
+ // Allow multiple hashes to be passed on init
+ if (args.length) {
+ options = $.widget.extend.apply(null, [options].concat(args));
+ }
+
+ this.each(function () {
+ var instance = $.data(this, fullName);
+ if (instance) {
+ instance.option(options || {});
+ if (instance._init) {
+ instance._init();
+ }
+ } else {
+ $.data(this, fullName, new object(options, this));
+ }
+ });
+ }
+
+ return returnValue;
+ };
+ };
+
+ $.Widget = function (/* options, element */) {
+ };
+ $.Widget._childConstructors = [];
+
+ $.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function (options, element) {
+ element = $(element || this.defaultElement || this)[0];
+ this.element = $(element);
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if (element !== this) {
+ $.data(element, this.widgetFullName, this);
+ this._on(true, this.element, {
+ remove: function (event) {
+ if (event.target === element) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $(element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element);
+ this.window = $(this.document[0].defaultView || this.document[0].parentWindow);
+ }
+
+ this.options = $.widget.extend({},
+ this.options,
+ this._getCreateOptions(),
+ options);
+
+ this._create();
+ this._trigger("create", null, this._getCreateEventData());
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function () {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind(this.eventNamespace)
+ .removeData(this.widgetFullName)
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData($.camelCase(this.widgetFullName));
+ this.widget()
+ .unbind(this.eventNamespace)
+ .removeAttr("aria-disabled")
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled");
+
+ // clean up events and states
+ this.bindings.unbind(this.eventNamespace);
+ this.hoverable.removeClass("ui-state-hover");
+ this.focusable.removeClass("ui-state-focus");
+ },
+ _destroy: $.noop,
+
+ widget: function () {
+ return this.element;
+ },
+
+ option: function (key, value) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if (arguments.length === 0) {
+ // don't return a reference to the internal hash
+ return $.widget.extend({}, this.options);
+ }
+
+ if (typeof key === "string") {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split(".");
+ key = parts.shift();
+ if (parts.length) {
+ curOption = options[key] = $.widget.extend({}, this.options[key]);
+ for (i = 0; i < parts.length - 1; i++) {
+ curOption[parts[i]] = curOption[parts[i]] || {};
+ curOption = curOption[parts[i]];
+ }
+ key = parts.pop();
+ if (arguments.length === 1) {
+ return curOption[key] === undefined ? null : curOption[key];
+ }
+ curOption[key] = value;
+ } else {
+ if (arguments.length === 1) {
+ return this.options[key] === undefined ? null : this.options[key];
+ }
+ options[key] = value;
+ }
+ }
+
+ this._setOptions(options);
+
+ return this;
+ },
+ _setOptions: function (options) {
+ var key;
+
+ for (key in options) {
+ this._setOption(key, options[key]);
+ }
+
+ return this;
+ },
+ _setOption: function (key, value) {
+ this.options[key] = value;
+
+ if (key === "disabled") {
+ this.widget()
+ .toggleClass(this.widgetFullName + "-disabled", !!value);
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if (value) {
+ this.hoverable.removeClass("ui-state-hover");
+ this.focusable.removeClass("ui-state-focus");
+ }
+ }
+
+ return this;
+ },
+
+ enable: function () {
+ return this._setOptions({disabled: false});
+ },
+ disable: function () {
+ return this._setOptions({disabled: true});
+ },
+
+ _on: function (suppressDisabledCheck, element, handlers) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if (typeof suppressDisabledCheck !== "boolean") {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if (!handlers) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $(element);
+ this.bindings = this.bindings.add(element);
+ }
+
+ $.each(handlers, function (event, handler) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if (!suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $(this).hasClass("ui-state-disabled") )) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[handler] : handler )
+ .apply(instance, arguments);
+ }
+
+ // copy the guid so direct unbinding works
+ if (typeof handler !== "string") {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match(/^([\w:-]*)\s*(.*)$/),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if (selector) {
+ delegateElement.delegate(selector, eventName, handlerProxy);
+ } else {
+ element.bind(eventName, handlerProxy);
+ }
+ });
+ },
+
+ _off: function (element, eventName) {
+ eventName = (eventName || "").split(" ").join(this.eventNamespace + " ") +
+ this.eventNamespace;
+ element.unbind(eventName).undelegate(eventName);
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $(this.bindings.not(element).get());
+ this.focusable = $(this.focusable.not(element).get());
+ this.hoverable = $(this.hoverable.not(element).get());
+ },
+
+ _delay: function (handler, delay) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[handler] : handler )
+ .apply(instance, arguments);
+ }
+
+ var instance = this;
+ return setTimeout(handlerProxy, delay || 0);
+ },
+
+ _hoverable: function (element) {
+ this.hoverable = this.hoverable.add(element);
+ this._on(element, {
+ mouseenter: function (event) {
+ $(event.currentTarget).addClass("ui-state-hover");
+ },
+ mouseleave: function (event) {
+ $(event.currentTarget).removeClass("ui-state-hover");
+ }
+ });
+ },
+
+ _focusable: function (element) {
+ this.focusable = this.focusable.add(element);
+ this._on(element, {
+ focusin: function (event) {
+ $(event.currentTarget).addClass("ui-state-focus");
+ },
+ focusout: function (event) {
+ $(event.currentTarget).removeClass("ui-state-focus");
+ }
+ });
+ },
+
+ _trigger: function (type, event, data) {
+ var prop, orig,
+ callback = this.options[type];
+
+ data = data || {};
+ event = $.Event(event);
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[0];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if (orig) {
+ for (prop in orig) {
+ if (!( prop in event )) {
+ event[prop] = orig[prop];
+ }
+ }
+ }
+
+ this.element.trigger(event, data);
+ return !( $.isFunction(callback) &&
+ callback.apply(this.element[0], [event].concat(data)) === false ||
+ event.isDefaultPrevented() );
+ }
+ };
+
+ $.each({show: "fadeIn", hide: "fadeOut"}, function (method, defaultEffect) {
+ $.Widget.prototype["_" + method] = function (element, options, callback) {
+ if (typeof options === "string") {
+ options = {effect: options};
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if (typeof options === "number") {
+ options = {duration: options};
+ }
+ hasOptions = !$.isEmptyObject(options);
+ options.complete = callback;
+ if (options.delay) {
+ element.delay(options.delay);
+ }
+ if (hasOptions && $.effects && $.effects.effect[effectName]) {
+ element[method](options);
+ } else if (effectName !== method && element[effectName]) {
+ element[effectName](options.duration, options.easing, callback);
+ } else {
+ element.queue(function (next) {
+ $(this)[method]();
+ if (callback) {
+ callback.call(element[0]);
+ }
+ next();
+ });
+ }
+ };
+ });
+
+ var widget = $.widget;
+
+
+ /*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+ var mouseHandled = false;
+ $(document).mouseup(function () {
+ mouseHandled = false;
+ });
+
+ var mouse = $.widget("ui.mouse", {
+ version: "1.11.4",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function () {
+ var that = this;
+
+ this.element
+ .bind("mousedown." + this.widgetName, function (event) {
+ return that._mouseDown(event);
+ })
+ .bind("click." + this.widgetName, function (event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function () {
+ this.element.unbind("." + this.widgetName);
+ if (this._mouseMoveDelegate) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function (event) {
+ // don't let more than one widget handle mouseStart
+ if (mouseHandled) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function () {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function (event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function (event) {
+ return that._mouseUp(event);
+ };
+
+ this.document
+ .bind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .bind("mouseup." + this.widgetName, this._mouseUpDelegate);
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function (event) {
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if (this._mouseMoved) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if (!event.which) {
+ return this._mouseUp(event);
+ }
+ }
+
+ if (event.which || event.button) {
+ this._mouseMoved = true;
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function (event) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ mouseHandled = false;
+ return false;
+ },
+
+ _mouseDistanceMet: function (event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function (/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function (/* event */) {
+ },
+ _mouseDrag: function (/* event */) {
+ },
+ _mouseStop: function (/* event */) {
+ },
+ _mouseCapture: function (/* event */) {
+ return true;
+ }
+ });
+
+
+ /*!
+ * jQuery UI Position 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+ (function () {
+
+ $.ui = $.ui || {};
+
+ var cachedScrollbarWidth, supportsOffsetFractions,
+ max = Math.max,
+ abs = Math.abs,
+ round = Math.round,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+ function getOffsets(offsets, width, height) {
+ return [
+ parseFloat(offsets[0]) * ( rpercent.test(offsets[0]) ? width / 100 : 1 ),
+ parseFloat(offsets[1]) * ( rpercent.test(offsets[1]) ? height / 100 : 1 )
+ ];
+ }
+
+ function parseCss(element, property) {
+ return parseInt($.css(element, property), 10) || 0;
+ }
+
+ function getDimensions(elem) {
+ var raw = elem[0];
+ if (raw.nodeType === 9) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: {top: 0, left: 0}
+ };
+ }
+ if ($.isWindow(raw)) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: {top: elem.scrollTop(), left: elem.scrollLeft()}
+ };
+ }
+ if (raw.preventDefault) {
+ return {
+ width: 0,
+ height: 0,
+ offset: {top: raw.pageY, left: raw.pageX}
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+ }
+
+ $.position = {
+ scrollbarWidth: function () {
+ if (cachedScrollbarWidth !== undefined) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),
+ innerDiv = div.children()[0];
+
+ $("body").append(div);
+ w1 = innerDiv.offsetWidth;
+ div.css("overflow", "scroll");
+
+ w2 = innerDiv.offsetWidth;
+
+ if (w1 === w2) {
+ w2 = div[0].clientWidth;
+ }
+
+ div.remove();
+
+ return (cachedScrollbarWidth = w1 - w2);
+ },
+ getScrollInfo: function (within) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css("overflow-x"),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css("overflow-y"),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function (element) {
+ var withinElement = $(element || window),
+ isWindow = $.isWindow(withinElement[0]),
+ isDocument = !!withinElement[0] && withinElement[0].nodeType === 9;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: withinElement.offset() || {left: 0, top: 0},
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+
+ // support: jQuery 1.6.x
+ // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+ width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+ height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+ };
+ }
+ };
+
+ $.fn.position = function (options) {
+ if (!options || !options.of) {
+ return _position.apply(this, arguments);
+ }
+
+ // make a copy, we don't want to modify arguments
+ options = $.extend({}, options);
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $(options.of),
+ within = $.position.getWithinInfo(options.within),
+ scrollInfo = $.position.getScrollInfo(within),
+ collision = ( options.collision || "flip" ).split(" "),
+ offsets = {};
+
+ dimensions = getDimensions(target);
+ if (target[0].preventDefault) {
+ // force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+ // clone to reuse original targetOffset later
+ basePosition = $.extend({}, targetOffset);
+
+ // force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each(["my", "at"], function () {
+ var pos = ( options[this] || "" ).split(" "),
+ horizontalOffset,
+ verticalOffset;
+
+ if (pos.length === 1) {
+ pos = rhorizontal.test(pos[0]) ?
+ pos.concat(["center"]) :
+ rvertical.test(pos[0]) ?
+ ["center"].concat(pos) :
+ ["center", "center"];
+ }
+ pos[0] = rhorizontal.test(pos[0]) ? pos[0] : "center";
+ pos[1] = rvertical.test(pos[1]) ? pos[1] : "center";
+
+ // calculate offsets
+ horizontalOffset = roffset.exec(pos[0]);
+ verticalOffset = roffset.exec(pos[1]);
+ offsets[this] = [
+ horizontalOffset ? horizontalOffset[0] : 0,
+ verticalOffset ? verticalOffset[0] : 0
+ ];
+
+ // reduce to just the positions without the offsets
+ options[this] = [
+ rposition.exec(pos[0])[0],
+ rposition.exec(pos[1])[0]
+ ];
+ });
+
+ // normalize collision option
+ if (collision.length === 1) {
+ collision[1] = collision[0];
+ }
+
+ if (options.at[0] === "right") {
+ basePosition.left += targetWidth;
+ } else if (options.at[0] === "center") {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if (options.at[1] === "bottom") {
+ basePosition.top += targetHeight;
+ } else if (options.at[1] === "center") {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets(offsets.at, targetWidth, targetHeight);
+ basePosition.left += atOffset[0];
+ basePosition.top += atOffset[1];
+
+ return this.each(function () {
+ var collisionPosition, using,
+ elem = $(this),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss(this, "marginLeft"),
+ marginTop = parseCss(this, "marginTop"),
+ collisionWidth = elemWidth + marginLeft + parseCss(this, "marginRight") + scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss(this, "marginBottom") + scrollInfo.height,
+ position = $.extend({}, basePosition),
+ myOffset = getOffsets(offsets.my, elem.outerWidth(), elem.outerHeight());
+
+ if (options.my[0] === "right") {
+ position.left -= elemWidth;
+ } else if (options.my[0] === "center") {
+ position.left -= elemWidth / 2;
+ }
+
+ if (options.my[1] === "bottom") {
+ position.top -= elemHeight;
+ } else if (options.my[1] === "center") {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[0];
+ position.top += myOffset[1];
+
+ // if the browser doesn't support fractions, then round for consistent results
+ if (!supportsOffsetFractions) {
+ position.left = round(position.left);
+ position.top = round(position.top);
+ }
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each(["left", "top"], function (i, dir) {
+ if ($.ui.position[collision[i]]) {
+ $.ui.position[collision[i]][dir](position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [atOffset[0] + myOffset[0], atOffset [1] + myOffset[1]],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ });
+ }
+ });
+
+ if (options.using) {
+ // adds feedback as second argument to using callback, if present
+ using = function (props) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if (targetWidth < elemWidth && abs(left + right) < targetWidth) {
+ feedback.horizontal = "center";
+ }
+ if (targetHeight < elemHeight && abs(top + bottom) < targetHeight) {
+ feedback.vertical = "middle";
+ }
+ if (max(abs(left), abs(right)) > max(abs(top), abs(bottom))) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call(this, props, feedback);
+ };
+ }
+
+ elem.offset($.extend(position, {using: using}));
+ });
+ };
+
+ $.ui.position = {
+ fit: {
+ left: function (position, data) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // element is wider than within
+ if (data.collisionWidth > outerWidth) {
+ // element is initially over the left side of within
+ if (overLeft > 0 && overRight <= 0) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+ position.left += overLeft - newOverRight;
+ // element is initially over right side of within
+ } else if (overRight > 0 && overLeft <= 0) {
+ position.left = withinOffset;
+ // element is initially over both left and right sides of within
+ } else {
+ if (overLeft > overRight) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+ // too far left -> align with left edge
+ } else if (overLeft > 0) {
+ position.left += overLeft;
+ // too far right -> align with right edge
+ } else if (overRight > 0) {
+ position.left -= overRight;
+ // adjust based on position and margin
+ } else {
+ position.left = max(position.left - collisionPosLeft, position.left);
+ }
+ },
+ top: function (position, data) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // element is taller than within
+ if (data.collisionHeight > outerHeight) {
+ // element is initially over the top of within
+ if (overTop > 0 && overBottom <= 0) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+ position.top += overTop - newOverBottom;
+ // element is initially over bottom of within
+ } else if (overBottom > 0 && overTop <= 0) {
+ position.top = withinOffset;
+ // element is initially over both top and bottom of within
+ } else {
+ if (overTop > overBottom) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+ // too far up -> align with top
+ } else if (overTop > 0) {
+ position.top += overTop;
+ // too far down -> align with bottom edge
+ } else if (overBottom > 0) {
+ position.top -= overBottom;
+ // adjust based on position and margin
+ } else {
+ position.top = max(position.top - collisionPosTop, position.top);
+ }
+ }
+ },
+ flip: {
+ left: function (position, data) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[0] === "left" ?
+ -data.elemWidth :
+ data.my[0] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[0] === "left" ?
+ data.targetWidth :
+ data.at[0] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[0],
+ newOverRight,
+ newOverLeft;
+
+ if (overLeft < 0) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+ if (newOverRight < 0 || newOverRight < abs(overLeft)) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if (overRight > 0) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+ if (newOverLeft > 0 || abs(newOverLeft) < overRight) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function (position, data) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[1] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[1] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[1] === "top" ?
+ data.targetHeight :
+ data.at[1] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[1],
+ newOverTop,
+ newOverBottom;
+ if (overTop < 0) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+ if (newOverBottom < 0 || newOverBottom < abs(overTop)) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if (overBottom > 0) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+ if (newOverTop > 0 || abs(newOverTop) < overBottom) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function () {
+ $.ui.position.flip.left.apply(this, arguments);
+ $.ui.position.fit.left.apply(this, arguments);
+ },
+ top: function () {
+ $.ui.position.flip.top.apply(this, arguments);
+ $.ui.position.fit.top.apply(this, arguments);
+ }
+ }
+ };
+
+// fraction support test
+ (function () {
+ var testElement, testElementParent, testElementStyle, offsetLeft, i,
+ body = document.getElementsByTagName("body")[0],
+ div = document.createElement("div");
+
+ //Create a "fake body" for testing based on method used in jQuery.support
+ testElement = document.createElement(body ? "div" : "body");
+ testElementStyle = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ };
+ if (body) {
+ $.extend(testElementStyle, {
+ position: "absolute",
+ left: "-1000px",
+ top: "-1000px"
+ });
+ }
+ for (i in testElementStyle) {
+ testElement.style[i] = testElementStyle[i];
+ }
+ testElement.appendChild(div);
+ testElementParent = body || document.documentElement;
+ testElementParent.insertBefore(testElement, testElementParent.firstChild);
+
+ div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+ offsetLeft = $(div).offset().left;
+ supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+ testElement.innerHTML = "";
+ testElementParent.removeChild(testElement);
+ })();
+
+ })();
+
+ var position = $.ui.position;
+
+
+ /*!
+ * jQuery UI Draggable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
+
+ $.widget("ui.draggable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: true,
+ appendTo: "parent",
+ axis: false,
+ connectToSortable: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ iframeFix: false,
+ opacity: false,
+ refreshPositions: false,
+ revert: false,
+ revertDuration: 500,
+ scope: "default",
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: false,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: false,
+ zIndex: false,
+
+ // callbacks
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function () {
+
+ if (this.options.helper === "original") {
+ this._setPositionRelative();
+ }
+ if (this.options.addClasses) {
+ this.element.addClass("ui-draggable");
+ }
+ if (this.options.disabled) {
+ this.element.addClass("ui-draggable-disabled");
+ }
+ this._setHandleClassName();
+
+ this._mouseInit();
+ },
+
+ _setOption: function (key, value) {
+ this._super(key, value);
+ if (key === "handle") {
+ this._removeHandleClassName();
+ this._setHandleClassName();
+ }
+ },
+
+ _destroy: function () {
+ if (( this.helper || this.element ).is(".ui-draggable-dragging")) {
+ this.destroyOnClear = true;
+ return;
+ }
+ this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");
+ this._removeHandleClassName();
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function (event) {
+ var o = this.options;
+
+ this._blurActiveElement(event);
+
+ // among others, prevent a drag on a resizable-handle
+ if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+ return false;
+ }
+
+ //Quit if we're not on a valid handle
+ this.handle = this._getHandle(event);
+ if (!this.handle) {
+ return false;
+ }
+
+ this._blockFrames(o.iframeFix === true ? "iframe" : o.iframeFix);
+
+ return true;
+
+ },
+
+ _blockFrames: function (selector) {
+ this.iframeBlocks = this.document.find(selector).map(function () {
+ var iframe = $(this);
+
+ return $("<div>")
+ .css("position", "absolute")
+ .appendTo(iframe.parent())
+ .outerWidth(iframe.outerWidth())
+ .outerHeight(iframe.outerHeight())
+ .offset(iframe.offset())[0];
+ });
+ },
+
+ _unblockFrames: function () {
+ if (this.iframeBlocks) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _blurActiveElement: function (event) {
+ var document = this.document[0];
+
+ // Only need to blur if the event occurred on the draggable itself, see #10527
+ if (!this.handleElement.is(event.target)) {
+ return;
+ }
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #9520
+ if (document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body") {
+
+ // Blur any element that currently has focus, see #4261
+ $(document.activeElement).blur();
+ }
+ } catch (error) {
+ }
+ },
+
+ _mouseStart: function (event) {
+
+ var o = this.options;
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ this.helper.addClass("ui-draggable-dragging");
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ //If ddmanager is used for droppables, set the global draggable
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Store the helper's css position
+ this.cssPosition = this.helper.css("position");
+ this.scrollParent = this.helper.scrollParent(true);
+ this.offsetParent = this.helper.offsetParent();
+ this.hasFixedAncestor = this.helper.parents().filter(function () {
+ return $(this).css("position") === "fixed";
+ }).length > 0;
+
+ //The element's absolute position on the page minus margins
+ this.positionAbs = this.element.offset();
+ this._refreshOffsets(event);
+
+ //Generate the original position
+ this.originalPosition = this.position = this._generatePosition(event, false);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Set a containment if given in the options
+ this._setContainment();
+
+ //Trigger event + callbacks
+ if (this._trigger("start", event) === false) {
+ this._clear();
+ return false;
+ }
+
+ //Recache the helper size
+ this._cacheHelperProportions();
+
+ //Prepare the droppable offsets
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ // Reset helper's right/bottom css if they're set and set explicit width/height instead
+ // as this prevents resizing of elements with right/bottom set (see #7772)
+ this._normalizeRightBottom();
+
+ this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.dragStart(this, event);
+ }
+
+ return true;
+ },
+
+ _refreshOffsets: function (event) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: false,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ };
+
+ this.offset.click = {
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ };
+ },
+
+ _mouseDrag: function (event, noPropagation) {
+ // reset any necessary cached properties (see #5009)
+ if (this.hasFixedAncestor) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event, true);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Call plugins and callbacks and use the resulting position if something is returned
+ if (!noPropagation) {
+ var ui = this._uiHash();
+ if (this._trigger("drag", event, ui) === false) {
+ this._mouseUp({});
+ return false;
+ }
+ this.position = ui.position;
+ }
+
+ this.helper[0].style.left = this.position.left + "px";
+ this.helper[0].style.top = this.position.top + "px";
+
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ return false;
+ },
+
+ _mouseStop: function (event) {
+
+ //If we are using droppables, inform the manager about the drop
+ var that = this,
+ dropped = false;
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ dropped = $.ui.ddmanager.drop(this, event);
+ }
+
+ //if a drop comes from outside (a sortable)
+ if (this.dropped) {
+ dropped = this.dropped;
+ this.dropped = false;
+ }
+
+ if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+ $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {
+ if (that._trigger("stop", event) !== false) {
+ that._clear();
+ }
+ });
+ } else {
+ if (this._trigger("stop", event) !== false) {
+ this._clear();
+ }
+ }
+
+ return false;
+ },
+
+ _mouseUp: function (event) {
+ this._unblockFrames();
+
+ //If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.dragStop(this, event);
+ }
+
+ // Only need to focus if the event occurred on the draggable itself, see #10527
+ if (this.handleElement.is(event.target)) {
+ // The interaction is over; whether or not the click resulted in a drag, focus the element
+ this.element.focus();
+ }
+
+ return $.ui.mouse.prototype._mouseUp.call(this, event);
+ },
+
+ cancel: function () {
+
+ if (this.helper.is(".ui-draggable-dragging")) {
+ this._mouseUp({});
+ } else {
+ this._clear();
+ }
+
+ return this;
+
+ },
+
+ _getHandle: function (event) {
+ return this.options.handle ?
+ !!$(event.target).closest(this.element.find(this.options.handle)).length :
+ true;
+ },
+
+ _setHandleClassName: function () {
+ this.handleElement = this.options.handle ?
+ this.element.find(this.options.handle) : this.element;
+ this.handleElement.addClass("ui-draggable-handle");
+ },
+
+ _removeHandleClassName: function () {
+ this.handleElement.removeClass("ui-draggable-handle");
+ },
+
+ _createHelper: function (event) {
+
+ var o = this.options,
+ helperIsFunction = $.isFunction(o.helper),
+ helper = helperIsFunction ?
+ $(o.helper.apply(this.element[0], [event])) :
+ ( o.helper === "clone" ?
+ this.element.clone().removeAttr("id") :
+ this.element );
+
+ if (!helper.parents("body").length) {
+ helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+ }
+
+ // http://bugs.jqueryui.com/ticket/9446
+ // a helper function can return the original element
+ // which wouldn't have been set to relative in _create
+ if (helperIsFunction && helper[0] === this.element[0]) {
+ this._setPositionRelative();
+ }
+
+ if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+ helper.css("position", "absolute");
+ }
+
+ return helper;
+
+ },
+
+ _setPositionRelative: function () {
+ if (!( /^(?:r|a|f)/ ).test(this.element.css("position"))) {
+ this.element[0].style.position = "relative";
+ }
+ },
+
+ _adjustOffsetFromHelper: function (obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _isRootNode: function (element) {
+ return ( /(html|body)/i ).test(element.tagName) || element === this.document[0];
+ },
+
+ _getParentOffset: function () {
+
+ //Get the offsetParent and cache its position
+ var po = this.offsetParent.offset(),
+ document = this.document[0];
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ if (this._isRootNode(this.offsetParent[0])) {
+ po = {top: 0, left: 0};
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function () {
+ if (this.cssPosition !== "relative") {
+ return {top: 0, left: 0};
+ }
+
+ var p = this.element.position(),
+ scrollIsRootNode = this._isRootNode(this.scrollParent[0]);
+
+ return {
+ top: p.top - ( parseInt(this.helper.css("top"), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+ left: p.left - ( parseInt(this.helper.css("left"), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+ };
+
+ },
+
+ _cacheMargins: function () {
+ this.margins = {
+ left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+ top: (parseInt(this.element.css("marginTop"), 10) || 0),
+ right: (parseInt(this.element.css("marginRight"), 10) || 0),
+ bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function () {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function () {
+
+ var isUserScrollable, c, ce,
+ o = this.options,
+ document = this.document[0];
+
+ this.relativeContainer = null;
+
+ if (!o.containment) {
+ this.containment = null;
+ return;
+ }
+
+ if (o.containment === "window") {
+ this.containment = [
+ $(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+ $(window).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+ $(window).scrollLeft() + $(window).width() - this.helperProportions.width - this.margins.left,
+ $(window).scrollTop() + ( $(window).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if (o.containment === "document") {
+ this.containment = [
+ 0,
+ 0,
+ $(document).width() - this.helperProportions.width - this.margins.left,
+ ( $(document).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+ ];
+ return;
+ }
+
+ if (o.containment.constructor === Array) {
+ this.containment = o.containment;
+ return;
+ }
+
+ if (o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+
+ c = $(o.containment);
+ ce = c[0];
+
+ if (!ce) {
+ return;
+ }
+
+ isUserScrollable = /(scroll|auto)/.test(c.css("overflow"));
+
+ this.containment = [
+ ( parseInt(c.css("borderLeftWidth"), 10) || 0 ) + ( parseInt(c.css("paddingLeft"), 10) || 0 ),
+ ( parseInt(c.css("borderTopWidth"), 10) || 0 ) + ( parseInt(c.css("paddingTop"), 10) || 0 ),
+ ( isUserScrollable ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth ) -
+ ( parseInt(c.css("borderRightWidth"), 10) || 0 ) -
+ ( parseInt(c.css("paddingRight"), 10) || 0 ) -
+ this.helperProportions.width -
+ this.margins.left -
+ this.margins.right,
+ ( isUserScrollable ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight ) -
+ ( parseInt(c.css("borderBottomWidth"), 10) || 0 ) -
+ ( parseInt(c.css("paddingBottom"), 10) || 0 ) -
+ this.helperProportions.height -
+ this.margins.top -
+ this.margins.bottom
+ ];
+ this.relativeContainer = c;
+ },
+
+ _convertPositionTo: function (d, pos) {
+
+ if (!pos) {
+ pos = this.position;
+ }
+
+ var mod = d === "absolute" ? 1 : -1,
+ scrollIsRootNode = this._isRootNode(this.scrollParent[0]);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function (event, constrainPosition) {
+
+ var containment, co, top, left,
+ o = this.options,
+ scrollIsRootNode = this._isRootNode(this.scrollParent[0]),
+ pageX = event.pageX,
+ pageY = event.pageY;
+
+ // Cache the scroll
+ if (!scrollIsRootNode || !this.offset.scroll) {
+ this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ };
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ // If we are not dragging yet, we won't check for options
+ if (constrainPosition) {
+ if (this.containment) {
+ if (this.relativeContainer) {
+ co = this.relativeContainer.offset();
+ containment = [
+ this.containment[0] + co.left,
+ this.containment[1] + co.top,
+ this.containment[2] + co.left,
+ this.containment[3] + co.top
+ ];
+ } else {
+ containment = this.containment;
+ }
+
+ if (event.pageX - this.offset.click.left < containment[0]) {
+ pageX = containment[0] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top < containment[1]) {
+ pageY = containment[1] + this.offset.click.top;
+ }
+ if (event.pageX - this.offset.click.left > containment[2]) {
+ pageX = containment[2] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top > containment[3]) {
+ pageY = containment[3] + this.offset.click.top;
+ }
+ }
+
+ if (o.grid) {
+ //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+ top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+ pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+ pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ if (o.axis === "y") {
+ pageX = this.originalPageX;
+ }
+
+ if (o.axis === "x") {
+ pageY = this.originalPageY;
+ }
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+ )
+ };
+
+ },
+
+ _clear: function () {
+ this.helper.removeClass("ui-draggable-dragging");
+ if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ this.cancelHelperRemoval = false;
+ if (this.destroyOnClear) {
+ this.destroy();
+ }
+ },
+
+ _normalizeRightBottom: function () {
+ if (this.options.axis !== "y" && this.helper.css("right") !== "auto") {
+ this.helper.width(this.helper.width());
+ this.helper.css("right", "auto");
+ }
+ if (this.options.axis !== "x" && this.helper.css("bottom") !== "auto") {
+ this.helper.height(this.helper.height());
+ this.helper.css("bottom", "auto");
+ }
+ },
+
+ // From now on bulk stuff - mainly helpers
+
+ _trigger: function (type, event, ui) {
+ ui = ui || this._uiHash();
+ $.ui.plugin.call(this, type, [event, ui, this], true);
+
+ // Absolute position and offset (see #6884 ) have to be recalculated after plugins
+ if (/^(drag|start|stop)/.test(type)) {
+ this.positionAbs = this._convertPositionTo("absolute");
+ ui.offset = this.positionAbs;
+ }
+ return $.Widget.prototype._trigger.call(this, type, event, ui);
+ },
+
+ plugins: {},
+
+ _uiHash: function () {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ };
+ }
+
+ });
+
+ $.ui.plugin.add("draggable", "connectToSortable", {
+ start: function (event, ui, draggable) {
+ var uiSortable = $.extend({}, ui, {
+ item: draggable.element
+ });
+
+ draggable.sortables = [];
+ $(draggable.options.connectToSortable).each(function () {
+ var sortable = $(this).sortable("instance");
+
+ if (sortable && !sortable.options.disabled) {
+ draggable.sortables.push(sortable);
+
+ // refreshPositions is called at drag start to refresh the containerCache
+ // which is used in drag. This ensures it's initialized and synchronized
+ // with any changes that might have happened on the page since initialization.
+ sortable.refreshPositions();
+ sortable._trigger("activate", event, uiSortable);
+ }
+ });
+ },
+ stop: function (event, ui, draggable) {
+ var uiSortable = $.extend({}, ui, {
+ item: draggable.element
+ });
+
+ draggable.cancelHelperRemoval = false;
+
+ $.each(draggable.sortables, function () {
+ var sortable = this;
+
+ if (sortable.isOver) {
+ sortable.isOver = 0;
+
+ // Allow this sortable to handle removing the helper
+ draggable.cancelHelperRemoval = true;
+ sortable.cancelHelperRemoval = false;
+
+ // Use _storedCSS To restore properties in the sortable,
+ // as this also handles revert (#9675) since the draggable
+ // may have modified them in unexpected ways (#8809)
+ sortable._storedCSS = {
+ position: sortable.placeholder.css("position"),
+ top: sortable.placeholder.css("top"),
+ left: sortable.placeholder.css("left")
+ };
+
+ sortable._mouseStop(event);
+
+ // Once drag has ended, the sortable should return to using
+ // its original helper, not the shared helper from draggable
+ sortable.options.helper = sortable.options._helper;
+ } else {
+ // Prevent this Sortable from removing the helper.
+ // However, don't set the draggable to remove the helper
+ // either as another connected Sortable may yet handle the removal.
+ sortable.cancelHelperRemoval = true;
+
+ sortable._trigger("deactivate", event, uiSortable);
+ }
+ });
+ },
+ drag: function (event, ui, draggable) {
+ $.each(draggable.sortables, function () {
+ var innermostIntersecting = false,
+ sortable = this;
+
+ // Copy over variables that sortable's _intersectsWith uses
+ sortable.positionAbs = draggable.positionAbs;
+ sortable.helperProportions = draggable.helperProportions;
+ sortable.offset.click = draggable.offset.click;
+
+ if (sortable._intersectsWith(sortable.containerCache)) {
+ innermostIntersecting = true;
+
+ $.each(draggable.sortables, function () {
+ // Copy over variables that sortable's _intersectsWith uses
+ this.positionAbs = draggable.positionAbs;
+ this.helperProportions = draggable.helperProportions;
+ this.offset.click = draggable.offset.click;
+
+ if (this !== sortable &&
+ this._intersectsWith(this.containerCache) &&
+ $.contains(sortable.element[0], this.element[0])) {
+ innermostIntersecting = false;
+ }
+
+ return innermostIntersecting;
+ });
+ }
+
+ if (innermostIntersecting) {
+ // If it intersects, we use a little isOver variable and set it once,
+ // so that the move-in stuff gets fired only once.
+ if (!sortable.isOver) {
+ sortable.isOver = 1;
+
+ // Store draggable's parent in case we need to reappend to it later.
+ draggable._parent = ui.helper.parent();
+
+ sortable.currentItem = ui.helper
+ .appendTo(sortable.element)
+ .data("ui-sortable-item", true);
+
+ // Store helper option to later restore it
+ sortable.options._helper = sortable.options.helper;
+
+ sortable.options.helper = function () {
+ return ui.helper[0];
+ };
+
+ // Fire the start events of the sortable with our passed browser event,
+ // and our own helper (so it doesn't create a new one)
+ event.target = sortable.currentItem[0];
+ sortable._mouseCapture(event, true);
+ sortable._mouseStart(event, true, true);
+
+ // Because the browser event is way off the new appended portlet,
+ // modify necessary variables to reflect the changes
+ sortable.offset.click.top = draggable.offset.click.top;
+ sortable.offset.click.left = draggable.offset.click.left;
+ sortable.offset.parent.left -= draggable.offset.parent.left -
+ sortable.offset.parent.left;
+ sortable.offset.parent.top -= draggable.offset.parent.top -
+ sortable.offset.parent.top;
+
+ draggable._trigger("toSortable", event);
+
+ // Inform draggable that the helper is in a valid drop zone,
+ // used solely in the revert option to handle "valid/invalid".
+ draggable.dropped = sortable.element;
+
+ // Need to refreshPositions of all sortables in the case that
+ // adding to one sortable changes the location of the other sortables (#9675)
+ $.each(draggable.sortables, function () {
+ this.refreshPositions();
+ });
+
+ // hack so receive/update callbacks work (mostly)
+ draggable.currentItem = draggable.element;
+ sortable.fromOutside = draggable;
+ }
+
+ if (sortable.currentItem) {
+ sortable._mouseDrag(event);
+ // Copy the sortable's position because the draggable's can potentially reflect
+ // a relative position, while sortable is always absolute, which the dragged
+ // element has now become. (#8809)
+ ui.position = sortable.position;
+ }
+ } else {
+ // If it doesn't intersect with the sortable, and it intersected before,
+ // we fake the drag stop of the sortable, but make sure it doesn't remove
+ // the helper by using cancelHelperRemoval.
+ if (sortable.isOver) {
+
+ sortable.isOver = 0;
+ sortable.cancelHelperRemoval = true;
+
+ // Calling sortable's mouseStop would trigger a revert,
+ // so revert must be temporarily false until after mouseStop is called.
+ sortable.options._revert = sortable.options.revert;
+ sortable.options.revert = false;
+
+ sortable._trigger("out", event, sortable._uiHash(sortable));
+ sortable._mouseStop(event, true);
+
+ // restore sortable behaviors that were modfied
+ // when the draggable entered the sortable area (#9481)
+ sortable.options.revert = sortable.options._revert;
+ sortable.options.helper = sortable.options._helper;
+
+ if (sortable.placeholder) {
+ sortable.placeholder.remove();
+ }
+
+ // Restore and recalculate the draggable's offset considering the sortable
+ // may have modified them in unexpected ways. (#8809, #10669)
+ ui.helper.appendTo(draggable._parent);
+ draggable._refreshOffsets(event);
+ ui.position = draggable._generatePosition(event, true);
+
+ draggable._trigger("fromSortable", event);
+
+ // Inform draggable that the helper is no longer in a valid drop zone
+ draggable.dropped = false;
+
+ // Need to refreshPositions of all sortables just in case removing
+ // from one sortable changes the location of other sortables (#9675)
+ $.each(draggable.sortables, function () {
+ this.refreshPositions();
+ });
+ }
+ }
+ });
+ }
+ });
+
+ $.ui.plugin.add("draggable", "cursor", {
+ start: function (event, ui, instance) {
+ var t = $("body"),
+ o = instance.options;
+
+ if (t.css("cursor")) {
+ o._cursor = t.css("cursor");
+ }
+ t.css("cursor", o.cursor);
+ },
+ stop: function (event, ui, instance) {
+ var o = instance.options;
+ if (o._cursor) {
+ $("body").css("cursor", o._cursor);
+ }
+ }
+ });
+
+ $.ui.plugin.add("draggable", "opacity", {
+ start: function (event, ui, instance) {
+ var t = $(ui.helper),
+ o = instance.options;
+ if (t.css("opacity")) {
+ o._opacity = t.css("opacity");
+ }
+ t.css("opacity", o.opacity);
+ },
+ stop: function (event, ui, instance) {
+ var o = instance.options;
+ if (o._opacity) {
+ $(ui.helper).css("opacity", o._opacity);
+ }
+ }
+ });
+
+ $.ui.plugin.add("draggable", "scroll", {
+ start: function (event, ui, i) {
+ if (!i.scrollParentNotHidden) {
+ i.scrollParentNotHidden = i.helper.scrollParent(false);
+ }
+
+ if (i.scrollParentNotHidden[0] !== i.document[0] && i.scrollParentNotHidden[0].tagName !== "HTML") {
+ i.overflowOffset = i.scrollParentNotHidden.offset();
+ }
+ },
+ drag: function (event, ui, i) {
+
+ var o = i.options,
+ scrolled = false,
+ scrollParent = i.scrollParentNotHidden[0],
+ document = i.document[0];
+
+ if (scrollParent !== document && scrollParent.tagName !== "HTML") {
+ if (!o.axis || o.axis !== "x") {
+ if (( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+ } else if (event.pageY - i.overflowOffset.top < o.scrollSensitivity) {
+ scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+ }
+ }
+
+ if (!o.axis || o.axis !== "y") {
+ if (( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+ } else if (event.pageX - i.overflowOffset.left < o.scrollSensitivity) {
+ scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+ }
+ }
+
+ } else {
+
+ if (!o.axis || o.axis !== "x") {
+ if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+ } else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+ }
+ }
+
+ if (!o.axis || o.axis !== "y") {
+ if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+ } else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+ scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+ }
+ }
+
+ }
+
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(i, event);
+ }
+
+ }
+ });
+
+ $.ui.plugin.add("draggable", "snap", {
+ start: function (event, ui, i) {
+
+ var o = i.options;
+
+ i.snapElements = [];
+
+ $(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function () {
+ var $t = $(this),
+ $o = $t.offset();
+ if (this !== i.element[0]) {
+ i.snapElements.push({
+ item: this,
+ width: $t.outerWidth(), height: $t.outerHeight(),
+ top: $o.top, left: $o.left
+ });
+ }
+ });
+
+ },
+ drag: function (event, ui, inst) {
+
+ var ts, bs, ls, rs, l, r, t, b, i, first,
+ o = inst.options,
+ d = o.snapTolerance,
+ x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+ y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+ for (i = inst.snapElements.length - 1; i >= 0; i--) {
+
+ l = inst.snapElements[i].left - inst.margins.left;
+ r = l + inst.snapElements[i].width;
+ t = inst.snapElements[i].top - inst.margins.top;
+ b = t + inst.snapElements[i].height;
+
+ if (x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains(inst.snapElements[i].item.ownerDocument, inst.snapElements[i].item)) {
+ if (inst.snapElements[i].snapping) {
+ (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), {snapItem: inst.snapElements[i].item})));
+ }
+ inst.snapElements[i].snapping = false;
+ continue;
+ }
+
+ if (o.snapMode !== "inner") {
+ ts = Math.abs(t - y2) <= d;
+ bs = Math.abs(b - y1) <= d;
+ ls = Math.abs(l - x2) <= d;
+ rs = Math.abs(r - x1) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", {
+ top: t - inst.helperProportions.height,
+ left: 0
+ }).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", {top: b, left: 0}).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", {
+ top: 0,
+ left: l - inst.helperProportions.width
+ }).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", {top: 0, left: r}).left;
+ }
+ }
+
+ first = (ts || bs || ls || rs);
+
+ if (o.snapMode !== "outer") {
+ ts = Math.abs(t - y1) <= d;
+ bs = Math.abs(b - y2) <= d;
+ ls = Math.abs(l - x1) <= d;
+ rs = Math.abs(r - x2) <= d;
+ if (ts) {
+ ui.position.top = inst._convertPositionTo("relative", {top: t, left: 0}).top;
+ }
+ if (bs) {
+ ui.position.top = inst._convertPositionTo("relative", {
+ top: b - inst.helperProportions.height,
+ left: 0
+ }).top;
+ }
+ if (ls) {
+ ui.position.left = inst._convertPositionTo("relative", {top: 0, left: l}).left;
+ }
+ if (rs) {
+ ui.position.left = inst._convertPositionTo("relative", {
+ top: 0,
+ left: r - inst.helperProportions.width
+ }).left;
+ }
+ }
+
+ if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+ (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), {snapItem: inst.snapElements[i].item})));
+ }
+ inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+ }
+
+ }
+ });
+
+ $.ui.plugin.add("draggable", "stack", {
+ start: function (event, ui, instance) {
+ var min,
+ o = instance.options,
+ group = $.makeArray($(o.stack)).sort(function (a, b) {
+ return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+ });
+
+ if (!group.length) {
+ return;
+ }
+
+ min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+ $(group).each(function (i) {
+ $(this).css("zIndex", min + i);
+ });
+ this.css("zIndex", (min + group.length));
+ }
+ });
+
+ $.ui.plugin.add("draggable", "zIndex", {
+ start: function (event, ui, instance) {
+ var t = $(ui.helper),
+ o = instance.options;
+
+ if (t.css("zIndex")) {
+ o._zIndex = t.css("zIndex");
+ }
+ t.css("zIndex", o.zIndex);
+ },
+ stop: function (event, ui, instance) {
+ var o = instance.options;
+
+ if (o._zIndex) {
+ $(ui.helper).css("zIndex", o._zIndex);
+ }
+ }
+ });
+
+ var draggable = $.ui.draggable;
+
+
+ /*!
+ * jQuery UI Droppable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
+
+
+ $.widget("ui.droppable", {
+ version: "1.11.4",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: false,
+ addClasses: true,
+ greedy: false,
+ hoverClass: false,
+ scope: "default",
+ tolerance: "intersect",
+
+ // callbacks
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function () {
+
+ var proportions,
+ o = this.options,
+ accept = o.accept;
+
+ this.isover = false;
+ this.isout = true;
+
+ this.accept = $.isFunction(accept) ? accept : function (d) {
+ return d.is(accept);
+ };
+
+ this.proportions = function (/* valueToWrite */) {
+ if (arguments.length) {
+ // Store the droppable's proportions
+ proportions = arguments[0];
+ } else {
+ // Retrieve or derive the droppable's proportions
+ return proportions ?
+ proportions :
+ proportions = {
+ width: this.element[0].offsetWidth,
+ height: this.element[0].offsetHeight
+ };
+ }
+ };
+
+ this._addToManager(o.scope);
+
+ o.addClasses && this.element.addClass("ui-droppable");
+
+ },
+
+ _addToManager: function (scope) {
+ // Add the reference and positions to the manager
+ $.ui.ddmanager.droppables[scope] = $.ui.ddmanager.droppables[scope] || [];
+ $.ui.ddmanager.droppables[scope].push(this);
+ },
+
+ _splice: function (drop) {
+ var i = 0;
+ for (; i < drop.length; i++) {
+ if (drop[i] === this) {
+ drop.splice(i, 1);
+ }
+ }
+ },
+
+ _destroy: function () {
+ var drop = $.ui.ddmanager.droppables[this.options.scope];
+
+ this._splice(drop);
+
+ this.element.removeClass("ui-droppable ui-droppable-disabled");
+ },
+
+ _setOption: function (key, value) {
+
+ if (key === "accept") {
+ this.accept = $.isFunction(value) ? value : function (d) {
+ return d.is(value);
+ };
+ } else if (key === "scope") {
+ var drop = $.ui.ddmanager.droppables[this.options.scope];
+
+ this._splice(drop);
+ this._addToManager(value);
+ }
+
+ this._super(key, value);
+ },
+
+ _activate: function (event) {
+ var draggable = $.ui.ddmanager.current;
+ if (this.options.activeClass) {
+ this.element.addClass(this.options.activeClass);
+ }
+ if (draggable) {
+ this._trigger("activate", event, this.ui(draggable));
+ }
+ },
+
+ _deactivate: function (event) {
+ var draggable = $.ui.ddmanager.current;
+ if (this.options.activeClass) {
+ this.element.removeClass(this.options.activeClass);
+ }
+ if (draggable) {
+ this._trigger("deactivate", event, this.ui(draggable));
+ }
+ },
+
+ _over: function (event) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || ( draggable.currentItem || draggable.element )[0] === this.element[0]) {
+ return;
+ }
+
+ if (this.accept.call(this.element[0], ( draggable.currentItem || draggable.element ))) {
+ if (this.options.hoverClass) {
+ this.element.addClass(this.options.hoverClass);
+ }
+ this._trigger("over", event, this.ui(draggable));
+ }
+
+ },
+
+ _out: function (event) {
+
+ var draggable = $.ui.ddmanager.current;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || ( draggable.currentItem || draggable.element )[0] === this.element[0]) {
+ return;
+ }
+
+ if (this.accept.call(this.element[0], ( draggable.currentItem || draggable.element ))) {
+ if (this.options.hoverClass) {
+ this.element.removeClass(this.options.hoverClass);
+ }
+ this._trigger("out", event, this.ui(draggable));
+ }
+
+ },
+
+ _drop: function (event, custom) {
+
+ var draggable = custom || $.ui.ddmanager.current,
+ childrenIntersection = false;
+
+ // Bail if draggable and droppable are same element
+ if (!draggable || ( draggable.currentItem || draggable.element )[0] === this.element[0]) {
+ return false;
+ }
+
+ this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function () {
+ var inst = $(this).droppable("instance");
+ if (
+ inst.options.greedy && !inst.options.disabled &&
+ inst.options.scope === draggable.options.scope &&
+ inst.accept.call(inst.element[0], ( draggable.currentItem || draggable.element )) &&
+ $.ui.intersect(draggable, $.extend(inst, {offset: inst.element.offset()}), inst.options.tolerance, event)
+ ) {
+ childrenIntersection = true;
+ return false;
+ }
+ });
+ if (childrenIntersection) {
+ return false;
+ }
+
+ if (this.accept.call(this.element[0], ( draggable.currentItem || draggable.element ))) {
+ if (this.options.activeClass) {
+ this.element.removeClass(this.options.activeClass);
+ }
+ if (this.options.hoverClass) {
+ this.element.removeClass(this.options.hoverClass);
+ }
+ this._trigger("drop", event, this.ui(draggable));
+ return this.element;
+ }
+
+ return false;
+
+ },
+
+ ui: function (c) {
+ return {
+ draggable: ( c.currentItem || c.element ),
+ helper: c.helper,
+ position: c.position,
+ offset: c.positionAbs
+ };
+ }
+
+ });
+
+ $.ui.intersect = (function () {
+ function isOverAxis(x, reference, size) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ }
+
+ return function (draggable, droppable, toleranceMode, event) {
+
+ if (!droppable.offset) {
+ return false;
+ }
+
+ var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+ y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+ x2 = x1 + draggable.helperProportions.width,
+ y2 = y1 + draggable.helperProportions.height,
+ l = droppable.offset.left,
+ t = droppable.offset.top,
+ r = l + droppable.proportions().width,
+ b = t + droppable.proportions().height;
+
+ switch (toleranceMode) {
+ case "fit":
+ return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+ case "intersect":
+ return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+ x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+ t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+ y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+ case "pointer":
+ return isOverAxis(event.pageY, t, droppable.proportions().height) && isOverAxis(event.pageX, l, droppable.proportions().width);
+ case "touch":
+ return (
+ ( y1 >= t && y1 <= b ) || // Top edge touching
+ ( y2 >= t && y2 <= b ) || // Bottom edge touching
+ ( y1 < t && y2 > b ) // Surrounded vertically
+ ) && (
+ ( x1 >= l && x1 <= r ) || // Left edge touching
+ ( x2 >= l && x2 <= r ) || // Right edge touching
+ ( x1 < l && x2 > r ) // Surrounded horizontally
+ );
+ default:
+ return false;
+ }
+ };
+ })();
+
+ /*
+ This manager tracks offsets of draggables and droppables
+ */
+ $.ui.ddmanager = {
+ current: null,
+ droppables: {"default": []},
+ prepareOffsets: function (t, event) {
+
+ var i, j,
+ m = $.ui.ddmanager.droppables[t.options.scope] || [],
+ type = event ? event.type : null, // workaround for #2317
+ list = ( t.currentItem || t.element ).find(":data(ui-droppable)").addBack();
+
+ droppablesLoop: for (i = 0; i < m.length; i++) {
+
+ // No disabled and non-accepted
+ if (m[i].options.disabled || ( t && !m[i].accept.call(m[i].element[0], ( t.currentItem || t.element )) )) {
+ continue;
+ }
+
+ // Filter out elements in the current dragged item
+ for (j = 0; j < list.length; j++) {
+ if (list[j] === m[i].element[0]) {
+ m[i].proportions().height = 0;
+ continue droppablesLoop;
+ }
+ }
+
+ m[i].visible = m[i].element.css("display") !== "none";
+ if (!m[i].visible) {
+ continue;
+ }
+
+ // Activate the droppable if used directly from draggables
+ if (type === "mousedown") {
+ m[i]._activate.call(m[i], event);
+ }
+
+ m[i].offset = m[i].element.offset();
+ m[i].proportions({width: m[i].element[0].offsetWidth, height: m[i].element[0].offsetHeight});
+
+ }
+
+ },
+ drop: function (draggable, event) {
+
+ var dropped = false;
+ // Create a copy of the droppables in case the list changes during the drop (#9116)
+ $.each(( $.ui.ddmanager.droppables[draggable.options.scope] || [] ).slice(), function () {
+
+ if (!this.options) {
+ return;
+ }
+ if (!this.options.disabled && this.visible && $.ui.intersect(draggable, this, this.options.tolerance, event)) {
+ dropped = this._drop.call(this, event) || dropped;
+ }
+
+ if (!this.options.disabled && this.visible && this.accept.call(this.element[0], ( draggable.currentItem || draggable.element ))) {
+ this.isout = true;
+ this.isover = false;
+ this._deactivate.call(this, event);
+ }
+
+ });
+ return dropped;
+
+ },
+ dragStart: function (draggable, event) {
+ // Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+ draggable.element.parentsUntil("body").bind("scroll.droppable", function () {
+ if (!draggable.options.refreshPositions) {
+ $.ui.ddmanager.prepareOffsets(draggable, event);
+ }
+ });
+ },
+ drag: function (draggable, event) {
+
+ // If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+ if (draggable.options.refreshPositions) {
+ $.ui.ddmanager.prepareOffsets(draggable, event);
+ }
+
+ // Run through all droppables and check their positions based on specific tolerance options
+ $.each($.ui.ddmanager.droppables[draggable.options.scope] || [], function () {
+
+ if (this.options.disabled || this.greedyChild || !this.visible) {
+ return;
+ }
+
+ var parentInstance, scope, parent,
+ intersects = $.ui.intersect(draggable, this, this.options.tolerance, event),
+ c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+ if (!c) {
+ return;
+ }
+
+ if (this.options.greedy) {
+ // find droppable parents with same scope
+ scope = this.options.scope;
+ parent = this.element.parents(":data(ui-droppable)").filter(function () {
+ return $(this).droppable("instance").options.scope === scope;
+ });
+
+ if (parent.length) {
+ parentInstance = $(parent[0]).droppable("instance");
+ parentInstance.greedyChild = ( c === "isover" );
+ }
+ }
+
+ // we just moved into a greedy child
+ if (parentInstance && c === "isover") {
+ parentInstance.isover = false;
+ parentInstance.isout = true;
+ parentInstance._out.call(parentInstance, event);
+ }
+
+ this[c] = true;
+ this[c === "isout" ? "isover" : "isout"] = false;
+ this[c === "isover" ? "_over" : "_out"].call(this, event);
+
+ // we just moved out of a greedy child
+ if (parentInstance && c === "isout") {
+ parentInstance.isout = false;
+ parentInstance.isover = true;
+ parentInstance._over.call(parentInstance, event);
+ }
+ });
+
+ },
+ dragStop: function (draggable, event) {
+ draggable.element.parentsUntil("body").unbind("scroll.droppable");
+ // Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+ if (!draggable.options.refreshPositions) {
+ $.ui.ddmanager.prepareOffsets(draggable, event);
+ }
+ }
+ };
+
+ var droppable = $.ui.droppable;
+
+
+ /*!
+ * jQuery UI Resizable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
+
+ $.widget("ui.resizable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: false,
+ animate: false,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: false,
+ autoHide: false,
+ containment: false,
+ ghost: false,
+ grid: false,
+ handles: "e,s,se",
+ helper: false,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ // See #7960
+ zIndex: 90,
+
+ // callbacks
+ resize: null,
+ start: null,
+ stop: null
+ },
+
+ _num: function (value) {
+ return parseInt(value, 10) || 0;
+ },
+
+ _isNumber: function (value) {
+ return !isNaN(parseInt(value, 10));
+ },
+
+ _hasScroll: function (el, a) {
+
+ if ($(el).css("overflow") === "hidden") {
+ return false;
+ }
+
+ var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+ has = false;
+
+ if (el[scroll] > 0) {
+ return true;
+ }
+
+ // TODO: determine which cases actually cause this to happen
+ // if the element doesn't have the scroll set, see if it's possible to
+ // set the scroll
+ el[scroll] = 1;
+ has = ( el[scroll] > 0 );
+ el[scroll] = 0;
+ return has;
+ },
+
+ _create: function () {
+
+ var n, i, handle, axis, hname,
+ that = this,
+ o = this.options;
+ this.element.addClass("ui-resizable");
+
+ $.extend(this, {
+ _aspectRatio: !!(o.aspectRatio),
+ aspectRatio: o.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+ });
+
+ // Wrap the element if it cannot hold child nodes
+ if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+ this.element.wrap(
+ $("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })
+ );
+
+ this.element = this.element.parent().data(
+ "ui-resizable", this.element.resizable("instance")
+ );
+
+ this.elementIsWrapper = true;
+
+ this.element.css({
+ marginLeft: this.originalElement.css("marginLeft"),
+ marginTop: this.originalElement.css("marginTop"),
+ marginRight: this.originalElement.css("marginRight"),
+ marginBottom: this.originalElement.css("marginBottom")
+ });
+ this.originalElement.css({
+ marginLeft: 0,
+ marginTop: 0,
+ marginRight: 0,
+ marginBottom: 0
+ });
+ // support: Safari
+ // Prevent Safari textarea resize
+ this.originalResizeStyle = this.originalElement.css("resize");
+ this.originalElement.css("resize", "none");
+
+ this._proportionallyResizeElements.push(this.originalElement.css({
+ position: "static",
+ zoom: 1,
+ display: "block"
+ }));
+
+ // support: IE9
+ // avoid IE jump (hard set the margin)
+ this.originalElement.css({margin: this.originalElement.css("margin")});
+
+ this._proportionallyResize();
+ }
+
+ this.handles = o.handles ||
+ ( !$(".ui-resizable-handle", this.element).length ?
+ "e,s,se" : {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } );
+
+ this._handles = $();
+ if (this.handles.constructor === String) {
+
+ if (this.handles === "all") {
+ this.handles = "n,e,s,w,se,sw,ne,nw";
+ }
+
+ n = this.handles.split(",");
+ this.handles = {};
+
+ for (i = 0; i < n.length; i++) {
+
+ handle = $.trim(n[i]);
+ hname = "ui-resizable-" + handle;
+ axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+ axis.css({zIndex: o.zIndex});
+
+ // TODO : What's going on here?
+ if ("se" === handle) {
+ axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+ }
+
+ this.handles[handle] = ".ui-resizable-" + handle;
+ this.element.append(axis);
+ }
+
+ }
+
+ this._renderAxis = function (target) {
+
+ var i, axis, padPos, padWrapper;
+
+ target = target || this.element;
+
+ for (i in this.handles) {
+
+ if (this.handles[i].constructor === String) {
+ this.handles[i] = this.element.children(this.handles[i]).first().show();
+ } else if (this.handles[i].jquery || this.handles[i].nodeType) {
+ this.handles[i] = $(this.handles[i]);
+ this._on(this.handles[i], {"mousedown": that._mouseDown});
+ }
+
+ if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+ axis = $(this.handles[i], this.element);
+
+ padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+ padPos = ["padding",
+ /ne|nw|n/.test(i) ? "Top" :
+ /se|sw|s/.test(i) ? "Bottom" :
+ /^e$/.test(i) ? "Right" : "Left"].join("");
+
+ target.css(padPos, padWrapper);
+
+ this._proportionallyResize();
+ }
+
+ this._handles = this._handles.add(this.handles[i]);
+ }
+ };
+
+ // TODO: make renderAxis a prototype function
+ this._renderAxis(this.element);
+
+ this._handles = this._handles.add(this.element.find(".ui-resizable-handle"));
+ this._handles.disableSelection();
+
+ this._handles.mouseover(function () {
+ if (!that.resizing) {
+ if (this.className) {
+ axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+ }
+ that.axis = axis && axis[1] ? axis[1] : "se";
+ }
+ });
+
+ if (o.autoHide) {
+ this._handles.hide();
+ $(this.element)
+ .addClass("ui-resizable-autohide")
+ .mouseenter(function () {
+ if (o.disabled) {
+ return;
+ }
+ $(this).removeClass("ui-resizable-autohide");
+ that._handles.show();
+ })
+ .mouseleave(function () {
+ if (o.disabled) {
+ return;
+ }
+ if (!that.resizing) {
+ $(this).addClass("ui-resizable-autohide");
+ that._handles.hide();
+ }
+ });
+ }
+
+ this._mouseInit();
+ },
+
+ _destroy: function () {
+
+ this._mouseDestroy();
+
+ var wrapper,
+ _destroy = function (exp) {
+ $(exp)
+ .removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+ .removeData("resizable")
+ .removeData("ui-resizable")
+ .unbind(".resizable")
+ .find(".ui-resizable-handle")
+ .remove();
+ };
+
+ // TODO: Unwrap at same DOM position
+ if (this.elementIsWrapper) {
+ _destroy(this.element);
+ wrapper = this.element;
+ this.originalElement.css({
+ position: wrapper.css("position"),
+ width: wrapper.outerWidth(),
+ height: wrapper.outerHeight(),
+ top: wrapper.css("top"),
+ left: wrapper.css("left")
+ }).insertAfter(wrapper);
+ wrapper.remove();
+ }
+
+ this.originalElement.css("resize", this.originalResizeStyle);
+ _destroy(this.originalElement);
+
+ return this;
+ },
+
+ _mouseCapture: function (event) {
+ var i, handle,
+ capture = false;
+
+ for (i in this.handles) {
+ handle = $(this.handles[i])[0];
+ if (handle === event.target || $.contains(handle, event.target)) {
+ capture = true;
+ }
+ }
+
+ return !this.options.disabled && capture;
+ },
+
+ _mouseStart: function (event) {
+
+ var curleft, curtop, cursor,
+ o = this.options,
+ el = this.element;
+
+ this.resizing = true;
+
+ this._renderProxy();
+
+ curleft = this._num(this.helper.css("left"));
+ curtop = this._num(this.helper.css("top"));
+
+ if (o.containment) {
+ curleft += $(o.containment).scrollLeft() || 0;
+ curtop += $(o.containment).scrollTop() || 0;
+ }
+
+ this.offset = this.helper.offset();
+ this.position = {left: curleft, top: curtop};
+
+ this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.originalSize = this._helper ? {
+ width: el.outerWidth(),
+ height: el.outerHeight()
+ } : {
+ width: el.width(),
+ height: el.height()
+ };
+
+ this.sizeDiff = {
+ width: el.outerWidth() - el.width(),
+ height: el.outerHeight() - el.height()
+ };
+
+ this.originalPosition = {left: curleft, top: curtop};
+ this.originalMousePosition = {left: event.pageX, top: event.pageY};
+
+ this.aspectRatio = (typeof o.aspectRatio === "number") ?
+ o.aspectRatio :
+ ((this.originalSize.width / this.originalSize.height) || 1);
+
+ cursor = $(".ui-resizable-" + this.axis).css("cursor");
+ $("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+ el.addClass("ui-resizable-resizing");
+ this._propagate("start", event);
+ return true;
+ },
+
+ _mouseDrag: function (event) {
+
+ var data, props,
+ smp = this.originalMousePosition,
+ a = this.axis,
+ dx = (event.pageX - smp.left) || 0,
+ dy = (event.pageY - smp.top) || 0,
+ trigger = this._change[a];
+
+ this._updatePrevProperties();
+
+ if (!trigger) {
+ return false;
+ }
+
+ data = trigger.apply(this, [event, dx, dy]);
+
+ this._updateVirtualBoundaries(event.shiftKey);
+ if (this._aspectRatio || event.shiftKey) {
+ data = this._updateRatio(data, event);
+ }
+
+ data = this._respectSize(data, event);
+
+ this._updateCache(data);
+
+ this._propagate("resize", event);
+
+ props = this._applyChanges();
+
+ if (!this._helper && this._proportionallyResizeElements.length) {
+ this._proportionallyResize();
+ }
+
+ if (!$.isEmptyObject(props)) {
+ this._updatePrevProperties();
+ this._trigger("resize", event, this.ui());
+ this._applyChanges();
+ }
+
+ return false;
+ },
+
+ _mouseStop: function (event) {
+
+ this.resizing = false;
+ var pr, ista, soffseth, soffsetw, s, left, top,
+ o = this.options, that = this;
+
+ if (this._helper) {
+
+ pr = this._proportionallyResizeElements;
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+ soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+ soffsetw = ista ? 0 : that.sizeDiff.width;
+
+ s = {
+ width: (that.helper.width() - soffsetw),
+ height: (that.helper.height() - soffseth)
+ };
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null;
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ if (!o.animate) {
+ this.element.css($.extend(s, {top: top, left: left}));
+ }
+
+ that.helper.height(that.size.height);
+ that.helper.width(that.size.width);
+
+ if (this._helper && !o.animate) {
+ this._proportionallyResize();
+ }
+ }
+
+ $("body").css("cursor", "auto");
+
+ this.element.removeClass("ui-resizable-resizing");
+
+ this._propagate("stop", event);
+
+ if (this._helper) {
+ this.helper.remove();
+ }
+
+ return false;
+
+ },
+
+ _updatePrevProperties: function () {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ };
+ this.prevSize = {
+ width: this.size.width,
+ height: this.size.height
+ };
+ },
+
+ _applyChanges: function () {
+ var props = {};
+
+ if (this.position.top !== this.prevPosition.top) {
+ props.top = this.position.top + "px";
+ }
+ if (this.position.left !== this.prevPosition.left) {
+ props.left = this.position.left + "px";
+ }
+ if (this.size.width !== this.prevSize.width) {
+ props.width = this.size.width + "px";
+ }
+ if (this.size.height !== this.prevSize.height) {
+ props.height = this.size.height + "px";
+ }
+
+ this.helper.css(props);
+
+ return props;
+ },
+
+ _updateVirtualBoundaries: function (forceAspectRatio) {
+ var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+ o = this.options;
+
+ b = {
+ minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+ minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+ };
+
+ if (this._aspectRatio || forceAspectRatio) {
+ pMinWidth = b.minHeight * this.aspectRatio;
+ pMinHeight = b.minWidth / this.aspectRatio;
+ pMaxWidth = b.maxHeight * this.aspectRatio;
+ pMaxHeight = b.maxWidth / this.aspectRatio;
+
+ if (pMinWidth > b.minWidth) {
+ b.minWidth = pMinWidth;
+ }
+ if (pMinHeight > b.minHeight) {
+ b.minHeight = pMinHeight;
+ }
+ if (pMaxWidth < b.maxWidth) {
+ b.maxWidth = pMaxWidth;
+ }
+ if (pMaxHeight < b.maxHeight) {
+ b.maxHeight = pMaxHeight;
+ }
+ }
+ this._vBoundaries = b;
+ },
+
+ _updateCache: function (data) {
+ this.offset = this.helper.offset();
+ if (this._isNumber(data.left)) {
+ this.position.left = data.left;
+ }
+ if (this._isNumber(data.top)) {
+ this.position.top = data.top;
+ }
+ if (this._isNumber(data.height)) {
+ this.size.height = data.height;
+ }
+ if (this._isNumber(data.width)) {
+ this.size.width = data.width;
+ }
+ },
+
+ _updateRatio: function (data) {
+
+ var cpos = this.position,
+ csize = this.size,
+ a = this.axis;
+
+ if (this._isNumber(data.height)) {
+ data.width = (data.height * this.aspectRatio);
+ } else if (this._isNumber(data.width)) {
+ data.height = (data.width / this.aspectRatio);
+ }
+
+ if (a === "sw") {
+ data.left = cpos.left + (csize.width - data.width);
+ data.top = null;
+ }
+ if (a === "nw") {
+ data.top = cpos.top + (csize.height - data.height);
+ data.left = cpos.left + (csize.width - data.width);
+ }
+
+ return data;
+ },
+
+ _respectSize: function (data) {
+
+ var o = this._vBoundaries,
+ a = this.axis,
+ ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+ ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+ isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+ isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+ dw = this.originalPosition.left + this.originalSize.width,
+ dh = this.position.top + this.size.height,
+ cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+ if (isminw) {
+ data.width = o.minWidth;
+ }
+ if (isminh) {
+ data.height = o.minHeight;
+ }
+ if (ismaxw) {
+ data.width = o.maxWidth;
+ }
+ if (ismaxh) {
+ data.height = o.maxHeight;
+ }
+
+ if (isminw && cw) {
+ data.left = dw - o.minWidth;
+ }
+ if (ismaxw && cw) {
+ data.left = dw - o.maxWidth;
+ }
+ if (isminh && ch) {
+ data.top = dh - o.minHeight;
+ }
+ if (ismaxh && ch) {
+ data.top = dh - o.maxHeight;
+ }
+
+ // Fixing jump error on top/left - bug #2330
+ if (!data.width && !data.height && !data.left && data.top) {
+ data.top = null;
+ } else if (!data.width && !data.height && !data.top && data.left) {
+ data.left = null;
+ }
+
+ return data;
+ },
+
+ _getPaddingPlusBorderDimensions: function (element) {
+ var i = 0,
+ widths = [],
+ borders = [
+ element.css("borderTopWidth"),
+ element.css("borderRightWidth"),
+ element.css("borderBottomWidth"),
+ element.css("borderLeftWidth")
+ ],
+ paddings = [
+ element.css("paddingTop"),
+ element.css("paddingRight"),
+ element.css("paddingBottom"),
+ element.css("paddingLeft")
+ ];
+
+ for (; i < 4; i++) {
+ widths[i] = ( parseInt(borders[i], 10) || 0 );
+ widths[i] += ( parseInt(paddings[i], 10) || 0 );
+ }
+
+ return {
+ height: widths[0] + widths[2],
+ width: widths[1] + widths[3]
+ };
+ },
+
+ _proportionallyResize: function () {
+
+ if (!this._proportionallyResizeElements.length) {
+ return;
+ }
+
+ var prel,
+ i = 0,
+ element = this.helper || this.element;
+
+ for (; i < this._proportionallyResizeElements.length; i++) {
+
+ prel = this._proportionallyResizeElements[i];
+
+ // TODO: Seems like a bug to cache this.outerDimensions
+ // considering that we are in a loop.
+ if (!this.outerDimensions) {
+ this.outerDimensions = this._getPaddingPlusBorderDimensions(prel);
+ }
+
+ prel.css({
+ height: (element.height() - this.outerDimensions.height) || 0,
+ width: (element.width() - this.outerDimensions.width) || 0
+ });
+
+ }
+
+ },
+
+ _renderProxy: function () {
+
+ var el = this.element, o = this.options;
+ this.elementOffset = el.offset();
+
+ if (this._helper) {
+
+ this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+ this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++o.zIndex //TODO: Don't modify option
+ });
+
+ this.helper
+ .appendTo("body")
+ .disableSelection();
+
+ } else {
+ this.helper = this.element;
+ }
+
+ },
+
+ _change: {
+ e: function (event, dx) {
+ return {width: this.originalSize.width + dx};
+ },
+ w: function (event, dx) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return {left: sp.left + dx, width: cs.width - dx};
+ },
+ n: function (event, dx, dy) {
+ var cs = this.originalSize, sp = this.originalPosition;
+ return {top: sp.top + dy, height: cs.height - dy};
+ },
+ s: function (event, dx, dy) {
+ return {height: this.originalSize.height + dy};
+ },
+ se: function (event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.e.apply(this, [event, dx, dy]));
+ },
+ sw: function (event, dx, dy) {
+ return $.extend(this._change.s.apply(this, arguments),
+ this._change.w.apply(this, [event, dx, dy]));
+ },
+ ne: function (event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.e.apply(this, [event, dx, dy]));
+ },
+ nw: function (event, dx, dy) {
+ return $.extend(this._change.n.apply(this, arguments),
+ this._change.w.apply(this, [event, dx, dy]));
+ }
+ },
+
+ _propagate: function (n, event) {
+ $.ui.plugin.call(this, n, [event, this.ui()]);
+ (n !== "resize" && this._trigger(n, event, this.ui()));
+ },
+
+ plugins: {},
+
+ ui: function () {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ };
+ }
+
+ });
+
+ /*
+ * Resizable Extensions
+ */
+
+ $.ui.plugin.add("resizable", "animate", {
+
+ stop: function (event) {
+ var that = $(this).resizable("instance"),
+ o = that.options,
+ pr = that._proportionallyResizeElements,
+ ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+ soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+ soffsetw = ista ? 0 : that.sizeDiff.width,
+ style = {width: (that.size.width - soffsetw), height: (that.size.height - soffseth)},
+ left = (parseInt(that.element.css("left"), 10) +
+ (that.position.left - that.originalPosition.left)) || null,
+ top = (parseInt(that.element.css("top"), 10) +
+ (that.position.top - that.originalPosition.top)) || null;
+
+ that.element.animate(
+ $.extend(style, top && left ? {top: top, left: left} : {}), {
+ duration: o.animateDuration,
+ easing: o.animateEasing,
+ step: function () {
+
+ var data = {
+ width: parseInt(that.element.css("width"), 10),
+ height: parseInt(that.element.css("height"), 10),
+ top: parseInt(that.element.css("top"), 10),
+ left: parseInt(that.element.css("left"), 10)
+ };
+
+ if (pr && pr.length) {
+ $(pr[0]).css({width: data.width, height: data.height});
+ }
+
+ // propagating resize, and updating values for each animation step
+ that._updateCache(data);
+ that._propagate("resize", event);
+
+ }
+ }
+ );
+ }
+
+ });
+
+ $.ui.plugin.add("resizable", "containment", {
+
+ start: function () {
+ var element, p, co, ch, cw, width, height,
+ that = $(this).resizable("instance"),
+ o = that.options,
+ el = that.element,
+ oc = o.containment,
+ ce = ( oc instanceof $ ) ? oc.get(0) : ( /parent/.test(oc) ) ? el.parent().get(0) : oc;
+
+ if (!ce) {
+ return;
+ }
+
+ that.containerElement = $(ce);
+
+ if (/document/.test(oc) || oc === document) {
+ that.containerOffset = {
+ left: 0,
+ top: 0
+ };
+ that.containerPosition = {
+ left: 0,
+ top: 0
+ };
+
+ that.parentData = {
+ element: $(document),
+ left: 0,
+ top: 0,
+ width: $(document).width(),
+ height: $(document).height() || document.body.parentNode.scrollHeight
+ };
+ } else {
+ element = $(ce);
+ p = [];
+ $(["Top", "Right", "Left", "Bottom"]).each(function (i, name) {
+ p[i] = that._num(element.css("padding" + name));
+ });
+
+ that.containerOffset = element.offset();
+ that.containerPosition = element.position();
+ that.containerSize = {
+ height: ( element.innerHeight() - p[3] ),
+ width: ( element.innerWidth() - p[1] )
+ };
+
+ co = that.containerOffset;
+ ch = that.containerSize.height;
+ cw = that.containerSize.width;
+ width = ( that._hasScroll(ce, "left") ? ce.scrollWidth : cw );
+ height = ( that._hasScroll(ce) ? ce.scrollHeight : ch );
+
+ that.parentData = {
+ element: ce,
+ left: co.left,
+ top: co.top,
+ width: width,
+ height: height
+ };
+ }
+ },
+
+ resize: function (event) {
+ var woset, hoset, isParent, isOffsetRelative,
+ that = $(this).resizable("instance"),
+ o = that.options,
+ co = that.containerOffset,
+ cp = that.position,
+ pRatio = that._aspectRatio || event.shiftKey,
+ cop = {
+ top: 0,
+ left: 0
+ },
+ ce = that.containerElement,
+ continueResize = true;
+
+ if (ce[0] !== document && ( /static/ ).test(ce.css("position"))) {
+ cop = co;
+ }
+
+ if (cp.left < ( that._helper ? co.left : 0 )) {
+ that.size.width = that.size.width +
+ ( that._helper ?
+ ( that.position.left - co.left ) :
+ ( that.position.left - cop.left ) );
+
+ if (pRatio) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.left = o.helper ? co.left : 0;
+ }
+
+ if (cp.top < ( that._helper ? co.top : 0 )) {
+ that.size.height = that.size.height +
+ ( that._helper ?
+ ( that.position.top - co.top ) :
+ that.position.top );
+
+ if (pRatio) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ that.position.top = that._helper ? co.top : 0;
+ }
+
+ isParent = that.containerElement.get(0) === that.element.parent().get(0);
+ isOffsetRelative = /relative|absolute/.test(that.containerElement.css("position"));
+
+ if (isParent && isOffsetRelative) {
+ that.offset.left = that.parentData.left + that.position.left;
+ that.offset.top = that.parentData.top + that.position.top;
+ } else {
+ that.offset.left = that.element.offset().left;
+ that.offset.top = that.element.offset().top;
+ }
+
+ woset = Math.abs(that.sizeDiff.width +
+ (that._helper ?
+ that.offset.left - cop.left :
+ (that.offset.left - co.left)));
+
+ hoset = Math.abs(that.sizeDiff.height +
+ (that._helper ?
+ that.offset.top - cop.top :
+ (that.offset.top - co.top)));
+
+ if (woset + that.size.width >= that.parentData.width) {
+ that.size.width = that.parentData.width - woset;
+ if (pRatio) {
+ that.size.height = that.size.width / that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if (hoset + that.size.height >= that.parentData.height) {
+ that.size.height = that.parentData.height - hoset;
+ if (pRatio) {
+ that.size.width = that.size.height * that.aspectRatio;
+ continueResize = false;
+ }
+ }
+
+ if (!continueResize) {
+ that.position.left = that.prevPosition.left;
+ that.position.top = that.prevPosition.top;
+ that.size.width = that.prevSize.width;
+ that.size.height = that.prevSize.height;
+ }
+ },
+
+ stop: function () {
+ var that = $(this).resizable("instance"),
+ o = that.options,
+ co = that.containerOffset,
+ cop = that.containerPosition,
+ ce = that.containerElement,
+ helper = $(that.helper),
+ ho = helper.offset(),
+ w = helper.outerWidth() - that.sizeDiff.width,
+ h = helper.outerHeight() - that.sizeDiff.height;
+
+ if (that._helper && !o.animate && ( /relative/ ).test(ce.css("position"))) {
+ $(this).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+
+ if (that._helper && !o.animate && ( /static/ ).test(ce.css("position"))) {
+ $(this).css({
+ left: ho.left - cop.left - co.left,
+ width: w,
+ height: h
+ });
+ }
+ }
+ });
+
+ $.ui.plugin.add("resizable", "alsoResize", {
+
+ start: function () {
+ var that = $(this).resizable("instance"),
+ o = that.options;
+
+ $(o.alsoResize).each(function () {
+ var el = $(this);
+ el.data("ui-resizable-alsoresize", {
+ width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+ left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+ });
+ });
+ },
+
+ resize: function (event, ui) {
+ var that = $(this).resizable("instance"),
+ o = that.options,
+ os = that.originalSize,
+ op = that.originalPosition,
+ delta = {
+ height: (that.size.height - os.height) || 0,
+ width: (that.size.width - os.width) || 0,
+ top: (that.position.top - op.top) || 0,
+ left: (that.position.left - op.left) || 0
+ };
+
+ $(o.alsoResize).each(function () {
+ var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+ css = el.parents(ui.originalElement[0]).length ?
+ ["width", "height"] :
+ ["width", "height", "top", "left"];
+
+ $.each(css, function (i, prop) {
+ var sum = (start[prop] || 0) + (delta[prop] || 0);
+ if (sum && sum >= 0) {
+ style[prop] = sum || null;
+ }
+ });
+
+ el.css(style);
+ });
+ },
+
+ stop: function () {
+ $(this).removeData("resizable-alsoresize");
+ }
+ });
+
+ $.ui.plugin.add("resizable", "ghost", {
+
+ start: function () {
+
+ var that = $(this).resizable("instance"), o = that.options, cs = that.size;
+
+ that.ghost = that.originalElement.clone();
+ that.ghost
+ .css({
+ opacity: 0.25,
+ display: "block",
+ position: "relative",
+ height: cs.height,
+ width: cs.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ })
+ .addClass("ui-resizable-ghost")
+ .addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+ that.ghost.appendTo(that.helper);
+
+ },
+
+ resize: function () {
+ var that = $(this).resizable("instance");
+ if (that.ghost) {
+ that.ghost.css({
+ position: "relative",
+ height: that.size.height,
+ width: that.size.width
+ });
+ }
+ },
+
+ stop: function () {
+ var that = $(this).resizable("instance");
+ if (that.ghost && that.helper) {
+ that.helper.get(0).removeChild(that.ghost.get(0));
+ }
+ }
+
+ });
+
+ $.ui.plugin.add("resizable", "grid", {
+
+ resize: function () {
+ var outerDimensions,
+ that = $(this).resizable("instance"),
+ o = that.options,
+ cs = that.size,
+ os = that.originalSize,
+ op = that.originalPosition,
+ a = that.axis,
+ grid = typeof o.grid === "number" ? [o.grid, o.grid] : o.grid,
+ gridX = (grid[0] || 1),
+ gridY = (grid[1] || 1),
+ ox = Math.round((cs.width - os.width) / gridX) * gridX,
+ oy = Math.round((cs.height - os.height) / gridY) * gridY,
+ newWidth = os.width + ox,
+ newHeight = os.height + oy,
+ isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+ isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+ isMinWidth = o.minWidth && (o.minWidth > newWidth),
+ isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+ o.grid = grid;
+
+ if (isMinWidth) {
+ newWidth += gridX;
+ }
+ if (isMinHeight) {
+ newHeight += gridY;
+ }
+ if (isMaxWidth) {
+ newWidth -= gridX;
+ }
+ if (isMaxHeight) {
+ newHeight -= gridY;
+ }
+
+ if (/^(se|s|e)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ } else if (/^(ne)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else if (/^(sw)$/.test(a)) {
+ that.size.width = newWidth;
+ that.size.height = newHeight;
+ that.position.left = op.left - ox;
+ } else {
+ if (newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+ outerDimensions = that._getPaddingPlusBorderDimensions(this);
+ }
+
+ if (newHeight - gridY > 0) {
+ that.size.height = newHeight;
+ that.position.top = op.top - oy;
+ } else {
+ newHeight = gridY - outerDimensions.height;
+ that.size.height = newHeight;
+ that.position.top = op.top + os.height - newHeight;
+ }
+ if (newWidth - gridX > 0) {
+ that.size.width = newWidth;
+ that.position.left = op.left - ox;
+ } else {
+ newWidth = gridX - outerDimensions.width;
+ that.size.width = newWidth;
+ that.position.left = op.left + os.width - newWidth;
+ }
+ }
+ }
+
+ });
+
+ var resizable = $.ui.resizable;
+
+
+ /*!
+ * jQuery UI Selectable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+ var selectable = $.widget("ui.selectable", $.ui.mouse, {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoRefresh: true,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+
+ // callbacks
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function () {
+ var selectees,
+ that = this;
+
+ this.element.addClass("ui-selectable");
+
+ this.dragged = false;
+
+ // cache selectee children based on filter
+ this.refresh = function () {
+ selectees = $(that.options.filter, that.element[0]);
+ selectees.addClass("ui-selectee");
+ selectees.each(function () {
+ var $this = $(this),
+ pos = $this.offset();
+ $.data(this, "selectable-item", {
+ element: this,
+ $element: $this,
+ left: pos.left,
+ top: pos.top,
+ right: pos.left + $this.outerWidth(),
+ bottom: pos.top + $this.outerHeight(),
+ startselected: false,
+ selected: $this.hasClass("ui-selected"),
+ selecting: $this.hasClass("ui-selecting"),
+ unselecting: $this.hasClass("ui-unselecting")
+ });
+ });
+ };
+ this.refresh();
+
+ this.selectees = selectees.addClass("ui-selectee");
+
+ this._mouseInit();
+
+ this.helper = $("<div class='ui-selectable-helper'></div>");
+ },
+
+ _destroy: function () {
+ this.selectees
+ .removeClass("ui-selectee")
+ .removeData("selectable-item");
+ this.element
+ .removeClass("ui-selectable ui-selectable-disabled");
+ this._mouseDestroy();
+ },
+
+ _mouseStart: function (event) {
+ var that = this,
+ options = this.options;
+
+ this.opos = [event.pageX, event.pageY];
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ this.selectees = $(options.filter, this.element[0]);
+
+ this._trigger("start", event);
+
+ $(options.appendTo).append(this.helper);
+ // position helper (lasso)
+ this.helper.css({
+ "left": event.pageX,
+ "top": event.pageY,
+ "width": 0,
+ "height": 0
+ });
+
+ if (options.autoRefresh) {
+ this.refresh();
+ }
+
+ this.selectees.filter(".ui-selected").each(function () {
+ var selectee = $.data(this, "selectable-item");
+ selectee.startselected = true;
+ if (!event.metaKey && !event.ctrlKey) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ });
+
+ $(event.target).parents().addBack().each(function () {
+ var doSelect,
+ selectee = $.data(this, "selectable-item");
+ if (selectee) {
+ doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+ selectee.$element
+ .removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+ .addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+ selectee.unselecting = !doSelect;
+ selectee.selecting = doSelect;
+ selectee.selected = doSelect;
+ // selectable (UN)SELECTING callback
+ if (doSelect) {
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ } else {
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ return false;
+ }
+ });
+
+ },
+
+ _mouseDrag: function (event) {
+
+ this.dragged = true;
+
+ if (this.options.disabled) {
+ return;
+ }
+
+ var tmp,
+ that = this,
+ options = this.options,
+ x1 = this.opos[0],
+ y1 = this.opos[1],
+ x2 = event.pageX,
+ y2 = event.pageY;
+
+ if (x1 > x2) {
+ tmp = x2;
+ x2 = x1;
+ x1 = tmp;
+ }
+ if (y1 > y2) {
+ tmp = y2;
+ y2 = y1;
+ y1 = tmp;
+ }
+ this.helper.css({left: x1, top: y1, width: x2 - x1, height: y2 - y1});
+
+ this.selectees.each(function () {
+ var selectee = $.data(this, "selectable-item"),
+ hit = false;
+
+ //prevent helper from being selected if appendTo: selectable
+ if (!selectee || selectee.element === that.element[0]) {
+ return;
+ }
+
+ if (options.tolerance === "touch") {
+ hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+ } else if (options.tolerance === "fit") {
+ hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+ }
+
+ if (hit) {
+ // SELECT
+ if (selectee.selected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+ }
+ if (selectee.unselecting) {
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ }
+ if (!selectee.selecting) {
+ selectee.$element.addClass("ui-selecting");
+ selectee.selecting = true;
+ // selectable SELECTING callback
+ that._trigger("selecting", event, {
+ selecting: selectee.element
+ });
+ }
+ } else {
+ // UNSELECT
+ if (selectee.selecting) {
+ if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ selectee.$element.addClass("ui-selected");
+ selectee.selected = true;
+ } else {
+ selectee.$element.removeClass("ui-selecting");
+ selectee.selecting = false;
+ if (selectee.startselected) {
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ }
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ if (selectee.selected) {
+ if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+ selectee.$element.removeClass("ui-selected");
+ selectee.selected = false;
+
+ selectee.$element.addClass("ui-unselecting");
+ selectee.unselecting = true;
+ // selectable UNSELECTING callback
+ that._trigger("unselecting", event, {
+ unselecting: selectee.element
+ });
+ }
+ }
+ }
+ });
+
+ return false;
+ },
+
+ _mouseStop: function (event) {
+ var that = this;
+
+ this.dragged = false;
+
+ $(".ui-unselecting", this.element[0]).each(function () {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-unselecting");
+ selectee.unselecting = false;
+ selectee.startselected = false;
+ that._trigger("unselected", event, {
+ unselected: selectee.element
+ });
+ });
+ $(".ui-selecting", this.element[0]).each(function () {
+ var selectee = $.data(this, "selectable-item");
+ selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+ selectee.selecting = false;
+ selectee.selected = true;
+ selectee.startselected = true;
+ that._trigger("selected", event, {
+ selected: selectee.element
+ });
+ });
+ this._trigger("stop", event);
+
+ this.helper.remove();
+
+ return false;
+ }
+
+ });
+
+
+ /*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+ var sortable = $.widget("ui.sortable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function (x, reference, size) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function (item) {
+ return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+ },
+
+ _create: function () {
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function (key, value) {
+ this._super(key, value);
+
+ if (key === "handle") {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function () {
+ this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle");
+ $.each(this.items, function () {
+ ( this.instance.options.handle ?
+ this.item.find(this.instance.options.handle) : this.item )
+ .addClass("ui-sortable-handle");
+ });
+ },
+
+ _destroy: function () {
+ this.element
+ .removeClass("ui-sortable ui-sortable-disabled")
+ .find(".ui-sortable-handle")
+ .removeClass("ui-sortable-handle");
+ this._mouseDestroy();
+
+ for (var i = this.items.length - 1; i >= 0; i--) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function (event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if (this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function () {
+ if ($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if ($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if (!currentItem) {
+ return false;
+ }
+ if (this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function () {
+ if (this === event.target) {
+ validHandle = true;
+ }
+ });
+ if (!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function (event, overrideHandle, noActivation) {
+
+ var i, body,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = {prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0]};
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if (this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if (o.containment) {
+ this._setContainment();
+ }
+
+ if (o.cursor && o.cursor !== "auto") { // cursor option
+ body = this.document.find("body");
+
+ // support: IE
+ this.storedCursor = body.css("cursor");
+ body.css("cursor", o.cursor);
+
+ this.storedStylesheet = $("<style>*{ cursor: " + o.cursor + " !important; }</style>").appendTo(body);
+ }
+
+ if (o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if (o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if (this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if (!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if (!noActivation) {
+ for (i = this.containers.length - 1; i >= 0; i--) {
+ this.containers[i]._trigger("activate", event, this._uiHash(this));
+ }
+ }
+
+ //Prepare possible droppables
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function (event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if (this.options.scroll) {
+ if (this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+ if ((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if (event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if ((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if (event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if (event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+ } else if (this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+ }
+
+ if (event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+ } else if (this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if (!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left + "px";
+ }
+ if (!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top + "px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items from other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this, moving items in "sub-sortables" can cause
+ // the placeholder to jitter between the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement && !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if ($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function (event, noPropagation) {
+
+ if (!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if (this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset(),
+ axis = this.options.axis,
+ animation = {};
+
+ if (!axis || axis === "x") {
+ animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+ }
+ if (!axis || axis === "y") {
+ animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+ }
+ this.reverting = true;
+ $(this.helper).animate(animation, parseInt(this.options.revert, 10) || 500, function () {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function () {
+
+ if (this.dragging) {
+
+ this._mouseUp({target: null});
+
+ if (this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--) {
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if (this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if (this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if (this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if (this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function (o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function () {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1] + "[]") + "=" + (o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if (!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function (o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function () {
+ ret.push($(o.item || this).attr(o.attribute || "id") || "");
+ });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function (item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+ isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+ isOverElement = isOverElementHeight && isOverElementWidth;
+
+ if (this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function (item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function (item) {
+
+ var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height / 2), item.height),
+ isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width / 2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function () {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function () {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function (event) {
+ this._refreshItems(event);
+ this._setHandleClassName();
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function () {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function (connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if (connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--) {
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--) {
+ inst = $.data(cur[j], this.widgetFullName);
+ if (inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
+ options: this.options,
+ item: this.currentItem
+ }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ function addItems() {
+ items.push(this);
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ queries[i][0].each(addItems);
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function () {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j = 0; j < list.length; j++) {
+ if (list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function (event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, {item: this.currentItem}) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if (connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--) {
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--) {
+ inst = $.data(cur[j], this.widgetFullName);
+ if (inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, {item: this.currentItem}) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j = 0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function (fast) {
+
+ // Determine whether items are being displayed horizontally
+ this.floating = this.items.length ?
+ this.options.axis === "x" || this._isFloating(this.items[0].item) :
+ false;
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if (this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--) {
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if (item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if (this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--) {
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function (that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if (!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function () {
+
+ var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+ element = $("<" + nodeName + ">", that.document[0])
+ .addClass(className || that.currentItem[0].className + " ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper");
+
+ if (nodeName === "tbody") {
+ that._createTrPlaceholder(
+ that.currentItem.find("tr").eq(0),
+ $("<tr>", that.document[0]).appendTo(element)
+ );
+ } else if (nodeName === "tr") {
+ that._createTrPlaceholder(that.currentItem, element);
+ } else if (nodeName === "img") {
+ element.attr("src", that.currentItem.attr("src"));
+ }
+
+ if (!className) {
+ element.css("visibility", "hidden");
+ }
+
+ return element;
+ },
+ update: function (container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if (className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if (!p.height()) {
+ p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop") || 0, 10) - parseInt(that.currentItem.css("paddingBottom") || 0, 10));
+ }
+ if (!p.width()) {
+ p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft") || 0, 10) - parseInt(that.currentItem.css("paddingRight") || 0, 10));
+ }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _createTrPlaceholder: function (sourceTr, targetTr) {
+ var that = this;
+
+ sourceTr.children().each(function () {
+ $("<td>&#160;</td>", that.document[0])
+ .attr("colspan", $(this).attr("colspan") || 1)
+ .appendTo(targetTr);
+ });
+ },
+
+ _contactContainers: function (event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if ($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if (this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if (innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if (this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if (!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if (this.containers.length === 1) {
+ if (!this.containers[innermostIndex].containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ floating = innermostContainer.floating || this._isFloating(this.currentItem);
+ posProperty = floating ? "left" : "top";
+ sizeProperty = floating ? "width" : "height";
+ axis = floating ? "clientX" : "clientY";
+
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if (!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if (this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if (event[axis] - cur > this.items[j][sizeProperty] / 2) {
+ nearBottom = true;
+ }
+
+ if (Math.abs(event[axis] - cur) < dist) {
+ dist = Math.abs(event[axis] - cur);
+ itemWithLeastDistance = this.items[j];
+ this.direction = nearBottom ? "up" : "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if (!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ if (this.currentContainer === this.containers[innermostIndex]) {
+ if (!this.currentContainer.containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash());
+ this.currentContainer.containerCache.over = 1;
+ }
+ return;
+ }
+
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+ this.currentContainer = this.containers[innermostIndex];
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function (event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if (!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if (helper[0] === this.currentItem[0]) {
+ this._storedCSS = {
+ width: this.currentItem[0].style.width,
+ height: this.currentItem[0].style.height,
+ position: this.currentItem.css("position"),
+ top: this.currentItem.css("top"),
+ left: this.currentItem.css("left")
+ };
+ }
+
+ if (!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if (!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function (obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function () {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if (this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if (this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = {top: 0, left: 0};
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function () {
+
+ if (this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return {top: 0, left: 0};
+ }
+
+ },
+
+ _cacheMargins: function () {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"), 10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"), 10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function () {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function () {
+
+ var ce, co, over,
+ o = this.options;
+ if (o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if (o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if (!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"), 10) || 0) + (parseInt($(ce).css("paddingLeft"), 10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"), 10) || 0) + (parseInt($(ce).css("paddingTop"), 10) || 0) - this.margins.top,
+ co.left + (over ? Math.max(ce.scrollWidth, ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"), 10) || 0) - (parseInt($(ce).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top + (over ? Math.max(ce.scrollHeight, ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"), 10) || 0) - (parseInt($(ce).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function (d, pos) {
+
+ if (!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function (event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if (this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if (this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if (this.containment) {
+ if (event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if (event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if (event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if (o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function (event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function () {
+ if (counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function (event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if (!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if (this.helper[0] === this.currentItem[0]) {
+ for (i in this._storedCSS) {
+ if (this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if (this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function (event) {
+ this._trigger("receive", event, this._uiHash(this.fromOutside));
+ });
+ }
+ if ((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function (event) {
+ this._trigger("update", event, this._uiHash());
+ }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if (!noPropagation) {
+ delayedTriggers.push(function (event) {
+ this._trigger("remove", event, this._uiHash());
+ });
+ delayedTriggers.push((function (c) {
+ return function (event) {
+ c._trigger("receive", event, this._uiHash(this));
+ };
+ }).call(this, this.currentContainer));
+ delayedTriggers.push((function (c) {
+ return function (event) {
+ c._trigger("update", event, this._uiHash(this));
+ };
+ }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ function delayEvent(type, instance, container) {
+ return function (event) {
+ container._trigger(type, event, instance._uiHash(instance));
+ };
+ }
+
+ for (i = this.containers.length - 1; i >= 0; i--) {
+ if (!noPropagation) {
+ delayedTriggers.push(delayEvent("deactivate", this, this.containers[i]));
+ }
+ if (this.containers[i].containerCache.over) {
+ delayedTriggers.push(delayEvent("out", this, this.containers[i]));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if (this.storedCursor) {
+ this.document.find("body").css("cursor", this.storedCursor);
+ this.storedStylesheet.remove();
+ }
+ if (this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if (this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+
+ if (!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if (!this.cancelHelperRemoval) {
+ if (this.helper[0] !== this.currentItem[0]) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ }
+
+ if (!noPropagation) {
+ for (i = 0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return !this.cancelHelperRemoval;
+
+ },
+
+ _trigger: function () {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function (_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+ });
+
+
+ /*!
+ * jQuery UI Accordion 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
+
+
+ var accordion = $.widget("ui.accordion", {
+ version: "1.11.4",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: false,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {
+ activeHeader: "ui-icon-triangle-1-s",
+ header: "ui-icon-triangle-1-e"
+ },
+
+ // callbacks
+ activate: null,
+ beforeActivate: null
+ },
+
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+
+ _create: function () {
+ var options = this.options;
+ this.prevShow = this.prevHide = $();
+ this.element.addClass("ui-accordion ui-widget ui-helper-reset")
+ // ARIA
+ .attr("role", "tablist");
+
+ // don't allow collapsible: false and active: false / null
+ if (!options.collapsible && (options.active === false || options.active == null)) {
+ options.active = 0;
+ }
+
+ this._processPanels();
+ // handle negative values
+ if (options.active < 0) {
+ options.active += this.headers.length;
+ }
+ this._refresh();
+ },
+
+ _getCreateEventData: function () {
+ return {
+ header: this.active,
+ panel: !this.active.length ? $() : this.active.next()
+ };
+ },
+
+ _createIcons: function () {
+ var icons = this.options.icons;
+ if (icons) {
+ $("<span>")
+ .addClass("ui-accordion-header-icon ui-icon " + icons.header)
+ .prependTo(this.headers);
+ this.active.children(".ui-accordion-header-icon")
+ .removeClass(icons.header)
+ .addClass(icons.activeHeader);
+ this.headers.addClass("ui-accordion-icons");
+ }
+ },
+
+ _destroyIcons: function () {
+ this.headers
+ .removeClass("ui-accordion-icons")
+ .children(".ui-accordion-header-icon")
+ .remove();
+ },
+
+ _destroy: function () {
+ var contents;
+
+ // clean up main element
+ this.element
+ .removeClass("ui-accordion ui-widget ui-helper-reset")
+ .removeAttr("role");
+
+ // clean up headers
+ this.headers
+ .removeClass("ui-accordion-header ui-accordion-header-active ui-state-default " +
+ "ui-corner-all ui-state-active ui-state-disabled ui-corner-top")
+ .removeAttr("role")
+ .removeAttr("aria-expanded")
+ .removeAttr("aria-selected")
+ .removeAttr("aria-controls")
+ .removeAttr("tabIndex")
+ .removeUniqueId();
+
+ this._destroyIcons();
+
+ // clean up content panels
+ contents = this.headers.next()
+ .removeClass("ui-helper-reset ui-widget-content ui-corner-bottom " +
+ "ui-accordion-content ui-accordion-content-active ui-state-disabled")
+ .css("display", "")
+ .removeAttr("role")
+ .removeAttr("aria-hidden")
+ .removeAttr("aria-labelledby")
+ .removeUniqueId();
+
+ if (this.options.heightStyle !== "content") {
+ contents.css("height", "");
+ }
+ },
+
+ _setOption: function (key, value) {
+ if (key === "active") {
+ // _activate() will handle invalid values and update this.options
+ this._activate(value);
+ return;
+ }
+
+ if (key === "event") {
+ if (this.options.event) {
+ this._off(this.headers, this.options.event);
+ }
+ this._setupEvents(value);
+ }
+
+ this._super(key, value);
+
+ // setting collapsible: false while collapsed; open first panel
+ if (key === "collapsible" && !value && this.options.active === false) {
+ this._activate(0);
+ }
+
+ if (key === "icons") {
+ this._destroyIcons();
+ if (value) {
+ this._createIcons();
+ }
+ }
+
+ // #5332 - opacity doesn't cascade to positioned elements in IE
+ // so we need to add the disabled class to the headers and panels
+ if (key === "disabled") {
+ this.element
+ .toggleClass("ui-state-disabled", !!value)
+ .attr("aria-disabled", value);
+ this.headers.add(this.headers.next())
+ .toggleClass("ui-state-disabled", !!value);
+ }
+ },
+
+ _keydown: function (event) {
+ if (event.altKey || event.ctrlKey) {
+ return;
+ }
+
+ var keyCode = $.ui.keyCode,
+ length = this.headers.length,
+ currentIndex = this.headers.index(event.target),
+ toFocus = false;
+
+ switch (event.keyCode) {
+ case keyCode.RIGHT:
+ case keyCode.DOWN:
+ toFocus = this.headers[( currentIndex + 1 ) % length];
+ break;
+ case keyCode.LEFT:
+ case keyCode.UP:
+ toFocus = this.headers[( currentIndex - 1 + length ) % length];
+ break;
+ case keyCode.SPACE:
+ case keyCode.ENTER:
+ this._eventHandler(event);
+ break;
+ case keyCode.HOME:
+ toFocus = this.headers[0];
+ break;
+ case keyCode.END:
+ toFocus = this.headers[length - 1];
+ break;
+ }
+
+ if (toFocus) {
+ $(event.target).attr("tabIndex", -1);
+ $(toFocus).attr("tabIndex", 0);
+ toFocus.focus();
+ event.preventDefault();
+ }
+ },
+
+ _panelKeyDown: function (event) {
+ if (event.keyCode === $.ui.keyCode.UP && event.ctrlKey) {
+ $(event.currentTarget).prev().focus();
+ }
+ },
+
+ refresh: function () {
+ var options = this.options;
+ this._processPanels();
+
+ // was collapsed or no panel
+ if (( options.active === false && options.collapsible === true ) || !this.headers.length) {
+ options.active = false;
+ this.active = $();
+ // active false only when collapsible is true
+ } else if (options.active === false) {
+ this._activate(0);
+ // was active, but active panel is gone
+ } else if (this.active.length && !$.contains(this.element[0], this.active[0])) {
+ // all remaining panel are disabled
+ if (this.headers.length === this.headers.find(".ui-state-disabled").length) {
+ options.active = false;
+ this.active = $();
+ // activate previous panel
+ } else {
+ this._activate(Math.max(0, options.active - 1));
+ }
+ // was active, active panel still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.headers.index(this.active);
+ }
+
+ this._destroyIcons();
+
+ this._refresh();
+ },
+
+ _processPanels: function () {
+ var prevHeaders = this.headers,
+ prevPanels = this.panels;
+
+ this.headers = this.element.find(this.options.header)
+ .addClass("ui-accordion-header ui-state-default ui-corner-all");
+
+ this.panels = this.headers.next()
+ .addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom")
+ .filter(":not(.ui-accordion-content-active)")
+ .hide();
+
+ // Avoid memory leaks (#10056)
+ if (prevPanels) {
+ this._off(prevHeaders.not(this.headers));
+ this._off(prevPanels.not(this.panels));
+ }
+ },
+
+ _refresh: function () {
+ var maxHeight,
+ options = this.options,
+ heightStyle = options.heightStyle,
+ parent = this.element.parent();
+
+ this.active = this._findActive(options.active)
+ .addClass("ui-accordion-header-active ui-state-active ui-corner-top")
+ .removeClass("ui-corner-all");
+ this.active.next()
+ .addClass("ui-accordion-content-active")
+ .show();
+
+ this.headers
+ .attr("role", "tab")
+ .each(function () {
+ var header = $(this),
+ headerId = header.uniqueId().attr("id"),
+ panel = header.next(),
+ panelId = panel.uniqueId().attr("id");
+ header.attr("aria-controls", panelId);
+ panel.attr("aria-labelledby", headerId);
+ })
+ .next()
+ .attr("role", "tabpanel");
+
+ this.headers
+ .not(this.active)
+ .attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ })
+ .next()
+ .attr({
+ "aria-hidden": "true"
+ })
+ .hide();
+
+ // make sure at least one header is in the tab order
+ if (!this.active.length) {
+ this.headers.eq(0).attr("tabIndex", 0);
+ } else {
+ this.active.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ .next()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+
+ this._createIcons();
+
+ this._setupEvents(options.event);
+
+ if (heightStyle === "fill") {
+ maxHeight = parent.height();
+ this.element.siblings(":visible").each(function () {
+ var elem = $(this),
+ position = elem.css("position");
+
+ if (position === "absolute" || position === "fixed") {
+ return;
+ }
+ maxHeight -= elem.outerHeight(true);
+ });
+
+ this.headers.each(function () {
+ maxHeight -= $(this).outerHeight(true);
+ });
+
+ this.headers.next()
+ .each(function () {
+ $(this).height(Math.max(0, maxHeight -
+ $(this).innerHeight() + $(this).height()));
+ })
+ .css("overflow", "auto");
+ } else if (heightStyle === "auto") {
+ maxHeight = 0;
+ this.headers.next()
+ .each(function () {
+ maxHeight = Math.max(maxHeight, $(this).css("height", "").height());
+ })
+ .height(maxHeight);
+ }
+ },
+
+ _activate: function (index) {
+ var active = this._findActive(index)[0];
+
+ // trying to activate the already active panel
+ if (active === this.active[0]) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the currently active header
+ active = active || this.active[0];
+
+ this._eventHandler({
+ target: active,
+ currentTarget: active,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function (selector) {
+ return typeof selector === "number" ? this.headers.eq(selector) : $();
+ },
+
+ _setupEvents: function (event) {
+ var events = {
+ keydown: "_keydown"
+ };
+ if (event) {
+ $.each(event.split(" "), function (index, eventName) {
+ events[eventName] = "_eventHandler";
+ });
+ }
+
+ this._off(this.headers.add(this.headers.next()));
+ this._on(this.headers, events);
+ this._on(this.headers.next(), {keydown: "_panelKeyDown"});
+ this._hoverable(this.headers);
+ this._focusable(this.headers);
+ },
+
+ _eventHandler: function (event) {
+ var options = this.options,
+ active = this.active,
+ clicked = $(event.currentTarget),
+ clickedIsActive = clicked[0] === active[0],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : clicked.next(),
+ toHide = active.next(),
+ eventData = {
+ oldHeader: active,
+ oldPanel: toHide,
+ newHeader: collapsing ? $() : clicked,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger("beforeActivate", event, eventData) === false )) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.headers.index(clicked);
+
+ // when the call to ._toggle() comes after the class changes
+ // it causes a very odd bug in IE 8 (see #6720)
+ this.active = clickedIsActive ? $() : clicked;
+ this._toggle(eventData);
+
+ // switch classes
+ // corner classes on the previously active header stay after the animation
+ active.removeClass("ui-accordion-header-active ui-state-active");
+ if (options.icons) {
+ active.children(".ui-accordion-header-icon")
+ .removeClass(options.icons.activeHeader)
+ .addClass(options.icons.header);
+ }
+
+ if (!clickedIsActive) {
+ clicked
+ .removeClass("ui-corner-all")
+ .addClass("ui-accordion-header-active ui-state-active ui-corner-top");
+ if (options.icons) {
+ clicked.children(".ui-accordion-header-icon")
+ .removeClass(options.icons.header)
+ .addClass(options.icons.activeHeader);
+ }
+
+ clicked
+ .next()
+ .addClass("ui-accordion-content-active");
+ }
+ },
+
+ _toggle: function (data) {
+ var toShow = data.newPanel,
+ toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+ // handle activating a panel during the animation for another activation
+ this.prevShow.add(this.prevHide).stop(true, true);
+ this.prevShow = toShow;
+ this.prevHide = toHide;
+
+ if (this.options.animate) {
+ this._animate(toShow, toHide, data);
+ } else {
+ toHide.hide();
+ toShow.show();
+ this._toggleComplete(data);
+ }
+
+ toHide.attr({
+ "aria-hidden": "true"
+ });
+ toHide.prev().attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // if we're switching panels, remove the old header from the tab order
+ // if we're opening from collapsed state, remove the previous header from the tab order
+ // if we're collapsing, then keep the collapsing header in the tab order
+ if (toShow.length && toHide.length) {
+ toHide.prev().attr({
+ "tabIndex": -1,
+ "aria-expanded": "false"
+ });
+ } else if (toShow.length) {
+ this.headers.filter(function () {
+ return parseInt($(this).attr("tabIndex"), 10) === 0;
+ })
+ .attr("tabIndex", -1);
+ }
+
+ toShow
+ .attr("aria-hidden", "false")
+ .prev()
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _animate: function (toShow, toHide, data) {
+ var total, easing, duration,
+ that = this,
+ adjust = 0,
+ boxSizing = toShow.css("box-sizing"),
+ down = toShow.length &&
+ ( !toHide.length || ( toShow.index() < toHide.index() ) ),
+ animate = this.options.animate || {},
+ options = down && animate.down || animate,
+ complete = function () {
+ that._toggleComplete(data);
+ };
+
+ if (typeof options === "number") {
+ duration = options;
+ }
+ if (typeof options === "string") {
+ easing = options;
+ }
+ // fall back from options to animation in case of partial down settings
+ easing = easing || options.easing || animate.easing;
+ duration = duration || options.duration || animate.duration;
+
+ if (!toHide.length) {
+ return toShow.animate(this.showProps, duration, easing, complete);
+ }
+ if (!toShow.length) {
+ return toHide.animate(this.hideProps, duration, easing, complete);
+ }
+
+ total = toShow.show().outerHeight();
+ toHide.animate(this.hideProps, {
+ duration: duration,
+ easing: easing,
+ step: function (now, fx) {
+ fx.now = Math.round(now);
+ }
+ });
+ toShow
+ .hide()
+ .animate(this.showProps, {
+ duration: duration,
+ easing: easing,
+ complete: complete,
+ step: function (now, fx) {
+ fx.now = Math.round(now);
+ if (fx.prop !== "height") {
+ if (boxSizing === "content-box") {
+ adjust += fx.now;
+ }
+ } else if (that.options.heightStyle !== "content") {
+ fx.now = Math.round(total - toHide.outerHeight() - adjust);
+ adjust = 0;
+ }
+ }
+ });
+ },
+
+ _toggleComplete: function (data) {
+ var toHide = data.oldPanel;
+
+ toHide
+ .removeClass("ui-accordion-content-active")
+ .prev()
+ .removeClass("ui-corner-top")
+ .addClass("ui-corner-all");
+
+ // Work around for rendering bug in IE (#5421)
+ if (toHide.length) {
+ toHide.parent()[0].className = toHide.parent()[0].className;
+ }
+ this._trigger("activate", null, data);
+ }
+ });
+
+
+ /*!
+ * jQuery UI Menu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+ var menu = $.widget("ui.menu", {
+ version: "1.11.4",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {
+ submenu: "ui-icon-carat-1-e"
+ },
+ items: "> *",
+ menus: "ul",
+ position: {
+ my: "left-1 top",
+ at: "right top"
+ },
+ role: "menu",
+
+ // callbacks
+ blur: null,
+ focus: null,
+ select: null
+ },
+
+ _create: function () {
+ this.activeMenu = this.element;
+
+ // Flag used to prevent firing of the click handler
+ // as the event bubbles up through nested menus
+ this.mouseHandled = false;
+ this.element
+ .uniqueId()
+ .addClass("ui-menu ui-widget ui-widget-content")
+ .toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length)
+ .attr({
+ role: this.options.role,
+ tabIndex: 0
+ });
+
+ if (this.options.disabled) {
+ this.element
+ .addClass("ui-state-disabled")
+ .attr("aria-disabled", "true");
+ }
+
+ this._on({
+ // Prevent focus from sticking to links inside menu after clicking
+ // them (focus should always stay on UL during navigation).
+ "mousedown .ui-menu-item": function (event) {
+ event.preventDefault();
+ },
+ "click .ui-menu-item": function (event) {
+ var target = $(event.target);
+ if (!this.mouseHandled && target.not(".ui-state-disabled").length) {
+ this.select(event);
+
+ // Only set the mouseHandled flag if the event will bubble, see #9469.
+ if (!event.isPropagationStopped()) {
+ this.mouseHandled = true;
+ }
+
+ // Open submenu on click
+ if (target.has(".ui-menu").length) {
+ this.expand(event);
+ } else if (!this.element.is(":focus") && $(this.document[0].activeElement).closest(".ui-menu").length) {
+
+ // Redirect focus to the menu
+ this.element.trigger("focus", [true]);
+
+ // If the active item is on the top level, let it stay active.
+ // Otherwise, blur the active item since it is no longer visible.
+ if (this.active && this.active.parents(".ui-menu").length === 1) {
+ clearTimeout(this.timer);
+ }
+ }
+ }
+ },
+ "mouseenter .ui-menu-item": function (event) {
+ // Ignore mouse events while typeahead is active, see #10458.
+ // Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+ // is over an item in the menu
+ if (this.previousFilter) {
+ return;
+ }
+ var target = $(event.currentTarget);
+ // Remove ui-state-active class from siblings of the newly focused menu item
+ // to avoid a jump caused by adjacent elements both having a class with a border
+ target.siblings(".ui-state-active").removeClass("ui-state-active");
+ this.focus(event, target);
+ },
+ mouseleave: "collapseAll",
+ "mouseleave .ui-menu": "collapseAll",
+ focus: function (event, keepActiveItem) {
+ // If there's already an active item, keep it active
+ // If not, activate the first item
+ var item = this.active || this.element.find(this.options.items).eq(0);
+
+ if (!keepActiveItem) {
+ this.focus(event, item);
+ }
+ },
+ blur: function (event) {
+ this._delay(function () {
+ if (!$.contains(this.element[0], this.document[0].activeElement)) {
+ this.collapseAll(event);
+ }
+ });
+ },
+ keydown: "_keydown"
+ });
+
+ this.refresh();
+
+ // Clicks outside of a menu collapse any open menus
+ this._on(this.document, {
+ click: function (event) {
+ if (this._closeOnDocumentClick(event)) {
+ this.collapseAll(event);
+ }
+
+ // Reset the mouseHandled flag
+ this.mouseHandled = false;
+ }
+ });
+ },
+
+ _destroy: function () {
+ // Destroy (sub)menus
+ this.element
+ .removeAttr("aria-activedescendant")
+ .find(".ui-menu").addBack()
+ .removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front")
+ .removeAttr("role")
+ .removeAttr("tabIndex")
+ .removeAttr("aria-labelledby")
+ .removeAttr("aria-expanded")
+ .removeAttr("aria-hidden")
+ .removeAttr("aria-disabled")
+ .removeUniqueId()
+ .show();
+
+ // Destroy menu items
+ this.element.find(".ui-menu-item")
+ .removeClass("ui-menu-item")
+ .removeAttr("role")
+ .removeAttr("aria-disabled")
+ .removeUniqueId()
+ .removeClass("ui-state-hover")
+ .removeAttr("tabIndex")
+ .removeAttr("role")
+ .removeAttr("aria-haspopup")
+ .children().each(function () {
+ var elem = $(this);
+ if (elem.data("ui-menu-submenu-carat")) {
+ elem.remove();
+ }
+ });
+
+ // Destroy menu dividers
+ this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content");
+ },
+
+ _keydown: function (event) {
+ var match, prev, character, skip,
+ preventDefault = true;
+
+ switch (event.keyCode) {
+ case $.ui.keyCode.PAGE_UP:
+ this.previousPage(event);
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ this.nextPage(event);
+ break;
+ case $.ui.keyCode.HOME:
+ this._move("first", "first", event);
+ break;
+ case $.ui.keyCode.END:
+ this._move("last", "last", event);
+ break;
+ case $.ui.keyCode.UP:
+ this.previous(event);
+ break;
+ case $.ui.keyCode.DOWN:
+ this.next(event);
+ break;
+ case $.ui.keyCode.LEFT:
+ this.collapse(event);
+ break;
+ case $.ui.keyCode.RIGHT:
+ if (this.active && !this.active.is(".ui-state-disabled")) {
+ this.expand(event);
+ }
+ break;
+ case $.ui.keyCode.ENTER:
+ case $.ui.keyCode.SPACE:
+ this._activate(event);
+ break;
+ case $.ui.keyCode.ESCAPE:
+ this.collapse(event);
+ break;
+ default:
+ preventDefault = false;
+ prev = this.previousFilter || "";
+ character = String.fromCharCode(event.keyCode);
+ skip = false;
+
+ clearTimeout(this.filterTimer);
+
+ if (character === prev) {
+ skip = true;
+ } else {
+ character = prev + character;
+ }
+
+ match = this._filterMenuItems(character);
+ match = skip && match.index(this.active.next()) !== -1 ?
+ this.active.nextAll(".ui-menu-item") :
+ match;
+
+ // If no matches on the current filter, reset to the last character pressed
+ // to move down the menu to the first item that starts with that character
+ if (!match.length) {
+ character = String.fromCharCode(event.keyCode);
+ match = this._filterMenuItems(character);
+ }
+
+ if (match.length) {
+ this.focus(event, match);
+ this.previousFilter = character;
+ this.filterTimer = this._delay(function () {
+ delete this.previousFilter;
+ }, 1000);
+ } else {
+ delete this.previousFilter;
+ }
+ }
+
+ if (preventDefault) {
+ event.preventDefault();
+ }
+ },
+
+ _activate: function (event) {
+ if (!this.active.is(".ui-state-disabled")) {
+ if (this.active.is("[aria-haspopup='true']")) {
+ this.expand(event);
+ } else {
+ this.select(event);
+ }
+ }
+ },
+
+ refresh: function () {
+ var menus, items,
+ that = this,
+ icon = this.options.icons.submenu,
+ submenus = this.element.find(this.options.menus);
+
+ this.element.toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length);
+
+ // Initialize nested menus
+ submenus.filter(":not(.ui-menu)")
+ .addClass("ui-menu ui-widget ui-widget-content ui-front")
+ .hide()
+ .attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ })
+ .each(function () {
+ var menu = $(this),
+ item = menu.parent(),
+ submenuCarat = $("<span>")
+ .addClass("ui-menu-icon ui-icon " + icon)
+ .data("ui-menu-submenu-carat", true);
+
+ item
+ .attr("aria-haspopup", "true")
+ .prepend(submenuCarat);
+ menu.attr("aria-labelledby", item.attr("id"));
+ });
+
+ menus = submenus.add(this.element);
+ items = menus.find(this.options.items);
+
+ // Initialize menu-items containing spaces and/or dashes only as dividers
+ items.not(".ui-menu-item").each(function () {
+ var item = $(this);
+ if (that._isDivider(item)) {
+ item.addClass("ui-widget-content ui-menu-divider");
+ }
+ });
+
+ // Don't refresh list items that are already adapted
+ items.not(".ui-menu-item, .ui-menu-divider")
+ .addClass("ui-menu-item")
+ .uniqueId()
+ .attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ });
+
+ // Add aria-disabled attribute to any disabled menu item
+ items.filter(".ui-state-disabled").attr("aria-disabled", "true");
+
+ // If the active item has been removed, blur the menu
+ if (this.active && !$.contains(this.element[0], this.active[0])) {
+ this.blur();
+ }
+ },
+
+ _itemRole: function () {
+ return {
+ menu: "menuitem",
+ listbox: "option"
+ }[this.options.role];
+ },
+
+ _setOption: function (key, value) {
+ if (key === "icons") {
+ this.element.find(".ui-menu-icon")
+ .removeClass(this.options.icons.submenu)
+ .addClass(value.submenu);
+ }
+ if (key === "disabled") {
+ this.element
+ .toggleClass("ui-state-disabled", !!value)
+ .attr("aria-disabled", value);
+ }
+ this._super(key, value);
+ },
+
+ focus: function (event, item) {
+ var nested, focused;
+ this.blur(event, event && event.type === "focus");
+
+ this._scrollIntoView(item);
+
+ this.active = item.first();
+ focused = this.active.addClass("ui-state-focus").removeClass("ui-state-active");
+ // Only update aria-activedescendant if there's a role
+ // otherwise we assume focus is managed elsewhere
+ if (this.options.role) {
+ this.element.attr("aria-activedescendant", focused.attr("id"));
+ }
+
+ // Highlight active parent menu item, if any
+ this.active
+ .parent()
+ .closest(".ui-menu-item")
+ .addClass("ui-state-active");
+
+ if (event && event.type === "keydown") {
+ this._close();
+ } else {
+ this.timer = this._delay(function () {
+ this._close();
+ }, this.delay);
+ }
+
+ nested = item.children(".ui-menu");
+ if (nested.length && event && ( /^mouse/.test(event.type) )) {
+ this._startOpening(nested);
+ }
+ this.activeMenu = item.parent();
+
+ this._trigger("focus", event, {item: item});
+ },
+
+ _scrollIntoView: function (item) {
+ var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+ if (this._hasScroll()) {
+ borderTop = parseFloat($.css(this.activeMenu[0], "borderTopWidth")) || 0;
+ paddingTop = parseFloat($.css(this.activeMenu[0], "paddingTop")) || 0;
+ offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+ scroll = this.activeMenu.scrollTop();
+ elementHeight = this.activeMenu.height();
+ itemHeight = item.outerHeight();
+
+ if (offset < 0) {
+ this.activeMenu.scrollTop(scroll + offset);
+ } else if (offset + itemHeight > elementHeight) {
+ this.activeMenu.scrollTop(scroll + offset - elementHeight + itemHeight);
+ }
+ }
+ },
+
+ blur: function (event, fromFocus) {
+ if (!fromFocus) {
+ clearTimeout(this.timer);
+ }
+
+ if (!this.active) {
+ return;
+ }
+
+ this.active.removeClass("ui-state-focus");
+ this.active = null;
+
+ this._trigger("blur", event, {item: this.active});
+ },
+
+ _startOpening: function (submenu) {
+ clearTimeout(this.timer);
+
+ // Don't open if already open fixes a Firefox bug that caused a .5 pixel
+ // shift in the submenu position when mousing over the carat icon
+ if (submenu.attr("aria-hidden") !== "true") {
+ return;
+ }
+
+ this.timer = this._delay(function () {
+ this._close();
+ this._open(submenu);
+ }, this.delay);
+ },
+
+ _open: function (submenu) {
+ var position = $.extend({
+ of: this.active
+ }, this.options.position);
+
+ clearTimeout(this.timer);
+ this.element.find(".ui-menu").not(submenu.parents(".ui-menu"))
+ .hide()
+ .attr("aria-hidden", "true");
+
+ submenu
+ .show()
+ .removeAttr("aria-hidden")
+ .attr("aria-expanded", "true")
+ .position(position);
+ },
+
+ collapseAll: function (event, all) {
+ clearTimeout(this.timer);
+ this.timer = this._delay(function () {
+ // If we were passed an event, look for the submenu that contains the event
+ var currentMenu = all ? this.element :
+ $(event && event.target).closest(this.element.find(".ui-menu"));
+
+ // If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+ if (!currentMenu.length) {
+ currentMenu = this.element;
+ }
+
+ this._close(currentMenu);
+
+ this.blur(event);
+ this.activeMenu = currentMenu;
+ }, this.delay);
+ },
+
+ // With no arguments, closes the currently active menu - if nothing is active
+ // it closes all menus. If passed an argument, it will search for menus BELOW
+ _close: function (startMenu) {
+ if (!startMenu) {
+ startMenu = this.active ? this.active.parent() : this.element;
+ }
+
+ startMenu
+ .find(".ui-menu")
+ .hide()
+ .attr("aria-hidden", "true")
+ .attr("aria-expanded", "false")
+ .end()
+ .find(".ui-state-active").not(".ui-state-focus")
+ .removeClass("ui-state-active");
+ },
+
+ _closeOnDocumentClick: function (event) {
+ return !$(event.target).closest(".ui-menu").length;
+ },
+
+ _isDivider: function (item) {
+
+ // Match hyphen, em dash, en dash
+ return !/[^\-\u2014\u2013\s]/.test(item.text());
+ },
+
+ collapse: function (event) {
+ var newItem = this.active &&
+ this.active.parent().closest(".ui-menu-item", this.element);
+ if (newItem && newItem.length) {
+ this._close();
+ this.focus(event, newItem);
+ }
+ },
+
+ expand: function (event) {
+ var newItem = this.active &&
+ this.active
+ .children(".ui-menu ")
+ .find(this.options.items)
+ .first();
+
+ if (newItem && newItem.length) {
+ this._open(newItem.parent());
+
+ // Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+ this._delay(function () {
+ this.focus(event, newItem);
+ });
+ }
+ },
+
+ next: function (event) {
+ this._move("next", "first", event);
+ },
+
+ previous: function (event) {
+ this._move("prev", "last", event);
+ },
+
+ isFirstItem: function () {
+ return this.active && !this.active.prevAll(".ui-menu-item").length;
+ },
+
+ isLastItem: function () {
+ return this.active && !this.active.nextAll(".ui-menu-item").length;
+ },
+
+ _move: function (direction, filter, event) {
+ var next;
+ if (this.active) {
+ if (direction === "first" || direction === "last") {
+ next = this.active
+ [direction === "first" ? "prevAll" : "nextAll"](".ui-menu-item")
+ .eq(-1);
+ } else {
+ next = this.active
+ [direction + "All"](".ui-menu-item")
+ .eq(0);
+ }
+ }
+ if (!next || !next.length || !this.active) {
+ next = this.activeMenu.find(this.options.items)[filter]();
+ }
+
+ this.focus(event, next);
+ },
+
+ nextPage: function (event) {
+ var item, base, height;
+
+ if (!this.active) {
+ this.next(event);
+ return;
+ }
+ if (this.isLastItem()) {
+ return;
+ }
+ if (this._hasScroll()) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.nextAll(".ui-menu-item").each(function () {
+ item = $(this);
+ return item.offset().top - base - height < 0;
+ });
+
+ this.focus(event, item);
+ } else {
+ this.focus(event, this.activeMenu.find(this.options.items)
+ [!this.active ? "first" : "last"]());
+ }
+ },
+
+ previousPage: function (event) {
+ var item, base, height;
+ if (!this.active) {
+ this.next(event);
+ return;
+ }
+ if (this.isFirstItem()) {
+ return;
+ }
+ if (this._hasScroll()) {
+ base = this.active.offset().top;
+ height = this.element.height();
+ this.active.prevAll(".ui-menu-item").each(function () {
+ item = $(this);
+ return item.offset().top - base + height > 0;
+ });
+
+ this.focus(event, item);
+ } else {
+ this.focus(event, this.activeMenu.find(this.options.items).first());
+ }
+ },
+
+ _hasScroll: function () {
+ return this.element.outerHeight() < this.element.prop("scrollHeight");
+ },
+
+ select: function (event) {
+ // TODO: It should never be possible to not have an active item at this
+ // point, but the tests don't trigger mouseenter before click.
+ this.active = this.active || $(event.target).closest(".ui-menu-item");
+ var ui = {item: this.active};
+ if (!this.active.has(".ui-menu").length) {
+ this.collapseAll(event, true);
+ }
+ this._trigger("select", event, ui);
+ },
+
+ _filterMenuItems: function (character) {
+ var escapedCharacter = character.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"),
+ regex = new RegExp("^" + escapedCharacter, "i");
+
+ return this.activeMenu
+ .find(this.options.items)
+
+ // Only match on items, not dividers or other content (#10571)
+ .filter(".ui-menu-item")
+ .filter(function () {
+ return regex.test($.trim($(this).text()));
+ });
+ }
+ });
+
+
+ /*!
+ * jQuery UI Autocomplete 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+ $.widget("ui.autocomplete", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: false,
+ delay: 300,
+ minLength: 1,
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ source: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+
+ requestIndex: 0,
+ pending: 0,
+
+ _create: function () {
+ // Some browsers only repeat keydown events, not keypress events,
+ // so we use the suppressKeyPress flag to determine if we've already
+ // handled the keydown event. #7269
+ // Unfortunately the code for & in keypress is the same as the up arrow,
+ // so we use the suppressKeyPressRepeat flag to avoid handling keypress
+ // events when we know the keydown event was used to modify the
+ // search term. #7799
+ var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+ nodeName = this.element[0].nodeName.toLowerCase(),
+ isTextarea = nodeName === "textarea",
+ isInput = nodeName === "input";
+
+ this.isMultiLine =
+ // Textareas are always multi-line
+ isTextarea ? true :
+ // Inputs are always single-line, even if inside a contentEditable element
+ // IE also treats inputs as contentEditable
+ isInput ? false :
+ // All other element types are determined by whether or not they're contentEditable
+ this.element.prop("isContentEditable");
+
+ this.valueMethod = this.element[isTextarea || isInput ? "val" : "text"];
+ this.isNewMenu = true;
+
+ this.element
+ .addClass("ui-autocomplete-input")
+ .attr("autocomplete", "off");
+
+ this._on(this.element, {
+ keydown: function (event) {
+ if (this.element.prop("readOnly")) {
+ suppressKeyPress = true;
+ suppressInput = true;
+ suppressKeyPressRepeat = true;
+ return;
+ }
+
+ suppressKeyPress = false;
+ suppressInput = false;
+ suppressKeyPressRepeat = false;
+ var keyCode = $.ui.keyCode;
+ switch (event.keyCode) {
+ case keyCode.PAGE_UP:
+ suppressKeyPress = true;
+ this._move("previousPage", event);
+ break;
+ case keyCode.PAGE_DOWN:
+ suppressKeyPress = true;
+ this._move("nextPage", event);
+ break;
+ case keyCode.UP:
+ suppressKeyPress = true;
+ this._keyEvent("previous", event);
+ break;
+ case keyCode.DOWN:
+ suppressKeyPress = true;
+ this._keyEvent("next", event);
+ break;
+ case keyCode.ENTER:
+ // when menu is open and has focus
+ if (this.menu.active) {
+ // #6055 - Opera still allows the keypress to occur
+ // which causes forms to submit
+ suppressKeyPress = true;
+ event.preventDefault();
+ this.menu.select(event);
+ }
+ break;
+ case keyCode.TAB:
+ if (this.menu.active) {
+ this.menu.select(event);
+ }
+ break;
+ case keyCode.ESCAPE:
+ if (this.menu.element.is(":visible")) {
+ if (!this.isMultiLine) {
+ this._value(this.term);
+ }
+ this.close(event);
+ // Different browsers have different default behavior for escape
+ // Single press can mean undo or clear
+ // Double press in IE means clear the whole form
+ event.preventDefault();
+ }
+ break;
+ default:
+ suppressKeyPressRepeat = true;
+ // search timeout should be triggered before the input value is changed
+ this._searchTimeout(event);
+ break;
+ }
+ },
+ keypress: function (event) {
+ if (suppressKeyPress) {
+ suppressKeyPress = false;
+ if (!this.isMultiLine || this.menu.element.is(":visible")) {
+ event.preventDefault();
+ }
+ return;
+ }
+ if (suppressKeyPressRepeat) {
+ return;
+ }
+
+ // replicate some key handlers to allow them to repeat in Firefox and Opera
+ var keyCode = $.ui.keyCode;
+ switch (event.keyCode) {
+ case keyCode.PAGE_UP:
+ this._move("previousPage", event);
+ break;
+ case keyCode.PAGE_DOWN:
+ this._move("nextPage", event);
+ break;
+ case keyCode.UP:
+ this._keyEvent("previous", event);
+ break;
+ case keyCode.DOWN:
+ this._keyEvent("next", event);
+ break;
+ }
+ },
+ input: function (event) {
+ if (suppressInput) {
+ suppressInput = false;
+ event.preventDefault();
+ return;
+ }
+ this._searchTimeout(event);
+ },
+ focus: function () {
+ this.selectedItem = null;
+ this.previous = this._value();
+ },
+ blur: function (event) {
+ if (this.cancelBlur) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ clearTimeout(this.searching);
+ this.close(event);
+ this._change(event);
+ }
+ });
+
+ this._initSource();
+ this.menu = $("<ul>")
+ .addClass("ui-autocomplete ui-front")
+ .appendTo(this._appendTo())
+ .menu({
+ // disable ARIA support, the live region takes care of that
+ role: null
+ })
+ .hide()
+ .menu("instance");
+
+ this._on(this.menu.element, {
+ mousedown: function (event) {
+ // prevent moving focus out of the text field
+ event.preventDefault();
+
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ this.cancelBlur = true;
+ this._delay(function () {
+ delete this.cancelBlur;
+ });
+
+ // clicking on the scrollbar causes focus to shift to the body
+ // but we can't detect a mouseup or a click immediately afterward
+ // so we have to track the next mousedown and close the menu if
+ // the user clicks somewhere outside of the autocomplete
+ var menuElement = this.menu.element[0];
+ if (!$(event.target).closest(".ui-menu-item").length) {
+ this._delay(function () {
+ var that = this;
+ this.document.one("mousedown", function (event) {
+ if (event.target !== that.element[0] &&
+ event.target !== menuElement && !$.contains(menuElement, event.target)) {
+ that.close();
+ }
+ });
+ });
+ }
+ },
+ menufocus: function (event, ui) {
+ var label, item;
+ // support: Firefox
+ // Prevent accidental activation of menu items in Firefox (#7024 #9118)
+ if (this.isNewMenu) {
+ this.isNewMenu = false;
+ if (event.originalEvent && /^mouse/.test(event.originalEvent.type)) {
+ this.menu.blur();
+
+ this.document.one("mousemove", function () {
+ $(event.target).trigger(event.originalEvent);
+ });
+
+ return;
+ }
+ }
+
+ item = ui.item.data("ui-autocomplete-item");
+ if (false !== this._trigger("focus", event, {item: item})) {
+ // use value to match what will end up in the input, if it was a key event
+ if (event.originalEvent && /^key/.test(event.originalEvent.type)) {
+ this._value(item.value);
+ }
+ }
+
+ // Announce the value in the liveRegion
+ label = ui.item.attr("aria-label") || item.value;
+ if (label && $.trim(label).length) {
+ this.liveRegion.children().hide();
+ $("<div>").text(label).appendTo(this.liveRegion);
+ }
+ },
+ menuselect: function (event, ui) {
+ var item = ui.item.data("ui-autocomplete-item"),
+ previous = this.previous;
+
+ // only trigger when focus was lost (click on menu)
+ if (this.element[0] !== this.document[0].activeElement) {
+ this.element.focus();
+ this.previous = previous;
+ // #6109 - IE triggers two focus events and the second
+ // is asynchronous, so we need to reset the previous
+ // term synchronously and asynchronously :-(
+ this._delay(function () {
+ this.previous = previous;
+ this.selectedItem = item;
+ });
+ }
+
+ if (false !== this._trigger("select", event, {item: item})) {
+ this._value(item.value);
+ }
+ // reset the term after the select event
+ // this allows custom select handling to work properly
+ this.term = this._value();
+
+ this.close(event);
+ this.selectedItem = item;
+ }
+ });
+
+ this.liveRegion = $("<span>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass("ui-helper-hidden-accessible")
+ .appendTo(this.document[0].body);
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on(this.window, {
+ beforeunload: function () {
+ this.element.removeAttr("autocomplete");
+ }
+ });
+ },
+
+ _destroy: function () {
+ clearTimeout(this.searching);
+ this.element
+ .removeClass("ui-autocomplete-input")
+ .removeAttr("autocomplete");
+ this.menu.element.remove();
+ this.liveRegion.remove();
+ },
+
+ _setOption: function (key, value) {
+ this._super(key, value);
+ if (key === "source") {
+ this._initSource();
+ }
+ if (key === "appendTo") {
+ this.menu.element.appendTo(this._appendTo());
+ }
+ if (key === "disabled" && value && this.xhr) {
+ this.xhr.abort();
+ }
+ },
+
+ _appendTo: function () {
+ var element = this.options.appendTo;
+
+ if (element) {
+ element = element.jquery || element.nodeType ?
+ $(element) :
+ this.document.find(element).eq(0);
+ }
+
+ if (!element || !element[0]) {
+ element = this.element.closest(".ui-front");
+ }
+
+ if (!element.length) {
+ element = this.document[0].body;
+ }
+
+ return element;
+ },
+
+ _initSource: function () {
+ var array, url,
+ that = this;
+ if ($.isArray(this.options.source)) {
+ array = this.options.source;
+ this.source = function (request, response) {
+ response($.ui.autocomplete.filter(array, request.term));
+ };
+ } else if (typeof this.options.source === "string") {
+ url = this.options.source;
+ this.source = function (request, response) {
+ if (that.xhr) {
+ that.xhr.abort();
+ }
+ that.xhr = $.ajax({
+ url: url,
+ data: request,
+ dataType: "json",
+ success: function (data) {
+ response(data);
+ },
+ error: function () {
+ response([]);
+ }
+ });
+ };
+ } else {
+ this.source = this.options.source;
+ }
+ },
+
+ _searchTimeout: function (event) {
+ clearTimeout(this.searching);
+ this.searching = this._delay(function () {
+
+ // Search if the value has changed, or if the user retypes the same value (see #7434)
+ var equalValues = this.term === this._value(),
+ menuVisible = this.menu.element.is(":visible"),
+ modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+ if (!equalValues || ( equalValues && !menuVisible && !modifierKey )) {
+ this.selectedItem = null;
+ this.search(null, event);
+ }
+ }, this.options.delay);
+ },
+
+ search: function (value, event) {
+ value = value != null ? value : this._value();
+
+ // always save the actual value, not the one passed as an argument
+ this.term = this._value();
+
+ if (value.length < this.options.minLength) {
+ return this.close(event);
+ }
+
+ if (this._trigger("search", event) === false) {
+ return;
+ }
+
+ return this._search(value);
+ },
+
+ _search: function (value) {
+ this.pending++;
+ this.element.addClass("ui-autocomplete-loading");
+ this.cancelSearch = false;
+
+ this.source({term: value}, this._response());
+ },
+
+ _response: function () {
+ var index = ++this.requestIndex;
+
+ return $.proxy(function (content) {
+ if (index === this.requestIndex) {
+ this.__response(content);
+ }
+
+ this.pending--;
+ if (!this.pending) {
+ this.element.removeClass("ui-autocomplete-loading");
+ }
+ }, this);
+ },
+
+ __response: function (content) {
+ if (content) {
+ content = this._normalize(content);
+ }
+ this._trigger("response", null, {content: content});
+ if (!this.options.disabled && content && content.length && !this.cancelSearch) {
+ this._suggest(content);
+ this._trigger("open");
+ } else {
+ // use ._close() instead of .close() so we don't cancel future searches
+ this._close();
+ }
+ },
+
+ close: function (event) {
+ this.cancelSearch = true;
+ this._close(event);
+ },
+
+ _close: function (event) {
+ if (this.menu.element.is(":visible")) {
+ this.menu.element.hide();
+ this.menu.blur();
+ this.isNewMenu = true;
+ this._trigger("close", event);
+ }
+ },
+
+ _change: function (event) {
+ if (this.previous !== this._value()) {
+ this._trigger("change", event, {item: this.selectedItem});
+ }
+ },
+
+ _normalize: function (items) {
+ // assume all items have the right format when the first item is complete
+ if (items.length && items[0].label && items[0].value) {
+ return items;
+ }
+ return $.map(items, function (item) {
+ if (typeof item === "string") {
+ return {
+ label: item,
+ value: item
+ };
+ }
+ return $.extend({}, item, {
+ label: item.label || item.value,
+ value: item.value || item.label
+ });
+ });
+ },
+
+ _suggest: function (items) {
+ var ul = this.menu.element.empty();
+ this._renderMenu(ul, items);
+ this.isNewMenu = true;
+ this.menu.refresh();
+
+ // size and position menu
+ ul.show();
+ this._resizeMenu();
+ ul.position($.extend({
+ of: this.element
+ }, this.options.position));
+
+ if (this.options.autoFocus) {
+ this.menu.next();
+ }
+ },
+
+ _resizeMenu: function () {
+ var ul = this.menu.element;
+ ul.outerWidth(Math.max(
+ // Firefox wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping (#7513)
+ ul.width("").outerWidth() + 1,
+ this.element.outerWidth()
+ ));
+ },
+
+ _renderMenu: function (ul, items) {
+ var that = this;
+ $.each(items, function (index, item) {
+ that._renderItemData(ul, item);
+ });
+ },
+
+ _renderItemData: function (ul, item) {
+ return this._renderItem(ul, item).data("ui-autocomplete-item", item);
+ },
+
+ _renderItem: function (ul, item) {
+ return $("<li>").text(item.label).appendTo(ul);
+ },
+
+ _move: function (direction, event) {
+ if (!this.menu.element.is(":visible")) {
+ this.search(null, event);
+ return;
+ }
+ if (this.menu.isFirstItem() && /^previous/.test(direction) ||
+ this.menu.isLastItem() && /^next/.test(direction)) {
+
+ if (!this.isMultiLine) {
+ this._value(this.term);
+ }
+
+ this.menu.blur();
+ return;
+ }
+ this.menu[direction](event);
+ },
+
+ widget: function () {
+ return this.menu.element;
+ },
+
+ _value: function () {
+ return this.valueMethod.apply(this.element, arguments);
+ },
+
+ _keyEvent: function (keyEvent, event) {
+ if (!this.isMultiLine || this.menu.element.is(":visible")) {
+ this._move(keyEvent, event);
+
+ // prevents moving cursor to beginning/end of the text field in some browsers
+ event.preventDefault();
+ }
+ }
+ });
+
+ $.extend($.ui.autocomplete, {
+ escapeRegex: function (value) {
+ return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+ },
+ filter: function (array, term) {
+ var matcher = new RegExp($.ui.autocomplete.escapeRegex(term), "i");
+ return $.grep(array, function (value) {
+ return matcher.test(value.label || value.value || value);
+ });
+ }
+ });
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+ $.widget("ui.autocomplete", $.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function (amount) {
+ return amount + ( amount > 1 ? " results are" : " result is" ) +
+ " available, use up and down arrow keys to navigate.";
+ }
+ }
+ },
+
+ __response: function (content) {
+ var message;
+ this._superApply(arguments);
+ if (this.options.disabled || this.cancelSearch) {
+ return;
+ }
+ if (content && content.length) {
+ message = this.options.messages.results(content.length);
+ } else {
+ message = this.options.messages.noResults;
+ }
+ this.liveRegion.children().hide();
+ $("<div>").text(message).appendTo(this.liveRegion);
+ }
+ });
+
+ var autocomplete = $.ui.autocomplete;
+
+
+ /*!
+ * jQuery UI Button 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+ var lastActive,
+ baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+ typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+ formResetHandler = function () {
+ var form = $(this);
+ setTimeout(function () {
+ form.find(":ui-button").button("refresh");
+ }, 1);
+ },
+ radioGroup = function (radio) {
+ var name = radio.name,
+ form = radio.form,
+ radios = $([]);
+ if (name) {
+ name = name.replace(/'/g, "\\'");
+ if (form) {
+ radios = $(form).find("[name='" + name + "'][type=radio]");
+ } else {
+ radios = $("[name='" + name + "'][type=radio]", radio.ownerDocument)
+ .filter(function () {
+ return !this.form;
+ });
+ }
+ }
+ return radios;
+ };
+
+ $.widget("ui.button", {
+ version: "1.11.4",
+ defaultElement: "<button>",
+ options: {
+ disabled: null,
+ text: true,
+ label: null,
+ icons: {
+ primary: null,
+ secondary: null
+ }
+ },
+ _create: function () {
+ this.element.closest("form")
+ .unbind("reset" + this.eventNamespace)
+ .bind("reset" + this.eventNamespace, formResetHandler);
+
+ if (typeof this.options.disabled !== "boolean") {
+ this.options.disabled = !!this.element.prop("disabled");
+ } else {
+ this.element.prop("disabled", this.options.disabled);
+ }
+
+ this._determineButtonType();
+ this.hasTitle = !!this.buttonElement.attr("title");
+
+ var that = this,
+ options = this.options,
+ toggleButton = this.type === "checkbox" || this.type === "radio",
+ activeClass = !toggleButton ? "ui-state-active" : "";
+
+ if (options.label === null) {
+ options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+ }
+
+ this._hoverable(this.buttonElement);
+
+ this.buttonElement
+ .addClass(baseClasses)
+ .attr("role", "button")
+ .bind("mouseenter" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return;
+ }
+ if (this === lastActive) {
+ $(this).addClass("ui-state-active");
+ }
+ })
+ .bind("mouseleave" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return;
+ }
+ $(this).removeClass(activeClass);
+ })
+ .bind("click" + this.eventNamespace, function (event) {
+ if (options.disabled) {
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+ });
+
+ // Can't use _focusable() because the element that receives focus
+ // and the element that gets the ui-state-focus class are different
+ this._on({
+ focus: function () {
+ this.buttonElement.addClass("ui-state-focus");
+ },
+ blur: function () {
+ this.buttonElement.removeClass("ui-state-focus");
+ }
+ });
+
+ if (toggleButton) {
+ this.element.bind("change" + this.eventNamespace, function () {
+ that.refresh();
+ });
+ }
+
+ if (this.type === "checkbox") {
+ this.buttonElement.bind("click" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return false;
+ }
+ });
+ } else if (this.type === "radio") {
+ this.buttonElement.bind("click" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return false;
+ }
+ $(this).addClass("ui-state-active");
+ that.buttonElement.attr("aria-pressed", "true");
+
+ var radio = that.element[0];
+ radioGroup(radio)
+ .not(radio)
+ .map(function () {
+ return $(this).button("widget")[0];
+ })
+ .removeClass("ui-state-active")
+ .attr("aria-pressed", "false");
+ });
+ } else {
+ this.buttonElement
+ .bind("mousedown" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return false;
+ }
+ $(this).addClass("ui-state-active");
+ lastActive = this;
+ that.document.one("mouseup", function () {
+ lastActive = null;
+ });
+ })
+ .bind("mouseup" + this.eventNamespace, function () {
+ if (options.disabled) {
+ return false;
+ }
+ $(this).removeClass("ui-state-active");
+ })
+ .bind("keydown" + this.eventNamespace, function (event) {
+ if (options.disabled) {
+ return false;
+ }
+ if (event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER) {
+ $(this).addClass("ui-state-active");
+ }
+ })
+ // see #8559, we bind to blur here in case the button element loses
+ // focus between keydown and keyup, it would be left in an "active" state
+ .bind("keyup" + this.eventNamespace + " blur" + this.eventNamespace, function () {
+ $(this).removeClass("ui-state-active");
+ });
+
+ if (this.buttonElement.is("a")) {
+ this.buttonElement.keyup(function (event) {
+ if (event.keyCode === $.ui.keyCode.SPACE) {
+ // TODO pass through original event correctly (just as 2nd argument doesn't work)
+ $(this).click();
+ }
+ });
+ }
+ }
+
+ this._setOption("disabled", options.disabled);
+ this._resetButton();
+ },
+
+ _determineButtonType: function () {
+ var ancestor, labelSelector, checked;
+
+ if (this.element.is("[type=checkbox]")) {
+ this.type = "checkbox";
+ } else if (this.element.is("[type=radio]")) {
+ this.type = "radio";
+ } else if (this.element.is("input")) {
+ this.type = "input";
+ } else {
+ this.type = "button";
+ }
+
+ if (this.type === "checkbox" || this.type === "radio") {
+ // we don't search against the document in case the element
+ // is disconnected from the DOM
+ ancestor = this.element.parents().last();
+ labelSelector = "label[for='" + this.element.attr("id") + "']";
+ this.buttonElement = ancestor.find(labelSelector);
+ if (!this.buttonElement.length) {
+ ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+ this.buttonElement = ancestor.filter(labelSelector);
+ if (!this.buttonElement.length) {
+ this.buttonElement = ancestor.find(labelSelector);
+ }
+ }
+ this.element.addClass("ui-helper-hidden-accessible");
+
+ checked = this.element.is(":checked");
+ if (checked) {
+ this.buttonElement.addClass("ui-state-active");
+ }
+ this.buttonElement.prop("aria-pressed", checked);
+ } else {
+ this.buttonElement = this.element;
+ }
+ },
+
+ widget: function () {
+ return this.buttonElement;
+ },
+
+ _destroy: function () {
+ this.element
+ .removeClass("ui-helper-hidden-accessible");
+ this.buttonElement
+ .removeClass(baseClasses + " ui-state-active " + typeClasses)
+ .removeAttr("role")
+ .removeAttr("aria-pressed")
+ .html(this.buttonElement.find(".ui-button-text").html());
+
+ if (!this.hasTitle) {
+ this.buttonElement.removeAttr("title");
+ }
+ },
+
+ _setOption: function (key, value) {
+ this._super(key, value);
+ if (key === "disabled") {
+ this.widget().toggleClass("ui-state-disabled", !!value);
+ this.element.prop("disabled", !!value);
+ if (value) {
+ if (this.type === "checkbox" || this.type === "radio") {
+ this.buttonElement.removeClass("ui-state-focus");
+ } else {
+ this.buttonElement.removeClass("ui-state-focus ui-state-active");
+ }
+ }
+ return;
+ }
+ this._resetButton();
+ },
+
+ refresh: function () {
+ //See #8237 & #8828
+ var isDisabled = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled");
+
+ if (isDisabled !== this.options.disabled) {
+ this._setOption("disabled", isDisabled);
+ }
+ if (this.type === "radio") {
+ radioGroup(this.element[0]).each(function () {
+ if ($(this).is(":checked")) {
+ $(this).button("widget")
+ .addClass("ui-state-active")
+ .attr("aria-pressed", "true");
+ } else {
+ $(this).button("widget")
+ .removeClass("ui-state-active")
+ .attr("aria-pressed", "false");
+ }
+ });
+ } else if (this.type === "checkbox") {
+ if (this.element.is(":checked")) {
+ this.buttonElement
+ .addClass("ui-state-active")
+ .attr("aria-pressed", "true");
+ } else {
+ this.buttonElement
+ .removeClass("ui-state-active")
+ .attr("aria-pressed", "false");
+ }
+ }
+ },
+
+ _resetButton: function () {
+ if (this.type === "input") {
+ if (this.options.label) {
+ this.element.val(this.options.label);
+ }
+ return;
+ }
+ var buttonElement = this.buttonElement.removeClass(typeClasses),
+ buttonText = $("<span></span>", this.document[0])
+ .addClass("ui-button-text")
+ .html(this.options.label)
+ .appendTo(buttonElement.empty())
+ .text(),
+ icons = this.options.icons,
+ multipleIcons = icons.primary && icons.secondary,
+ buttonClasses = [];
+
+ if (icons.primary || icons.secondary) {
+ if (this.options.text) {
+ buttonClasses.push("ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ));
+ }
+
+ if (icons.primary) {
+ buttonElement.prepend("<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>");
+ }
+
+ if (icons.secondary) {
+ buttonElement.append("<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>");
+ }
+
+ if (!this.options.text) {
+ buttonClasses.push(multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only");
+
+ if (!this.hasTitle) {
+ buttonElement.attr("title", $.trim(buttonText));
+ }
+ }
+ } else {
+ buttonClasses.push("ui-button-text-only");
+ }
+ buttonElement.addClass(buttonClasses.join(" "));
+ }
+ });
+
+ $.widget("ui.buttonset", {
+ version: "1.11.4",
+ options: {
+ items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+ },
+
+ _create: function () {
+ this.element.addClass("ui-buttonset");
+ },
+
+ _init: function () {
+ this.refresh();
+ },
+
+ _setOption: function (key, value) {
+ if (key === "disabled") {
+ this.buttons.button("option", key, value);
+ }
+
+ this._super(key, value);
+ },
+
+ refresh: function () {
+ var rtl = this.element.css("direction") === "rtl",
+ allButtons = this.element.find(this.options.items),
+ existingButtons = allButtons.filter(":ui-button");
+
+ // Initialize new buttons
+ allButtons.not(":ui-button").button();
+
+ // Refresh existing buttons
+ existingButtons.button("refresh");
+
+ this.buttons = allButtons
+ .map(function () {
+ return $(this).button("widget")[0];
+ })
+ .removeClass("ui-corner-all ui-corner-left ui-corner-right")
+ .filter(":first")
+ .addClass(rtl ? "ui-corner-right" : "ui-corner-left")
+ .end()
+ .filter(":last")
+ .addClass(rtl ? "ui-corner-left" : "ui-corner-right")
+ .end()
+ .end();
+ },
+
+ _destroy: function () {
+ this.element.removeClass("ui-buttonset");
+ this.buttons
+ .map(function () {
+ return $(this).button("widget")[0];
+ })
+ .removeClass("ui-corner-left ui-corner-right")
+ .end()
+ .button("destroy");
+ }
+ });
+
+ var button = $.ui.button;
+
+
+ /*!
+ * jQuery UI Datepicker 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
+
+ $.extend($.ui, {datepicker: {version: "1.11.4"}});
+
+ var datepicker_instActive;
+
+ function datepicker_getZindex(elem) {
+ var position, value;
+ while (elem.length && elem[0] !== document) {
+ // Ignore z-index if position is set to a value where z-index is ignored by the browser
+ // This makes behavior of this function consistent across browsers
+ // WebKit always returns auto if the element is positioned
+ position = elem.css("position");
+ if (position === "absolute" || position === "relative" || position === "fixed") {
+ // IE returns 0 when zIndex is not specified
+ // other browsers return a string
+ // we ignore the case of nested elements with an explicit value of 0
+ // <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+ value = parseInt(elem.css("zIndex"), 10);
+ if (!isNaN(value) && value !== 0) {
+ return value;
+ }
+ }
+ elem = elem.parent();
+ }
+
+ return 0;
+ }
+
+ /* Date picker manager.
+ Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+ Settings for (groups of) date pickers are maintained in an instance object,
+ allowing multiple different settings on the same page. */
+
+ function Datepicker() {
+ this._curInst = null; // The current instance in use
+ this._keyEvent = false; // If the last event was a key event
+ this._disabledInputs = []; // List of date picker inputs that have been disabled
+ this._datepickerShowing = false; // True if the popup picker is showing , false if not
+ this._inDialog = false; // True if showing within a "dialog", false if not
+ this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+ this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+ this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+ this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+ this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+ this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+ this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+ this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+ this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+ this.regional = []; // Available regional settings, indexed by language code
+ this.regional[""] = { // Default regional settings
+ closeText: "Done", // Display text for close link
+ prevText: "Prev", // Display text for previous month link
+ nextText: "Next", // Display text for next month link
+ currentText: "Today", // Display text for current month link
+ monthNames: ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"], // Names of months for drop-down and formatting
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+ dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], // Column headings for days starting at Sunday
+ weekHeader: "Wk", // Column header for week of the year
+ dateFormat: "mm/dd/yy", // See format options on parseDate
+ firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+ isRTL: false, // True if right-to-left language, false if left-to-right
+ showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+ yearSuffix: "" // Additional text to append to the year in the month headers
+ };
+ this._defaults = { // Global defaults for all the date picker instances
+ showOn: "focus", // "focus" for popup on focus,
+ // "button" for trigger button, or "both" for either
+ showAnim: "fadeIn", // Name of jQuery animation for popup
+ showOptions: {}, // Options for enhanced animations
+ defaultDate: null, // Used when field is blank: actual date,
+ // +/-number for offset from today, null for today
+ appendText: "", // Display text following the input box, e.g. showing the format
+ buttonText: "...", // Text for trigger button
+ buttonImage: "", // URL for trigger button image
+ buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+ hideIfNoPrevNext: false, // True to hide next/previous month links
+ // if not applicable, false to just disable them
+ navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+ gotoCurrent: false, // True if today link goes back to current selection instead
+ changeMonth: false, // True if month can be selected directly, false if only prev/next
+ changeYear: false, // True if year can be selected directly, false if only prev/next
+ yearRange: "c-10:c+10", // Range of years to display in drop-down,
+ // either relative to today's year (-nn:+nn), relative to currently displayed year
+ // (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+ showOtherMonths: false, // True to show dates in other months, false to leave blank
+ selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+ showWeek: false, // True to show week of the year, false to not show it
+ calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+ // takes a Date and returns the number of the week for it
+ shortYearCutoff: "+10", // Short year values < this are in the current century,
+ // > this are in the previous century,
+ // string value starting with "+" for current year + value
+ minDate: null, // The earliest selectable date, or null for no limit
+ maxDate: null, // The latest selectable date, or null for no limit
+ duration: "fast", // Duration of display/closure
+ beforeShowDay: null, // Function that takes a date and returns an array with
+ // [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+ // [2] = cell title (optional), e.g. $.datepicker.noWeekends
+ beforeShow: null, // Function that takes an input field and
+ // returns a set of custom settings for the date picker
+ onSelect: null, // Define a callback function when a date is selected
+ onChangeMonthYear: null, // Define a callback function when the month or year is changed
+ onClose: null, // Define a callback function when the datepicker is closed
+ numberOfMonths: 1, // Number of months to show at a time
+ showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+ stepMonths: 1, // Number of months to step back/forward
+ stepBigMonths: 12, // Number of months to step back/forward for the big links
+ altField: "", // Selector for an alternate field to store selected dates into
+ altFormat: "", // The date format to use for the alternate field
+ constrainInput: true, // The input is constrained by the current date format
+ showButtonPanel: false, // True to show button panel, false to not show it
+ autoSize: false, // True to size the input for the date format, false to leave as is
+ disabled: false // The initial disabled state
+ };
+ $.extend(this._defaults, this.regional[""]);
+ this.regional.en = $.extend(true, {}, this.regional[""]);
+ this.regional["en-US"] = $.extend(true, {}, this.regional.en);
+ this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+ }
+
+ $.extend(Datepicker.prototype, {
+ /* Class name added to elements to indicate already configured with a date picker. */
+ markerClassName: "hasDatepicker",
+
+ //Keep track of the maximum number of rows displayed (see #7043)
+ maxRows: 4,
+
+ // TODO rename to "widget" when switching to widget factory
+ _widgetDatepicker: function () {
+ return this.dpDiv;
+ },
+
+ /* Override the default settings for all instances of the date picker.
+ * @param settings object - the new settings to use as defaults (anonymous object)
+ * @return the manager object
+ */
+ setDefaults: function (settings) {
+ datepicker_extendRemove(this._defaults, settings || {});
+ return this;
+ },
+
+ /* Attach the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param settings object - the new settings to use for this date picker instance (anonymous)
+ */
+ _attachDatepicker: function (target, settings) {
+ var nodeName, inline, inst;
+ nodeName = target.nodeName.toLowerCase();
+ inline = (nodeName === "div" || nodeName === "span");
+ if (!target.id) {
+ this.uuid += 1;
+ target.id = "dp" + this.uuid;
+ }
+ inst = this._newInst($(target), inline);
+ inst.settings = $.extend({}, settings || {});
+ if (nodeName === "input") {
+ this._connectDatepicker(target, inst);
+ } else if (inline) {
+ this._inlineDatepicker(target, inst);
+ }
+ },
+
+ /* Create a new instance object. */
+ _newInst: function (target, inline) {
+ var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+ return {
+ id: id, input: target, // associated target
+ selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+ drawMonth: 0, drawYear: 0, // month being drawn
+ inline: inline, // is datepicker inline or not
+ dpDiv: (!inline ? this.dpDiv : // presentation div
+ datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))
+ };
+ },
+
+ /* Attach the date picker to an input field. */
+ _connectDatepicker: function (target, inst) {
+ var input = $(target);
+ inst.append = $([]);
+ inst.trigger = $([]);
+ if (input.hasClass(this.markerClassName)) {
+ return;
+ }
+ this._attachments(input, inst);
+ input.addClass(this.markerClassName).keydown(this._doKeyDown).
+ keypress(this._doKeyPress).keyup(this._doKeyUp);
+ this._autoSize(inst);
+ $.data(target, "datepicker", inst);
+ //If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+ if (inst.settings.disabled) {
+ this._disableDatepicker(target);
+ }
+ },
+
+ /* Make attachments based on settings. */
+ _attachments: function (input, inst) {
+ var showOn, buttonText, buttonImage,
+ appendText = this._get(inst, "appendText"),
+ isRTL = this._get(inst, "isRTL");
+
+ if (inst.append) {
+ inst.append.remove();
+ }
+ if (appendText) {
+ inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+ input[isRTL ? "before" : "after"](inst.append);
+ }
+
+ input.unbind("focus", this._showDatepicker);
+
+ if (inst.trigger) {
+ inst.trigger.remove();
+ }
+
+ showOn = this._get(inst, "showOn");
+ if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+ input.focus(this._showDatepicker);
+ }
+ if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+ buttonText = this._get(inst, "buttonText");
+ buttonImage = this._get(inst, "buttonImage");
+ inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+ $("<img/>").addClass(this._triggerClass).
+ attr({src: buttonImage, alt: buttonText, title: buttonText}) :
+ $("<button type='button'></button>").addClass(this._triggerClass).
+ html(!buttonImage ? buttonText : $("<img/>").attr(
+ {src: buttonImage, alt: buttonText, title: buttonText})));
+ input[isRTL ? "before" : "after"](inst.trigger);
+ inst.trigger.click(function () {
+ if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+ $.datepicker._hideDatepicker();
+ } else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+ $.datepicker._hideDatepicker();
+ $.datepicker._showDatepicker(input[0]);
+ } else {
+ $.datepicker._showDatepicker(input[0]);
+ }
+ return false;
+ });
+ }
+ },
+
+ /* Apply the maximum length for the date format. */
+ _autoSize: function (inst) {
+ if (this._get(inst, "autoSize") && !inst.inline) {
+ var findMax, max, maxI, i,
+ date = new Date(2009, 12 - 1, 20), // Ensure double digits
+ dateFormat = this._get(inst, "dateFormat");
+
+ if (dateFormat.match(/[DM]/)) {
+ findMax = function (names) {
+ max = 0;
+ maxI = 0;
+ for (i = 0; i < names.length; i++) {
+ if (names[i].length > max) {
+ max = names[i].length;
+ maxI = i;
+ }
+ }
+ return maxI;
+ };
+ date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+ "monthNames" : "monthNamesShort"))));
+ date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+ "dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+ }
+ inst.input.attr("size", this._formatDate(inst, date).length);
+ }
+ },
+
+ /* Attach an inline date picker to a div. */
+ _inlineDatepicker: function (target, inst) {
+ var divSpan = $(target);
+ if (divSpan.hasClass(this.markerClassName)) {
+ return;
+ }
+ divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+ $.data(target, "datepicker", inst);
+ this._setDate(inst, this._getDefaultDate(inst), true);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ //If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+ if (inst.settings.disabled) {
+ this._disableDatepicker(target);
+ }
+ // Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+ // http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+ inst.dpDiv.css("display", "block");
+ },
+
+ /* Pop-up the date picker in a "dialog" box.
+ * @param input element - ignored
+ * @param date string or Date - the initial date to display
+ * @param onSelect function - the function to call when a date is selected
+ * @param settings object - update the dialog date picker instance's settings (anonymous object)
+ * @param pos int[2] - coordinates for the dialog's position within the screen or
+ * event - with x/y coordinates or
+ * leave empty for default (screen centre)
+ * @return the manager object
+ */
+ _dialogDatepicker: function (input, date, onSelect, settings, pos) {
+ var id, browserWidth, browserHeight, scrollX, scrollY,
+ inst = this._dialogInst; // internal instance
+
+ if (!inst) {
+ this.uuid += 1;
+ id = "dp" + this.uuid;
+ this._dialogInput = $("<input type='text' id='" + id +
+ "' style='position: absolute; top: -100px; width: 0px;'/>");
+ this._dialogInput.keydown(this._doKeyDown);
+ $("body").append(this._dialogInput);
+ inst = this._dialogInst = this._newInst(this._dialogInput, false);
+ inst.settings = {};
+ $.data(this._dialogInput[0], "datepicker", inst);
+ }
+ datepicker_extendRemove(inst.settings, settings || {});
+ date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+ this._dialogInput.val(date);
+
+ this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+ if (!this._pos) {
+ browserWidth = document.documentElement.clientWidth;
+ browserHeight = document.documentElement.clientHeight;
+ scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+ scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+ this._pos = // should use actual width/height below
+ [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+ }
+
+ // move input on screen for focus, but hidden behind dialog
+ this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+ inst.settings.onSelect = onSelect;
+ this._inDialog = true;
+ this.dpDiv.addClass(this._dialogClass);
+ this._showDatepicker(this._dialogInput[0]);
+ if ($.blockUI) {
+ $.blockUI(this.dpDiv);
+ }
+ $.data(this._dialogInput[0], "datepicker", inst);
+ return this;
+ },
+
+ /* Detach a datepicker from its control.
+ * @param target element - the target input field or division or span
+ */
+ _destroyDatepicker: function (target) {
+ var nodeName,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ $.removeData(target, "datepicker");
+ if (nodeName === "input") {
+ inst.append.remove();
+ inst.trigger.remove();
+ $target.removeClass(this.markerClassName).
+ unbind("focus", this._showDatepicker).
+ unbind("keydown", this._doKeyDown).
+ unbind("keypress", this._doKeyPress).
+ unbind("keyup", this._doKeyUp);
+ } else if (nodeName === "div" || nodeName === "span") {
+ $target.removeClass(this.markerClassName).empty();
+ }
+
+ if (datepicker_instActive === inst) {
+ datepicker_instActive = null;
+ }
+ },
+
+ /* Enable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _enableDatepicker: function (target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = false;
+ inst.trigger.filter("button").
+ each(function () {
+ this.disabled = false;
+ }).end().
+ filter("img").css({opacity: "1.0", cursor: ""});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().removeClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", false);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function (value) {
+ return (value === target ? null : value);
+ }); // delete entry
+ },
+
+ /* Disable the date picker to a jQuery selection.
+ * @param target element - the target input field or division or span
+ */
+ _disableDatepicker: function (target) {
+ var nodeName, inline,
+ $target = $(target),
+ inst = $.data(target, "datepicker");
+
+ if (!$target.hasClass(this.markerClassName)) {
+ return;
+ }
+
+ nodeName = target.nodeName.toLowerCase();
+ if (nodeName === "input") {
+ target.disabled = true;
+ inst.trigger.filter("button").
+ each(function () {
+ this.disabled = true;
+ }).end().
+ filter("img").css({opacity: "0.5", cursor: "default"});
+ } else if (nodeName === "div" || nodeName === "span") {
+ inline = $target.children("." + this._inlineClass);
+ inline.children().addClass("ui-state-disabled");
+ inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+ prop("disabled", true);
+ }
+ this._disabledInputs = $.map(this._disabledInputs,
+ function (value) {
+ return (value === target ? null : value);
+ }); // delete entry
+ this._disabledInputs[this._disabledInputs.length] = target;
+ },
+
+ /* Is the first field in a jQuery collection disabled as a datepicker?
+ * @param target element - the target input field or division or span
+ * @return boolean - true if disabled, false if enabled
+ */
+ _isDisabledDatepicker: function (target) {
+ if (!target) {
+ return false;
+ }
+ for (var i = 0; i < this._disabledInputs.length; i++) {
+ if (this._disabledInputs[i] === target) {
+ return true;
+ }
+ }
+ return false;
+ },
+
+ /* Retrieve the instance data for the target control.
+ * @param target element - the target input field or division or span
+ * @return object - the associated instance data
+ * @throws error if a jQuery problem getting data
+ */
+ _getInst: function (target) {
+ try {
+ return $.data(target, "datepicker");
+ }
+ catch (err) {
+ throw "Missing instance data for this datepicker";
+ }
+ },
+
+ /* Update or retrieve the settings for a date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ * @param name object - the new settings to update or
+ * string - the name of the setting to change or retrieve,
+ * when retrieving also "all" for all instance settings or
+ * "defaults" for all global defaults
+ * @param value any - the new value for the setting
+ * (omit if above is an object or to retrieve a value)
+ */
+ _optionDatepicker: function (target, name, value) {
+ var settings, date, minDate, maxDate,
+ inst = this._getInst(target);
+
+ if (arguments.length === 2 && typeof name === "string") {
+ return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+ (inst ? (name === "all" ? $.extend({}, inst.settings) :
+ this._get(inst, name)) : null));
+ }
+
+ settings = name || {};
+ if (typeof name === "string") {
+ settings = {};
+ settings[name] = value;
+ }
+
+ if (inst) {
+ if (this._curInst === inst) {
+ this._hideDatepicker();
+ }
+
+ date = this._getDateDatepicker(target, true);
+ minDate = this._getMinMaxDate(inst, "min");
+ maxDate = this._getMinMaxDate(inst, "max");
+ datepicker_extendRemove(inst.settings, settings);
+ // reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+ if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+ inst.settings.minDate = this._formatDate(inst, minDate);
+ }
+ if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+ inst.settings.maxDate = this._formatDate(inst, maxDate);
+ }
+ if ("disabled" in settings) {
+ if (settings.disabled) {
+ this._disableDatepicker(target);
+ } else {
+ this._enableDatepicker(target);
+ }
+ }
+ this._attachments($(target), inst);
+ this._autoSize(inst);
+ this._setDate(inst, date);
+ this._updateAlternate(inst);
+ this._updateDatepicker(inst);
+ }
+ },
+
+ // change method deprecated
+ _changeDatepicker: function (target, name, value) {
+ this._optionDatepicker(target, name, value);
+ },
+
+ /* Redraw the date picker attached to an input field or division.
+ * @param target element - the target input field or division or span
+ */
+ _refreshDatepicker: function (target) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._updateDatepicker(inst);
+ }
+ },
+
+ /* Set the dates for a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param date Date - the new date
+ */
+ _setDateDatepicker: function (target, date) {
+ var inst = this._getInst(target);
+ if (inst) {
+ this._setDate(inst, date);
+ this._updateDatepicker(inst);
+ this._updateAlternate(inst);
+ }
+ },
+
+ /* Get the date(s) for the first entry in a jQuery selection.
+ * @param target element - the target input field or division or span
+ * @param noDefault boolean - true if no default date is to be used
+ * @return Date - the current date
+ */
+ _getDateDatepicker: function (target, noDefault) {
+ var inst = this._getInst(target);
+ if (inst && !inst.inline) {
+ this._setDateFromField(inst, noDefault);
+ }
+ return (inst ? this._getDate(inst) : null);
+ },
+
+ /* Handle keystrokes. */
+ _doKeyDown: function (event) {
+ var onSelect, dateStr, sel,
+ inst = $.datepicker._getInst(event.target),
+ handled = true,
+ isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+ inst._keyEvent = true;
+ if ($.datepicker._datepickerShowing) {
+ switch (event.keyCode) {
+ case 9:
+ $.datepicker._hideDatepicker();
+ handled = false;
+ break; // hide on tab out
+ case 13:
+ sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+ $.datepicker._currentClass + ")", inst.dpDiv);
+ if (sel[0]) {
+ $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+ }
+
+ onSelect = $.datepicker._get(inst, "onSelect");
+ if (onSelect) {
+ dateStr = $.datepicker._formatDate(inst);
+
+ // trigger custom callback
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+ } else {
+ $.datepicker._hideDatepicker();
+ }
+
+ return false; // don't submit the form
+ case 27:
+ $.datepicker._hideDatepicker();
+ break; // hide on escape
+ case 33:
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ break; // previous month/year on page up/+ ctrl
+ case 34:
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ break; // next month/year on page down/+ ctrl
+ case 35:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._clearDate(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // clear on ctrl or command +end
+ case 36:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._gotoToday(event.target);
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // current on ctrl or command +home
+ case 37:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // -1 day on ctrl or command +left
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ -$.datepicker._get(inst, "stepBigMonths") :
+ -$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +left on Mac
+ break;
+ case 38:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, -7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // -1 week on ctrl or command +up
+ case 39:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ // +1 day on ctrl or command +right
+ if (event.originalEvent.altKey) {
+ $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+ +$.datepicker._get(inst, "stepBigMonths") :
+ +$.datepicker._get(inst, "stepMonths")), "M");
+ }
+ // next month/year on alt +right
+ break;
+ case 40:
+ if (event.ctrlKey || event.metaKey) {
+ $.datepicker._adjustDate(event.target, +7, "D");
+ }
+ handled = event.ctrlKey || event.metaKey;
+ break; // +1 week on ctrl or command +down
+ default:
+ handled = false;
+ }
+ } else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+ $.datepicker._showDatepicker(this);
+ } else {
+ handled = false;
+ }
+
+ if (handled) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ },
+
+ /* Filter entered characters - based on date format. */
+ _doKeyPress: function (event) {
+ var chars, chr,
+ inst = $.datepicker._getInst(event.target);
+
+ if ($.datepicker._get(inst, "constrainInput")) {
+ chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+ chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+ return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+ }
+ },
+
+ /* Synchronise manual entry and field/alternate field. */
+ _doKeyUp: function (event) {
+ var date,
+ inst = $.datepicker._getInst(event.target);
+
+ if (inst.input.val() !== inst.lastVal) {
+ try {
+ date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ (inst.input ? inst.input.val() : null),
+ $.datepicker._getFormatConfig(inst));
+
+ if (date) { // only if valid
+ $.datepicker._setDateFromField(inst);
+ $.datepicker._updateAlternate(inst);
+ $.datepicker._updateDatepicker(inst);
+ }
+ }
+ catch (err) {
+ }
+ }
+ return true;
+ },
+
+ /* Pop-up the date picker for a given input field.
+ * If false returned from beforeShow event handler do not show.
+ * @param input element - the input field attached to the date picker or
+ * event - if triggered by focus
+ */
+ _showDatepicker: function (input) {
+ input = input.target || input;
+ if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+ input = $("input", input.parentNode)[0];
+ }
+
+ if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+ return;
+ }
+
+ var inst, beforeShow, beforeShowSettings, isFixed,
+ offset, showAnim, duration;
+
+ inst = $.datepicker._getInst(input);
+ if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+ $.datepicker._curInst.dpDiv.stop(true, true);
+ if (inst && $.datepicker._datepickerShowing) {
+ $.datepicker._hideDatepicker($.datepicker._curInst.input[0]);
+ }
+ }
+
+ beforeShow = $.datepicker._get(inst, "beforeShow");
+ beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+ if (beforeShowSettings === false) {
+ return;
+ }
+ datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+ inst.lastVal = null;
+ $.datepicker._lastInput = input;
+ $.datepicker._setDateFromField(inst);
+
+ if ($.datepicker._inDialog) { // hide cursor
+ input.value = "";
+ }
+ if (!$.datepicker._pos) { // position below input
+ $.datepicker._pos = $.datepicker._findPos(input);
+ $.datepicker._pos[1] += input.offsetHeight; // add the height
+ }
+
+ isFixed = false;
+ $(input).parents().each(function () {
+ isFixed |= $(this).css("position") === "fixed";
+ return !isFixed;
+ });
+
+ offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+ $.datepicker._pos = null;
+ //to avoid flashes on Firefox
+ inst.dpDiv.empty();
+ // determine sizing offscreen
+ inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+ $.datepicker._updateDatepicker(inst);
+ // fix width for dynamic number of date pickers
+ // and adjust position before showing
+ offset = $.datepicker._checkOffset(inst, offset, isFixed);
+ inst.dpDiv.css({
+ position: ($.datepicker._inDialog && $.blockUI ?
+ "static" : (isFixed ? "fixed" : "absolute")), display: "none",
+ left: offset.left + "px", top: offset.top + "px"
+ });
+
+ if (!inst.inline) {
+ showAnim = $.datepicker._get(inst, "showAnim");
+ duration = $.datepicker._get(inst, "duration");
+ inst.dpDiv.css("z-index", datepicker_getZindex($(input)) + 1);
+ $.datepicker._datepickerShowing = true;
+
+ if ($.effects && $.effects.effect[showAnim]) {
+ inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+ } else {
+ inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+ }
+
+ if ($.datepicker._shouldFocusInput(inst)) {
+ inst.input.focus();
+ }
+
+ $.datepicker._curInst = inst;
+ }
+ },
+
+ /* Generate the date picker content. */
+ _updateDatepicker: function (inst) {
+ this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+ datepicker_instActive = inst; // for delegate hover events
+ inst.dpDiv.empty().append(this._generateHTML(inst));
+ this._attachHandlers(inst);
+
+ var origyearshtml,
+ numMonths = this._getNumberOfMonths(inst),
+ cols = numMonths[1],
+ width = 17,
+ activeCell = inst.dpDiv.find("." + this._dayOverClass + " a");
+
+ if (activeCell.length > 0) {
+ datepicker_handleMouseover.apply(activeCell.get(0));
+ }
+
+ inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+ if (cols > 1) {
+ inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+ }
+ inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+ "Class"]("ui-datepicker-multi");
+ inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+ "Class"]("ui-datepicker-rtl");
+
+ if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput(inst)) {
+ inst.input.focus();
+ }
+
+ // deffered render of the years select (to avoid flashes on Firefox)
+ if (inst.yearshtml) {
+ origyearshtml = inst.yearshtml;
+ setTimeout(function () {
+ //assure that inst.yearshtml didn't change.
+ if (origyearshtml === inst.yearshtml && inst.yearshtml) {
+ inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+ }
+ origyearshtml = inst.yearshtml = null;
+ }, 0);
+ }
+ },
+
+ // #6694 - don't focus the input if it's already focused
+ // this breaks the change event in IE
+ // Support: IE and jQuery <1.9
+ _shouldFocusInput: function (inst) {
+ return inst.input && inst.input.is(":visible") && !inst.input.is(":disabled") && !inst.input.is(":focus");
+ },
+
+ /* Check positioning to remain on screen. */
+ _checkOffset: function (inst, offset, isFixed) {
+ var dpWidth = inst.dpDiv.outerWidth(),
+ dpHeight = inst.dpDiv.outerHeight(),
+ inputWidth = inst.input ? inst.input.outerWidth() : 0,
+ inputHeight = inst.input ? inst.input.outerHeight() : 0,
+ viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+ viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+ offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+ offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+ offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+ // now check if datepicker is showing outside window viewport - move to a better place if so.
+ offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+ Math.abs(offset.left + dpWidth - viewWidth) : 0);
+ offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+ Math.abs(dpHeight + inputHeight) : 0);
+
+ return offset;
+ },
+
+ /* Find an object's position on the screen. */
+ _findPos: function (obj) {
+ var position,
+ inst = this._getInst(obj),
+ isRTL = this._get(inst, "isRTL");
+
+ while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+ obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+ }
+
+ position = $(obj).offset();
+ return [position.left, position.top];
+ },
+
+ /* Hide the date picker from view.
+ * @param input element - the input field attached to the date picker
+ */
+ _hideDatepicker: function (input) {
+ var showAnim, duration, postProcess, onClose,
+ inst = this._curInst;
+
+ if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+ return;
+ }
+
+ if (this._datepickerShowing) {
+ showAnim = this._get(inst, "showAnim");
+ duration = this._get(inst, "duration");
+ postProcess = function () {
+ $.datepicker._tidyDialog(inst);
+ };
+
+ // DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+ if ($.effects && ( $.effects.effect[showAnim] || $.effects[showAnim] )) {
+ inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+ } else {
+ inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+ (showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+ }
+
+ if (!showAnim) {
+ postProcess();
+ }
+ this._datepickerShowing = false;
+
+ onClose = this._get(inst, "onClose");
+ if (onClose) {
+ onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+ }
+
+ this._lastInput = null;
+ if (this._inDialog) {
+ this._dialogInput.css({position: "absolute", left: "0", top: "-100px"});
+ if ($.blockUI) {
+ $.unblockUI();
+ $("body").append(this.dpDiv);
+ }
+ }
+ this._inDialog = false;
+ }
+ },
+
+ /* Tidy up after a dialog display. */
+ _tidyDialog: function (inst) {
+ inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+ },
+
+ /* Close date picker if clicked elsewhere. */
+ _checkExternalClick: function (event) {
+ if (!$.datepicker._curInst) {
+ return;
+ }
+
+ var $target = $(event.target),
+ inst = $.datepicker._getInst($target[0]);
+
+ if (( ( $target[0].id !== $.datepicker._mainDivId &&
+ $target.parents("#" + $.datepicker._mainDivId).length === 0 && !$target.hasClass($.datepicker.markerClassName) && !$target.closest("." + $.datepicker._triggerClass).length &&
+ $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+ ( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst )) {
+ $.datepicker._hideDatepicker();
+ }
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustDate: function (id, offset, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+ this._adjustInstDate(inst, offset +
+ (period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+ period);
+ this._updateDatepicker(inst);
+ },
+
+ /* Action for current link. */
+ _gotoToday: function (id) {
+ var date,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+ inst.selectedDay = inst.currentDay;
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+ inst.drawYear = inst.selectedYear = inst.currentYear;
+ } else {
+ date = new Date();
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ }
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a new month/year. */
+ _selectMonthYear: function (id, select, period) {
+ var target = $(id),
+ inst = this._getInst(target[0]);
+
+ inst["selected" + (period === "M" ? "Month" : "Year")] =
+ inst["draw" + (period === "M" ? "Month" : "Year")] =
+ parseInt(select.options[select.selectedIndex].value, 10);
+
+ this._notifyChange(inst);
+ this._adjustDate(target);
+ },
+
+ /* Action for selecting a day. */
+ _selectDay: function (id, month, year, td) {
+ var inst,
+ target = $(id);
+
+ if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+ return;
+ }
+
+ inst = this._getInst(target[0]);
+ inst.selectedDay = inst.currentDay = $("a", td).html();
+ inst.selectedMonth = inst.currentMonth = month;
+ inst.selectedYear = inst.currentYear = year;
+ this._selectDate(id, this._formatDate(inst,
+ inst.currentDay, inst.currentMonth, inst.currentYear));
+ },
+
+ /* Erase the input field and hide the date picker. */
+ _clearDate: function (id) {
+ var target = $(id);
+ this._selectDate(target, "");
+ },
+
+ /* Update the input field with the selected date. */
+ _selectDate: function (id, dateStr) {
+ var onSelect,
+ target = $(id),
+ inst = this._getInst(target[0]);
+
+ dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+ if (inst.input) {
+ inst.input.val(dateStr);
+ }
+ this._updateAlternate(inst);
+
+ onSelect = this._get(inst, "onSelect");
+ if (onSelect) {
+ onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
+ } else if (inst.input) {
+ inst.input.trigger("change"); // fire the change event
+ }
+
+ if (inst.inline) {
+ this._updateDatepicker(inst);
+ } else {
+ this._hideDatepicker();
+ this._lastInput = inst.input[0];
+ if (typeof(inst.input[0]) !== "object") {
+ inst.input.focus(); // restore focus
+ }
+ this._lastInput = null;
+ }
+ },
+
+ /* Update any alternate field to synchronise with the main field. */
+ _updateAlternate: function (inst) {
+ var altFormat, date, dateStr,
+ altField = this._get(inst, "altField");
+
+ if (altField) { // update alternate field too
+ altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+ date = this._getDate(inst);
+ dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+ $(altField).each(function () {
+ $(this).val(dateStr);
+ });
+ }
+ },
+
+ /* Set as beforeShowDay function to prevent selection of weekends.
+ * @param date Date - the date to customise
+ * @return [boolean, string] - is this date selectable?, what is its CSS class?
+ */
+ noWeekends: function (date) {
+ var day = date.getDay();
+ return [(day > 0 && day < 6), ""];
+ },
+
+ /* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+ * @param date Date - the date to get the week for
+ * @return number - the number of the week within the year that contains this date
+ */
+ iso8601Week: function (date) {
+ var time,
+ checkDate = new Date(date.getTime());
+
+ // Find Thursday of this week starting on Monday
+ checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+ time = checkDate.getTime();
+ checkDate.setMonth(0); // Compare with Jan 1
+ checkDate.setDate(1);
+ return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+ },
+
+ /* Parse a string value into a date object.
+ * See formatDate below for the possible formats.
+ *
+ * @param format string - the expected format of the date
+ * @param value string - the date in the above format
+ * @param settings Object - attributes include:
+ * shortYearCutoff number - the cutoff year for determining the century (optional)
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return Date - the extracted date value or null if value is blank
+ */
+ parseDate: function (format, value, settings) {
+ if (format == null || value == null) {
+ throw "Invalid arguments";
+ }
+
+ value = (typeof value === "object" ? value.toString() : value + "");
+ if (value === "") {
+ return null;
+ }
+
+ var iFormat, dim, extra,
+ iValue = 0,
+ shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+ shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ year = -1,
+ month = -1,
+ day = -1,
+ doy = -1,
+ literal = false,
+ date,
+ // Check whether a format character is doubled
+ lookAhead = function (match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Extract a number from the string value
+ getNumber = function (match) {
+ var isDoubled = lookAhead(match),
+ size = (match === "@" ? 14 : (match === "!" ? 20 :
+ (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+ minSize = (match === "y" ? size : 1),
+ digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+ num = value.substring(iValue).match(digits);
+ if (!num) {
+ throw "Missing number at position " + iValue;
+ }
+ iValue += num[0].length;
+ return parseInt(num[0], 10);
+ },
+ // Extract a name from the string value and convert to an index
+ getName = function (match, shortNames, longNames) {
+ var index = -1,
+ names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+ return [[k, v]];
+ }).sort(function (a, b) {
+ return -(a[1].length - b[1].length);
+ });
+
+ $.each(names, function (i, pair) {
+ var name = pair[1];
+ if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+ index = pair[0];
+ iValue += name.length;
+ return false;
+ }
+ });
+ if (index !== -1) {
+ return index + 1;
+ } else {
+ throw "Unknown name at position " + iValue;
+ }
+ },
+ // Confirm that a literal character matches the string value
+ checkLiteral = function () {
+ if (value.charAt(iValue) !== format.charAt(iFormat)) {
+ throw "Unexpected literal at position " + iValue;
+ }
+ iValue++;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ checkLiteral();
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ day = getNumber("d");
+ break;
+ case "D":
+ getName("D", dayNamesShort, dayNames);
+ break;
+ case "o":
+ doy = getNumber("o");
+ break;
+ case "m":
+ month = getNumber("m");
+ break;
+ case "M":
+ month = getName("M", monthNamesShort, monthNames);
+ break;
+ case "y":
+ year = getNumber("y");
+ break;
+ case "@":
+ date = new Date(getNumber("@"));
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "!":
+ date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+ year = date.getFullYear();
+ month = date.getMonth() + 1;
+ day = date.getDate();
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ checkLiteral();
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ checkLiteral();
+ }
+ }
+ }
+
+ if (iValue < value.length) {
+ extra = value.substr(iValue);
+ if (!/^\s+/.test(extra)) {
+ throw "Extra/unparsed characters found in date: " + extra;
+ }
+ }
+
+ if (year === -1) {
+ year = new Date().getFullYear();
+ } else if (year < 100) {
+ year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+ (year <= shortYearCutoff ? 0 : -100);
+ }
+
+ if (doy > -1) {
+ month = 1;
+ day = doy;
+ do {
+ dim = this._getDaysInMonth(year, month - 1);
+ if (day <= dim) {
+ break;
+ }
+ month++;
+ day -= dim;
+ } while (true);
+ }
+
+ date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+ if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+ throw "Invalid date"; // E.g. 31/02/00
+ }
+ return date;
+ },
+
+ /* Standard date formats. */
+ ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y", // RFC 822
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd", // ISO 8601
+
+ _ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+ Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+ /* Format a date object into a string value.
+ * The format can be combinations of the following:
+ * d - day of month (no leading zero)
+ * dd - day of month (two digit)
+ * o - day of year (no leading zeros)
+ * oo - day of year (three digit)
+ * D - day name short
+ * DD - day name long
+ * m - month of year (no leading zero)
+ * mm - month of year (two digit)
+ * M - month name short
+ * MM - month name long
+ * y - year (two digit)
+ * yy - year (four digit)
+ * @ - Unix timestamp (ms since 01/01/1970)
+ * ! - Windows ticks (100ns since 01/01/0001)
+ * "..." - literal text
+ * '' - single quote
+ *
+ * @param format string - the desired format of the date
+ * @param date Date - the date value to format
+ * @param settings Object - attributes include:
+ * dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
+ * dayNames string[7] - names of the days from Sunday (optional)
+ * monthNamesShort string[12] - abbreviated names of the months (optional)
+ * monthNames string[12] - names of the months (optional)
+ * @return string - the date in the above format
+ */
+ formatDate: function (format, date, settings) {
+ if (!date) {
+ return "";
+ }
+
+ var iFormat,
+ dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+ dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+ monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+ monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+ // Check whether a format character is doubled
+ lookAhead = function (match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ },
+ // Format a number, with leading zero if necessary
+ formatNumber = function (match, value, len) {
+ var num = "" + value;
+ if (lookAhead(match)) {
+ while (num.length < len) {
+ num = "0" + num;
+ }
+ }
+ return num;
+ },
+ // Format a name, short or long as requested
+ formatName = function (match, value, shortNames, longNames) {
+ return (lookAhead(match) ? longNames[value] : shortNames[value]);
+ },
+ output = "",
+ literal = false;
+
+ if (date) {
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ output += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ output += formatNumber("d", date.getDate(), 2);
+ break;
+ case "D":
+ output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+ break;
+ case "o":
+ output += formatNumber("o",
+ Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+ break;
+ case "m":
+ output += formatNumber("m", date.getMonth() + 1, 2);
+ break;
+ case "M":
+ output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+ break;
+ case "y":
+ output += (lookAhead("y") ? date.getFullYear() :
+ (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+ break;
+ case "@":
+ output += date.getTime();
+ break;
+ case "!":
+ output += date.getTime() * 10000 + this._ticksTo1970;
+ break;
+ case "'":
+ if (lookAhead("'")) {
+ output += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ output += format.charAt(iFormat);
+ }
+ }
+ }
+ }
+ return output;
+ },
+
+ /* Extract all possible characters from the date format. */
+ _possibleChars: function (format) {
+ var iFormat,
+ chars = "",
+ literal = false,
+ // Check whether a format character is doubled
+ lookAhead = function (match) {
+ var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+ if (matches) {
+ iFormat++;
+ }
+ return matches;
+ };
+
+ for (iFormat = 0; iFormat < format.length; iFormat++) {
+ if (literal) {
+ if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+ literal = false;
+ } else {
+ chars += format.charAt(iFormat);
+ }
+ } else {
+ switch (format.charAt(iFormat)) {
+ case "d":
+ case "m":
+ case "y":
+ case "@":
+ chars += "0123456789";
+ break;
+ case "D":
+ case "M":
+ return null; // Accept anything
+ case "'":
+ if (lookAhead("'")) {
+ chars += "'";
+ } else {
+ literal = true;
+ }
+ break;
+ default:
+ chars += format.charAt(iFormat);
+ }
+ }
+ }
+ return chars;
+ },
+
+ /* Get a setting value, defaulting if necessary. */
+ _get: function (inst, name) {
+ return inst.settings[name] !== undefined ?
+ inst.settings[name] : this._defaults[name];
+ },
+
+ /* Parse existing date and initialise date picker. */
+ _setDateFromField: function (inst, noDefault) {
+ if (inst.input.val() === inst.lastVal) {
+ return;
+ }
+
+ var dateFormat = this._get(inst, "dateFormat"),
+ dates = inst.lastVal = inst.input ? inst.input.val() : null,
+ defaultDate = this._getDefaultDate(inst),
+ date = defaultDate,
+ settings = this._getFormatConfig(inst);
+
+ try {
+ date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+ } catch (event) {
+ dates = (noDefault ? "" : dates);
+ }
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ inst.currentDay = (dates ? date.getDate() : 0);
+ inst.currentMonth = (dates ? date.getMonth() : 0);
+ inst.currentYear = (dates ? date.getFullYear() : 0);
+ this._adjustInstDate(inst);
+ },
+
+ /* Retrieve the default date shown on opening. */
+ _getDefaultDate: function (inst) {
+ return this._restrictMinMax(inst,
+ this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+ },
+
+ /* A date may be specified as an exact value or a relative one. */
+ _determineDate: function (inst, date, defaultDate) {
+ var offsetNumeric = function (offset) {
+ var date = new Date();
+ date.setDate(date.getDate() + offset);
+ return date;
+ },
+ offsetString = function (offset) {
+ try {
+ return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+ offset, $.datepicker._getFormatConfig(inst));
+ }
+ catch (e) {
+ // Ignore
+ }
+
+ var date = (offset.toLowerCase().match(/^c/) ?
+ $.datepicker._getDate(inst) : null) || new Date(),
+ year = date.getFullYear(),
+ month = date.getMonth(),
+ day = date.getDate(),
+ pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+ matches = pattern.exec(offset);
+
+ while (matches) {
+ switch (matches[2] || "d") {
+ case "d" :
+ case "D" :
+ day += parseInt(matches[1], 10);
+ break;
+ case "w" :
+ case "W" :
+ day += parseInt(matches[1], 10) * 7;
+ break;
+ case "m" :
+ case "M" :
+ month += parseInt(matches[1], 10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ case "y":
+ case "Y" :
+ year += parseInt(matches[1], 10);
+ day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+ break;
+ }
+ matches = pattern.exec(offset);
+ }
+ return new Date(year, month, day);
+ },
+ newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+ (typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+ newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+ if (newDate) {
+ newDate.setHours(0);
+ newDate.setMinutes(0);
+ newDate.setSeconds(0);
+ newDate.setMilliseconds(0);
+ }
+ return this._daylightSavingAdjust(newDate);
+ },
+
+ /* Handle switch to/from daylight saving.
+ * Hours may be non-zero on daylight saving cut-over:
+ * > 12 when midnight changeover, but then cannot generate
+ * midnight datetime, so jump to 1AM, otherwise reset.
+ * @param date (Date) the date to check
+ * @return (Date) the corrected date
+ */
+ _daylightSavingAdjust: function (date) {
+ if (!date) {
+ return null;
+ }
+ date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+ return date;
+ },
+
+ /* Set the date(s) directly. */
+ _setDate: function (inst, date, noChange) {
+ var clear = !date,
+ origMonth = inst.selectedMonth,
+ origYear = inst.selectedYear,
+ newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+ inst.selectedDay = inst.currentDay = newDate.getDate();
+ inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+ inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+ if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+ this._notifyChange(inst);
+ }
+ this._adjustInstDate(inst);
+ if (inst.input) {
+ inst.input.val(clear ? "" : this._formatDate(inst));
+ }
+ },
+
+ /* Retrieve the date(s) directly. */
+ _getDate: function (inst) {
+ var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+ this._daylightSavingAdjust(new Date(
+ inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return startDate;
+ },
+
+ /* Attach the onxxx handlers. These are declared statically so
+ * they work with static code transformers like Caja.
+ */
+ _attachHandlers: function (inst) {
+ var stepMonths = this._get(inst, "stepMonths"),
+ id = "#" + inst.id.replace(/\\\\/g, "\\");
+ inst.dpDiv.find("[data-handler]").map(function () {
+ var handler = {
+ prev: function () {
+ $.datepicker._adjustDate(id, -stepMonths, "M");
+ },
+ next: function () {
+ $.datepicker._adjustDate(id, +stepMonths, "M");
+ },
+ hide: function () {
+ $.datepicker._hideDatepicker();
+ },
+ today: function () {
+ $.datepicker._gotoToday(id);
+ },
+ selectDay: function () {
+ $.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+ return false;
+ },
+ selectMonth: function () {
+ $.datepicker._selectMonthYear(id, this, "M");
+ return false;
+ },
+ selectYear: function () {
+ $.datepicker._selectMonthYear(id, this, "Y");
+ return false;
+ }
+ };
+ $(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+ });
+ },
+
+ /* Generate the HTML for the current state of the date picker. */
+ _generateHTML: function (inst) {
+ var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+ controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+ monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+ selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+ cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+ printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+ tempDate = new Date(),
+ today = this._daylightSavingAdjust(
+ new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+ isRTL = this._get(inst, "isRTL"),
+ showButtonPanel = this._get(inst, "showButtonPanel"),
+ hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+ navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+ numMonths = this._getNumberOfMonths(inst),
+ showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+ stepMonths = this._get(inst, "stepMonths"),
+ isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+ currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+ new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ drawMonth = inst.drawMonth - showCurrentAtPos,
+ drawYear = inst.drawYear;
+
+ if (drawMonth < 0) {
+ drawMonth += 12;
+ drawYear--;
+ }
+ if (maxDate) {
+ maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+ maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+ maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+ while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+ drawMonth--;
+ if (drawMonth < 0) {
+ drawMonth = 11;
+ drawYear--;
+ }
+ }
+ }
+ inst.drawMonth = drawMonth;
+ inst.drawYear = drawYear;
+
+ prevText = this._get(inst, "prevText");
+ prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+ " title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+ nextText = this._get(inst, "nextText");
+ nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+ this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+ this._getFormatConfig(inst)));
+
+ next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+ "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+ " title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+ (hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+ currentText = this._get(inst, "currentText");
+ gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+ currentText = (!navigationAsDateFormat ? currentText :
+ this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+ controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+ this._get(inst, "closeText") + "</button>" : "");
+
+ buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+ (this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+ ">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+ firstDay = parseInt(this._get(inst, "firstDay"), 10);
+ firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+ showWeek = this._get(inst, "showWeek");
+ dayNames = this._get(inst, "dayNames");
+ dayNamesMin = this._get(inst, "dayNamesMin");
+ monthNames = this._get(inst, "monthNames");
+ monthNamesShort = this._get(inst, "monthNamesShort");
+ beforeShowDay = this._get(inst, "beforeShowDay");
+ showOtherMonths = this._get(inst, "showOtherMonths");
+ selectOtherMonths = this._get(inst, "selectOtherMonths");
+ defaultDate = this._getDefaultDate(inst);
+ html = "";
+ dow;
+ for (row = 0; row < numMonths[0]; row++) {
+ group = "";
+ this.maxRows = 4;
+ for (col = 0; col < numMonths[1]; col++) {
+ selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+ cornerClass = " ui-corner-all";
+ calender = "";
+ if (isMultiMonth) {
+ calender += "<div class='ui-datepicker-group";
+ if (numMonths[1] > 1) {
+ switch (col) {
+ case 0:
+ calender += " ui-datepicker-group-first";
+ cornerClass = " ui-corner-" + (isRTL ? "right" : "left");
+ break;
+ case numMonths[1] - 1:
+ calender += " ui-datepicker-group-last";
+ cornerClass = " ui-corner-" + (isRTL ? "left" : "right");
+ break;
+ default:
+ calender += " ui-datepicker-group-middle";
+ cornerClass = "";
+ break;
+ }
+ }
+ calender += "'>";
+ }
+ calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+ (/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+ (/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+ this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+ row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+ "</div><table class='ui-datepicker-calendar'><thead>" +
+ "<tr>";
+ thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+ for (dow = 0; dow < 7; dow++) { // days of the week
+ day = (dow + firstDay) % 7;
+ thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+ "<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+ }
+ calender += thead + "</tr></thead><tbody>";
+ daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+ if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+ inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+ }
+ leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+ curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+ numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+ this.maxRows = numRows;
+ printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+ for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+ calender += "<tr>";
+ tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+ this._get(inst, "calculateWeek")(printDate) + "</td>");
+ for (dow = 0; dow < 7; dow++) { // create date picker days
+ daySettings = (beforeShowDay ?
+ beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+ otherMonth = (printDate.getMonth() !== drawMonth);
+ unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+ (minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+ tbody += "<td class='" +
+ ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+ (otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+ ((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+ (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+ // or defaultDate is current printedDate and defaultDate is selectedDate
+ " " + this._dayOverClass : "") + // highlight selected day
+ (unselectable ? " " + this._unselectableClass + " ui-state-disabled" : "") + // highlight unselectable days
+ (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+ (printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+ (printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+ ((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+ (unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+ (otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+ (unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+ (printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+ (printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+ (otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+ "' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+ printDate.setDate(printDate.getDate() + 1);
+ printDate = this._daylightSavingAdjust(printDate);
+ }
+ calender += tbody + "</tr>";
+ }
+ drawMonth++;
+ if (drawMonth > 11) {
+ drawMonth = 0;
+ drawYear++;
+ }
+ calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+ ((numMonths[0] > 0 && col === numMonths[1] - 1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+ group += calender;
+ }
+ html += group;
+ }
+ html += buttonPanel;
+ inst._keyEvent = false;
+ return html;
+ },
+
+ /* Generate the month and year header. */
+ _generateMonthYearHeader: function (inst, drawMonth, drawYear, minDate, maxDate,
+ secondary, monthNames, monthNamesShort) {
+
+ var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+ changeMonth = this._get(inst, "changeMonth"),
+ changeYear = this._get(inst, "changeYear"),
+ showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+ html = "<div class='ui-datepicker-title'>",
+ monthHtml = "";
+
+ // month selection
+ if (secondary || !changeMonth) {
+ monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+ } else {
+ inMinYear = (minDate && minDate.getFullYear() === drawYear);
+ inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+ monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+ for (month = 0; month < 12; month++) {
+ if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+ monthHtml += "<option value='" + month + "'" +
+ (month === drawMonth ? " selected='selected'" : "") +
+ ">" + monthNamesShort[month] + "</option>";
+ }
+ }
+ monthHtml += "</select>";
+ }
+
+ if (!showMonthAfterYear) {
+ html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+ }
+
+ // year selection
+ if (!inst.yearshtml) {
+ inst.yearshtml = "";
+ if (secondary || !changeYear) {
+ html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+ } else {
+ // determine range of years to display
+ years = this._get(inst, "yearRange").split(":");
+ thisYear = new Date().getFullYear();
+ determineYear = function (value) {
+ var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+ (value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+ parseInt(value, 10)));
+ return (isNaN(year) ? thisYear : year);
+ };
+ year = determineYear(years[0]);
+ endYear = Math.max(year, determineYear(years[1] || ""));
+ year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+ endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+ inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+ for (; year <= endYear; year++) {
+ inst.yearshtml += "<option value='" + year + "'" +
+ (year === drawYear ? " selected='selected'" : "") +
+ ">" + year + "</option>";
+ }
+ inst.yearshtml += "</select>";
+
+ html += inst.yearshtml;
+ inst.yearshtml = null;
+ }
+ }
+
+ html += this._get(inst, "yearSuffix");
+ if (showMonthAfterYear) {
+ html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+ }
+ html += "</div>"; // Close datepicker_header
+ return html;
+ },
+
+ /* Adjust one of the date sub-fields. */
+ _adjustInstDate: function (inst, offset, period) {
+ var year = inst.drawYear + (period === "Y" ? offset : 0),
+ month = inst.drawMonth + (period === "M" ? offset : 0),
+ day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+ date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+ inst.selectedDay = date.getDate();
+ inst.drawMonth = inst.selectedMonth = date.getMonth();
+ inst.drawYear = inst.selectedYear = date.getFullYear();
+ if (period === "M" || period === "Y") {
+ this._notifyChange(inst);
+ }
+ },
+
+ /* Ensure a date is within any min/max bounds. */
+ _restrictMinMax: function (inst, date) {
+ var minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ newDate = (minDate && date < minDate ? minDate : date);
+ return (maxDate && newDate > maxDate ? maxDate : newDate);
+ },
+
+ /* Notify change of month/year. */
+ _notifyChange: function (inst) {
+ var onChange = this._get(inst, "onChangeMonthYear");
+ if (onChange) {
+ onChange.apply((inst.input ? inst.input[0] : null),
+ [inst.selectedYear, inst.selectedMonth + 1, inst]);
+ }
+ },
+
+ /* Determine the number of months to show. */
+ _getNumberOfMonths: function (inst) {
+ var numMonths = this._get(inst, "numberOfMonths");
+ return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+ },
+
+ /* Determine the current maximum date - ensure no time components are set. */
+ _getMinMaxDate: function (inst, minMax) {
+ return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+ },
+
+ /* Find the number of days in a given month. */
+ _getDaysInMonth: function (year, month) {
+ return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+ },
+
+ /* Find the day of the week of the first of a month. */
+ _getFirstDayOfMonth: function (year, month) {
+ return new Date(year, month, 1).getDay();
+ },
+
+ /* Determines if we should allow a "next/prev" month display change. */
+ _canAdjustMonth: function (inst, offset, curYear, curMonth) {
+ var numMonths = this._getNumberOfMonths(inst),
+ date = this._daylightSavingAdjust(new Date(curYear,
+ curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+ if (offset < 0) {
+ date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+ }
+ return this._isInRange(inst, date);
+ },
+
+ /* Is the given date in the accepted range? */
+ _isInRange: function (inst, date) {
+ var yearSplit, currentYear,
+ minDate = this._getMinMaxDate(inst, "min"),
+ maxDate = this._getMinMaxDate(inst, "max"),
+ minYear = null,
+ maxYear = null,
+ years = this._get(inst, "yearRange");
+ if (years) {
+ yearSplit = years.split(":");
+ currentYear = new Date().getFullYear();
+ minYear = parseInt(yearSplit[0], 10);
+ maxYear = parseInt(yearSplit[1], 10);
+ if (yearSplit[0].match(/[+\-].*/)) {
+ minYear += currentYear;
+ }
+ if (yearSplit[1].match(/[+\-].*/)) {
+ maxYear += currentYear;
+ }
+ }
+
+ return ((!minDate || date.getTime() >= minDate.getTime()) &&
+ (!maxDate || date.getTime() <= maxDate.getTime()) &&
+ (!minYear || date.getFullYear() >= minYear) &&
+ (!maxYear || date.getFullYear() <= maxYear));
+ },
+
+ /* Provide the configuration settings for formatting/parsing. */
+ _getFormatConfig: function (inst) {
+ var shortYearCutoff = this._get(inst, "shortYearCutoff");
+ shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+ new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+ return {
+ shortYearCutoff: shortYearCutoff,
+ dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+ monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")
+ };
+ },
+
+ /* Format the given date for display. */
+ _formatDate: function (inst, day, month, year) {
+ if (!day) {
+ inst.currentDay = inst.selectedDay;
+ inst.currentMonth = inst.selectedMonth;
+ inst.currentYear = inst.selectedYear;
+ }
+ var date = (day ? (typeof day === "object" ? day :
+ this._daylightSavingAdjust(new Date(year, month, day))) :
+ this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+ return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+ }
+ });
+
+ /*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+ function datepicker_bindHover(dpDiv) {
+ var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return dpDiv.delegate(selector, "mouseout", function () {
+ $(this).removeClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).removeClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).removeClass("ui-datepicker-next-hover");
+ }
+ })
+ .delegate(selector, "mouseover", datepicker_handleMouseover);
+ }
+
+ function datepicker_handleMouseover() {
+ if (!$.datepicker._isDisabledDatepicker(datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+ $(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+ $(this).addClass("ui-state-hover");
+ if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+ $(this).addClass("ui-datepicker-prev-hover");
+ }
+ if (this.className.indexOf("ui-datepicker-next") !== -1) {
+ $(this).addClass("ui-datepicker-next-hover");
+ }
+ }
+ }
+
+ /* jQuery extend now ignores nulls! */
+ function datepicker_extendRemove(target, props) {
+ $.extend(target, props);
+ for (var name in props) {
+ if (props[name] == null) {
+ target[name] = props[name];
+ }
+ }
+ return target;
+ }
+
+ /* Invoke the datepicker functionality.
+ @param options string - a command, optionally followed by additional parameters or
+ Object - settings for attaching new datepicker functionality
+ @return jQuery object */
+ $.fn.datepicker = function (options) {
+
+ /* Verify an empty collection wasn't passed - Fixes #6976 */
+ if (!this.length) {
+ return this;
+ }
+
+ /* Initialise the date picker. */
+ if (!$.datepicker.initialized) {
+ $(document).mousedown($.datepicker._checkExternalClick);
+ $.datepicker.initialized = true;
+ }
+
+ /* Append datepicker main container to body if not exist. */
+ if ($("#" + $.datepicker._mainDivId).length === 0) {
+ $("body").append($.datepicker.dpDiv);
+ }
+
+ var otherArgs = Array.prototype.slice.call(arguments, 1);
+ if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+ return $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this[0]].concat(otherArgs));
+ }
+ return this.each(function () {
+ typeof options === "string" ?
+ $.datepicker["_" + options + "Datepicker"].
+ apply($.datepicker, [this].concat(otherArgs)) :
+ $.datepicker._attachDatepicker(this, options);
+ });
+ };
+
+ $.datepicker = new Datepicker(); // singleton instance
+ $.datepicker.initialized = false;
+ $.datepicker.uuid = new Date().getTime();
+ $.datepicker.version = "1.11.4";
+
+ var datepicker = $.datepicker;
+
+
+ /*!
+ * jQuery UI Dialog 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+ var dialog = $.widget("ui.dialog", {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoOpen: true,
+ buttons: [],
+ closeOnEscape: true,
+ closeText: "Close",
+ dialogClass: "",
+ draggable: true,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: false,
+ position: {
+ my: "center",
+ at: "center",
+ of: window,
+ collision: "fit",
+ // Ensure the titlebar is always visible
+ using: function (pos) {
+ var topOffset = $(this).css(pos).offset().top;
+ if (topOffset < 0) {
+ $(this).css("top", pos.top - topOffset);
+ }
+ }
+ },
+ resizable: true,
+ show: null,
+ title: null,
+ width: 300,
+
+ // callbacks
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+
+ sizeRelatedOptions: {
+ buttons: true,
+ height: true,
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true,
+ width: true
+ },
+
+ resizableRelatedOptions: {
+ maxHeight: true,
+ maxWidth: true,
+ minHeight: true,
+ minWidth: true
+ },
+
+ _create: function () {
+ this.originalCss = {
+ display: this.element[0].style.display,
+ width: this.element[0].style.width,
+ minHeight: this.element[0].style.minHeight,
+ maxHeight: this.element[0].style.maxHeight,
+ height: this.element[0].style.height
+ };
+ this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index(this.element)
+ };
+ this.originalTitle = this.element.attr("title");
+ this.options.title = this.options.title || this.originalTitle;
+
+ this._createWrapper();
+
+ this.element
+ .show()
+ .removeAttr("title")
+ .addClass("ui-dialog-content ui-widget-content")
+ .appendTo(this.uiDialog);
+
+ this._createTitlebar();
+ this._createButtonPane();
+
+ if (this.options.draggable && $.fn.draggable) {
+ this._makeDraggable();
+ }
+ if (this.options.resizable && $.fn.resizable) {
+ this._makeResizable();
+ }
+
+ this._isOpen = false;
+
+ this._trackFocus();
+ },
+
+ _init: function () {
+ if (this.options.autoOpen) {
+ this.open();
+ }
+ },
+
+ _appendTo: function () {
+ var element = this.options.appendTo;
+ if (element && (element.jquery || element.nodeType)) {
+ return $(element);
+ }
+ return this.document.find(element || "body").eq(0);
+ },
+
+ _destroy: function () {
+ var next,
+ originalPosition = this.originalPosition;
+
+ this._untrackInstance();
+ this._destroyOverlay();
+
+ this.element
+ .removeUniqueId()
+ .removeClass("ui-dialog-content ui-widget-content")
+ .css(this.originalCss)
+ // Without detaching first, the following becomes really slow
+ .detach();
+
+ this.uiDialog.stop(true, true).remove();
+
+ if (this.originalTitle) {
+ this.element.attr("title", this.originalTitle);
+ }
+
+ next = originalPosition.parent.children().eq(originalPosition.index);
+ // Don't try to place the dialog next to itself (#8613)
+ if (next.length && next[0] !== this.element[0]) {
+ next.before(this.element);
+ } else {
+ originalPosition.parent.append(this.element);
+ }
+ },
+
+ widget: function () {
+ return this.uiDialog;
+ },
+
+ disable: $.noop,
+ enable: $.noop,
+
+ close: function (event) {
+ var activeElement,
+ that = this;
+
+ if (!this._isOpen || this._trigger("beforeClose", event) === false) {
+ return;
+ }
+
+ this._isOpen = false;
+ this._focusedElement = null;
+ this._destroyOverlay();
+ this._untrackInstance();
+
+ if (!this.opener.filter(":focusable").focus().length) {
+
+ // support: IE9
+ // IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+ try {
+ activeElement = this.document[0].activeElement;
+
+ // Support: IE9, IE10
+ // If the <body> is blurred, IE will switch windows, see #4520
+ if (activeElement && activeElement.nodeName.toLowerCase() !== "body") {
+
+ // Hiding a focused element doesn't trigger blur in WebKit
+ // so in case we have nothing to focus on, explicitly blur the active element
+ // https://bugs.webkit.org/show_bug.cgi?id=47182
+ $(activeElement).blur();
+ }
+ } catch (error) {
+ }
+ }
+
+ this._hide(this.uiDialog, this.options.hide, function () {
+ that._trigger("close", event);
+ });
+ },
+
+ isOpen: function () {
+ return this._isOpen;
+ },
+
+ moveToTop: function () {
+ this._moveToTop();
+ },
+
+ _moveToTop: function (event, silent) {
+ var moved = false,
+ zIndices = this.uiDialog.siblings(".ui-front:visible").map(function () {
+ return +$(this).css("z-index");
+ }).get(),
+ zIndexMax = Math.max.apply(null, zIndices);
+
+ if (zIndexMax >= +this.uiDialog.css("z-index")) {
+ this.uiDialog.css("z-index", zIndexMax + 1);
+ moved = true;
+ }
+
+ if (moved && !silent) {
+ this._trigger("focus", event);
+ }
+ return moved;
+ },
+
+ open: function () {
+ var that = this;
+ if (this._isOpen) {
+ if (this._moveToTop()) {
+ this._focusTabbable();
+ }
+ return;
+ }
+
+ this._isOpen = true;
+ this.opener = $(this.document[0].activeElement);
+
+ this._size();
+ this._position();
+ this._createOverlay();
+ this._moveToTop(null, true);
+
+ // Ensure the overlay is moved to the top with the dialog, but only when
+ // opening. The overlay shouldn't move after the dialog is open so that
+ // modeless dialogs opened after the modal dialog stack properly.
+ if (this.overlay) {
+ this.overlay.css("z-index", this.uiDialog.css("z-index") - 1);
+ }
+
+ this._show(this.uiDialog, this.options.show, function () {
+ that._focusTabbable();
+ that._trigger("focus");
+ });
+
+ // Track the dialog immediately upon openening in case a focus event
+ // somehow occurs outside of the dialog before an element inside the
+ // dialog is focused (#10152)
+ this._makeFocusTarget();
+
+ this._trigger("open");
+ },
+
+ _focusTabbable: function () {
+ // Set focus to the first match:
+ // 1. An element that was focused previously
+ // 2. First element inside the dialog matching [autofocus]
+ // 3. Tabbable element inside the content element
+ // 4. Tabbable element inside the buttonpane
+ // 5. The close button
+ // 6. The dialog itself
+ var hasFocus = this._focusedElement;
+ if (!hasFocus) {
+ hasFocus = this.element.find("[autofocus]");
+ }
+ if (!hasFocus.length) {
+ hasFocus = this.element.find(":tabbable");
+ }
+ if (!hasFocus.length) {
+ hasFocus = this.uiDialogButtonPane.find(":tabbable");
+ }
+ if (!hasFocus.length) {
+ hasFocus = this.uiDialogTitlebarClose.filter(":tabbable");
+ }
+ if (!hasFocus.length) {
+ hasFocus = this.uiDialog;
+ }
+ hasFocus.eq(0).focus();
+ },
+
+ _keepFocus: function (event) {
+ function checkFocus() {
+ var activeElement = this.document[0].activeElement,
+ isActive = this.uiDialog[0] === activeElement ||
+ $.contains(this.uiDialog[0], activeElement);
+ if (!isActive) {
+ this._focusTabbable();
+ }
+ }
+
+ event.preventDefault();
+ checkFocus.call(this);
+ // support: IE
+ // IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+ // so we check again later
+ this._delay(checkFocus);
+ },
+
+ _createWrapper: function () {
+ this.uiDialog = $("<div>")
+ .addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+ this.options.dialogClass)
+ .hide()
+ .attr({
+ // Setting tabIndex makes the div focusable
+ tabIndex: -1,
+ role: "dialog"
+ })
+ .appendTo(this._appendTo());
+
+ this._on(this.uiDialog, {
+ keydown: function (event) {
+ if (this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+ event.keyCode === $.ui.keyCode.ESCAPE) {
+ event.preventDefault();
+ this.close(event);
+ return;
+ }
+
+ // prevent tabbing out of dialogs
+ if (event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented()) {
+ return;
+ }
+ var tabbables = this.uiDialog.find(":tabbable"),
+ first = tabbables.filter(":first"),
+ last = tabbables.filter(":last");
+
+ if (( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey) {
+ this._delay(function () {
+ first.focus();
+ });
+ event.preventDefault();
+ } else if (( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey) {
+ this._delay(function () {
+ last.focus();
+ });
+ event.preventDefault();
+ }
+ },
+ mousedown: function (event) {
+ if (this._moveToTop(event)) {
+ this._focusTabbable();
+ }
+ }
+ });
+
+ // We assume that any existing aria-describedby attribute means
+ // that the dialog content is marked up properly
+ // otherwise we brute force the content as the description
+ if (!this.element.find("[aria-describedby]").length) {
+ this.uiDialog.attr({
+ "aria-describedby": this.element.uniqueId().attr("id")
+ });
+ }
+ },
+
+ _createTitlebar: function () {
+ var uiDialogTitle;
+
+ this.uiDialogTitlebar = $("<div>")
+ .addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix")
+ .prependTo(this.uiDialog);
+ this._on(this.uiDialogTitlebar, {
+ mousedown: function (event) {
+ // Don't prevent click on close button (#8838)
+ // Focusing a dialog that is partially scrolled out of view
+ // causes the browser to scroll it into view, preventing the click event
+ if (!$(event.target).closest(".ui-dialog-titlebar-close")) {
+ // Dialog isn't getting focus when dragging (#8063)
+ this.uiDialog.focus();
+ }
+ }
+ });
+
+ // support: IE
+ // Use type="button" to prevent enter keypresses in textboxes from closing the
+ // dialog in IE (#9312)
+ this.uiDialogTitlebarClose = $("<button type='button'></button>")
+ .button({
+ label: this.options.closeText,
+ icons: {
+ primary: "ui-icon-closethick"
+ },
+ text: false
+ })
+ .addClass("ui-dialog-titlebar-close")
+ .appendTo(this.uiDialogTitlebar);
+ this._on(this.uiDialogTitlebarClose, {
+ click: function (event) {
+ event.preventDefault();
+ this.close(event);
+ }
+ });
+
+ uiDialogTitle = $("<span>")
+ .uniqueId()
+ .addClass("ui-dialog-title")
+ .prependTo(this.uiDialogTitlebar);
+ this._title(uiDialogTitle);
+
+ this.uiDialog.attr({
+ "aria-labelledby": uiDialogTitle.attr("id")
+ });
+ },
+
+ _title: function (title) {
+ if (!this.options.title) {
+ title.html("&#160;");
+ }
+ title.text(this.options.title);
+ },
+
+ _createButtonPane: function () {
+ this.uiDialogButtonPane = $("<div>")
+ .addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");
+
+ this.uiButtonSet = $("<div>")
+ .addClass("ui-dialog-buttonset")
+ .appendTo(this.uiDialogButtonPane);
+
+ this._createButtons();
+ },
+
+ _createButtons: function () {
+ var that = this,
+ buttons = this.options.buttons;
+
+ // if we already have a button pane, remove it
+ this.uiDialogButtonPane.remove();
+ this.uiButtonSet.empty();
+
+ if ($.isEmptyObject(buttons) || ($.isArray(buttons) && !buttons.length)) {
+ this.uiDialog.removeClass("ui-dialog-buttons");
+ return;
+ }
+
+ $.each(buttons, function (name, props) {
+ var click, buttonOptions;
+ props = $.isFunction(props) ?
+ {click: props, text: name} :
+ props;
+ // Default to a non-submitting button
+ props = $.extend({type: "button"}, props);
+ // Change the context for the click callback to be the main element
+ click = props.click;
+ props.click = function () {
+ click.apply(that.element[0], arguments);
+ };
+ buttonOptions = {
+ icons: props.icons,
+ text: props.showText
+ };
+ delete props.icons;
+ delete props.showText;
+ $("<button></button>", props)
+ .button(buttonOptions)
+ .appendTo(that.uiButtonSet);
+ });
+ this.uiDialog.addClass("ui-dialog-buttons");
+ this.uiDialogButtonPane.appendTo(this.uiDialog);
+ },
+
+ _makeDraggable: function () {
+ var that = this,
+ options = this.options;
+
+ function filteredUi(ui) {
+ return {
+ position: ui.position,
+ offset: ui.offset
+ };
+ }
+
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function (event, ui) {
+ $(this).addClass("ui-dialog-dragging");
+ that._blockFrames();
+ that._trigger("dragStart", event, filteredUi(ui));
+ },
+ drag: function (event, ui) {
+ that._trigger("drag", event, filteredUi(ui));
+ },
+ stop: function (event, ui) {
+ var left = ui.offset.left - that.document.scrollLeft(),
+ top = ui.offset.top - that.document.scrollTop();
+
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $(this).removeClass("ui-dialog-dragging");
+ that._unblockFrames();
+ that._trigger("dragStop", event, filteredUi(ui));
+ }
+ });
+ },
+
+ _makeResizable: function () {
+ var that = this,
+ options = this.options,
+ handles = options.resizable,
+ // .ui-resizable has position: relative defined in the stylesheet
+ // but dialogs have to use absolute or fixed positioning
+ position = this.uiDialog.css("position"),
+ resizeHandles = typeof handles === "string" ?
+ handles :
+ "n,e,s,w,se,sw,ne,nw";
+
+ function filteredUi(ui) {
+ return {
+ originalPosition: ui.originalPosition,
+ originalSize: ui.originalSize,
+ position: ui.position,
+ size: ui.size
+ };
+ }
+
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: options.maxWidth,
+ maxHeight: options.maxHeight,
+ minWidth: options.minWidth,
+ minHeight: this._minHeight(),
+ handles: resizeHandles,
+ start: function (event, ui) {
+ $(this).addClass("ui-dialog-resizing");
+ that._blockFrames();
+ that._trigger("resizeStart", event, filteredUi(ui));
+ },
+ resize: function (event, ui) {
+ that._trigger("resize", event, filteredUi(ui));
+ },
+ stop: function (event, ui) {
+ var offset = that.uiDialog.offset(),
+ left = offset.left - that.document.scrollLeft(),
+ top = offset.top - that.document.scrollTop();
+
+ options.height = that.uiDialog.height();
+ options.width = that.uiDialog.width();
+ options.position = {
+ my: "left top",
+ at: "left" + (left >= 0 ? "+" : "") + left + " " +
+ "top" + (top >= 0 ? "+" : "") + top,
+ of: that.window
+ };
+ $(this).removeClass("ui-dialog-resizing");
+ that._unblockFrames();
+ that._trigger("resizeStop", event, filteredUi(ui));
+ }
+ })
+ .css("position", position);
+ },
+
+ _trackFocus: function () {
+ this._on(this.widget(), {
+ focusin: function (event) {
+ this._makeFocusTarget();
+ this._focusedElement = $(event.target);
+ }
+ });
+ },
+
+ _makeFocusTarget: function () {
+ this._untrackInstance();
+ this._trackingInstances().unshift(this);
+ },
+
+ _untrackInstance: function () {
+ var instances = this._trackingInstances(),
+ exists = $.inArray(this, instances);
+ if (exists !== -1) {
+ instances.splice(exists, 1);
+ }
+ },
+
+ _trackingInstances: function () {
+ var instances = this.document.data("ui-dialog-instances");
+ if (!instances) {
+ instances = [];
+ this.document.data("ui-dialog-instances", instances);
+ }
+ return instances;
+ },
+
+ _minHeight: function () {
+ var options = this.options;
+
+ return options.height === "auto" ?
+ options.minHeight :
+ Math.min(options.minHeight, options.height);
+ },
+
+ _position: function () {
+ // Need to show the dialog to get the actual offset in the position plugin
+ var isVisible = this.uiDialog.is(":visible");
+ if (!isVisible) {
+ this.uiDialog.show();
+ }
+ this.uiDialog.position(this.options.position);
+ if (!isVisible) {
+ this.uiDialog.hide();
+ }
+ },
+
+ _setOptions: function (options) {
+ var that = this,
+ resize = false,
+ resizableOptions = {};
+
+ $.each(options, function (key, value) {
+ that._setOption(key, value);
+
+ if (key in that.sizeRelatedOptions) {
+ resize = true;
+ }
+ if (key in that.resizableRelatedOptions) {
+ resizableOptions[key] = value;
+ }
+ });
+
+ if (resize) {
+ this._size();
+ this._position();
+ }
+ if (this.uiDialog.is(":data(ui-resizable)")) {
+ this.uiDialog.resizable("option", resizableOptions);
+ }
+ },
+
+ _setOption: function (key, value) {
+ var isDraggable, isResizable,
+ uiDialog = this.uiDialog;
+
+ if (key === "dialogClass") {
+ uiDialog
+ .removeClass(this.options.dialogClass)
+ .addClass(value);
+ }
+
+ if (key === "disabled") {
+ return;
+ }
+
+ this._super(key, value);
+
+ if (key === "appendTo") {
+ this.uiDialog.appendTo(this._appendTo());
+ }
+
+ if (key === "buttons") {
+ this._createButtons();
+ }
+
+ if (key === "closeText") {
+ this.uiDialogTitlebarClose.button({
+ // Ensure that we always pass a string
+ label: "" + value
+ });
+ }
+
+ if (key === "draggable") {
+ isDraggable = uiDialog.is(":data(ui-draggable)");
+ if (isDraggable && !value) {
+ uiDialog.draggable("destroy");
+ }
+
+ if (!isDraggable && value) {
+ this._makeDraggable();
+ }
+ }
+
+ if (key === "position") {
+ this._position();
+ }
+
+ if (key === "resizable") {
+ // currently resizable, becoming non-resizable
+ isResizable = uiDialog.is(":data(ui-resizable)");
+ if (isResizable && !value) {
+ uiDialog.resizable("destroy");
+ }
+
+ // currently resizable, changing handles
+ if (isResizable && typeof value === "string") {
+ uiDialog.resizable("option", "handles", value);
+ }
+
+ // currently non-resizable, becoming resizable
+ if (!isResizable && value !== false) {
+ this._makeResizable();
+ }
+ }
+
+ if (key === "title") {
+ this._title(this.uiDialogTitlebar.find(".ui-dialog-title"));
+ }
+ },
+
+ _size: function () {
+ // If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+ // divs will both have width and height set, so we need to reset them
+ var nonContentHeight, minContentHeight, maxContentHeight,
+ options = this.options;
+
+ // Reset content sizing
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ });
+
+ if (options.minWidth > options.width) {
+ options.width = options.minWidth;
+ }
+
+ // reset wrapper sizing
+ // determine the height of all the non-content elements
+ nonContentHeight = this.uiDialog.css({
+ height: "auto",
+ width: options.width
+ })
+ .outerHeight();
+ minContentHeight = Math.max(0, options.minHeight - nonContentHeight);
+ maxContentHeight = typeof options.maxHeight === "number" ?
+ Math.max(0, options.maxHeight - nonContentHeight) :
+ "none";
+
+ if (options.height === "auto") {
+ this.element.css({
+ minHeight: minContentHeight,
+ maxHeight: maxContentHeight,
+ height: "auto"
+ });
+ } else {
+ this.element.height(Math.max(0, options.height - nonContentHeight));
+ }
+
+ if (this.uiDialog.is(":data(ui-resizable)")) {
+ this.uiDialog.resizable("option", "minHeight", this._minHeight());
+ }
+ },
+
+ _blockFrames: function () {
+ this.iframeBlocks = this.document.find("iframe").map(function () {
+ var iframe = $(this);
+
+ return $("<div>")
+ .css({
+ position: "absolute",
+ width: iframe.outerWidth(),
+ height: iframe.outerHeight()
+ })
+ .appendTo(iframe.parent())
+ .offset(iframe.offset())[0];
+ });
+ },
+
+ _unblockFrames: function () {
+ if (this.iframeBlocks) {
+ this.iframeBlocks.remove();
+ delete this.iframeBlocks;
+ }
+ },
+
+ _allowInteraction: function (event) {
+ if ($(event.target).closest(".ui-dialog").length) {
+ return true;
+ }
+
+ // TODO: Remove hack when datepicker implements
+ // the .ui-front logic (#8989)
+ return !!$(event.target).closest(".ui-datepicker").length;
+ },
+
+ _createOverlay: function () {
+ if (!this.options.modal) {
+ return;
+ }
+
+ // We use a delay in case the overlay is created from an
+ // event that we're going to be cancelling (#2804)
+ var isOpening = true;
+ this._delay(function () {
+ isOpening = false;
+ });
+
+ if (!this.document.data("ui-dialog-overlays")) {
+
+ // Prevent use of anchors and inputs
+ // Using _on() for an event handler shared across many instances is
+ // safe because the dialogs stack and must be closed in reverse order
+ this._on(this.document, {
+ focusin: function (event) {
+ if (isOpening) {
+ return;
+ }
+
+ if (!this._allowInteraction(event)) {
+ event.preventDefault();
+ this._trackingInstances()[0]._focusTabbable();
+ }
+ }
+ });
+ }
+
+ this.overlay = $("<div>")
+ .addClass("ui-widget-overlay ui-front")
+ .appendTo(this._appendTo());
+ this._on(this.overlay, {
+ mousedown: "_keepFocus"
+ });
+ this.document.data("ui-dialog-overlays",
+ (this.document.data("ui-dialog-overlays") || 0) + 1);
+ },
+
+ _destroyOverlay: function () {
+ if (!this.options.modal) {
+ return;
+ }
+
+ if (this.overlay) {
+ var overlays = this.document.data("ui-dialog-overlays") - 1;
+
+ if (!overlays) {
+ this.document
+ .unbind("focusin")
+ .removeData("ui-dialog-overlays");
+ } else {
+ this.document.data("ui-dialog-overlays", overlays);
+ }
+
+ this.overlay.remove();
+ this.overlay = null;
+ }
+ }
+ });
+
+
+ /*!
+ * jQuery UI Progressbar 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
+
+
+ var progressbar = $.widget("ui.progressbar", {
+ version: "1.11.4",
+ options: {
+ max: 100,
+ value: 0,
+
+ change: null,
+ complete: null
+ },
+
+ min: 0,
+
+ _create: function () {
+ // Constrain initial value
+ this.oldValue = this.options.value = this._constrainedValue();
+
+ this.element
+ .addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
+ .attr({
+ // Only set static values, aria-valuenow and aria-valuemax are
+ // set inside _refreshValue()
+ role: "progressbar",
+ "aria-valuemin": this.min
+ });
+
+ this.valueDiv = $("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>")
+ .appendTo(this.element);
+
+ this._refreshValue();
+ },
+
+ _destroy: function () {
+ this.element
+ .removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all")
+ .removeAttr("role")
+ .removeAttr("aria-valuemin")
+ .removeAttr("aria-valuemax")
+ .removeAttr("aria-valuenow");
+
+ this.valueDiv.remove();
+ },
+
+ value: function (newValue) {
+ if (newValue === undefined) {
+ return this.options.value;
+ }
+
+ this.options.value = this._constrainedValue(newValue);
+ this._refreshValue();
+ },
+
+ _constrainedValue: function (newValue) {
+ if (newValue === undefined) {
+ newValue = this.options.value;
+ }
+
+ this.indeterminate = newValue === false;
+
+ // sanitize value
+ if (typeof newValue !== "number") {
+ newValue = 0;
+ }
+
+ return this.indeterminate ? false :
+ Math.min(this.options.max, Math.max(this.min, newValue));
+ },
+
+ _setOptions: function (options) {
+ // Ensure "value" option is set after other values (like max)
+ var value = options.value;
+ delete options.value;
+
+ this._super(options);
+
+ this.options.value = this._constrainedValue(value);
+ this._refreshValue();
+ },
+
+ _setOption: function (key, value) {
+ if (key === "max") {
+ // Don't allow a max less than min
+ value = Math.max(this.min, value);
+ }
+ if (key === "disabled") {
+ this.element
+ .toggleClass("ui-state-disabled", !!value)
+ .attr("aria-disabled", value);
+ }
+ this._super(key, value);
+ },
+
+ _percentage: function () {
+ return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+ },
+
+ _refreshValue: function () {
+ var value = this.options.value,
+ percentage = this._percentage();
+
+ this.valueDiv
+ .toggle(this.indeterminate || value > this.min)
+ .toggleClass("ui-corner-right", value === this.options.max)
+ .width(percentage.toFixed(0) + "%");
+
+ this.element.toggleClass("ui-progressbar-indeterminate", this.indeterminate);
+
+ if (this.indeterminate) {
+ this.element.removeAttr("aria-valuenow");
+ if (!this.overlayDiv) {
+ this.overlayDiv = $("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv);
+ }
+ } else {
+ this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": value
+ });
+ if (this.overlayDiv) {
+ this.overlayDiv.remove();
+ this.overlayDiv = null;
+ }
+ }
+
+ if (this.oldValue !== value) {
+ this.oldValue = value;
+ this._trigger("change");
+ }
+ if (value === this.options.max) {
+ this._trigger("complete");
+ }
+ }
+ });
+
+
+ /*!
+ * jQuery UI Selectmenu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+ var selectmenu = $.widget("ui.selectmenu", {
+ version: "1.11.4",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {
+ button: "ui-icon-triangle-1-s"
+ },
+ position: {
+ my: "left top",
+ at: "left bottom",
+ collision: "none"
+ },
+ width: null,
+
+ // callbacks
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+
+ _create: function () {
+ var selectmenuId = this.element.uniqueId().attr("id");
+ this.ids = {
+ element: selectmenuId,
+ button: selectmenuId + "-button",
+ menu: selectmenuId + "-menu"
+ };
+
+ this._drawButton();
+ this._drawMenu();
+
+ if (this.options.disabled) {
+ this.disable();
+ }
+ },
+
+ _drawButton: function () {
+ var that = this;
+
+ // Associate existing label with the new button
+ this.label = $("label[for='" + this.ids.element + "']").attr("for", this.ids.button);
+ this._on(this.label, {
+ click: function (event) {
+ this.button.focus();
+ event.preventDefault();
+ }
+ });
+
+ // Hide original select element
+ this.element.hide();
+
+ // Create button
+ this.button = $("<span>", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ })
+ .insertAfter(this.element);
+
+ $("<span>", {
+ "class": "ui-icon " + this.options.icons.button
+ })
+ .prependTo(this.button);
+
+ this.buttonText = $("<span>", {
+ "class": "ui-selectmenu-text"
+ })
+ .appendTo(this.button);
+
+ this._setText(this.buttonText, this.element.find("option:selected").text());
+ this._resizeButton();
+
+ this._on(this.button, this._buttonEvents);
+ this.button.one("focusin", function () {
+
+ // Delay rendering the menu items until the button receives focus.
+ // The menu may have already been rendered via a programmatic open.
+ if (!that.menuItems) {
+ that._refreshMenu();
+ }
+ });
+ this._hoverable(this.button);
+ this._focusable(this.button);
+ },
+
+ _drawMenu: function () {
+ var that = this;
+
+ // Create menu
+ this.menu = $("<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ });
+
+ // Wrap menu
+ this.menuWrap = $("<div>", {
+ "class": "ui-selectmenu-menu ui-front"
+ })
+ .append(this.menu)
+ .appendTo(this._appendTo());
+
+ // Initialize menu widget
+ this.menuInstance = this.menu
+ .menu({
+ role: "listbox",
+ select: function (event, ui) {
+ event.preventDefault();
+
+ // support: IE8
+ // If the item was selected via a click, the text selection
+ // will be destroyed in IE
+ that._setSelection();
+
+ that._select(ui.item.data("ui-selectmenu-item"), event);
+ },
+ focus: function (event, ui) {
+ var item = ui.item.data("ui-selectmenu-item");
+
+ // Prevent inital focus from firing and check if its a newly focused item
+ if (that.focusIndex != null && item.index !== that.focusIndex) {
+ that._trigger("focus", event, {item: item});
+ if (!that.isOpen) {
+ that._select(item, event);
+ }
+ }
+ that.focusIndex = item.index;
+
+ that.button.attr("aria-activedescendant",
+ that.menuItems.eq(item.index).attr("id"));
+ }
+ })
+ .menu("instance");
+
+ // Adjust menu styles to dropdown
+ this.menu
+ .addClass("ui-corner-bottom")
+ .removeClass("ui-corner-all");
+
+ // Don't close the menu on mouseleave
+ this.menuInstance._off(this.menu, "mouseleave");
+
+ // Cancel the menu's collapseAll on document click
+ this.menuInstance._closeOnDocumentClick = function () {
+ return false;
+ };
+
+ // Selects often contain empty items, but never contain dividers
+ this.menuInstance._isDivider = function () {
+ return false;
+ };
+ },
+
+ refresh: function () {
+ this._refreshMenu();
+ this._setText(this.buttonText, this._getSelectedItem().text());
+ if (!this.options.width) {
+ this._resizeButton();
+ }
+ },
+
+ _refreshMenu: function () {
+ this.menu.empty();
+
+ var item,
+ options = this.element.find("option");
+
+ if (!options.length) {
+ return;
+ }
+
+ this._parseOptions(options);
+ this._renderMenu(this.menu, this.items);
+
+ this.menuInstance.refresh();
+ this.menuItems = this.menu.find("li").not(".ui-selectmenu-optgroup");
+
+ item = this._getSelectedItem();
+
+ // Update the menu to have the correct item focused
+ this.menuInstance.focus(null, item);
+ this._setAria(item.data("ui-selectmenu-item"));
+
+ // Set disabled state
+ this._setOption("disabled", this.element.prop("disabled"));
+ },
+
+ open: function (event) {
+ if (this.options.disabled) {
+ return;
+ }
+
+ // If this is the first time the menu is being opened, render the items
+ if (!this.menuItems) {
+ this._refreshMenu();
+ } else {
+
+ // Menu clears focus on close, reset focus to selected item
+ this.menu.find(".ui-state-focus").removeClass("ui-state-focus");
+ this.menuInstance.focus(null, this._getSelectedItem());
+ }
+
+ this.isOpen = true;
+ this._toggleAttr();
+ this._resizeMenu();
+ this._position();
+
+ this._on(this.document, this._documentClick);
+
+ this._trigger("open", event);
+ },
+
+ _position: function () {
+ this.menuWrap.position($.extend({of: this.button}, this.options.position));
+ },
+
+ close: function (event) {
+ if (!this.isOpen) {
+ return;
+ }
+
+ this.isOpen = false;
+ this._toggleAttr();
+
+ this.range = null;
+ this._off(this.document);
+
+ this._trigger("close", event);
+ },
+
+ widget: function () {
+ return this.button;
+ },
+
+ menuWidget: function () {
+ return this.menu;
+ },
+
+ _renderMenu: function (ul, items) {
+ var that = this,
+ currentOptgroup = "";
+
+ $.each(items, function (index, item) {
+ if (item.optgroup !== currentOptgroup) {
+ $("<li>", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" +
+ ( item.element.parent("optgroup").prop("disabled") ?
+ " ui-state-disabled" :
+ "" ),
+ text: item.optgroup
+ })
+ .appendTo(ul);
+
+ currentOptgroup = item.optgroup;
+ }
+
+ that._renderItemData(ul, item);
+ });
+ },
+
+ _renderItemData: function (ul, item) {
+ return this._renderItem(ul, item).data("ui-selectmenu-item", item);
+ },
+
+ _renderItem: function (ul, item) {
+ var li = $("<li>");
+
+ if (item.disabled) {
+ li.addClass("ui-state-disabled");
+ }
+ this._setText(li, item.label);
+
+ return li.appendTo(ul);
+ },
+
+ _setText: function (element, value) {
+ if (value) {
+ element.text(value);
+ } else {
+ element.html("&#160;");
+ }
+ },
+
+ _move: function (direction, event) {
+ var item, next,
+ filter = ".ui-menu-item";
+
+ if (this.isOpen) {
+ item = this.menuItems.eq(this.focusIndex);
+ } else {
+ item = this.menuItems.eq(this.element[0].selectedIndex);
+ filter += ":not(.ui-state-disabled)";
+ }
+
+ if (direction === "first" || direction === "last") {
+ next = item[direction === "first" ? "prevAll" : "nextAll"](filter).eq(-1);
+ } else {
+ next = item[direction + "All"](filter).eq(0);
+ }
+
+ if (next.length) {
+ this.menuInstance.focus(event, next);
+ }
+ },
+
+ _getSelectedItem: function () {
+ return this.menuItems.eq(this.element[0].selectedIndex);
+ },
+
+ _toggle: function (event) {
+ this[this.isOpen ? "close" : "open"](event);
+ },
+
+ _setSelection: function () {
+ var selection;
+
+ if (!this.range) {
+ return;
+ }
+
+ if (window.getSelection) {
+ selection = window.getSelection();
+ selection.removeAllRanges();
+ selection.addRange(this.range);
+
+ // support: IE8
+ } else {
+ this.range.select();
+ }
+
+ // support: IE
+ // Setting the text selection kills the button focus in IE, but
+ // restoring the focus doesn't kill the selection.
+ this.button.focus();
+ },
+
+ _documentClick: {
+ mousedown: function (event) {
+ if (!this.isOpen) {
+ return;
+ }
+
+ if (!$(event.target).closest(".ui-selectmenu-menu, #" + this.ids.button).length) {
+ this.close(event);
+ }
+ }
+ },
+
+ _buttonEvents: {
+
+ // Prevent text selection from being reset when interacting with the selectmenu (#10144)
+ mousedown: function () {
+ var selection;
+
+ if (window.getSelection) {
+ selection = window.getSelection();
+ if (selection.rangeCount) {
+ this.range = selection.getRangeAt(0);
+ }
+
+ // support: IE8
+ } else {
+ this.range = document.selection.createRange();
+ }
+ },
+
+ click: function (event) {
+ this._setSelection();
+ this._toggle(event);
+ },
+
+ keydown: function (event) {
+ var preventDefault = true;
+ switch (event.keyCode) {
+ case $.ui.keyCode.TAB:
+ case $.ui.keyCode.ESCAPE:
+ this.close(event);
+ preventDefault = false;
+ break;
+ case $.ui.keyCode.ENTER:
+ if (this.isOpen) {
+ this._selectFocusedItem(event);
+ }
+ break;
+ case $.ui.keyCode.UP:
+ if (event.altKey) {
+ this._toggle(event);
+ } else {
+ this._move("prev", event);
+ }
+ break;
+ case $.ui.keyCode.DOWN:
+ if (event.altKey) {
+ this._toggle(event);
+ } else {
+ this._move("next", event);
+ }
+ break;
+ case $.ui.keyCode.SPACE:
+ if (this.isOpen) {
+ this._selectFocusedItem(event);
+ } else {
+ this._toggle(event);
+ }
+ break;
+ case $.ui.keyCode.LEFT:
+ this._move("prev", event);
+ break;
+ case $.ui.keyCode.RIGHT:
+ this._move("next", event);
+ break;
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.PAGE_UP:
+ this._move("first", event);
+ break;
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_DOWN:
+ this._move("last", event);
+ break;
+ default:
+ this.menu.trigger(event);
+ preventDefault = false;
+ }
+
+ if (preventDefault) {
+ event.preventDefault();
+ }
+ }
+ },
+
+ _selectFocusedItem: function (event) {
+ var item = this.menuItems.eq(this.focusIndex);
+ if (!item.hasClass("ui-state-disabled")) {
+ this._select(item.data("ui-selectmenu-item"), event);
+ }
+ },
+
+ _select: function (item, event) {
+ var oldIndex = this.element[0].selectedIndex;
+
+ // Change native select element
+ this.element[0].selectedIndex = item.index;
+ this._setText(this.buttonText, item.label);
+ this._setAria(item);
+ this._trigger("select", event, {item: item});
+
+ if (item.index !== oldIndex) {
+ this._trigger("change", event, {item: item});
+ }
+
+ this.close(event);
+ },
+
+ _setAria: function (item) {
+ var id = this.menuItems.eq(item.index).attr("id");
+
+ this.button.attr({
+ "aria-labelledby": id,
+ "aria-activedescendant": id
+ });
+ this.menu.attr("aria-activedescendant", id);
+ },
+
+ _setOption: function (key, value) {
+ if (key === "icons") {
+ this.button.find("span.ui-icon")
+ .removeClass(this.options.icons.button)
+ .addClass(value.button);
+ }
+
+ this._super(key, value);
+
+ if (key === "appendTo") {
+ this.menuWrap.appendTo(this._appendTo());
+ }
+
+ if (key === "disabled") {
+ this.menuInstance.option("disabled", value);
+ this.button
+ .toggleClass("ui-state-disabled", value)
+ .attr("aria-disabled", value);
+
+ this.element.prop("disabled", value);
+ if (value) {
+ this.button.attr("tabindex", -1);
+ this.close();
+ } else {
+ this.button.attr("tabindex", 0);
+ }
+ }
+
+ if (key === "width") {
+ this._resizeButton();
+ }
+ },
+
+ _appendTo: function () {
+ var element = this.options.appendTo;
+
+ if (element) {
+ element = element.jquery || element.nodeType ?
+ $(element) :
+ this.document.find(element).eq(0);
+ }
+
+ if (!element || !element[0]) {
+ element = this.element.closest(".ui-front");
+ }
+
+ if (!element.length) {
+ element = this.document[0].body;
+ }
+
+ return element;
+ },
+
+ _toggleAttr: function () {
+ this.button
+ .toggleClass("ui-corner-top", this.isOpen)
+ .toggleClass("ui-corner-all", !this.isOpen)
+ .attr("aria-expanded", this.isOpen);
+ this.menuWrap.toggleClass("ui-selectmenu-open", this.isOpen);
+ this.menu.attr("aria-hidden", !this.isOpen);
+ },
+
+ _resizeButton: function () {
+ var width = this.options.width;
+
+ if (!width) {
+ width = this.element.show().outerWidth();
+ this.element.hide();
+ }
+
+ this.button.outerWidth(width);
+ },
+
+ _resizeMenu: function () {
+ this.menu.outerWidth(Math.max(
+ this.button.outerWidth(),
+
+ // support: IE10
+ // IE10 wraps long text (possibly a rounding bug)
+ // so we add 1px to avoid the wrapping
+ this.menu.width("").outerWidth() + 1
+ ));
+ },
+
+ _getCreateOptions: function () {
+ return {disabled: this.element.prop("disabled")};
+ },
+
+ _parseOptions: function (options) {
+ var data = [];
+ options.each(function (index, item) {
+ var option = $(item),
+ optgroup = option.parent("optgroup");
+ data.push({
+ element: option,
+ index: index,
+ value: option.val(),
+ label: option.text(),
+ optgroup: optgroup.attr("label") || "",
+ disabled: optgroup.prop("disabled") || option.prop("disabled")
+ });
+ });
+ this.items = data;
+ },
+
+ _destroy: function () {
+ this.menuWrap.remove();
+ this.button.remove();
+ this.element.show();
+ this.element.removeUniqueId();
+ this.label.attr("for", this.ids.element);
+ }
+ });
+
+
+ /*!
+ * jQuery UI Slider 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+ var slider = $.widget("ui.slider", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "slide",
+
+ options: {
+ animate: false,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: false,
+ step: 1,
+ value: 0,
+ values: null,
+
+ // callbacks
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+
+ // number of pages in a slider
+ // (how many times can you page up/down to go through the whole range)
+ numPages: 5,
+
+ _create: function () {
+ this._keySliding = false;
+ this._mouseSliding = false;
+ this._animateOff = true;
+ this._handleIndex = null;
+ this._detectOrientation();
+ this._mouseInit();
+ this._calculateNewMax();
+
+ this.element
+ .addClass("ui-slider" +
+ " ui-slider-" + this.orientation +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this._refresh();
+ this._setOption("disabled", this.options.disabled);
+
+ this._animateOff = false;
+ },
+
+ _refresh: function () {
+ this._createRange();
+ this._createHandles();
+ this._setupEvents();
+ this._refreshValue();
+ },
+
+ _createHandles: function () {
+ var i, handleCount,
+ options = this.options,
+ existingHandles = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),
+ handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+ handles = [];
+
+ handleCount = ( options.values && options.values.length ) || 1;
+
+ if (existingHandles.length > handleCount) {
+ existingHandles.slice(handleCount).remove();
+ existingHandles = existingHandles.slice(0, handleCount);
+ }
+
+ for (i = existingHandles.length; i < handleCount; i++) {
+ handles.push(handle);
+ }
+
+ this.handles = existingHandles.add($(handles.join("")).appendTo(this.element));
+
+ this.handle = this.handles.eq(0);
+
+ this.handles.each(function (i) {
+ $(this).data("ui-slider-handle-index", i);
+ });
+ },
+
+ _createRange: function () {
+ var options = this.options,
+ classes = "";
+
+ if (options.range) {
+ if (options.range === true) {
+ if (!options.values) {
+ options.values = [this._valueMin(), this._valueMin()];
+ } else if (options.values.length && options.values.length !== 2) {
+ options.values = [options.values[0], options.values[0]];
+ } else if ($.isArray(options.values)) {
+ options.values = options.values.slice(0);
+ }
+ }
+
+ if (!this.range || !this.range.length) {
+ this.range = $("<div></div>")
+ .appendTo(this.element);
+
+ classes = "ui-slider-range" +
+ // note: this isn't the most fittingly semantic framework class for this element,
+ // but worked best visually with a variety of themes
+ " ui-widget-header ui-corner-all";
+ } else {
+ this.range.removeClass("ui-slider-range-min ui-slider-range-max")
+ // Handle range switching from true to min/max
+ .css({
+ "left": "",
+ "bottom": ""
+ });
+ }
+
+ this.range.addClass(classes +
+ ( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ));
+ } else {
+ if (this.range) {
+ this.range.remove();
+ }
+ this.range = null;
+ }
+ },
+
+ _setupEvents: function () {
+ this._off(this.handles);
+ this._on(this.handles, this._handleEvents);
+ this._hoverable(this.handles);
+ this._focusable(this.handles);
+ },
+
+ _destroy: function () {
+ this.handles.remove();
+ if (this.range) {
+ this.range.remove();
+ }
+
+ this.element
+ .removeClass("ui-slider" +
+ " ui-slider-horizontal" +
+ " ui-slider-vertical" +
+ " ui-widget" +
+ " ui-widget-content" +
+ " ui-corner-all");
+
+ this._mouseDestroy();
+ },
+
+ _mouseCapture: function (event) {
+ var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+ that = this,
+ o = this.options;
+
+ if (o.disabled) {
+ return false;
+ }
+
+ this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ };
+ this.elementOffset = this.element.offset();
+
+ position = {x: event.pageX, y: event.pageY};
+ normValue = this._normValueFromMouse(position);
+ distance = this._valueMax() - this._valueMin() + 1;
+ this.handles.each(function (i) {
+ var thisDistance = Math.abs(normValue - that.values(i));
+ if (( distance > thisDistance ) ||
+ ( distance === thisDistance &&
+ (i === that._lastChangedValue || that.values(i) === o.min ))) {
+ distance = thisDistance;
+ closestHandle = $(this);
+ index = i;
+ }
+ });
+
+ allowed = this._start(event, index);
+ if (allowed === false) {
+ return false;
+ }
+ this._mouseSliding = true;
+
+ this._handleIndex = index;
+
+ closestHandle
+ .addClass("ui-state-active")
+ .focus();
+
+ offset = closestHandle.offset();
+ mouseOverHandle = !$(event.target).parents().addBack().is(".ui-slider-handle");
+ this._clickOffset = mouseOverHandle ? {left: 0, top: 0} : {
+ left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+ top: event.pageY - offset.top -
+ ( closestHandle.height() / 2 ) -
+ ( parseInt(closestHandle.css("borderTopWidth"), 10) || 0 ) -
+ ( parseInt(closestHandle.css("borderBottomWidth"), 10) || 0) +
+ ( parseInt(closestHandle.css("marginTop"), 10) || 0)
+ };
+
+ if (!this.handles.hasClass("ui-state-hover")) {
+ this._slide(event, index, normValue);
+ }
+ this._animateOff = true;
+ return true;
+ },
+
+ _mouseStart: function () {
+ return true;
+ },
+
+ _mouseDrag: function (event) {
+ var position = {x: event.pageX, y: event.pageY},
+ normValue = this._normValueFromMouse(position);
+
+ this._slide(event, this._handleIndex, normValue);
+
+ return false;
+ },
+
+ _mouseStop: function (event) {
+ this.handles.removeClass("ui-state-active");
+ this._mouseSliding = false;
+
+ this._stop(event, this._handleIndex);
+ this._change(event, this._handleIndex);
+
+ this._handleIndex = null;
+ this._clickOffset = null;
+ this._animateOff = false;
+
+ return false;
+ },
+
+ _detectOrientation: function () {
+ this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+ },
+
+ _normValueFromMouse: function (position) {
+ var pixelTotal,
+ pixelMouse,
+ percentMouse,
+ valueTotal,
+ valueMouse;
+
+ if (this.orientation === "horizontal") {
+ pixelTotal = this.elementSize.width;
+ pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+ } else {
+ pixelTotal = this.elementSize.height;
+ pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+ }
+
+ percentMouse = ( pixelMouse / pixelTotal );
+ if (percentMouse > 1) {
+ percentMouse = 1;
+ }
+ if (percentMouse < 0) {
+ percentMouse = 0;
+ }
+ if (this.orientation === "vertical") {
+ percentMouse = 1 - percentMouse;
+ }
+
+ valueTotal = this._valueMax() - this._valueMin();
+ valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+ return this._trimAlignValue(valueMouse);
+ },
+
+ _start: function (event, index) {
+ var uiHash = {
+ handle: this.handles[index],
+ value: this.value()
+ };
+ if (this.options.values && this.options.values.length) {
+ uiHash.value = this.values(index);
+ uiHash.values = this.values();
+ }
+ return this._trigger("start", event, uiHash);
+ },
+
+ _slide: function (event, index, newVal) {
+ var otherVal,
+ newValues,
+ allowed;
+
+ if (this.options.values && this.options.values.length) {
+ otherVal = this.values(index ? 0 : 1);
+
+ if (( this.options.values.length === 2 && this.options.range === true ) &&
+ ( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+ ) {
+ newVal = otherVal;
+ }
+
+ if (newVal !== this.values(index)) {
+ newValues = this.values();
+ newValues[index] = newVal;
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger("slide", event, {
+ handle: this.handles[index],
+ value: newVal,
+ values: newValues
+ });
+ otherVal = this.values(index ? 0 : 1);
+ if (allowed !== false) {
+ this.values(index, newVal);
+ }
+ }
+ } else {
+ if (newVal !== this.value()) {
+ // A slide can be canceled by returning false from the slide callback
+ allowed = this._trigger("slide", event, {
+ handle: this.handles[index],
+ value: newVal
+ });
+ if (allowed !== false) {
+ this.value(newVal);
+ }
+ }
+ }
+ },
+
+ _stop: function (event, index) {
+ var uiHash = {
+ handle: this.handles[index],
+ value: this.value()
+ };
+ if (this.options.values && this.options.values.length) {
+ uiHash.value = this.values(index);
+ uiHash.values = this.values();
+ }
+
+ this._trigger("stop", event, uiHash);
+ },
+
+ _change: function (event, index) {
+ if (!this._keySliding && !this._mouseSliding) {
+ var uiHash = {
+ handle: this.handles[index],
+ value: this.value()
+ };
+ if (this.options.values && this.options.values.length) {
+ uiHash.value = this.values(index);
+ uiHash.values = this.values();
+ }
+
+ //store the last changed value index for reference when handles overlap
+ this._lastChangedValue = index;
+
+ this._trigger("change", event, uiHash);
+ }
+ },
+
+ value: function (newValue) {
+ if (arguments.length) {
+ this.options.value = this._trimAlignValue(newValue);
+ this._refreshValue();
+ this._change(null, 0);
+ return;
+ }
+
+ return this._value();
+ },
+
+ values: function (index, newValue) {
+ var vals,
+ newValues,
+ i;
+
+ if (arguments.length > 1) {
+ this.options.values[index] = this._trimAlignValue(newValue);
+ this._refreshValue();
+ this._change(null, index);
+ return;
+ }
+
+ if (arguments.length) {
+ if ($.isArray(arguments[0])) {
+ vals = this.options.values;
+ newValues = arguments[0];
+ for (i = 0; i < vals.length; i += 1) {
+ vals[i] = this._trimAlignValue(newValues[i]);
+ this._change(null, i);
+ }
+ this._refreshValue();
+ } else {
+ if (this.options.values && this.options.values.length) {
+ return this._values(index);
+ } else {
+ return this.value();
+ }
+ }
+ } else {
+ return this._values();
+ }
+ },
+
+ _setOption: function (key, value) {
+ var i,
+ valsLength = 0;
+
+ if (key === "range" && this.options.range === true) {
+ if (value === "min") {
+ this.options.value = this._values(0);
+ this.options.values = null;
+ } else if (value === "max") {
+ this.options.value = this._values(this.options.values.length - 1);
+ this.options.values = null;
+ }
+ }
+
+ if ($.isArray(this.options.values)) {
+ valsLength = this.options.values.length;
+ }
+
+ if (key === "disabled") {
+ this.element.toggleClass("ui-state-disabled", !!value);
+ }
+
+ this._super(key, value);
+
+ switch (key) {
+ case "orientation":
+ this._detectOrientation();
+ this.element
+ .removeClass("ui-slider-horizontal ui-slider-vertical")
+ .addClass("ui-slider-" + this.orientation);
+ this._refreshValue();
+
+ // Reset positioning from previous orientation
+ this.handles.css(value === "horizontal" ? "bottom" : "left", "");
+ break;
+ case "value":
+ this._animateOff = true;
+ this._refreshValue();
+ this._change(null, 0);
+ this._animateOff = false;
+ break;
+ case "values":
+ this._animateOff = true;
+ this._refreshValue();
+ for (i = 0; i < valsLength; i += 1) {
+ this._change(null, i);
+ }
+ this._animateOff = false;
+ break;
+ case "step":
+ case "min":
+ case "max":
+ this._animateOff = true;
+ this._calculateNewMax();
+ this._refreshValue();
+ this._animateOff = false;
+ break;
+ case "range":
+ this._animateOff = true;
+ this._refresh();
+ this._animateOff = false;
+ break;
+ }
+ },
+
+ //internal value getter
+ // _value() returns value trimmed by min and max, aligned by step
+ _value: function () {
+ var val = this.options.value;
+ val = this._trimAlignValue(val);
+
+ return val;
+ },
+
+ //internal values getter
+ // _values() returns array of values trimmed by min and max, aligned by step
+ // _values( index ) returns single value trimmed by min and max, aligned by step
+ _values: function (index) {
+ var val,
+ vals,
+ i;
+
+ if (arguments.length) {
+ val = this.options.values[index];
+ val = this._trimAlignValue(val);
+
+ return val;
+ } else if (this.options.values && this.options.values.length) {
+ // .slice() creates a copy of the array
+ // this copy gets trimmed by min and max and then returned
+ vals = this.options.values.slice();
+ for (i = 0; i < vals.length; i += 1) {
+ vals[i] = this._trimAlignValue(vals[i]);
+ }
+
+ return vals;
+ } else {
+ return [];
+ }
+ },
+
+ // returns the step-aligned value that val is closest to, between (inclusive) min and max
+ _trimAlignValue: function (val) {
+ if (val <= this._valueMin()) {
+ return this._valueMin();
+ }
+ if (val >= this._valueMax()) {
+ return this._valueMax();
+ }
+ var step = ( this.options.step > 0 ) ? this.options.step : 1,
+ valModStep = (val - this._valueMin()) % step,
+ alignValue = val - valModStep;
+
+ if (Math.abs(valModStep) * 2 >= step) {
+ alignValue += ( valModStep > 0 ) ? step : ( -step );
+ }
+
+ // Since JavaScript has problems with large floats, round
+ // the final value to 5 digits after the decimal point (see #4124)
+ return parseFloat(alignValue.toFixed(5));
+ },
+
+ _calculateNewMax: function () {
+ var max = this.options.max,
+ min = this._valueMin(),
+ step = this.options.step,
+ aboveMin = Math.floor(( +( max - min ).toFixed(this._precision()) ) / step) * step;
+ max = aboveMin + min;
+ this.max = parseFloat(max.toFixed(this._precision()));
+ },
+
+ _precision: function () {
+ var precision = this._precisionOf(this.options.step);
+ if (this.options.min !== null) {
+ precision = Math.max(precision, this._precisionOf(this.options.min));
+ }
+ return precision;
+ },
+
+ _precisionOf: function (num) {
+ var str = num.toString(),
+ decimal = str.indexOf(".");
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _valueMin: function () {
+ return this.options.min;
+ },
+
+ _valueMax: function () {
+ return this.max;
+ },
+
+ _refreshValue: function () {
+ var lastValPercent, valPercent, value, valueMin, valueMax,
+ oRange = this.options.range,
+ o = this.options,
+ that = this,
+ animate = ( !this._animateOff ) ? o.animate : false,
+ _set = {};
+
+ if (this.options.values && this.options.values.length) {
+ this.handles.each(function (i) {
+ valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+ _set[that.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%";
+ $(this).stop(1, 1)[animate ? "animate" : "css"](_set, o.animate);
+ if (that.options.range === true) {
+ if (that.orientation === "horizontal") {
+ if (i === 0) {
+ that.range.stop(1, 1)[animate ? "animate" : "css"]({left: valPercent + "%"}, o.animate);
+ }
+ if (i === 1) {
+ that.range[animate ? "animate" : "css"]({width: ( valPercent - lastValPercent ) + "%"}, {
+ queue: false,
+ duration: o.animate
+ });
+ }
+ } else {
+ if (i === 0) {
+ that.range.stop(1, 1)[animate ? "animate" : "css"]({bottom: ( valPercent ) + "%"}, o.animate);
+ }
+ if (i === 1) {
+ that.range[animate ? "animate" : "css"]({height: ( valPercent - lastValPercent ) + "%"}, {
+ queue: false,
+ duration: o.animate
+ });
+ }
+ }
+ }
+ lastValPercent = valPercent;
+ });
+ } else {
+ value = this.value();
+ valueMin = this._valueMin();
+ valueMax = this._valueMax();
+ valPercent = ( valueMax !== valueMin ) ?
+ ( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+ 0;
+ _set[this.orientation === "horizontal" ? "left" : "bottom"] = valPercent + "%";
+ this.handle.stop(1, 1)[animate ? "animate" : "css"](_set, o.animate);
+
+ if (oRange === "min" && this.orientation === "horizontal") {
+ this.range.stop(1, 1)[animate ? "animate" : "css"]({width: valPercent + "%"}, o.animate);
+ }
+ if (oRange === "max" && this.orientation === "horizontal") {
+ this.range[animate ? "animate" : "css"]({width: ( 100 - valPercent ) + "%"}, {
+ queue: false,
+ duration: o.animate
+ });
+ }
+ if (oRange === "min" && this.orientation === "vertical") {
+ this.range.stop(1, 1)[animate ? "animate" : "css"]({height: valPercent + "%"}, o.animate);
+ }
+ if (oRange === "max" && this.orientation === "vertical") {
+ this.range[animate ? "animate" : "css"]({height: ( 100 - valPercent ) + "%"}, {
+ queue: false,
+ duration: o.animate
+ });
+ }
+ }
+ },
+
+ _handleEvents: {
+ keydown: function (event) {
+ var allowed, curVal, newVal, step,
+ index = $(event.target).data("ui-slider-handle-index");
+
+ switch (event.keyCode) {
+ case $.ui.keyCode.HOME:
+ case $.ui.keyCode.END:
+ case $.ui.keyCode.PAGE_UP:
+ case $.ui.keyCode.PAGE_DOWN:
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ event.preventDefault();
+ if (!this._keySliding) {
+ this._keySliding = true;
+ $(event.target).addClass("ui-state-active");
+ allowed = this._start(event, index);
+ if (allowed === false) {
+ return;
+ }
+ }
+ break;
+ }
+
+ step = this.options.step;
+ if (this.options.values && this.options.values.length) {
+ curVal = newVal = this.values(index);
+ } else {
+ curVal = newVal = this.value();
+ }
+
+ switch (event.keyCode) {
+ case $.ui.keyCode.HOME:
+ newVal = this._valueMin();
+ break;
+ case $.ui.keyCode.END:
+ newVal = this._valueMax();
+ break;
+ case $.ui.keyCode.PAGE_UP:
+ newVal = this._trimAlignValue(
+ curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+ );
+ break;
+ case $.ui.keyCode.PAGE_DOWN:
+ newVal = this._trimAlignValue(
+ curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ));
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.RIGHT:
+ if (curVal === this._valueMax()) {
+ return;
+ }
+ newVal = this._trimAlignValue(curVal + step);
+ break;
+ case $.ui.keyCode.DOWN:
+ case $.ui.keyCode.LEFT:
+ if (curVal === this._valueMin()) {
+ return;
+ }
+ newVal = this._trimAlignValue(curVal - step);
+ break;
+ }
+
+ this._slide(event, index, newVal);
+ },
+ keyup: function (event) {
+ var index = $(event.target).data("ui-slider-handle-index");
+
+ if (this._keySliding) {
+ this._keySliding = false;
+ this._stop(event, index);
+ this._change(event, index);
+ $(event.target).removeClass("ui-state-active");
+ }
+ }
+ }
+ });
+
+
+ /*!
+ * jQuery UI Spinner 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+ function spinner_modifier(fn) {
+ return function () {
+ var previous = this.element.val();
+ fn.apply(this, arguments);
+ this._refresh();
+ if (previous !== this.element.val()) {
+ this._trigger("change");
+ }
+ };
+ }
+
+ var spinner = $.widget("ui.spinner", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {
+ down: "ui-icon-triangle-1-s",
+ up: "ui-icon-triangle-1-n"
+ },
+ incremental: true,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+
+ _create: function () {
+ // handle string values that need to be parsed
+ this._setOption("max", this.options.max);
+ this._setOption("min", this.options.min);
+ this._setOption("step", this.options.step);
+
+ // Only format if there is a value, prevents the field from being marked
+ // as invalid in Firefox, see #9573.
+ if (this.value() !== "") {
+ // Format the value, but don't constrain.
+ this._value(this.element.val(), true);
+ }
+
+ this._draw();
+ this._on(this._events);
+ this._refresh();
+
+ // turning off autocomplete prevents the browser from remembering the
+ // value when navigating through history, so we re-enable autocomplete
+ // if the page is unloaded before the widget is destroyed. #7790
+ this._on(this.window, {
+ beforeunload: function () {
+ this.element.removeAttr("autocomplete");
+ }
+ });
+ },
+
+ _getCreateOptions: function () {
+ var options = {},
+ element = this.element;
+
+ $.each(["min", "max", "step"], function (i, option) {
+ var value = element.attr(option);
+ if (value !== undefined && value.length) {
+ options[option] = value;
+ }
+ });
+
+ return options;
+ },
+
+ _events: {
+ keydown: function (event) {
+ if (this._start(event) && this._keydown(event)) {
+ event.preventDefault();
+ }
+ },
+ keyup: "_stop",
+ focus: function () {
+ this.previous = this.element.val();
+ },
+ blur: function (event) {
+ if (this.cancelBlur) {
+ delete this.cancelBlur;
+ return;
+ }
+
+ this._stop();
+ this._refresh();
+ if (this.previous !== this.element.val()) {
+ this._trigger("change", event);
+ }
+ },
+ mousewheel: function (event, delta) {
+ if (!delta) {
+ return;
+ }
+ if (!this.spinning && !this._start(event)) {
+ return false;
+ }
+
+ this._spin((delta > 0 ? 1 : -1) * this.options.step, event);
+ clearTimeout(this.mousewheelTimer);
+ this.mousewheelTimer = this._delay(function () {
+ if (this.spinning) {
+ this._stop(event);
+ }
+ }, 100);
+ event.preventDefault();
+ },
+ "mousedown .ui-spinner-button": function (event) {
+ var previous;
+
+ // We never want the buttons to have focus; whenever the user is
+ // interacting with the spinner, the focus should be on the input.
+ // If the input is focused then this.previous is properly set from
+ // when the input first received focus. If the input is not focused
+ // then we need to set this.previous based on the value before spinning.
+ previous = this.element[0] === this.document[0].activeElement ?
+ this.previous : this.element.val();
+ function checkFocus() {
+ var isActive = this.element[0] === this.document[0].activeElement;
+ if (!isActive) {
+ this.element.focus();
+ this.previous = previous;
+ // support: IE
+ // IE sets focus asynchronously, so we need to check if focus
+ // moved off of the input because the user clicked on the button.
+ this._delay(function () {
+ this.previous = previous;
+ });
+ }
+ }
+
+ // ensure focus is on (or stays on) the text field
+ event.preventDefault();
+ checkFocus.call(this);
+
+ // support: IE
+ // IE doesn't prevent moving focus even with event.preventDefault()
+ // so we set a flag to know when we should ignore the blur event
+ // and check (again) if focus moved off of the input.
+ this.cancelBlur = true;
+ this._delay(function () {
+ delete this.cancelBlur;
+ checkFocus.call(this);
+ });
+
+ if (this._start(event) === false) {
+ return;
+ }
+
+ this._repeat(null, $(event.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, event);
+ },
+ "mouseup .ui-spinner-button": "_stop",
+ "mouseenter .ui-spinner-button": function (event) {
+ // button will add ui-state-active if mouse was down while mouseleave and kept down
+ if (!$(event.currentTarget).hasClass("ui-state-active")) {
+ return;
+ }
+
+ if (this._start(event) === false) {
+ return false;
+ }
+ this._repeat(null, $(event.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, event);
+ },
+ // TODO: do we really want to consider this a stop?
+ // shouldn't we just stop the repeater and wait until mouseup before
+ // we trigger the stop event?
+ "mouseleave .ui-spinner-button": "_stop"
+ },
+
+ _draw: function () {
+ var uiSpinner = this.uiSpinner = this.element
+ .addClass("ui-spinner-input")
+ .attr("autocomplete", "off")
+ .wrap(this._uiSpinnerHtml())
+ .parent()
+ // add buttons
+ .append(this._buttonHtml());
+
+ this.element.attr("role", "spinbutton");
+
+ // button bindings
+ this.buttons = uiSpinner.find(".ui-spinner-button")
+ .attr("tabIndex", -1)
+ .button()
+ .removeClass("ui-corner-all");
+
+ // IE 6 doesn't understand height: 50% for the buttons
+ // unless the wrapper has an explicit height
+ if (this.buttons.height() > Math.ceil(uiSpinner.height() * 0.5) &&
+ uiSpinner.height() > 0) {
+ uiSpinner.height(uiSpinner.height());
+ }
+
+ // disable spinner if element was already disabled
+ if (this.options.disabled) {
+ this.disable();
+ }
+ },
+
+ _keydown: function (event) {
+ var options = this.options,
+ keyCode = $.ui.keyCode;
+
+ switch (event.keyCode) {
+ case keyCode.UP:
+ this._repeat(null, 1, event);
+ return true;
+ case keyCode.DOWN:
+ this._repeat(null, -1, event);
+ return true;
+ case keyCode.PAGE_UP:
+ this._repeat(null, options.page, event);
+ return true;
+ case keyCode.PAGE_DOWN:
+ this._repeat(null, -options.page, event);
+ return true;
+ }
+
+ return false;
+ },
+
+ _uiSpinnerHtml: function () {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+ },
+
+ _buttonHtml: function () {
+ return "" +
+ "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+ "<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+ "</a>" +
+ "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+ "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+ "</a>";
+ },
+
+ _start: function (event) {
+ if (!this.spinning && this._trigger("start", event) === false) {
+ return false;
+ }
+
+ if (!this.counter) {
+ this.counter = 1;
+ }
+ this.spinning = true;
+ return true;
+ },
+
+ _repeat: function (i, steps, event) {
+ i = i || 500;
+
+ clearTimeout(this.timer);
+ this.timer = this._delay(function () {
+ this._repeat(40, steps, event);
+ }, i);
+
+ this._spin(steps * this.options.step, event);
+ },
+
+ _spin: function (step, event) {
+ var value = this.value() || 0;
+
+ if (!this.counter) {
+ this.counter = 1;
+ }
+
+ value = this._adjustValue(value + step * this._increment(this.counter));
+
+ if (!this.spinning || this._trigger("spin", event, {value: value}) !== false) {
+ this._value(value);
+ this.counter++;
+ }
+ },
+
+ _increment: function (i) {
+ var incremental = this.options.incremental;
+
+ if (incremental) {
+ return $.isFunction(incremental) ?
+ incremental(i) :
+ Math.floor(i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1);
+ }
+
+ return 1;
+ },
+
+ _precision: function () {
+ var precision = this._precisionOf(this.options.step);
+ if (this.options.min !== null) {
+ precision = Math.max(precision, this._precisionOf(this.options.min));
+ }
+ return precision;
+ },
+
+ _precisionOf: function (num) {
+ var str = num.toString(),
+ decimal = str.indexOf(".");
+ return decimal === -1 ? 0 : str.length - decimal - 1;
+ },
+
+ _adjustValue: function (value) {
+ var base, aboveMin,
+ options = this.options;
+
+ // make sure we're at a valid step
+ // - find out where we are relative to the base (min or 0)
+ base = options.min !== null ? options.min : 0;
+ aboveMin = value - base;
+ // - round to the nearest step
+ aboveMin = Math.round(aboveMin / options.step) * options.step;
+ // - rounding is based on 0, so adjust back to our base
+ value = base + aboveMin;
+
+ // fix precision from bad JS floating point math
+ value = parseFloat(value.toFixed(this._precision()));
+
+ // clamp the value
+ if (options.max !== null && value > options.max) {
+ return options.max;
+ }
+ if (options.min !== null && value < options.min) {
+ return options.min;
+ }
+
+ return value;
+ },
+
+ _stop: function (event) {
+ if (!this.spinning) {
+ return;
+ }
+
+ clearTimeout(this.timer);
+ clearTimeout(this.mousewheelTimer);
+ this.counter = 0;
+ this.spinning = false;
+ this._trigger("stop", event);
+ },
+
+ _setOption: function (key, value) {
+ if (key === "culture" || key === "numberFormat") {
+ var prevValue = this._parse(this.element.val());
+ this.options[key] = value;
+ this.element.val(this._format(prevValue));
+ return;
+ }
+
+ if (key === "max" || key === "min" || key === "step") {
+ if (typeof value === "string") {
+ value = this._parse(value);
+ }
+ }
+ if (key === "icons") {
+ this.buttons.first().find(".ui-icon")
+ .removeClass(this.options.icons.up)
+ .addClass(value.up);
+ this.buttons.last().find(".ui-icon")
+ .removeClass(this.options.icons.down)
+ .addClass(value.down);
+ }
+
+ this._super(key, value);
+
+ if (key === "disabled") {
+ this.widget().toggleClass("ui-state-disabled", !!value);
+ this.element.prop("disabled", !!value);
+ this.buttons.button(value ? "disable" : "enable");
+ }
+ },
+
+ _setOptions: spinner_modifier(function (options) {
+ this._super(options);
+ }),
+
+ _parse: function (val) {
+ if (typeof val === "string" && val !== "") {
+ val = window.Globalize && this.options.numberFormat ?
+ Globalize.parseFloat(val, 10, this.options.culture) : +val;
+ }
+ return val === "" || isNaN(val) ? null : val;
+ },
+
+ _format: function (value) {
+ if (value === "") {
+ return "";
+ }
+ return window.Globalize && this.options.numberFormat ?
+ Globalize.format(value, this.options.numberFormat, this.options.culture) :
+ value;
+ },
+
+ _refresh: function () {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ // TODO: what should we do with values that can't be parsed?
+ "aria-valuenow": this._parse(this.element.val())
+ });
+ },
+
+ isValid: function () {
+ var value = this.value();
+
+ // null is invalid
+ if (value === null) {
+ return false;
+ }
+
+ // if value gets adjusted, it's invalid
+ return value === this._adjustValue(value);
+ },
+
+ // update the value without triggering change
+ _value: function (value, allowAny) {
+ var parsed;
+ if (value !== "") {
+ parsed = this._parse(value);
+ if (parsed !== null) {
+ if (!allowAny) {
+ parsed = this._adjustValue(parsed);
+ }
+ value = this._format(parsed);
+ }
+ }
+ this.element.val(value);
+ this._refresh();
+ },
+
+ _destroy: function () {
+ this.element
+ .removeClass("ui-spinner-input")
+ .prop("disabled", false)
+ .removeAttr("autocomplete")
+ .removeAttr("role")
+ .removeAttr("aria-valuemin")
+ .removeAttr("aria-valuemax")
+ .removeAttr("aria-valuenow");
+ this.uiSpinner.replaceWith(this.element);
+ },
+
+ stepUp: spinner_modifier(function (steps) {
+ this._stepUp(steps);
+ }),
+ _stepUp: function (steps) {
+ if (this._start()) {
+ this._spin((steps || 1) * this.options.step);
+ this._stop();
+ }
+ },
+
+ stepDown: spinner_modifier(function (steps) {
+ this._stepDown(steps);
+ }),
+ _stepDown: function (steps) {
+ if (this._start()) {
+ this._spin((steps || 1) * -this.options.step);
+ this._stop();
+ }
+ },
+
+ pageUp: spinner_modifier(function (pages) {
+ this._stepUp((pages || 1) * this.options.page);
+ }),
+
+ pageDown: spinner_modifier(function (pages) {
+ this._stepDown((pages || 1) * this.options.page);
+ }),
+
+ value: function (newVal) {
+ if (!arguments.length) {
+ return this._parse(this.element.val());
+ }
+ spinner_modifier(this._value).call(this, newVal);
+ },
+
+ widget: function () {
+ return this.uiSpinner;
+ }
+ });
+
+
+ /*!
+ * jQuery UI Tabs 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+ var tabs = $.widget("ui.tabs", {
+ version: "1.11.4",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: false,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+
+ // callbacks
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+
+ _isLocal: (function () {
+ var rhash = /#.*$/;
+
+ return function (anchor) {
+ var anchorUrl, locationUrl;
+
+ // support: IE7
+ // IE7 doesn't normalize the href property when set via script (#9317)
+ anchor = anchor.cloneNode(false);
+
+ anchorUrl = anchor.href.replace(rhash, "");
+ locationUrl = location.href.replace(rhash, "");
+
+ // decoding may throw an error if the URL isn't UTF-8 (#9518)
+ try {
+ anchorUrl = decodeURIComponent(anchorUrl);
+ } catch (error) {
+ }
+ try {
+ locationUrl = decodeURIComponent(locationUrl);
+ } catch (error) {
+ }
+
+ return anchor.hash.length > 1 && anchorUrl === locationUrl;
+ };
+ })(),
+
+ _create: function () {
+ var that = this,
+ options = this.options;
+
+ this.running = false;
+
+ this.element
+ .addClass("ui-tabs ui-widget ui-widget-content ui-corner-all")
+ .toggleClass("ui-tabs-collapsible", options.collapsible);
+
+ this._processTabs();
+ options.active = this._initialActive();
+
+ // Take disabling tabs via class attribute from HTML
+ // into account and update option properly.
+ if ($.isArray(options.disabled)) {
+ options.disabled = $.unique(options.disabled.concat(
+ $.map(this.tabs.filter(".ui-state-disabled"), function (li) {
+ return that.tabs.index(li);
+ })
+ )).sort();
+ }
+
+ // check for length avoids error when initializing empty list
+ if (this.options.active !== false && this.anchors.length) {
+ this.active = this._findActive(options.active);
+ } else {
+ this.active = $();
+ }
+
+ this._refresh();
+
+ if (this.active.length) {
+ this.load(options.active);
+ }
+ },
+
+ _initialActive: function () {
+ var active = this.options.active,
+ collapsible = this.options.collapsible,
+ locationHash = location.hash.substring(1);
+
+ if (active === null) {
+ // check the fragment identifier in the URL
+ if (locationHash) {
+ this.tabs.each(function (i, tab) {
+ if ($(tab).attr("aria-controls") === locationHash) {
+ active = i;
+ return false;
+ }
+ });
+ }
+
+ // check for a tab marked active via a class
+ if (active === null) {
+ active = this.tabs.index(this.tabs.filter(".ui-tabs-active"));
+ }
+
+ // no active tab, set to false
+ if (active === null || active === -1) {
+ active = this.tabs.length ? 0 : false;
+ }
+ }
+
+ // handle numbers: negative, out of range
+ if (active !== false) {
+ active = this.tabs.index(this.tabs.eq(active));
+ if (active === -1) {
+ active = collapsible ? false : 0;
+ }
+ }
+
+ // don't allow collapsible: false and active: false
+ if (!collapsible && active === false && this.anchors.length) {
+ active = 0;
+ }
+
+ return active;
+ },
+
+ _getCreateEventData: function () {
+ return {
+ tab: this.active,
+ panel: !this.active.length ? $() : this._getPanelForTab(this.active)
+ };
+ },
+
+ _tabKeydown: function (event) {
+ var focusedTab = $(this.document[0].activeElement).closest("li"),
+ selectedIndex = this.tabs.index(focusedTab),
+ goingForward = true;
+
+ if (this._handlePageNav(event)) {
+ return;
+ }
+
+ switch (event.keyCode) {
+ case $.ui.keyCode.RIGHT:
+ case $.ui.keyCode.DOWN:
+ selectedIndex++;
+ break;
+ case $.ui.keyCode.UP:
+ case $.ui.keyCode.LEFT:
+ goingForward = false;
+ selectedIndex--;
+ break;
+ case $.ui.keyCode.END:
+ selectedIndex = this.anchors.length - 1;
+ break;
+ case $.ui.keyCode.HOME:
+ selectedIndex = 0;
+ break;
+ case $.ui.keyCode.SPACE:
+ // Activate only, no collapsing
+ event.preventDefault();
+ clearTimeout(this.activating);
+ this._activate(selectedIndex);
+ return;
+ case $.ui.keyCode.ENTER:
+ // Toggle (cancel delayed activation, allow collapsing)
+ event.preventDefault();
+ clearTimeout(this.activating);
+ // Determine if we should collapse or activate
+ this._activate(selectedIndex === this.options.active ? false : selectedIndex);
+ return;
+ default:
+ return;
+ }
+
+ // Focus the appropriate tab, based on which key was pressed
+ event.preventDefault();
+ clearTimeout(this.activating);
+ selectedIndex = this._focusNextTab(selectedIndex, goingForward);
+
+ // Navigating with control/command key will prevent automatic activation
+ if (!event.ctrlKey && !event.metaKey) {
+
+ // Update aria-selected immediately so that AT think the tab is already selected.
+ // Otherwise AT may confuse the user by stating that they need to activate the tab,
+ // but the tab will already be activated by the time the announcement finishes.
+ focusedTab.attr("aria-selected", "false");
+ this.tabs.eq(selectedIndex).attr("aria-selected", "true");
+
+ this.activating = this._delay(function () {
+ this.option("active", selectedIndex);
+ }, this.delay);
+ }
+ },
+
+ _panelKeydown: function (event) {
+ if (this._handlePageNav(event)) {
+ return;
+ }
+
+ // Ctrl+up moves focus to the current tab
+ if (event.ctrlKey && event.keyCode === $.ui.keyCode.UP) {
+ event.preventDefault();
+ this.active.focus();
+ }
+ },
+
+ // Alt+page up/down moves focus to the previous/next tab (and activates)
+ _handlePageNav: function (event) {
+ if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP) {
+ this._activate(this._focusNextTab(this.options.active - 1, false));
+ return true;
+ }
+ if (event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN) {
+ this._activate(this._focusNextTab(this.options.active + 1, true));
+ return true;
+ }
+ },
+
+ _findNextTab: function (index, goingForward) {
+ var lastTabIndex = this.tabs.length - 1;
+
+ function constrain() {
+ if (index > lastTabIndex) {
+ index = 0;
+ }
+ if (index < 0) {
+ index = lastTabIndex;
+ }
+ return index;
+ }
+
+ while ($.inArray(constrain(), this.options.disabled) !== -1) {
+ index = goingForward ? index + 1 : index - 1;
+ }
+
+ return index;
+ },
+
+ _focusNextTab: function (index, goingForward) {
+ index = this._findNextTab(index, goingForward);
+ this.tabs.eq(index).focus();
+ return index;
+ },
+
+ _setOption: function (key, value) {
+ if (key === "active") {
+ // _activate() will handle invalid values and update this.options
+ this._activate(value);
+ return;
+ }
+
+ if (key === "disabled") {
+ // don't use the widget factory's disabled handling
+ this._setupDisabled(value);
+ return;
+ }
+
+ this._super(key, value);
+
+ if (key === "collapsible") {
+ this.element.toggleClass("ui-tabs-collapsible", value);
+ // Setting collapsible: false while collapsed; open first panel
+ if (!value && this.options.active === false) {
+ this._activate(0);
+ }
+ }
+
+ if (key === "event") {
+ this._setupEvents(value);
+ }
+
+ if (key === "heightStyle") {
+ this._setupHeightStyle(value);
+ }
+ },
+
+ _sanitizeSelector: function (hash) {
+ return hash ? hash.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : "";
+ },
+
+ refresh: function () {
+ var options = this.options,
+ lis = this.tablist.children(":has(a[href])");
+
+ // get disabled tabs from class attribute from HTML
+ // this will get converted to a boolean if needed in _refresh()
+ options.disabled = $.map(lis.filter(".ui-state-disabled"), function (tab) {
+ return lis.index(tab);
+ });
+
+ this._processTabs();
+
+ // was collapsed or no tabs
+ if (options.active === false || !this.anchors.length) {
+ options.active = false;
+ this.active = $();
+ // was active, but active tab is gone
+ } else if (this.active.length && !$.contains(this.tablist[0], this.active[0])) {
+ // all remaining tabs are disabled
+ if (this.tabs.length === options.disabled.length) {
+ options.active = false;
+ this.active = $();
+ // activate previous tab
+ } else {
+ this._activate(this._findNextTab(Math.max(0, options.active - 1), false));
+ }
+ // was active, active tab still exists
+ } else {
+ // make sure active index is correct
+ options.active = this.tabs.index(this.active);
+ }
+
+ this._refresh();
+ },
+
+ _refresh: function () {
+ this._setupDisabled(this.options.disabled);
+ this._setupEvents(this.options.event);
+ this._setupHeightStyle(this.options.heightStyle);
+
+ this.tabs.not(this.active).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ });
+ this.panels.not(this._getPanelForTab(this.active))
+ .hide()
+ .attr({
+ "aria-hidden": "true"
+ });
+
+ // Make sure one tab is in the tab order
+ if (!this.active.length) {
+ this.tabs.eq(0).attr("tabIndex", 0);
+ } else {
+ this.active
+ .addClass("ui-tabs-active ui-state-active")
+ .attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ this._getPanelForTab(this.active)
+ .show()
+ .attr({
+ "aria-hidden": "false"
+ });
+ }
+ },
+
+ _processTabs: function () {
+ var that = this,
+ prevTabs = this.tabs,
+ prevAnchors = this.anchors,
+ prevPanels = this.panels;
+
+ this.tablist = this._getList()
+ .addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all")
+ .attr("role", "tablist")
+
+ // Prevent users from focusing disabled tabs via click
+ .delegate("> li", "mousedown" + this.eventNamespace, function (event) {
+ if ($(this).is(".ui-state-disabled")) {
+ event.preventDefault();
+ }
+ })
+
+ // support: IE <9
+ // Preventing the default action in mousedown doesn't prevent IE
+ // from focusing the element, so if the anchor gets focused, blur.
+ // We don't have to worry about focusing the previously focused
+ // element since clicking on a non-focusable element should focus
+ // the body anyway.
+ .delegate(".ui-tabs-anchor", "focus" + this.eventNamespace, function () {
+ if ($(this).closest("li").is(".ui-state-disabled")) {
+ this.blur();
+ }
+ });
+
+ this.tabs = this.tablist.find("> li:has(a[href])")
+ .addClass("ui-state-default ui-corner-top")
+ .attr({
+ role: "tab",
+ tabIndex: -1
+ });
+
+ this.anchors = this.tabs.map(function () {
+ return $("a", this)[0];
+ })
+ .addClass("ui-tabs-anchor")
+ .attr({
+ role: "presentation",
+ tabIndex: -1
+ });
+
+ this.panels = $();
+
+ this.anchors.each(function (i, anchor) {
+ var selector, panel, panelId,
+ anchorId = $(anchor).uniqueId().attr("id"),
+ tab = $(anchor).closest("li"),
+ originalAriaControls = tab.attr("aria-controls");
+
+ // inline tab
+ if (that._isLocal(anchor)) {
+ selector = anchor.hash;
+ panelId = selector.substring(1);
+ panel = that.element.find(that._sanitizeSelector(selector));
+ // remote tab
+ } else {
+ // If the tab doesn't already have aria-controls,
+ // generate an id by using a throw-away element
+ panelId = tab.attr("aria-controls") || $({}).uniqueId()[0].id;
+ selector = "#" + panelId;
+ panel = that.element.find(selector);
+ if (!panel.length) {
+ panel = that._createPanel(panelId);
+ panel.insertAfter(that.panels[i - 1] || that.tablist);
+ }
+ panel.attr("aria-live", "polite");
+ }
+
+ if (panel.length) {
+ that.panels = that.panels.add(panel);
+ }
+ if (originalAriaControls) {
+ tab.data("ui-tabs-aria-controls", originalAriaControls);
+ }
+ tab.attr({
+ "aria-controls": panelId,
+ "aria-labelledby": anchorId
+ });
+ panel.attr("aria-labelledby", anchorId);
+ });
+
+ this.panels
+ .addClass("ui-tabs-panel ui-widget-content ui-corner-bottom")
+ .attr("role", "tabpanel");
+
+ // Avoid memory leaks (#10056)
+ if (prevTabs) {
+ this._off(prevTabs.not(this.tabs));
+ this._off(prevAnchors.not(this.anchors));
+ this._off(prevPanels.not(this.panels));
+ }
+ },
+
+ // allow overriding how to find the list for rare usage scenarios (#7715)
+ _getList: function () {
+ return this.tablist || this.element.find("ol,ul").eq(0);
+ },
+
+ _createPanel: function (id) {
+ return $("<div>")
+ .attr("id", id)
+ .addClass("ui-tabs-panel ui-widget-content ui-corner-bottom")
+ .data("ui-tabs-destroy", true);
+ },
+
+ _setupDisabled: function (disabled) {
+ if ($.isArray(disabled)) {
+ if (!disabled.length) {
+ disabled = false;
+ } else if (disabled.length === this.anchors.length) {
+ disabled = true;
+ }
+ }
+
+ // disable tabs
+ for (var i = 0, li; ( li = this.tabs[i] ); i++) {
+ if (disabled === true || $.inArray(i, disabled) !== -1) {
+ $(li)
+ .addClass("ui-state-disabled")
+ .attr("aria-disabled", "true");
+ } else {
+ $(li)
+ .removeClass("ui-state-disabled")
+ .removeAttr("aria-disabled");
+ }
+ }
+
+ this.options.disabled = disabled;
+ },
+
+ _setupEvents: function (event) {
+ var events = {};
+ if (event) {
+ $.each(event.split(" "), function (index, eventName) {
+ events[eventName] = "_eventHandler";
+ });
+ }
+
+ this._off(this.anchors.add(this.tabs).add(this.panels));
+ // Always prevent the default action, even when disabled
+ this._on(true, this.anchors, {
+ click: function (event) {
+ event.preventDefault();
+ }
+ });
+ this._on(this.anchors, events);
+ this._on(this.tabs, {keydown: "_tabKeydown"});
+ this._on(this.panels, {keydown: "_panelKeydown"});
+
+ this._focusable(this.tabs);
+ this._hoverable(this.tabs);
+ },
+
+ _setupHeightStyle: function (heightStyle) {
+ var maxHeight,
+ parent = this.element.parent();
+
+ if (heightStyle === "fill") {
+ maxHeight = parent.height();
+ maxHeight -= this.element.outerHeight() - this.element.height();
+
+ this.element.siblings(":visible").each(function () {
+ var elem = $(this),
+ position = elem.css("position");
+
+ if (position === "absolute" || position === "fixed") {
+ return;
+ }
+ maxHeight -= elem.outerHeight(true);
+ });
+
+ this.element.children().not(this.panels).each(function () {
+ maxHeight -= $(this).outerHeight(true);
+ });
+
+ this.panels.each(function () {
+ $(this).height(Math.max(0, maxHeight -
+ $(this).innerHeight() + $(this).height()));
+ })
+ .css("overflow", "auto");
+ } else if (heightStyle === "auto") {
+ maxHeight = 0;
+ this.panels.each(function () {
+ maxHeight = Math.max(maxHeight, $(this).height("").height());
+ }).height(maxHeight);
+ }
+ },
+
+ _eventHandler: function (event) {
+ var options = this.options,
+ active = this.active,
+ anchor = $(event.currentTarget),
+ tab = anchor.closest("li"),
+ clickedIsActive = tab[0] === active[0],
+ collapsing = clickedIsActive && options.collapsible,
+ toShow = collapsing ? $() : this._getPanelForTab(tab),
+ toHide = !active.length ? $() : this._getPanelForTab(active),
+ eventData = {
+ oldTab: active,
+ oldPanel: toHide,
+ newTab: collapsing ? $() : tab,
+ newPanel: toShow
+ };
+
+ event.preventDefault();
+
+ if (tab.hasClass("ui-state-disabled") ||
+ // tab is already loading
+ tab.hasClass("ui-tabs-loading") ||
+ // can't switch durning an animation
+ this.running ||
+ // click on active header, but not collapsible
+ ( clickedIsActive && !options.collapsible ) ||
+ // allow canceling activation
+ ( this._trigger("beforeActivate", event, eventData) === false )) {
+ return;
+ }
+
+ options.active = collapsing ? false : this.tabs.index(tab);
+
+ this.active = clickedIsActive ? $() : tab;
+ if (this.xhr) {
+ this.xhr.abort();
+ }
+
+ if (!toHide.length && !toShow.length) {
+ $.error("jQuery UI Tabs: Mismatching fragment identifier.");
+ }
+
+ if (toShow.length) {
+ this.load(this.tabs.index(tab), event);
+ }
+ this._toggle(event, eventData);
+ },
+
+ // handles show/hide for selecting tabs
+ _toggle: function (event, eventData) {
+ var that = this,
+ toShow = eventData.newPanel,
+ toHide = eventData.oldPanel;
+
+ this.running = true;
+
+ function complete() {
+ that.running = false;
+ that._trigger("activate", event, eventData);
+ }
+
+ function show() {
+ eventData.newTab.closest("li").addClass("ui-tabs-active ui-state-active");
+
+ if (toShow.length && that.options.show) {
+ that._show(toShow, that.options.show, complete);
+ } else {
+ toShow.show();
+ complete();
+ }
+ }
+
+ // start out by hiding, then showing, then completing
+ if (toHide.length && this.options.hide) {
+ this._hide(toHide, this.options.hide, function () {
+ eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
+ show();
+ });
+ } else {
+ eventData.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active");
+ toHide.hide();
+ show();
+ }
+
+ toHide.attr("aria-hidden", "true");
+ eventData.oldTab.attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ });
+ // If we're switching tabs, remove the old tab from the tab order.
+ // If we're opening from collapsed state, remove the previous tab from the tab order.
+ // If we're collapsing, then keep the collapsing tab in the tab order.
+ if (toShow.length && toHide.length) {
+ eventData.oldTab.attr("tabIndex", -1);
+ } else if (toShow.length) {
+ this.tabs.filter(function () {
+ return $(this).attr("tabIndex") === 0;
+ })
+ .attr("tabIndex", -1);
+ }
+
+ toShow.attr("aria-hidden", "false");
+ eventData.newTab.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ });
+ },
+
+ _activate: function (index) {
+ var anchor,
+ active = this._findActive(index);
+
+ // trying to activate the already active panel
+ if (active[0] === this.active[0]) {
+ return;
+ }
+
+ // trying to collapse, simulate a click on the current active header
+ if (!active.length) {
+ active = this.active;
+ }
+
+ anchor = active.find(".ui-tabs-anchor")[0];
+ this._eventHandler({
+ target: anchor,
+ currentTarget: anchor,
+ preventDefault: $.noop
+ });
+ },
+
+ _findActive: function (index) {
+ return index === false ? $() : this.tabs.eq(index);
+ },
+
+ _getIndex: function (index) {
+ // meta-function to give users option to provide a href string instead of a numerical index.
+ if (typeof index === "string") {
+ index = this.anchors.index(this.anchors.filter("[href$='" + index + "']"));
+ }
+
+ return index;
+ },
+
+ _destroy: function () {
+ if (this.xhr) {
+ this.xhr.abort();
+ }
+
+ this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible");
+
+ this.tablist
+ .removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all")
+ .removeAttr("role");
+
+ this.anchors
+ .removeClass("ui-tabs-anchor")
+ .removeAttr("role")
+ .removeAttr("tabIndex")
+ .removeUniqueId();
+
+ this.tablist.unbind(this.eventNamespace);
+
+ this.tabs.add(this.panels).each(function () {
+ if ($.data(this, "ui-tabs-destroy")) {
+ $(this).remove();
+ } else {
+ $(this)
+ .removeClass("ui-state-default ui-state-active ui-state-disabled " +
+ "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel")
+ .removeAttr("tabIndex")
+ .removeAttr("aria-live")
+ .removeAttr("aria-busy")
+ .removeAttr("aria-selected")
+ .removeAttr("aria-labelledby")
+ .removeAttr("aria-hidden")
+ .removeAttr("aria-expanded")
+ .removeAttr("role");
+ }
+ });
+
+ this.tabs.each(function () {
+ var li = $(this),
+ prev = li.data("ui-tabs-aria-controls");
+ if (prev) {
+ li
+ .attr("aria-controls", prev)
+ .removeData("ui-tabs-aria-controls");
+ } else {
+ li.removeAttr("aria-controls");
+ }
+ });
+
+ this.panels.show();
+
+ if (this.options.heightStyle !== "content") {
+ this.panels.css("height", "");
+ }
+ },
+
+ enable: function (index) {
+ var disabled = this.options.disabled;
+ if (disabled === false) {
+ return;
+ }
+
+ if (index === undefined) {
+ disabled = false;
+ } else {
+ index = this._getIndex(index);
+ if ($.isArray(disabled)) {
+ disabled = $.map(disabled, function (num) {
+ return num !== index ? num : null;
+ });
+ } else {
+ disabled = $.map(this.tabs, function (li, num) {
+ return num !== index ? num : null;
+ });
+ }
+ }
+ this._setupDisabled(disabled);
+ },
+
+ disable: function (index) {
+ var disabled = this.options.disabled;
+ if (disabled === true) {
+ return;
+ }
+
+ if (index === undefined) {
+ disabled = true;
+ } else {
+ index = this._getIndex(index);
+ if ($.inArray(index, disabled) !== -1) {
+ return;
+ }
+ if ($.isArray(disabled)) {
+ disabled = $.merge([index], disabled).sort();
+ } else {
+ disabled = [index];
+ }
+ }
+ this._setupDisabled(disabled);
+ },
+
+ load: function (index, event) {
+ index = this._getIndex(index);
+ var that = this,
+ tab = this.tabs.eq(index),
+ anchor = tab.find(".ui-tabs-anchor"),
+ panel = this._getPanelForTab(tab),
+ eventData = {
+ tab: tab,
+ panel: panel
+ },
+ complete = function (jqXHR, status) {
+ if (status === "abort") {
+ that.panels.stop(false, true);
+ }
+
+ tab.removeClass("ui-tabs-loading");
+ panel.removeAttr("aria-busy");
+
+ if (jqXHR === that.xhr) {
+ delete that.xhr;
+ }
+ };
+
+ // not remote
+ if (this._isLocal(anchor[0])) {
+ return;
+ }
+
+ this.xhr = $.ajax(this._ajaxSettings(anchor, event, eventData));
+
+ // support: jQuery <1.8
+ // jQuery <1.8 returns false if the request is canceled in beforeSend,
+ // but as of 1.8, $.ajax() always returns a jqXHR object.
+ if (this.xhr && this.xhr.statusText !== "canceled") {
+ tab.addClass("ui-tabs-loading");
+ panel.attr("aria-busy", "true");
+
+ this.xhr
+ .done(function (response, status, jqXHR) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function () {
+ panel.html(response);
+ that._trigger("load", event, eventData);
+
+ complete(jqXHR, status);
+ }, 1);
+ })
+ .fail(function (jqXHR, status) {
+ // support: jQuery <1.8
+ // http://bugs.jquery.com/ticket/11778
+ setTimeout(function () {
+ complete(jqXHR, status);
+ }, 1);
+ });
+ }
+ },
+
+ _ajaxSettings: function (anchor, event, eventData) {
+ var that = this;
+ return {
+ url: anchor.attr("href"),
+ beforeSend: function (jqXHR, settings) {
+ return that._trigger("beforeLoad", event,
+ $.extend({jqXHR: jqXHR, ajaxSettings: settings}, eventData));
+ }
+ };
+ },
+
+ _getPanelForTab: function (tab) {
+ var id = $(tab).attr("aria-controls");
+ return this.element.find(this._sanitizeSelector("#" + id));
+ }
+ });
+
+
+ /*!
+ * jQuery UI Tooltip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+ var tooltip = $.widget("ui.tooltip", {
+ version: "1.11.4",
+ options: {
+ content: function () {
+ // support: IE<9, Opera in jQuery <1.7
+ // .text() can't accept undefined, so coerce to a string
+ var title = $(this).attr("title") || "";
+ // Escape title, since we're going from an attribute to raw HTML
+ return $("<a>").text(title).html();
+ },
+ hide: true,
+ // Disabled elements have inconsistent behavior across browsers (#8661)
+ items: "[title]:not([disabled])",
+ position: {
+ my: "left top+15",
+ at: "left bottom",
+ collision: "flipfit flip"
+ },
+ show: true,
+ tooltipClass: null,
+ track: false,
+
+ // callbacks
+ close: null,
+ open: null
+ },
+
+ _addDescribedBy: function (elem, id) {
+ var describedby = (elem.attr("aria-describedby") || "").split(/\s+/);
+ describedby.push(id);
+ elem
+ .data("ui-tooltip-id", id)
+ .attr("aria-describedby", $.trim(describedby.join(" ")));
+ },
+
+ _removeDescribedBy: function (elem) {
+ var id = elem.data("ui-tooltip-id"),
+ describedby = (elem.attr("aria-describedby") || "").split(/\s+/),
+ index = $.inArray(id, describedby);
+
+ if (index !== -1) {
+ describedby.splice(index, 1);
+ }
+
+ elem.removeData("ui-tooltip-id");
+ describedby = $.trim(describedby.join(" "));
+ if (describedby) {
+ elem.attr("aria-describedby", describedby);
+ } else {
+ elem.removeAttr("aria-describedby");
+ }
+ },
+
+ _create: function () {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ });
+
+ // IDs of generated tooltips, needed for destroy
+ this.tooltips = {};
+
+ // IDs of parent tooltips where we removed the title attribute
+ this.parents = {};
+
+ if (this.options.disabled) {
+ this._disable();
+ }
+
+ // Append the aria-live region so tooltips announce correctly
+ this.liveRegion = $("<div>")
+ .attr({
+ role: "log",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ })
+ .addClass("ui-helper-hidden-accessible")
+ .appendTo(this.document[0].body);
+ },
+
+ _setOption: function (key, value) {
+ var that = this;
+
+ if (key === "disabled") {
+ this[value ? "_disable" : "_enable"]();
+ this.options[key] = value;
+ // disable element style changes
+ return;
+ }
+
+ this._super(key, value);
+
+ if (key === "content") {
+ $.each(this.tooltips, function (id, tooltipData) {
+ that._updateContent(tooltipData.element);
+ });
+ }
+ },
+
+ _disable: function () {
+ var that = this;
+
+ // close open tooltips
+ $.each(this.tooltips, function (id, tooltipData) {
+ var event = $.Event("blur");
+ event.target = event.currentTarget = tooltipData.element[0];
+ that.close(event, true);
+ });
+
+ // remove title attributes to prevent native tooltips
+ this.element.find(this.options.items).addBack().each(function () {
+ var element = $(this);
+ if (element.is("[title]")) {
+ element
+ .data("ui-tooltip-title", element.attr("title"))
+ .removeAttr("title");
+ }
+ });
+ },
+
+ _enable: function () {
+ // restore title attributes
+ this.element.find(this.options.items).addBack().each(function () {
+ var element = $(this);
+ if (element.data("ui-tooltip-title")) {
+ element.attr("title", element.data("ui-tooltip-title"));
+ }
+ });
+ },
+
+ open: function (event) {
+ var that = this,
+ target = $(event ? event.target : this.element)
+ // we need closest here due to mouseover bubbling,
+ // but always pointing at the same event target
+ .closest(this.options.items);
+
+ // No element to show a tooltip for or the tooltip is already open
+ if (!target.length || target.data("ui-tooltip-id")) {
+ return;
+ }
+
+ if (target.attr("title")) {
+ target.data("ui-tooltip-title", target.attr("title"));
+ }
+
+ target.data("ui-tooltip-open", true);
+
+ // kill parent tooltips, custom or native, for hover
+ if (event && event.type === "mouseover") {
+ target.parents().each(function () {
+ var parent = $(this),
+ blurEvent;
+ if (parent.data("ui-tooltip-open")) {
+ blurEvent = $.Event("blur");
+ blurEvent.target = blurEvent.currentTarget = this;
+ that.close(blurEvent, true);
+ }
+ if (parent.attr("title")) {
+ parent.uniqueId();
+ that.parents[this.id] = {
+ element: this,
+ title: parent.attr("title")
+ };
+ parent.attr("title", "");
+ }
+ });
+ }
+
+ this._registerCloseHandlers(event, target);
+ this._updateContent(target, event);
+ },
+
+ _updateContent: function (target, event) {
+ var content,
+ contentOption = this.options.content,
+ that = this,
+ eventType = event ? event.type : null;
+
+ if (typeof contentOption === "string") {
+ return this._open(event, target, contentOption);
+ }
+
+ content = contentOption.call(target[0], function (response) {
+
+ // IE may instantly serve a cached response for ajax requests
+ // delay this call to _open so the other call to _open runs first
+ that._delay(function () {
+
+ // Ignore async response if tooltip was closed already
+ if (!target.data("ui-tooltip-open")) {
+ return;
+ }
+
+ // jQuery creates a special event for focusin when it doesn't
+ // exist natively. To improve performance, the native event
+ // object is reused and the type is changed. Therefore, we can't
+ // rely on the type being correct after the event finished
+ // bubbling, so we set it back to the previous value. (#8740)
+ if (event) {
+ event.type = eventType;
+ }
+ this._open(event, target, response);
+ });
+ });
+ if (content) {
+ this._open(event, target, content);
+ }
+ },
+
+ _open: function (event, target, content) {
+ var tooltipData, tooltip, delayedShow, a11yContent,
+ positionOption = $.extend({}, this.options.position);
+
+ if (!content) {
+ return;
+ }
+
+ // Content can be updated multiple times. If the tooltip already
+ // exists, then just update the content and bail.
+ tooltipData = this._find(target);
+ if (tooltipData) {
+ tooltipData.tooltip.find(".ui-tooltip-content").html(content);
+ return;
+ }
+
+ // if we have a title, clear it to prevent the native tooltip
+ // we have to check first to avoid defining a title if none exists
+ // (we don't want to cause an element to start matching [title])
+ //
+ // We use removeAttr only for key events, to allow IE to export the correct
+ // accessible attributes. For mouse events, set to empty string to avoid
+ // native tooltip showing up (happens only when removing inside mouseover).
+ if (target.is("[title]")) {
+ if (event && event.type === "mouseover") {
+ target.attr("title", "");
+ } else {
+ target.removeAttr("title");
+ }
+ }
+
+ tooltipData = this._tooltip(target);
+ tooltip = tooltipData.tooltip;
+ this._addDescribedBy(target, tooltip.attr("id"));
+ tooltip.find(".ui-tooltip-content").html(content);
+
+ // Support: Voiceover on OS X, JAWS on IE <= 9
+ // JAWS announces deletions even when aria-relevant="additions"
+ // Voiceover will sometimes re-read the entire log region's contents from the beginning
+ this.liveRegion.children().hide();
+ if (content.clone) {
+ a11yContent = content.clone();
+ a11yContent.removeAttr("id").find("[id]").removeAttr("id");
+ } else {
+ a11yContent = content;
+ }
+ $("<div>").html(a11yContent).appendTo(this.liveRegion);
+
+ function position(event) {
+ positionOption.of = event;
+ if (tooltip.is(":hidden")) {
+ return;
+ }
+ tooltip.position(positionOption);
+ }
+
+ if (this.options.track && event && /^mouse/.test(event.type)) {
+ this._on(this.document, {
+ mousemove: position
+ });
+ // trigger once to override element-relative positioning
+ position(event);
+ } else {
+ tooltip.position($.extend({
+ of: target
+ }, this.options.position));
+ }
+
+ tooltip.hide();
+
+ this._show(tooltip, this.options.show);
+ // Handle tracking tooltips that are shown with a delay (#8644). As soon
+ // as the tooltip is visible, position the tooltip using the most recent
+ // event.
+ if (this.options.show && this.options.show.delay) {
+ delayedShow = this.delayedShow = setInterval(function () {
+ if (tooltip.is(":visible")) {
+ position(positionOption.of);
+ clearInterval(delayedShow);
+ }
+ }, $.fx.interval);
+ }
+
+ this._trigger("open", event, {tooltip: tooltip});
+ },
+
+ _registerCloseHandlers: function (event, target) {
+ var events = {
+ keyup: function (event) {
+ if (event.keyCode === $.ui.keyCode.ESCAPE) {
+ var fakeEvent = $.Event(event);
+ fakeEvent.currentTarget = target[0];
+ this.close(fakeEvent, true);
+ }
+ }
+ };
+
+ // Only bind remove handler for delegated targets. Non-delegated
+ // tooltips will handle this in destroy.
+ if (target[0] !== this.element[0]) {
+ events.remove = function () {
+ this._removeTooltip(this._find(target).tooltip);
+ };
+ }
+
+ if (!event || event.type === "mouseover") {
+ events.mouseleave = "close";
+ }
+ if (!event || event.type === "focusin") {
+ events.focusout = "close";
+ }
+ this._on(true, target, events);
+ },
+
+ close: function (event) {
+ var tooltip,
+ that = this,
+ target = $(event ? event.currentTarget : this.element),
+ tooltipData = this._find(target);
+
+ // The tooltip may already be closed
+ if (!tooltipData) {
+
+ // We set ui-tooltip-open immediately upon open (in open()), but only set the
+ // additional data once there's actually content to show (in _open()). So even if the
+ // tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+ // the period between open() and _open().
+ target.removeData("ui-tooltip-open");
+ return;
+ }
+
+ tooltip = tooltipData.tooltip;
+
+ // disabling closes the tooltip, so we need to track when we're closing
+ // to avoid an infinite loop in case the tooltip becomes disabled on close
+ if (tooltipData.closing) {
+ return;
+ }
+
+ // Clear the interval for delayed tracking tooltips
+ clearInterval(this.delayedShow);
+
+ // only set title if we had one before (see comment in _open())
+ // If the title attribute has changed since open(), don't restore
+ if (target.data("ui-tooltip-title") && !target.attr("title")) {
+ target.attr("title", target.data("ui-tooltip-title"));
+ }
+
+ this._removeDescribedBy(target);
+
+ tooltipData.hiding = true;
+ tooltip.stop(true);
+ this._hide(tooltip, this.options.hide, function () {
+ that._removeTooltip($(this));
+ });
+
+ target.removeData("ui-tooltip-open");
+ this._off(target, "mouseleave focusout keyup");
+
+ // Remove 'remove' binding only on delegated targets
+ if (target[0] !== this.element[0]) {
+ this._off(target, "remove");
+ }
+ this._off(this.document, "mousemove");
+
+ if (event && event.type === "mouseleave") {
+ $.each(this.parents, function (id, parent) {
+ $(parent.element).attr("title", parent.title);
+ delete that.parents[id];
+ });
+ }
+
+ tooltipData.closing = true;
+ this._trigger("close", event, {tooltip: tooltip});
+ if (!tooltipData.hiding) {
+ tooltipData.closing = false;
+ }
+ },
+
+ _tooltip: function (element) {
+ var tooltip = $("<div>")
+ .attr("role", "tooltip")
+ .addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+ ( this.options.tooltipClass || "" )),
+ id = tooltip.uniqueId().attr("id");
+
+ $("<div>")
+ .addClass("ui-tooltip-content")
+ .appendTo(tooltip);
+
+ tooltip.appendTo(this.document[0].body);
+
+ return this.tooltips[id] = {
+ element: element,
+ tooltip: tooltip
+ };
+ },
+
+ _find: function (target) {
+ var id = target.data("ui-tooltip-id");
+ return id ? this.tooltips[id] : null;
+ },
+
+ _removeTooltip: function (tooltip) {
+ tooltip.remove();
+ delete this.tooltips[tooltip.attr("id")];
+ },
+
+ _destroy: function () {
+ var that = this;
+
+ // close open tooltips
+ $.each(this.tooltips, function (id, tooltipData) {
+ // Delegate to close method to handle common cleanup
+ var event = $.Event("blur"),
+ element = tooltipData.element;
+ event.target = event.currentTarget = element[0];
+ that.close(event, true);
+
+ // Remove immediately; destroying an open tooltip doesn't use the
+ // hide animation
+ $("#" + id).remove();
+
+ // Restore the title
+ if (element.data("ui-tooltip-title")) {
+ // If the title attribute has changed since open(), don't restore
+ if (!element.attr("title")) {
+ element.attr("title", element.data("ui-tooltip-title"));
+ }
+ element.removeData("ui-tooltip-title");
+ }
+ });
+ this.liveRegion.remove();
+ }
+ });
+
+
+ /*!
+ * jQuery UI Effects 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+ var dataSpace = "ui-effects-",
+
+ // Create a local jQuery because jQuery Color relies on it and the
+ // global may not exist with AMD and a custom build (#10199)
+ jQuery = $;
+
+ $.effects = {
+ effect: {}
+ };
+
+ /*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+ (function (jQuery, undefined) {
+
+ var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+ // plusequals test for += 100 -= 100
+ rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+ // a set of RE's that can match strings and generate color tuples.
+ stringParsers = [{
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function (execResult) {
+ return [
+ execResult[1],
+ execResult[2],
+ execResult[3],
+ execResult[4]
+ ];
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function (execResult) {
+ return [
+ execResult[1] * 2.55,
+ execResult[2] * 2.55,
+ execResult[3] * 2.55,
+ execResult[4]
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+ parse: function (execResult) {
+ return [
+ parseInt(execResult[1], 16),
+ parseInt(execResult[2], 16),
+ parseInt(execResult[3], 16)
+ ];
+ }
+ }, {
+ // this regex ignores A-F because it's compared against an already lowercased string
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+ parse: function (execResult) {
+ return [
+ parseInt(execResult[1] + execResult[1], 16),
+ parseInt(execResult[2] + execResult[2], 16),
+ parseInt(execResult[3] + execResult[3], 16)
+ ];
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function (execResult) {
+ return [
+ execResult[1],
+ execResult[2] / 100,
+ execResult[3] / 100,
+ execResult[4]
+ ];
+ }
+ }],
+
+ // jQuery.Color( )
+ color = jQuery.Color = function (color, green, blue, alpha) {
+ return new jQuery.Color.fn.parse(color, green, blue, alpha);
+ },
+ spaces = {
+ rgba: {
+ props: {
+ red: {
+ idx: 0,
+ type: "byte"
+ },
+ green: {
+ idx: 1,
+ type: "byte"
+ },
+ blue: {
+ idx: 2,
+ type: "byte"
+ }
+ }
+ },
+
+ hsla: {
+ props: {
+ hue: {
+ idx: 0,
+ type: "degrees"
+ },
+ saturation: {
+ idx: 1,
+ type: "percent"
+ },
+ lightness: {
+ idx: 2,
+ type: "percent"
+ }
+ }
+ }
+ },
+ propTypes = {
+ "byte": {
+ floor: true,
+ max: 255
+ },
+ "percent": {
+ max: 1
+ },
+ "degrees": {
+ mod: 360,
+ floor: true
+ }
+ },
+ support = color.support = {},
+
+ // element for support tests
+ supportElem = jQuery("<p>")[0],
+
+ // colors = jQuery.Color.names
+ colors,
+
+ // local aliases of functions called often
+ each = jQuery.each;
+
+// determine rgba support immediately
+ supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+ support.rgba = supportElem.style.backgroundColor.indexOf("rgba") > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+ each(spaces, function (spaceName, space) {
+ space.cache = "_" + spaceName;
+ space.props.alpha = {
+ idx: 3,
+ type: "percent",
+ def: 1
+ };
+ });
+
+ function clamp(value, prop, allowEmpty) {
+ var type = propTypes[prop.type] || {};
+
+ if (value == null) {
+ return (allowEmpty || !prop.def) ? null : prop.def;
+ }
+
+ // ~~ is an short way of doing floor for positive numbers
+ value = type.floor ? ~~value : parseFloat(value);
+
+ // IE will pass in empty strings as value for alpha,
+ // which will hit this case
+ if (isNaN(value)) {
+ return prop.def;
+ }
+
+ if (type.mod) {
+ // we add mod before modding to make sure that negatives values
+ // get converted properly: -10 -> 350
+ return (value + type.mod) % type.mod;
+ }
+
+ // for now all property types without mod have min and max
+ return 0 > value ? 0 : type.max < value ? type.max : value;
+ }
+
+ function stringParse(string) {
+ var inst = color(),
+ rgba = inst._rgba = [];
+
+ string = string.toLowerCase();
+
+ each(stringParsers, function (i, parser) {
+ var parsed,
+ match = parser.re.exec(string),
+ values = match && parser.parse(match),
+ spaceName = parser.space || "rgba";
+
+ if (values) {
+ parsed = inst[spaceName](values);
+
+ // if this was an rgba parse the assignment might happen twice
+ // oh well....
+ inst[spaces[spaceName].cache] = parsed[spaces[spaceName].cache];
+ rgba = inst._rgba = parsed._rgba;
+
+ // exit each( stringParsers ) here because we matched
+ return false;
+ }
+ });
+
+ // Found a stringParser that handled it
+ if (rgba.length) {
+
+ // if this came from a parsed string, force "transparent" when alpha is 0
+ // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+ if (rgba.join() === "0,0,0,0") {
+ jQuery.extend(rgba, colors.transparent);
+ }
+ return inst;
+ }
+
+ // named colors
+ return colors[string];
+ }
+
+ color.fn = jQuery.extend(color.prototype, {
+ parse: function (red, green, blue, alpha) {
+ if (red === undefined) {
+ this._rgba = [null, null, null, null];
+ return this;
+ }
+ if (red.jquery || red.nodeType) {
+ red = jQuery(red).css(green);
+ green = undefined;
+ }
+
+ var inst = this,
+ type = jQuery.type(red),
+ rgba = this._rgba = [];
+
+ // more than 1 argument specified - assume ( red, green, blue, alpha )
+ if (green !== undefined) {
+ red = [red, green, blue, alpha];
+ type = "array";
+ }
+
+ if (type === "string") {
+ return this.parse(stringParse(red) || colors._default);
+ }
+
+ if (type === "array") {
+ each(spaces.rgba.props, function (key, prop) {
+ rgba[prop.idx] = clamp(red[prop.idx], prop);
+ });
+ return this;
+ }
+
+ if (type === "object") {
+ if (red instanceof color) {
+ each(spaces, function (spaceName, space) {
+ if (red[space.cache]) {
+ inst[space.cache] = red[space.cache].slice();
+ }
+ });
+ } else {
+ each(spaces, function (spaceName, space) {
+ var cache = space.cache;
+ each(space.props, function (key, prop) {
+
+ // if the cache doesn't exist, and we know how to convert
+ if (!inst[cache] && space.to) {
+
+ // if the value was null, we don't need to copy it
+ // if the key was alpha, we don't need to copy it either
+ if (key === "alpha" || red[key] == null) {
+ return;
+ }
+ inst[cache] = space.to(inst._rgba);
+ }
+
+ // this is the only case where we allow nulls for ALL properties.
+ // call clamp with alwaysAllowEmpty
+ inst[cache][prop.idx] = clamp(red[key], prop, true);
+ });
+
+ // everything defined but alpha?
+ if (inst[cache] && jQuery.inArray(null, inst[cache].slice(0, 3)) < 0) {
+ // use the default of 1
+ inst[cache][3] = 1;
+ if (space.from) {
+ inst._rgba = space.from(inst[cache]);
+ }
+ }
+ });
+ }
+ return this;
+ }
+ },
+ is: function (compare) {
+ var is = color(compare),
+ same = true,
+ inst = this;
+
+ each(spaces, function (_, space) {
+ var localCache,
+ isCache = is[space.cache];
+ if (isCache) {
+ localCache = inst[space.cache] || space.to && space.to(inst._rgba) || [];
+ each(space.props, function (_, prop) {
+ if (isCache[prop.idx] != null) {
+ same = ( isCache[prop.idx] === localCache[prop.idx] );
+ return same;
+ }
+ });
+ }
+ return same;
+ });
+ return same;
+ },
+ _space: function () {
+ var used = [],
+ inst = this;
+ each(spaces, function (spaceName, space) {
+ if (inst[space.cache]) {
+ used.push(spaceName);
+ }
+ });
+ return used.pop();
+ },
+ transition: function (other, distance) {
+ var end = color(other),
+ spaceName = end._space(),
+ space = spaces[spaceName],
+ startColor = this.alpha() === 0 ? color("transparent") : this,
+ start = startColor[space.cache] || space.to(startColor._rgba),
+ result = start.slice();
+
+ end = end[space.cache];
+ each(space.props, function (key, prop) {
+ var index = prop.idx,
+ startValue = start[index],
+ endValue = end[index],
+ type = propTypes[prop.type] || {};
+
+ // if null, don't override start value
+ if (endValue === null) {
+ return;
+ }
+ // if null - use end
+ if (startValue === null) {
+ result[index] = endValue;
+ } else {
+ if (type.mod) {
+ if (endValue - startValue > type.mod / 2) {
+ startValue += type.mod;
+ } else if (startValue - endValue > type.mod / 2) {
+ startValue -= type.mod;
+ }
+ }
+ result[index] = clamp(( endValue - startValue ) * distance + startValue, prop);
+ }
+ });
+ return this[spaceName](result);
+ },
+ blend: function (opaque) {
+ // if we are already opaque - return ourself
+ if (this._rgba[3] === 1) {
+ return this;
+ }
+
+ var rgb = this._rgba.slice(),
+ a = rgb.pop(),
+ blend = color(opaque)._rgba;
+
+ return color(jQuery.map(rgb, function (v, i) {
+ return ( 1 - a ) * blend[i] + a * v;
+ }));
+ },
+ toRgbaString: function () {
+ var prefix = "rgba(",
+ rgba = jQuery.map(this._rgba, function (v, i) {
+ return v == null ? ( i > 2 ? 1 : 0 ) : v;
+ });
+
+ if (rgba[3] === 1) {
+ rgba.pop();
+ prefix = "rgb(";
+ }
+
+ return prefix + rgba.join() + ")";
+ },
+ toHslaString: function () {
+ var prefix = "hsla(",
+ hsla = jQuery.map(this.hsla(), function (v, i) {
+ if (v == null) {
+ v = i > 2 ? 1 : 0;
+ }
+
+ // catch 1 and 2
+ if (i && i < 3) {
+ v = Math.round(v * 100) + "%";
+ }
+ return v;
+ });
+
+ if (hsla[3] === 1) {
+ hsla.pop();
+ prefix = "hsl(";
+ }
+ return prefix + hsla.join() + ")";
+ },
+ toHexString: function (includeAlpha) {
+ var rgba = this._rgba.slice(),
+ alpha = rgba.pop();
+
+ if (includeAlpha) {
+ rgba.push(~~( alpha * 255 ));
+ }
+
+ return "#" + jQuery.map(rgba, function (v) {
+
+ // default to 0 when nulls exist
+ v = ( v || 0 ).toString(16);
+ return v.length === 1 ? "0" + v : v;
+ }).join("");
+ },
+ toString: function () {
+ return this._rgba[3] === 0 ? "transparent" : this.toRgbaString();
+ }
+ });
+ color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+ function hue2rgb(p, q, h) {
+ h = ( h + 1 ) % 1;
+ if (h * 6 < 1) {
+ return p + ( q - p ) * h * 6;
+ }
+ if (h * 2 < 1) {
+ return q;
+ }
+ if (h * 3 < 2) {
+ return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+ }
+ return p;
+ }
+
+ spaces.hsla.to = function (rgba) {
+ if (rgba[0] == null || rgba[1] == null || rgba[2] == null) {
+ return [null, null, null, rgba[3]];
+ }
+ var r = rgba[0] / 255,
+ g = rgba[1] / 255,
+ b = rgba[2] / 255,
+ a = rgba[3],
+ max = Math.max(r, g, b),
+ min = Math.min(r, g, b),
+ diff = max - min,
+ add = max + min,
+ l = add * 0.5,
+ h, s;
+
+ if (min === max) {
+ h = 0;
+ } else if (r === max) {
+ h = ( 60 * ( g - b ) / diff ) + 360;
+ } else if (g === max) {
+ h = ( 60 * ( b - r ) / diff ) + 120;
+ } else {
+ h = ( 60 * ( r - g ) / diff ) + 240;
+ }
+
+ // chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+ // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+ if (diff === 0) {
+ s = 0;
+ } else if (l <= 0.5) {
+ s = diff / add;
+ } else {
+ s = diff / ( 2 - add );
+ }
+ return [Math.round(h) % 360, s, l, a == null ? 1 : a];
+ };
+
+ spaces.hsla.from = function (hsla) {
+ if (hsla[0] == null || hsla[1] == null || hsla[2] == null) {
+ return [null, null, null, hsla[3]];
+ }
+ var h = hsla[0] / 360,
+ s = hsla[1],
+ l = hsla[2],
+ a = hsla[3],
+ q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+ p = 2 * l - q;
+
+ return [
+ Math.round(hue2rgb(p, q, h + ( 1 / 3 )) * 255),
+ Math.round(hue2rgb(p, q, h) * 255),
+ Math.round(hue2rgb(p, q, h - ( 1 / 3 )) * 255),
+ a
+ ];
+ };
+
+ each(spaces, function (spaceName, space) {
+ var props = space.props,
+ cache = space.cache,
+ to = space.to,
+ from = space.from;
+
+ // makes rgba() and hsla()
+ color.fn[spaceName] = function (value) {
+
+ // generate a cache for this space if it doesn't exist
+ if (to && !this[cache]) {
+ this[cache] = to(this._rgba);
+ }
+ if (value === undefined) {
+ return this[cache].slice();
+ }
+
+ var ret,
+ type = jQuery.type(value),
+ arr = ( type === "array" || type === "object" ) ? value : arguments,
+ local = this[cache].slice();
+
+ each(props, function (key, prop) {
+ var val = arr[type === "object" ? key : prop.idx];
+ if (val == null) {
+ val = local[prop.idx];
+ }
+ local[prop.idx] = clamp(val, prop);
+ });
+
+ if (from) {
+ ret = color(from(local));
+ ret[cache] = local;
+ return ret;
+ } else {
+ return color(local);
+ }
+ };
+
+ // makes red() green() blue() alpha() hue() saturation() lightness()
+ each(props, function (key, prop) {
+ // alpha is included in more than one space
+ if (color.fn[key]) {
+ return;
+ }
+ color.fn[key] = function (value) {
+ var vtype = jQuery.type(value),
+ fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+ local = this[fn](),
+ cur = local[prop.idx],
+ match;
+
+ if (vtype === "undefined") {
+ return cur;
+ }
+
+ if (vtype === "function") {
+ value = value.call(this, cur);
+ vtype = jQuery.type(value);
+ }
+ if (value == null && prop.empty) {
+ return this;
+ }
+ if (vtype === "string") {
+ match = rplusequals.exec(value);
+ if (match) {
+ value = cur + parseFloat(match[2]) * ( match[1] === "+" ? 1 : -1 );
+ }
+ }
+ local[prop.idx] = value;
+ return this[fn](local);
+ };
+ });
+ });
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+ color.hook = function (hook) {
+ var hooks = hook.split(" ");
+ each(hooks, function (i, hook) {
+ jQuery.cssHooks[hook] = {
+ set: function (elem, value) {
+ var parsed, curElem,
+ backgroundColor = "";
+
+ if (value !== "transparent" && ( jQuery.type(value) !== "string" || ( parsed = stringParse(value) ) )) {
+ value = color(parsed || value);
+ if (!support.rgba && value._rgba[3] !== 1) {
+ curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+ while (
+ (backgroundColor === "" || backgroundColor === "transparent") &&
+ curElem && curElem.style
+ ) {
+ try {
+ backgroundColor = jQuery.css(curElem, "backgroundColor");
+ curElem = curElem.parentNode;
+ } catch (e) {
+ }
+ }
+
+ value = value.blend(backgroundColor && backgroundColor !== "transparent" ?
+ backgroundColor :
+ "_default");
+ }
+
+ value = value.toRgbaString();
+ }
+ try {
+ elem.style[hook] = value;
+ } catch (e) {
+ // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+ }
+ }
+ };
+ jQuery.fx.step[hook] = function (fx) {
+ if (!fx.colorInit) {
+ fx.start = color(fx.elem, hook);
+ fx.end = color(fx.end);
+ fx.colorInit = true;
+ }
+ jQuery.cssHooks[hook].set(fx.elem, fx.start.transition(fx.end, fx.pos));
+ };
+ });
+
+ };
+
+ color.hook(stepHooks);
+
+ jQuery.cssHooks.borderColor = {
+ expand: function (value) {
+ var expanded = {};
+
+ each(["Top", "Right", "Bottom", "Left"], function (i, part) {
+ expanded["border" + part + "Color"] = value;
+ });
+ return expanded;
+ }
+ };
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+ colors = jQuery.Color.names = {
+ // 4.1. Basic color keywords
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+
+ // 4.2.3. "transparent" color keyword
+ transparent: [null, null, null, 0],
+
+ _default: "#ffffff"
+ };
+
+ })(jQuery);
+
+ /******************************************************************************/
+ /****************************** CLASS ANIMATIONS ******************************/
+ /******************************************************************************/
+ (function () {
+
+ var classAnimationActions = ["add", "remove", "toggle"],
+ shorthandStyles = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+
+ $.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function (_, prop) {
+ $.fx.step[prop] = function (fx) {
+ if (fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr) {
+ jQuery.style(fx.elem, prop, fx.end);
+ fx.setAttr = true;
+ }
+ };
+ });
+
+ function getElementStyles(elem) {
+ var key, len,
+ style = elem.ownerDocument.defaultView ?
+ elem.ownerDocument.defaultView.getComputedStyle(elem, null) :
+ elem.currentStyle,
+ styles = {};
+
+ if (style && style.length && style[0] && style[style[0]]) {
+ len = style.length;
+ while (len--) {
+ key = style[len];
+ if (typeof style[key] === "string") {
+ styles[$.camelCase(key)] = style[key];
+ }
+ }
+ // support: Opera, IE <9
+ } else {
+ for (key in style) {
+ if (typeof style[key] === "string") {
+ styles[key] = style[key];
+ }
+ }
+ }
+
+ return styles;
+ }
+
+ function styleDifference(oldStyle, newStyle) {
+ var diff = {},
+ name, value;
+
+ for (name in newStyle) {
+ value = newStyle[name];
+ if (oldStyle[name] !== value) {
+ if (!shorthandStyles[name]) {
+ if ($.fx.step[name] || !isNaN(parseFloat(value))) {
+ diff[name] = value;
+ }
+ }
+ }
+ }
+
+ return diff;
+ }
+
+// support: jQuery <1.8
+ if (!$.fn.addBack) {
+ $.fn.addBack = function (selector) {
+ return this.add(selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ };
+ }
+
+ $.effects.animateClass = function (value, duration, easing, callback) {
+ var o = $.speed(duration, easing, callback);
+
+ return this.queue(function () {
+ var animated = $(this),
+ baseClass = animated.attr("class") || "",
+ applyClassChange,
+ allAnimations = o.children ? animated.find("*").addBack() : animated;
+
+ // map the animated objects to store the original styles.
+ allAnimations = allAnimations.map(function () {
+ var el = $(this);
+ return {
+ el: el,
+ start: getElementStyles(this)
+ };
+ });
+
+ // apply class change
+ applyClassChange = function () {
+ $.each(classAnimationActions, function (i, action) {
+ if (value[action]) {
+ animated[action + "Class"](value[action]);
+ }
+ });
+ };
+ applyClassChange();
+
+ // map all animated objects again - calculate new styles and diff
+ allAnimations = allAnimations.map(function () {
+ this.end = getElementStyles(this.el[0]);
+ this.diff = styleDifference(this.start, this.end);
+ return this;
+ });
+
+ // apply original class
+ animated.attr("class", baseClass);
+
+ // map all animated objects again - this time collecting a promise
+ allAnimations = allAnimations.map(function () {
+ var styleInfo = this,
+ dfd = $.Deferred(),
+ opts = $.extend({}, o, {
+ queue: false,
+ complete: function () {
+ dfd.resolve(styleInfo);
+ }
+ });
+
+ this.el.animate(this.diff, opts);
+ return dfd.promise();
+ });
+
+ // once all animations have completed:
+ $.when.apply($, allAnimations.get()).done(function () {
+
+ // set the final class
+ applyClassChange();
+
+ // for each animated element,
+ // clear all css properties that were animated
+ $.each(arguments, function () {
+ var el = this.el;
+ $.each(this.diff, function (key) {
+ el.css(key, "");
+ });
+ });
+
+ // this is guarnteed to be there if you use jQuery.speed()
+ // it also handles dequeuing the next anim...
+ o.complete.call(animated[0]);
+ });
+ });
+ };
+
+ $.fn.extend({
+ addClass: (function (orig) {
+ return function (classNames, speed, easing, callback) {
+ return speed ?
+ $.effects.animateClass.call(this,
+ {add: classNames}, speed, easing, callback) :
+ orig.apply(this, arguments);
+ };
+ })($.fn.addClass),
+
+ removeClass: (function (orig) {
+ return function (classNames, speed, easing, callback) {
+ return arguments.length > 1 ?
+ $.effects.animateClass.call(this,
+ {remove: classNames}, speed, easing, callback) :
+ orig.apply(this, arguments);
+ };
+ })($.fn.removeClass),
+
+ toggleClass: (function (orig) {
+ return function (classNames, force, speed, easing, callback) {
+ if (typeof force === "boolean" || force === undefined) {
+ if (!speed) {
+ // without speed parameter
+ return orig.apply(this, arguments);
+ } else {
+ return $.effects.animateClass.call(this,
+ (force ? {add: classNames} : {remove: classNames}),
+ speed, easing, callback);
+ }
+ } else {
+ // without force parameter
+ return $.effects.animateClass.call(this,
+ {toggle: classNames}, force, speed, easing);
+ }
+ };
+ })($.fn.toggleClass),
+
+ switchClass: function (remove, add, speed, easing, callback) {
+ return $.effects.animateClass.call(this, {
+ add: add,
+ remove: remove
+ }, speed, easing, callback);
+ }
+ });
+
+ })();
+
+ /******************************************************************************/
+ /*********************************** EFFECTS **********************************/
+ /******************************************************************************/
+
+ (function () {
+
+ $.extend($.effects, {
+ version: "1.11.4",
+
+ // Saves a set of properties in a data storage
+ save: function (element, set) {
+ for (var i = 0; i < set.length; i++) {
+ if (set[i] !== null) {
+ element.data(dataSpace + set[i], element[0].style[set[i]]);
+ }
+ }
+ },
+
+ // Restores a set of previously saved properties from a data storage
+ restore: function (element, set) {
+ var val, i;
+ for (i = 0; i < set.length; i++) {
+ if (set[i] !== null) {
+ val = element.data(dataSpace + set[i]);
+ // support: jQuery 1.6.2
+ // http://bugs.jquery.com/ticket/9917
+ // jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+ // We can't differentiate between "" and 0 here, so we just assume
+ // empty string since it's likely to be a more common value...
+ if (val === undefined) {
+ val = "";
+ }
+ element.css(set[i], val);
+ }
+ }
+ },
+
+ setMode: function (el, mode) {
+ if (mode === "toggle") {
+ mode = el.is(":hidden") ? "show" : "hide";
+ }
+ return mode;
+ },
+
+ // Translates a [top,left] array into a baseline value
+ // this should be a little more flexible in the future to handle a string & hash
+ getBaseline: function (origin, original) {
+ var y, x;
+ switch (origin[0]) {
+ case "top":
+ y = 0;
+ break;
+ case "middle":
+ y = 0.5;
+ break;
+ case "bottom":
+ y = 1;
+ break;
+ default:
+ y = origin[0] / original.height;
+ }
+ switch (origin[1]) {
+ case "left":
+ x = 0;
+ break;
+ case "center":
+ x = 0.5;
+ break;
+ case "right":
+ x = 1;
+ break;
+ default:
+ x = origin[1] / original.width;
+ }
+ return {
+ x: x,
+ y: y
+ };
+ },
+
+ // Wraps the element around a wrapper that copies position properties
+ createWrapper: function (element) {
+
+ // if the element is already wrapped, return it
+ if (element.parent().is(".ui-effects-wrapper")) {
+ return element.parent();
+ }
+
+ // wrap the element
+ var props = {
+ width: element.outerWidth(true),
+ height: element.outerHeight(true),
+ "float": element.css("float")
+ },
+ wrapper = $("<div></div>")
+ .addClass("ui-effects-wrapper")
+ .css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }),
+ // Store the size in case width/height are defined in % - Fixes #5245
+ size = {
+ width: element.width(),
+ height: element.height()
+ },
+ active = document.activeElement;
+
+ // support: Firefox
+ // Firefox incorrectly exposes anonymous content
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+ try {
+ active.id;
+ } catch (e) {
+ active = document.body;
+ }
+
+ element.wrap(wrapper);
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if (element[0] === active || $.contains(element[0], active)) {
+ $(active).focus();
+ }
+
+ wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+ // transfer positioning properties to the wrapper
+ if (element.css("position") === "static") {
+ wrapper.css({position: "relative"});
+ element.css({position: "relative"});
+ } else {
+ $.extend(props, {
+ position: element.css("position"),
+ zIndex: element.css("z-index")
+ });
+ $.each(["top", "left", "bottom", "right"], function (i, pos) {
+ props[pos] = element.css(pos);
+ if (isNaN(parseInt(props[pos], 10))) {
+ props[pos] = "auto";
+ }
+ });
+ element.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ });
+ }
+ element.css(size);
+
+ return wrapper.css(props).show();
+ },
+
+ removeWrapper: function (element) {
+ var active = document.activeElement;
+
+ if (element.parent().is(".ui-effects-wrapper")) {
+ element.parent().replaceWith(element);
+
+ // Fixes #7595 - Elements lose focus when wrapped.
+ if (element[0] === active || $.contains(element[0], active)) {
+ $(active).focus();
+ }
+ }
+
+ return element;
+ },
+
+ setTransition: function (element, list, factor, value) {
+ value = value || {};
+ $.each(list, function (i, x) {
+ var unit = element.cssUnit(x);
+ if (unit[0] > 0) {
+ value[x] = unit[0] * factor + unit[1];
+ }
+ });
+ return value;
+ }
+ });
+
+// return an effect options object for the given parameters:
+ function _normalizeArguments(effect, options, speed, callback) {
+
+ // allow passing all options as the first parameter
+ if ($.isPlainObject(effect)) {
+ options = effect;
+ effect = effect.effect;
+ }
+
+ // convert to an object
+ effect = {effect: effect};
+
+ // catch (effect, null, ...)
+ if (options == null) {
+ options = {};
+ }
+
+ // catch (effect, callback)
+ if ($.isFunction(options)) {
+ callback = options;
+ speed = null;
+ options = {};
+ }
+
+ // catch (effect, speed, ?)
+ if (typeof options === "number" || $.fx.speeds[options]) {
+ callback = speed;
+ speed = options;
+ options = {};
+ }
+
+ // catch (effect, options, callback)
+ if ($.isFunction(speed)) {
+ callback = speed;
+ speed = null;
+ }
+
+ // add options to effect
+ if (options) {
+ $.extend(effect, options);
+ }
+
+ speed = speed || options.duration;
+ effect.duration = $.fx.off ? 0 :
+ typeof speed === "number" ? speed :
+ speed in $.fx.speeds ? $.fx.speeds[speed] :
+ $.fx.speeds._default;
+
+ effect.complete = callback || options.complete;
+
+ return effect;
+ }
+
+ function standardAnimationOption(option) {
+ // Valid standard speeds (nothing, number, named speed)
+ if (!option || typeof option === "number" || $.fx.speeds[option]) {
+ return true;
+ }
+
+ // Invalid strings - treat as "normal" speed
+ if (typeof option === "string" && !$.effects.effect[option]) {
+ return true;
+ }
+
+ // Complete callback
+ if ($.isFunction(option)) {
+ return true;
+ }
+
+ // Options hash (but not naming an effect)
+ if (typeof option === "object" && !option.effect) {
+ return true;
+ }
+
+ // Didn't match any standard API
+ return false;
+ }
+
+ $.fn.extend({
+ effect: function (/* effect, options, speed, callback */) {
+ var args = _normalizeArguments.apply(this, arguments),
+ mode = args.mode,
+ queue = args.queue,
+ effectMethod = $.effects.effect[args.effect];
+
+ if ($.fx.off || !effectMethod) {
+ // delegate to the original method (e.g., .show()) if possible
+ if (mode) {
+ return this[mode](args.duration, args.complete);
+ } else {
+ return this.each(function () {
+ if (args.complete) {
+ args.complete.call(this);
+ }
+ });
+ }
+ }
+
+ function run(next) {
+ var elem = $(this),
+ complete = args.complete,
+ mode = args.mode;
+
+ function done() {
+ if ($.isFunction(complete)) {
+ complete.call(elem[0]);
+ }
+ if ($.isFunction(next)) {
+ next();
+ }
+ }
+
+ // If the element already has the correct final state, delegate to
+ // the core methods so the internal tracking of "olddisplay" works.
+ if (elem.is(":hidden") ? mode === "hide" : mode === "show") {
+ elem[mode]();
+ done();
+ } else {
+ effectMethod.call(elem[0], args, done);
+ }
+ }
+
+ return queue === false ? this.each(run) : this.queue(queue || "fx", run);
+ },
+
+ show: (function (orig) {
+ return function (option) {
+ if (standardAnimationOption(option)) {
+ return orig.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args.mode = "show";
+ return this.effect.call(this, args);
+ }
+ };
+ })($.fn.show),
+
+ hide: (function (orig) {
+ return function (option) {
+ if (standardAnimationOption(option)) {
+ return orig.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args.mode = "hide";
+ return this.effect.call(this, args);
+ }
+ };
+ })($.fn.hide),
+
+ toggle: (function (orig) {
+ return function (option) {
+ if (standardAnimationOption(option) || typeof option === "boolean") {
+ return orig.apply(this, arguments);
+ } else {
+ var args = _normalizeArguments.apply(this, arguments);
+ args.mode = "toggle";
+ return this.effect.call(this, args);
+ }
+ };
+ })($.fn.toggle),
+
+ // helper functions
+ cssUnit: function (key) {
+ var style = this.css(key),
+ val = [];
+
+ $.each(["em", "px", "%", "pt"], function (i, unit) {
+ if (style.indexOf(unit) > 0) {
+ val = [parseFloat(style), unit];
+ }
+ });
+ return val;
+ }
+ });
+
+ })();
+
+ /******************************************************************************/
+ /*********************************** EASING ***********************************/
+ /******************************************************************************/
+
+ (function () {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+ var baseEasings = {};
+
+ $.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (i, name) {
+ baseEasings[name] = function (p) {
+ return Math.pow(p, i + 2);
+ };
+ });
+
+ $.extend(baseEasings, {
+ Sine: function (p) {
+ return 1 - Math.cos(p * Math.PI / 2);
+ },
+ Circ: function (p) {
+ return 1 - Math.sqrt(1 - p * p);
+ },
+ Elastic: function (p) {
+ return p === 0 || p === 1 ? p :
+ -Math.pow(2, 8 * (p - 1)) * Math.sin(( (p - 1) * 80 - 7.5 ) * Math.PI / 15);
+ },
+ Back: function (p) {
+ return p * p * ( 3 * p - 2 );
+ },
+ Bounce: function (p) {
+ var pow2,
+ bounce = 4;
+
+ while (p < ( ( pow2 = Math.pow(2, --bounce) ) - 1 ) / 11) {
+ }
+ return 1 / Math.pow(4, 3 - bounce) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - p, 2);
+ }
+ });
+
+ $.each(baseEasings, function (name, easeIn) {
+ $.easing["easeIn" + name] = easeIn;
+ $.easing["easeOut" + name] = function (p) {
+ return 1 - easeIn(1 - p);
+ };
+ $.easing["easeInOut" + name] = function (p) {
+ return p < 0.5 ?
+ easeIn(p * 2) / 2 :
+ 1 - easeIn(p * -2 + 2) / 2;
+ };
+ });
+
+ })();
+
+ var effect = $.effects;
+
+
+ /*!
+ * jQuery UI Effects Blind 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
+
+
+ var effectBlind = $.effects.effect.blind = function (o, done) {
+ // Create element
+ var el = $(this),
+ rvertical = /up|down|vertical/,
+ rpositivemotion = /up|left|vertical|horizontal/,
+ props = ["position", "top", "bottom", "left", "right", "height", "width"],
+ mode = $.effects.setMode(el, o.mode || "hide"),
+ direction = o.direction || "up",
+ vertical = rvertical.test(direction),
+ ref = vertical ? "height" : "width",
+ ref2 = vertical ? "top" : "left",
+ motion = rpositivemotion.test(direction),
+ animation = {},
+ show = mode === "show",
+ wrapper, distance, margin;
+
+ // if already wrapped, the wrapper's properties are my property. #6245
+ if (el.parent().is(".ui-effects-wrapper")) {
+ $.effects.save(el.parent(), props);
+ } else {
+ $.effects.save(el, props);
+ }
+ el.show();
+ wrapper = $.effects.createWrapper(el).css({
+ overflow: "hidden"
+ });
+
+ distance = wrapper[ref]();
+ margin = parseFloat(wrapper.css(ref2)) || 0;
+
+ animation[ref] = show ? distance : 0;
+ if (!motion) {
+ el
+ .css(vertical ? "bottom" : "right", 0)
+ .css(vertical ? "top" : "left", "auto")
+ .css({position: "absolute"});
+
+ animation[ref2] = show ? margin : distance + margin;
+ }
+
+ // start at 0 if we are showing
+ if (show) {
+ wrapper.css(ref, 0);
+ if (!motion) {
+ wrapper.css(ref2, margin + distance);
+ }
+ }
+
+ // Animate
+ wrapper.animate(animation, {
+ duration: o.duration,
+ easing: o.easing,
+ queue: false,
+ complete: function () {
+ if (mode === "hide") {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ }
+ });
+ };
+
+
+ /*!
+ * jQuery UI Effects Bounce 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+ var effectBounce = $.effects.effect.bounce = function (o, done) {
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "height", "width"],
+
+ // defaults:
+ mode = $.effects.setMode(el, o.mode || "effect"),
+ hide = mode === "hide",
+ show = mode === "show",
+ direction = o.direction || "up",
+ distance = o.distance,
+ times = o.times || 5,
+
+ // number of internal animations
+ anims = times * 2 + ( show || hide ? 1 : 0 ),
+ speed = o.duration / anims,
+ easing = o.easing,
+
+ // utility:
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ),
+ i,
+ upAnim,
+ downAnim,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ // Avoid touching opacity to prevent clearType and PNG issues in IE
+ if (show || hide) {
+ props.push("opacity");
+ }
+
+ $.effects.save(el, props);
+ el.show();
+ $.effects.createWrapper(el); // Create Wrapper
+
+ // default distance for the BIGGEST bounce is the outer Distance / 3
+ if (!distance) {
+ distance = el[ref === "top" ? "outerHeight" : "outerWidth"]() / 3;
+ }
+
+ if (show) {
+ downAnim = {opacity: 1};
+ downAnim[ref] = 0;
+
+ // if we are showing, force opacity 0 and set the initial position
+ // then do the "first" animation
+ el.css("opacity", 0)
+ .css(ref, motion ? -distance * 2 : distance * 2)
+ .animate(downAnim, speed, easing);
+ }
+
+ // start at the smallest distance if we are hiding
+ if (hide) {
+ distance = distance / Math.pow(2, times - 1);
+ }
+
+ downAnim = {};
+ downAnim[ref] = 0;
+ // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+ for (i = 0; i < times; i++) {
+ upAnim = {};
+ upAnim[ref] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate(upAnim, speed, easing)
+ .animate(downAnim, speed, easing);
+
+ distance = hide ? distance * 2 : distance / 2;
+ }
+
+ // Last Bounce when Hiding
+ if (hide) {
+ upAnim = {opacity: 0};
+ upAnim[ref] = ( motion ? "-=" : "+=" ) + distance;
+
+ el.animate(upAnim, speed, easing);
+ }
+
+ el.queue(function () {
+ if (hide) {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if (queuelen > 1) {
+ queue.splice.apply(queue,
+ [1, 0].concat(queue.splice(queuelen, anims + 1)));
+ }
+ el.dequeue();
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Clip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+ var effectClip = $.effects.effect.clip = function (o, done) {
+ // Create element
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "height", "width"],
+ mode = $.effects.setMode(el, o.mode || "hide"),
+ show = mode === "show",
+ direction = o.direction || "vertical",
+ vert = direction === "vertical",
+ size = vert ? "height" : "width",
+ position = vert ? "top" : "left",
+ animation = {},
+ wrapper, animate, distance;
+
+ // Save & Show
+ $.effects.save(el, props);
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper(el).css({
+ overflow: "hidden"
+ });
+ animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+ distance = animate[size]();
+
+ // Shift
+ if (show) {
+ animate.css(size, 0);
+ animate.css(position, distance / 2);
+ }
+
+ // Create Animation Object:
+ animation[size] = show ? distance : 0;
+ animation[position] = show ? 0 : distance / 2;
+
+ // Animate
+ animate.animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function () {
+ if (!show) {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ }
+ });
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Drop 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+ var effectDrop = $.effects.effect.drop = function (o, done) {
+
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"],
+ mode = $.effects.setMode(el, o.mode || "hide"),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+ motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+ animation = {
+ opacity: show ? 1 : 0
+ },
+ distance;
+
+ // Adjust
+ $.effects.save(el, props);
+ el.show();
+ $.effects.createWrapper(el);
+
+ distance = o.distance || el[ref === "top" ? "outerHeight" : "outerWidth"](true) / 2;
+
+ if (show) {
+ el
+ .css("opacity", 0)
+ .css(ref, motion === "pos" ? -distance : distance);
+ }
+
+ // Animation
+ animation[ref] = ( show ?
+ ( motion === "pos" ? "+=" : "-=" ) :
+ ( motion === "pos" ? "-=" : "+=" ) ) +
+ distance;
+
+ // Animate
+ el.animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function () {
+ if (mode === "hide") {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ }
+ });
+ };
+
+
+ /*!
+ * jQuery UI Effects Explode 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+ var effectExplode = $.effects.effect.explode = function (o, done) {
+
+ var rows = o.pieces ? Math.round(Math.sqrt(o.pieces)) : 3,
+ cells = rows,
+ el = $(this),
+ mode = $.effects.setMode(el, o.mode || "hide"),
+ show = mode === "show",
+
+ // show and then visibility:hidden the element before calculating offset
+ offset = el.show().css("visibility", "hidden").offset(),
+
+ // width and height of a piece
+ width = Math.ceil(el.outerWidth() / cells),
+ height = Math.ceil(el.outerHeight() / rows),
+ pieces = [],
+
+ // loop
+ i, j, left, top, mx, my;
+
+ // children animate complete:
+ function childComplete() {
+ pieces.push(this);
+ if (pieces.length === rows * cells) {
+ animComplete();
+ }
+ }
+
+ // clone the element for each row and cell.
+ for (i = 0; i < rows; i++) { // ===>
+ top = offset.top + i * height;
+ my = i - ( rows - 1 ) / 2;
+
+ for (j = 0; j < cells; j++) { // |||
+ left = offset.left + j * width;
+ mx = j - ( cells - 1 ) / 2;
+
+ // Create a clone of the now hidden main element that will be absolute positioned
+ // within a wrapper div off the -left and -top equal to size of our pieces
+ el
+ .clone()
+ .appendTo("body")
+ .wrap("<div></div>")
+ .css({
+ position: "absolute",
+ visibility: "visible",
+ left: -j * width,
+ top: -i * height
+ })
+
+ // select the wrapper - make it overflow: hidden and absolute positioned based on
+ // where the original was located +left and +top equal to the size of pieces
+ .parent()
+ .addClass("ui-effects-explode")
+ .css({
+ position: "absolute",
+ overflow: "hidden",
+ width: width,
+ height: height,
+ left: left + ( show ? mx * width : 0 ),
+ top: top + ( show ? my * height : 0 ),
+ opacity: show ? 0 : 1
+ }).animate({
+ left: left + ( show ? 0 : mx * width ),
+ top: top + ( show ? 0 : my * height ),
+ opacity: show ? 1 : 0
+ }, o.duration || 500, o.easing, childComplete);
+ }
+ }
+
+ function animComplete() {
+ el.css({
+ visibility: "visible"
+ });
+ $(pieces).remove();
+ if (!show) {
+ el.hide();
+ }
+ done();
+ }
+ };
+
+
+ /*!
+ * jQuery UI Effects Fade 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+ var effectFade = $.effects.effect.fade = function (o, done) {
+ var el = $(this),
+ mode = $.effects.setMode(el, o.mode || "toggle");
+
+ el.animate({
+ opacity: mode
+ }, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: done
+ });
+ };
+
+
+ /*!
+ * jQuery UI Effects Fold 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+ var effectFold = $.effects.effect.fold = function (o, done) {
+
+ // Create element
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "height", "width"],
+ mode = $.effects.setMode(el, o.mode || "hide"),
+ show = mode === "show",
+ hide = mode === "hide",
+ size = o.size || 15,
+ percent = /([0-9]+)%/.exec(size),
+ horizFirst = !!o.horizFirst,
+ widthFirst = show !== horizFirst,
+ ref = widthFirst ? ["width", "height"] : ["height", "width"],
+ duration = o.duration / 2,
+ wrapper, distance,
+ animation1 = {},
+ animation2 = {};
+
+ $.effects.save(el, props);
+ el.show();
+
+ // Create Wrapper
+ wrapper = $.effects.createWrapper(el).css({
+ overflow: "hidden"
+ });
+ distance = widthFirst ?
+ [wrapper.width(), wrapper.height()] :
+ [wrapper.height(), wrapper.width()];
+
+ if (percent) {
+ size = parseInt(percent[1], 10) / 100 * distance[hide ? 0 : 1];
+ }
+ if (show) {
+ wrapper.css(horizFirst ? {
+ height: 0,
+ width: size
+ } : {
+ height: size,
+ width: 0
+ });
+ }
+
+ // Animation
+ animation1[ref[0]] = show ? distance[0] : size;
+ animation2[ref[1]] = show ? distance[1] : 0;
+
+ // Animate
+ wrapper
+ .animate(animation1, duration, o.easing)
+ .animate(animation2, duration, o.easing, function () {
+ if (hide) {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ });
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Highlight 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
+
+
+ var effectHighlight = $.effects.effect.highlight = function (o, done) {
+ var elem = $(this),
+ props = ["backgroundImage", "backgroundColor", "opacity"],
+ mode = $.effects.setMode(elem, o.mode || "show"),
+ animation = {
+ backgroundColor: elem.css("backgroundColor")
+ };
+
+ if (mode === "hide") {
+ animation.opacity = 0;
+ }
+
+ $.effects.save(elem, props);
+
+ elem
+ .show()
+ .css({
+ backgroundImage: "none",
+ backgroundColor: o.color || "#ffff99"
+ })
+ .animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function () {
+ if (mode === "hide") {
+ elem.hide();
+ }
+ $.effects.restore(elem, props);
+ done();
+ }
+ });
+ };
+
+
+ /*!
+ * jQuery UI Effects Size 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+ var effectSize = $.effects.effect.size = function (o, done) {
+
+ // Create element
+ var original, baseline, factor,
+ el = $(this),
+ props0 = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"],
+
+ // Always restore
+ props1 = ["position", "top", "bottom", "left", "right", "overflow", "opacity"],
+
+ // Copy for children
+ props2 = ["width", "height", "overflow"],
+ cProps = ["fontSize"],
+ vProps = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"],
+ hProps = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"],
+
+ // Set options
+ mode = $.effects.setMode(el, o.mode || "effect"),
+ restore = o.restore || mode !== "effect",
+ scale = o.scale || "both",
+ origin = o.origin || ["middle", "center"],
+ position = el.css("position"),
+ props = restore ? props0 : props1,
+ zero = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+
+ if (mode === "show") {
+ el.show();
+ }
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ };
+
+ if (o.mode === "toggle" && mode === "show") {
+ el.from = o.to || zero;
+ el.to = o.from || original;
+ } else {
+ el.from = o.from || ( mode === "show" ? zero : original );
+ el.to = o.to || ( mode === "hide" ? zero : original );
+ }
+
+ // Set scaling factor
+ factor = {
+ from: {
+ y: el.from.height / original.height,
+ x: el.from.width / original.width
+ },
+ to: {
+ y: el.to.height / original.height,
+ x: el.to.width / original.width
+ }
+ };
+
+ // Scale the css box
+ if (scale === "box" || scale === "both") {
+
+ // Vertical props scaling
+ if (factor.from.y !== factor.to.y) {
+ props = props.concat(vProps);
+ el.from = $.effects.setTransition(el, vProps, factor.from.y, el.from);
+ el.to = $.effects.setTransition(el, vProps, factor.to.y, el.to);
+ }
+
+ // Horizontal props scaling
+ if (factor.from.x !== factor.to.x) {
+ props = props.concat(hProps);
+ el.from = $.effects.setTransition(el, hProps, factor.from.x, el.from);
+ el.to = $.effects.setTransition(el, hProps, factor.to.x, el.to);
+ }
+ }
+
+ // Scale the content
+ if (scale === "content" || scale === "both") {
+
+ // Vertical props scaling
+ if (factor.from.y !== factor.to.y) {
+ props = props.concat(cProps).concat(props2);
+ el.from = $.effects.setTransition(el, cProps, factor.from.y, el.from);
+ el.to = $.effects.setTransition(el, cProps, factor.to.y, el.to);
+ }
+ }
+
+ $.effects.save(el, props);
+ el.show();
+ $.effects.createWrapper(el);
+ el.css("overflow", "hidden").css(el.from);
+
+ // Adjust
+ if (origin) { // Calculate baseline shifts
+ baseline = $.effects.getBaseline(origin, original);
+ el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+ el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+ el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+ el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+ }
+ el.css(el.from); // set top & left
+
+ // Animate
+ if (scale === "content" || scale === "both") { // Scale the children
+
+ // Add margins/font-size
+ vProps = vProps.concat(["marginTop", "marginBottom"]).concat(cProps);
+ hProps = hProps.concat(["marginLeft", "marginRight"]);
+ props2 = props0.concat(vProps).concat(hProps);
+
+ el.find("*[width]").each(function () {
+ var child = $(this),
+ c_original = {
+ height: child.height(),
+ width: child.width(),
+ outerHeight: child.outerHeight(),
+ outerWidth: child.outerWidth()
+ };
+ if (restore) {
+ $.effects.save(child, props2);
+ }
+
+ child.from = {
+ height: c_original.height * factor.from.y,
+ width: c_original.width * factor.from.x,
+ outerHeight: c_original.outerHeight * factor.from.y,
+ outerWidth: c_original.outerWidth * factor.from.x
+ };
+ child.to = {
+ height: c_original.height * factor.to.y,
+ width: c_original.width * factor.to.x,
+ outerHeight: c_original.height * factor.to.y,
+ outerWidth: c_original.width * factor.to.x
+ };
+
+ // Vertical props scaling
+ if (factor.from.y !== factor.to.y) {
+ child.from = $.effects.setTransition(child, vProps, factor.from.y, child.from);
+ child.to = $.effects.setTransition(child, vProps, factor.to.y, child.to);
+ }
+
+ // Horizontal props scaling
+ if (factor.from.x !== factor.to.x) {
+ child.from = $.effects.setTransition(child, hProps, factor.from.x, child.from);
+ child.to = $.effects.setTransition(child, hProps, factor.to.x, child.to);
+ }
+
+ // Animate children
+ child.css(child.from);
+ child.animate(child.to, o.duration, o.easing, function () {
+
+ // Restore children
+ if (restore) {
+ $.effects.restore(child, props2);
+ }
+ });
+ });
+ }
+
+ // Animate
+ el.animate(el.to, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function () {
+ if (el.to.opacity === 0) {
+ el.css("opacity", el.from.opacity);
+ }
+ if (mode === "hide") {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ if (!restore) {
+
+ // we need to calculate our new positioning based on the scaling
+ if (position === "static") {
+ el.css({
+ position: "relative",
+ top: el.to.top,
+ left: el.to.left
+ });
+ } else {
+ $.each(["top", "left"], function (idx, pos) {
+ el.css(pos, function (_, str) {
+ var val = parseInt(str, 10),
+ toRef = idx ? el.to.left : el.to.top;
+
+ // if original was "auto", recalculate the new value from wrapper
+ if (str === "auto") {
+ return toRef + "px";
+ }
+
+ return val + toRef + "px";
+ });
+ });
+ }
+ }
+
+ $.effects.removeWrapper(el);
+ done();
+ }
+ });
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Scale 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+ var effectScale = $.effects.effect.scale = function (o, done) {
+
+ // Create element
+ var el = $(this),
+ options = $.extend(true, {}, o),
+ mode = $.effects.setMode(el, o.mode || "effect"),
+ percent = parseInt(o.percent, 10) ||
+ ( parseInt(o.percent, 10) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+ direction = o.direction || "both",
+ origin = o.origin,
+ original = {
+ height: el.height(),
+ width: el.width(),
+ outerHeight: el.outerHeight(),
+ outerWidth: el.outerWidth()
+ },
+ factor = {
+ y: direction !== "horizontal" ? (percent / 100) : 1,
+ x: direction !== "vertical" ? (percent / 100) : 1
+ };
+
+ // We are going to pass this effect to the size effect:
+ options.effect = "size";
+ options.queue = false;
+ options.complete = done;
+
+ // Set default origin and restore for show/hide
+ if (mode !== "effect") {
+ options.origin = origin || ["middle", "center"];
+ options.restore = true;
+ }
+
+ options.from = o.from || ( mode === "show" ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : original );
+ options.to = {
+ height: original.height * factor.y,
+ width: original.width * factor.x,
+ outerHeight: original.outerHeight * factor.y,
+ outerWidth: original.outerWidth * factor.x
+ };
+
+ // Fade option to support puff
+ if (options.fade) {
+ if (mode === "show") {
+ options.from.opacity = 0;
+ options.to.opacity = 1;
+ }
+ if (mode === "hide") {
+ options.from.opacity = 1;
+ options.to.opacity = 0;
+ }
+ }
+
+ // Animate
+ el.effect(options);
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Puff 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+ var effectPuff = $.effects.effect.puff = function (o, done) {
+ var elem = $(this),
+ mode = $.effects.setMode(elem, o.mode || "hide"),
+ hide = mode === "hide",
+ percent = parseInt(o.percent, 10) || 150,
+ factor = percent / 100,
+ original = {
+ height: elem.height(),
+ width: elem.width(),
+ outerHeight: elem.outerHeight(),
+ outerWidth: elem.outerWidth()
+ };
+
+ $.extend(o, {
+ effect: "scale",
+ queue: false,
+ fade: true,
+ mode: mode,
+ complete: done,
+ percent: hide ? percent : 100,
+ from: hide ?
+ original :
+ {
+ height: original.height * factor,
+ width: original.width * factor,
+ outerHeight: original.outerHeight * factor,
+ outerWidth: original.outerWidth * factor
+ }
+ });
+
+ elem.effect(o);
+ };
+
+
+ /*!
+ * jQuery UI Effects Pulsate 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+ var effectPulsate = $.effects.effect.pulsate = function (o, done) {
+ var elem = $(this),
+ mode = $.effects.setMode(elem, o.mode || "show"),
+ show = mode === "show",
+ hide = mode === "hide",
+ showhide = ( show || mode === "hide" ),
+
+ // showing or hiding leaves of the "last" animation
+ anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+ duration = o.duration / anims,
+ animateTo = 0,
+ queue = elem.queue(),
+ queuelen = queue.length,
+ i;
+
+ if (show || !elem.is(":visible")) {
+ elem.css("opacity", 0).show();
+ animateTo = 1;
+ }
+
+ // anims - 1 opacity "toggles"
+ for (i = 1; i < anims; i++) {
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+ animateTo = 1 - animateTo;
+ }
+
+ elem.animate({
+ opacity: animateTo
+ }, duration, o.easing);
+
+ elem.queue(function () {
+ if (hide) {
+ elem.hide();
+ }
+ done();
+ });
+
+ // We just queued up "anims" animations, we need to put them next in the queue
+ if (queuelen > 1) {
+ queue.splice.apply(queue,
+ [1, 0].concat(queue.splice(queuelen, anims + 1)));
+ }
+ elem.dequeue();
+ };
+
+
+ /*!
+ * jQuery UI Effects Shake 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+ var effectShake = $.effects.effect.shake = function (o, done) {
+
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "height", "width"],
+ mode = $.effects.setMode(el, o.mode || "effect"),
+ direction = o.direction || "left",
+ distance = o.distance || 20,
+ times = o.times || 3,
+ anims = times * 2 + 1,
+ speed = Math.round(o.duration / anims),
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ animation = {},
+ animation1 = {},
+ animation2 = {},
+ i,
+
+ // we will need to re-assemble the queue to stack our animations in place
+ queue = el.queue(),
+ queuelen = queue.length;
+
+ $.effects.save(el, props);
+ el.show();
+ $.effects.createWrapper(el);
+
+ // Animation
+ animation[ref] = ( positiveMotion ? "-=" : "+=" ) + distance;
+ animation1[ref] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+ animation2[ref] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+ // Animate
+ el.animate(animation, speed, o.easing);
+
+ // Shakes
+ for (i = 1; i < times; i++) {
+ el.animate(animation1, speed, o.easing).animate(animation2, speed, o.easing);
+ }
+ el
+ .animate(animation1, speed, o.easing)
+ .animate(animation, speed / 2, o.easing)
+ .queue(function () {
+ if (mode === "hide") {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ });
+
+ // inject all the animations we just queued to be first in line (after "inprogress")
+ if (queuelen > 1) {
+ queue.splice.apply(queue,
+ [1, 0].concat(queue.splice(queuelen, anims + 1)));
+ }
+ el.dequeue();
+
+ };
+
+
+ /*!
+ * jQuery UI Effects Slide 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+ var effectSlide = $.effects.effect.slide = function (o, done) {
+
+ // Create element
+ var el = $(this),
+ props = ["position", "top", "bottom", "left", "right", "width", "height"],
+ mode = $.effects.setMode(el, o.mode || "show"),
+ show = mode === "show",
+ direction = o.direction || "left",
+ ref = (direction === "up" || direction === "down") ? "top" : "left",
+ positiveMotion = (direction === "up" || direction === "left"),
+ distance,
+ animation = {};
+
+ // Adjust
+ $.effects.save(el, props);
+ el.show();
+ distance = o.distance || el[ref === "top" ? "outerHeight" : "outerWidth"](true);
+
+ $.effects.createWrapper(el).css({
+ overflow: "hidden"
+ });
+
+ if (show) {
+ el.css(ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance);
+ }
+
+ // Animation
+ animation[ref] = ( show ?
+ ( positiveMotion ? "+=" : "-=") :
+ ( positiveMotion ? "-=" : "+=")) +
+ distance;
+
+ // Animate
+ el.animate(animation, {
+ queue: false,
+ duration: o.duration,
+ easing: o.easing,
+ complete: function () {
+ if (mode === "hide") {
+ el.hide();
+ }
+ $.effects.restore(el, props);
+ $.effects.removeWrapper(el);
+ done();
+ }
+ });
+ };
+
+
+ /*!
+ * jQuery UI Effects Transfer 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+ var effectTransfer = $.effects.effect.transfer = function (o, done) {
+ var elem = $(this),
+ target = $(o.to),
+ targetFixed = target.css("position") === "fixed",
+ body = $("body"),
+ fixTop = targetFixed ? body.scrollTop() : 0,
+ fixLeft = targetFixed ? body.scrollLeft() : 0,
+ endPosition = target.offset(),
+ animation = {
+ top: endPosition.top - fixTop,
+ left: endPosition.left - fixLeft,
+ height: target.innerHeight(),
+ width: target.innerWidth()
+ },
+ startPosition = elem.offset(),
+ transfer = $("<div class='ui-effects-transfer'></div>")
+ .appendTo(document.body)
+ .addClass(o.className)
+ .css({
+ top: startPosition.top - fixTop,
+ left: startPosition.left - fixLeft,
+ height: elem.innerHeight(),
+ width: elem.innerWidth(),
+ position: targetFixed ? "fixed" : "absolute"
+ })
+ .animate(animation, o.duration, o.easing, function () {
+ transfer.remove();
+ done();
+ });
+ };
+
+
+})); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.css
new file mode 100644
index 00000000..fb2025ff
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.css
@@ -0,0 +1,1775 @@
+/*! jQuery UI - v1.11.4 - 2015-04-16
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden {
+ display: none
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none
+}
+
+.ui-helper-clearfix:before, .ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse
+}
+
+.ui-helper-clearfix:after {
+ clear: both
+}
+
+.ui-helper-clearfix {
+ min-height: 0
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0)
+}
+
+.ui-front {
+ z-index: 100
+}
+
+.ui-state-disabled {
+ cursor: default !important
+}
+
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat
+}
+
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-resizable {
+ position: relative
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle {
+ display: none
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black
+}
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0;
+ font-size: 100%
+}
+
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em
+}
+
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em
+}
+
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default
+}
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible
+}
+
+.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active {
+ text-decoration: none
+}
+
+.ui-button-icon-only {
+ width: 2.2em
+}
+
+button.ui-button-icon-only {
+ width: 2.4em
+}
+
+.ui-button-icons-only {
+ width: 3.4em
+}
+
+button.ui-button-icons-only {
+ width: 3.7em
+}
+
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal
+}
+
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em
+}
+
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px
+}
+
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em
+}
+
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em
+}
+
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em
+}
+
+input.ui-button {
+ padding: .4em 1em
+}
+
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px
+}
+
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary {
+ left: .5em
+}
+
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em
+}
+
+.ui-buttonset {
+ margin-right: 7px
+}
+
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em
+}
+
+input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none
+}
+
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0
+}
+
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em
+}
+
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover {
+ top: 1px
+}
+
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px
+}
+
+.ui-datepicker .ui-datepicker-next {
+ right: 2px
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px
+}
+
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center
+}
+
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0
+}
+
+.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
+ width: 45%
+}
+
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em
+}
+
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0
+}
+
+.ui-datepicker td {
+ border: 0;
+ padding: 1px
+}
+
+.ui-datepicker td span, .ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left
+}
+
+.ui-datepicker.ui-datepicker-multi {
+ width: auto
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0
+}
+
+.ui-datepicker-rtl {
+ direction: rtl
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group {
+ float: right
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px
+}
+
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative
+}
+
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px
+}
+
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer
+}
+
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px
+}
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none
+}
+
+.ui-menu .ui-menu {
+ position: absolute
+}
+
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0;
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
+}
+
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0
+}
+
+.ui-menu .ui-state-focus, .ui-menu .ui-state-active {
+ margin: -1px
+}
+
+.ui-menu-icons {
+ position: relative
+}
+
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em
+}
+
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0
+}
+
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden
+}
+
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,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");
+ height: 100%;
+ filter: alpha(opacity=25);
+ opacity: 0.25
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none
+}
+
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ overflow-x: hidden;
+ padding-bottom: 1px
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0
+}
+
+.ui-selectmenu-open {
+ display: block
+}
+
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%
+}
+
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left
+}
+
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0
+}
+
+.ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit
+}
+
+.ui-slider-horizontal {
+ height: .8em
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em
+}
+
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em
+}
+
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px
+}
+
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0
+}
+
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none
+}
+
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0
+}
+
+.ui-spinner-up {
+ top: 0
+}
+
+.ui-spinner-down {
+ bottom: 0
+}
+
+.ui-spinner .ui-icon-triangle-1-s {
+ background-position: -65px -16px
+}
+
+.ui-tabs {
+ position: relative;
+ padding: .2em
+}
+
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0
+}
+
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa
+}
+
+body .ui-tooltip {
+ border-width: 2px
+}
+
+.ui-widget {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1.1em
+}
+
+.ui-widget .ui-widget {
+ font-size: 1em
+}
+
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1em
+}
+
+.ui-widget-content {
+ border: 1px solid #ddd;
+ background: #eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;
+ color: #333
+}
+
+.ui-widget-content a {
+ color: #333
+}
+
+.ui-widget-header {
+ border: 1px solid #e78f08;
+ background: #f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;
+ color: #fff;
+ font-weight: bold
+}
+
+.ui-widget-header a {
+ color: #fff
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ border: 1px solid #ccc;
+ background: #f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1c94c4
+}
+
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
+ color: #1c94c4;
+ text-decoration: none
+}
+
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
+ border: 1px solid #fbcb09;
+ background: #fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #c77405
+}
+
+.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited, .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, .ui-state-focus a:visited {
+ color: #c77405;
+ text-decoration: none
+}
+
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
+ border: 1px solid #fbd850;
+ background: #fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #eb8f00
+}
+
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
+ color: #eb8f00;
+ text-decoration: none
+}
+
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
+ border: 1px solid #fed22f;
+ background: #ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
+ color: #363636
+}
+
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
+ color: #363636
+}
+
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;
+ color: #fff
+}
+
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a {
+ color: #fff
+}
+
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
+ color: #fff
+}
+
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary {
+ font-weight: bold
+}
+
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70);
+ font-weight: normal
+}
+
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35);
+ background-image: none
+}
+
+.ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35)
+}
+
+.ui-icon {
+ width: 16px;
+ height: 16px
+}
+
+.ui-icon, .ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png")
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_ffffff_256x240.png")
+}
+
+.ui-state-default .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-active .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-highlight .ui-icon {
+ background-image: url("images/ui-icons_228ef1_256x240.png")
+}
+
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_ffd27a_256x240.png")
+}
+
+.ui-icon-blank {
+ background-position: 16px 16px
+}
+
+.ui-icon-carat-1-n {
+ background-position: 0 0
+}
+
+.ui-icon-carat-1-ne {
+ background-position: -16px 0
+}
+
+.ui-icon-carat-1-e {
+ background-position: -32px 0
+}
+
+.ui-icon-carat-1-se {
+ background-position: -48px 0
+}
+
+.ui-icon-carat-1-s {
+ background-position: -64px 0
+}
+
+.ui-icon-carat-1-sw {
+ background-position: -80px 0
+}
+
+.ui-icon-carat-1-w {
+ background-position: -96px 0
+}
+
+.ui-icon-carat-1-nw {
+ background-position: -112px 0
+}
+
+.ui-icon-carat-2-n-s {
+ background-position: -128px 0
+}
+
+.ui-icon-carat-2-e-w {
+ background-position: -144px 0
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -64px -16px
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -64px -32px
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 0 -48px
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px
+}
+
+.ui-icon-document {
+ background-position: -32px -96px
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px
+}
+
+.ui-icon-note {
+ background-position: -64px -96px
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px
+}
+
+.ui-icon-person {
+ background-position: -144px -96px
+}
+
+.ui-icon-print {
+ background-position: -160px -96px
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px
+}
+
+.ui-icon-home {
+ background-position: 0 -112px
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px
+}
+
+.ui-icon-search {
+ background-position: -160px -112px
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px
+}
+
+.ui-icon-star {
+ background-position: -224px -112px
+}
+
+.ui-icon-link {
+ background-position: -240px -112px
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px
+}
+
+.ui-icon-close {
+ background-position: -80px -128px
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px
+}
+
+.ui-icon-key {
+ background-position: -112px -128px
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px
+}
+
+.ui-icon-image {
+ background-position: -208px -128px
+}
+
+.ui-icon-video {
+ background-position: -224px -128px
+}
+
+.ui-icon-script {
+ background-position: -240px -128px
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px
+}
+
+.ui-icon-info {
+ background-position: -16px -144px
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px
+}
+
+.ui-icon-help {
+ background-position: -48px -144px
+}
+
+.ui-icon-check {
+ background-position: -64px -144px
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px
+}
+
+.ui-icon-play {
+ background-position: 0 -160px
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px
+}
+
+.ui-icon-seek-first {
+ background-position: -80px -160px
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px
+}
+
+.ui-icon-power {
+ background-position: 0 -176px
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px
+}
+
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
+ border-top-left-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
+ border-top-right-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
+ border-bottom-left-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
+ border-bottom-right-radius: 4px
+}
+
+.ui-widget-overlay {
+ background: #666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;
+ opacity: .5;
+ filter: Alpha(Opacity=50)
+}
+
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20);
+ border-radius: 5px
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.js
new file mode 100644
index 00000000..242fcb5b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.min.js
@@ -0,0 +1,5102 @@
+/*! jQuery UI - v1.11.4 - 2015-04-12
+ * http://jqueryui.com
+ * Includes: core.js, widget.js, mouse.js, position.js, draggable.js, droppable.js, resizable.js, selectable.js, sortable.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, menu.js, progressbar.js, selectmenu.js, slider.js, spinner.js, tabs.js, tooltip.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js
+ * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function (e) {
+ "function" == typeof define && define.amd ? define(["jquery"], e) : e(jQuery)
+})(function (e) {
+ function t(t, s) {
+ var n, a, o, r = t.nodeName.toLowerCase();
+ return "area" === r ? (n = t.parentNode, a = n.name, t.href && a && "map" === n.nodeName.toLowerCase() ? (o = e("img[usemap='#" + a + "']")[0], !!o && i(o)) : !1) : (/^(input|select|textarea|button|object)$/.test(r) ? !t.disabled : "a" === r ? t.href || s : s) && i(t)
+ }
+
+ function i(t) {
+ return e.expr.filters.visible(t) && !e(t).parents().addBack().filter(function () {
+ return "hidden" === e.css(this, "visibility")
+ }).length
+ }
+
+ function s(e) {
+ for (var t, i; e.length && e[0] !== document;) {
+ if (t = e.css("position"), ("absolute" === t || "relative" === t || "fixed" === t) && (i = parseInt(e.css("zIndex"), 10), !isNaN(i) && 0 !== i))return i;
+ e = e.parent()
+ }
+ return 0
+ }
+
+ function n() {
+ this._curInst = null, this._keyEvent = !1, this._disabledInputs = [], this._datepickerShowing = !1, this._inDialog = !1, this._mainDivId = "ui-datepicker-div", this._inlineClass = "ui-datepicker-inline", this._appendClass = "ui-datepicker-append", this._triggerClass = "ui-datepicker-trigger", this._dialogClass = "ui-datepicker-dialog", this._disableClass = "ui-datepicker-disabled", this._unselectableClass = "ui-datepicker-unselectable", this._currentClass = "ui-datepicker-current-day", this._dayOverClass = "ui-datepicker-days-cell-over", this.regional = [], this.regional[""] = {
+ closeText: "Done",
+ prevText: "Prev",
+ nextText: "Next",
+ currentText: "Today",
+ monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
+ dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+ dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"],
+ weekHeader: "Wk",
+ dateFormat: "mm/dd/yy",
+ firstDay: 0,
+ isRTL: !1,
+ showMonthAfterYear: !1,
+ yearSuffix: ""
+ }, this._defaults = {
+ showOn: "focus",
+ showAnim: "fadeIn",
+ showOptions: {},
+ defaultDate: null,
+ appendText: "",
+ buttonText: "...",
+ buttonImage: "",
+ buttonImageOnly: !1,
+ hideIfNoPrevNext: !1,
+ navigationAsDateFormat: !1,
+ gotoCurrent: !1,
+ changeMonth: !1,
+ changeYear: !1,
+ yearRange: "c-10:c+10",
+ showOtherMonths: !1,
+ selectOtherMonths: !1,
+ showWeek: !1,
+ calculateWeek: this.iso8601Week,
+ shortYearCutoff: "+10",
+ minDate: null,
+ maxDate: null,
+ duration: "fast",
+ beforeShowDay: null,
+ beforeShow: null,
+ onSelect: null,
+ onChangeMonthYear: null,
+ onClose: null,
+ numberOfMonths: 1,
+ showCurrentAtPos: 0,
+ stepMonths: 1,
+ stepBigMonths: 12,
+ altField: "",
+ altFormat: "",
+ constrainInput: !0,
+ showButtonPanel: !1,
+ autoSize: !1,
+ disabled: !1
+ }, e.extend(this._defaults, this.regional[""]), this.regional.en = e.extend(!0, {}, this.regional[""]), this.regional["en-US"] = e.extend(!0, {}, this.regional.en), this.dpDiv = a(e("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))
+ }
+
+ function a(t) {
+ var i = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+ return t.delegate(i, "mouseout", function () {
+ e(this).removeClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && e(this).removeClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && e(this).removeClass("ui-datepicker-next-hover")
+ }).delegate(i, "mouseover", o)
+ }
+
+ function o() {
+ e.datepicker._isDisabledDatepicker(v.inline ? v.dpDiv.parent()[0] : v.input[0]) || (e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"), e(this).addClass("ui-state-hover"), -1 !== this.className.indexOf("ui-datepicker-prev") && e(this).addClass("ui-datepicker-prev-hover"), -1 !== this.className.indexOf("ui-datepicker-next") && e(this).addClass("ui-datepicker-next-hover"))
+ }
+
+ function r(t, i) {
+ e.extend(t, i);
+ for (var s in i)null == i[s] && (t[s] = i[s]);
+ return t
+ }
+
+ function h(e) {
+ return function () {
+ var t = this.element.val();
+ e.apply(this, arguments), this._refresh(), t !== this.element.val() && this._trigger("change")
+ }
+ }
+
+ e.ui = e.ui || {}, e.extend(e.ui, {
+ version: "1.11.4",
+ keyCode: {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+ }
+ }), e.fn.extend({
+ scrollParent: function (t) {
+ var i = this.css("position"), s = "absolute" === i, n = t ? /(auto|scroll|hidden)/ : /(auto|scroll)/, a = this.parents().filter(function () {
+ var t = e(this);
+ return s && "static" === t.css("position") ? !1 : n.test(t.css("overflow") + t.css("overflow-y") + t.css("overflow-x"))
+ }).eq(0);
+ return "fixed" !== i && a.length ? a : e(this[0].ownerDocument || document)
+ }, uniqueId: function () {
+ var e = 0;
+ return function () {
+ return this.each(function () {
+ this.id || (this.id = "ui-id-" + ++e)
+ })
+ }
+ }(), removeUniqueId: function () {
+ return this.each(function () {
+ /^ui-id-\d+$/.test(this.id) && e(this).removeAttr("id")
+ })
+ }
+ }), e.extend(e.expr[":"], {
+ data: e.expr.createPseudo ? e.expr.createPseudo(function (t) {
+ return function (i) {
+ return !!e.data(i, t)
+ }
+ }) : function (t, i, s) {
+ return !!e.data(t, s[3])
+ }, focusable: function (i) {
+ return t(i, !isNaN(e.attr(i, "tabindex")))
+ }, tabbable: function (i) {
+ var s = e.attr(i, "tabindex"), n = isNaN(s);
+ return (n || s >= 0) && t(i, !n)
+ }
+ }), e("<a>").outerWidth(1).jquery || e.each(["Width", "Height"], function (t, i) {
+ function s(t, i, s, a) {
+ return e.each(n, function () {
+ i -= parseFloat(e.css(t, "padding" + this)) || 0, s && (i -= parseFloat(e.css(t, "border" + this + "Width")) || 0), a && (i -= parseFloat(e.css(t, "margin" + this)) || 0)
+ }), i
+ }
+
+ var n = "Width" === i ? ["Left", "Right"] : ["Top", "Bottom"], a = i.toLowerCase(), o = {
+ innerWidth: e.fn.innerWidth,
+ innerHeight: e.fn.innerHeight,
+ outerWidth: e.fn.outerWidth,
+ outerHeight: e.fn.outerHeight
+ };
+ e.fn["inner" + i] = function (t) {
+ return void 0 === t ? o["inner" + i].call(this) : this.each(function () {
+ e(this).css(a, s(this, t) + "px")
+ })
+ }, e.fn["outer" + i] = function (t, n) {
+ return "number" != typeof t ? o["outer" + i].call(this, t) : this.each(function () {
+ e(this).css(a, s(this, t, !0, n) + "px")
+ })
+ }
+ }), e.fn.addBack || (e.fn.addBack = function (e) {
+ return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
+ }), e("<a>").data("a-b", "a").removeData("a-b").data("a-b") && (e.fn.removeData = function (t) {
+ return function (i) {
+ return arguments.length ? t.call(this, e.camelCase(i)) : t.call(this)
+ }
+ }(e.fn.removeData)), e.ui.ie = !!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()), e.fn.extend({
+ focus: function (t) {
+ return function (i, s) {
+ return "number" == typeof i ? this.each(function () {
+ var t = this;
+ setTimeout(function () {
+ e(t).focus(), s && s.call(t)
+ }, i)
+ }) : t.apply(this, arguments)
+ }
+ }(e.fn.focus), disableSelection: function () {
+ var e = "onselectstart"in document.createElement("div") ? "selectstart" : "mousedown";
+ return function () {
+ return this.bind(e + ".ui-disableSelection", function (e) {
+ e.preventDefault()
+ })
+ }
+ }(), enableSelection: function () {
+ return this.unbind(".ui-disableSelection")
+ }, zIndex: function (t) {
+ if (void 0 !== t)return this.css("zIndex", t);
+ if (this.length)for (var i, s, n = e(this[0]); n.length && n[0] !== document;) {
+ if (i = n.css("position"), ("absolute" === i || "relative" === i || "fixed" === i) && (s = parseInt(n.css("zIndex"), 10), !isNaN(s) && 0 !== s))return s;
+ n = n.parent()
+ }
+ return 0
+ }
+ }), e.ui.plugin = {
+ add: function (t, i, s) {
+ var n, a = e.ui[t].prototype;
+ for (n in s)a.plugins[n] = a.plugins[n] || [], a.plugins[n].push([i, s[n]])
+ }, call: function (e, t, i, s) {
+ var n, a = e.plugins[t];
+ if (a && (s || e.element[0].parentNode && 11 !== e.element[0].parentNode.nodeType))for (n = 0; a.length > n; n++)e.options[a[n][0]] && a[n][1].apply(e.element, i)
+ }
+ };
+ var l = 0, u = Array.prototype.slice;
+ e.cleanData = function (t) {
+ return function (i) {
+ var s, n, a;
+ for (a = 0; null != (n = i[a]); a++)try {
+ s = e._data(n, "events"), s && s.remove && e(n).triggerHandler("remove")
+ } catch (o) {
+ }
+ t(i)
+ }
+ }(e.cleanData), e.widget = function (t, i, s) {
+ var n, a, o, r, h = {}, l = t.split(".")[0];
+ return t = t.split(".")[1], n = l + "-" + t, s || (s = i, i = e.Widget), e.expr[":"][n.toLowerCase()] = function (t) {
+ return !!e.data(t, n)
+ }, e[l] = e[l] || {}, a = e[l][t], o = e[l][t] = function (e, t) {
+ return this._createWidget ? (arguments.length && this._createWidget(e, t), void 0) : new o(e, t)
+ }, e.extend(o, a, {
+ version: s.version,
+ _proto: e.extend({}, s),
+ _childConstructors: []
+ }), r = new i, r.options = e.widget.extend({}, r.options), e.each(s, function (t, s) {
+ return e.isFunction(s) ? (h[t] = function () {
+ var e = function () {
+ return i.prototype[t].apply(this, arguments)
+ }, n = function (e) {
+ return i.prototype[t].apply(this, e)
+ };
+ return function () {
+ var t, i = this._super, a = this._superApply;
+ return this._super = e, this._superApply = n, t = s.apply(this, arguments), this._super = i, this._superApply = a, t
+ }
+ }(), void 0) : (h[t] = s, void 0)
+ }), o.prototype = e.widget.extend(r, {widgetEventPrefix: a ? r.widgetEventPrefix || t : t}, h, {
+ constructor: o,
+ namespace: l,
+ widgetName: t,
+ widgetFullName: n
+ }), a ? (e.each(a._childConstructors, function (t, i) {
+ var s = i.prototype;
+ e.widget(s.namespace + "." + s.widgetName, o, i._proto)
+ }), delete a._childConstructors) : i._childConstructors.push(o), e.widget.bridge(t, o), o
+ }, e.widget.extend = function (t) {
+ for (var i, s, n = u.call(arguments, 1), a = 0, o = n.length; o > a; a++)for (i in n[a])s = n[a][i], n[a].hasOwnProperty(i) && void 0 !== s && (t[i] = e.isPlainObject(s) ? e.isPlainObject(t[i]) ? e.widget.extend({}, t[i], s) : e.widget.extend({}, s) : s);
+ return t
+ }, e.widget.bridge = function (t, i) {
+ var s = i.prototype.widgetFullName || t;
+ e.fn[t] = function (n) {
+ var a = "string" == typeof n, o = u.call(arguments, 1), r = this;
+ return a ? this.each(function () {
+ var i, a = e.data(this, s);
+ return "instance" === n ? (r = a, !1) : a ? e.isFunction(a[n]) && "_" !== n.charAt(0) ? (i = a[n].apply(a, o), i !== a && void 0 !== i ? (r = i && i.jquery ? r.pushStack(i.get()) : i, !1) : void 0) : e.error("no such method '" + n + "' for " + t + " widget instance") : e.error("cannot call methods on " + t + " prior to initialization; " + "attempted to call method '" + n + "'")
+ }) : (o.length && (n = e.widget.extend.apply(null, [n].concat(o))), this.each(function () {
+ var t = e.data(this, s);
+ t ? (t.option(n || {}), t._init && t._init()) : e.data(this, s, new i(n, this))
+ })), r
+ }
+ }, e.Widget = function () {
+ }, e.Widget._childConstructors = [], e.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "<div>",
+ options: {disabled: !1, create: null},
+ _createWidget: function (t, i) {
+ i = e(i || this.defaultElement || this)[0], this.element = e(i), this.uuid = l++, this.eventNamespace = "." + this.widgetName + this.uuid, this.bindings = e(), this.hoverable = e(), this.focusable = e(), i !== this && (e.data(i, this.widgetFullName, this), this._on(!0, this.element, {
+ remove: function (e) {
+ e.target === i && this.destroy()
+ }
+ }), this.document = e(i.style ? i.ownerDocument : i.document || i), this.window = e(this.document[0].defaultView || this.document[0].parentWindow)), this.options = e.widget.extend({}, this.options, this._getCreateOptions(), t), this._create(), this._trigger("create", null, this._getCreateEventData()), this._init()
+ },
+ _getCreateOptions: e.noop,
+ _getCreateEventData: e.noop,
+ _create: e.noop,
+ _init: e.noop,
+ destroy: function () {
+ this._destroy(), this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)), this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled " + "ui-state-disabled"), this.bindings.unbind(this.eventNamespace), this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus")
+ },
+ _destroy: e.noop,
+ widget: function () {
+ return this.element
+ },
+ option: function (t, i) {
+ var s, n, a, o = t;
+ if (0 === arguments.length)return e.widget.extend({}, this.options);
+ if ("string" == typeof t)if (o = {}, s = t.split("."), t = s.shift(), s.length) {
+ for (n = o[t] = e.widget.extend({}, this.options[t]), a = 0; s.length - 1 > a; a++)n[s[a]] = n[s[a]] || {}, n = n[s[a]];
+ if (t = s.pop(), 1 === arguments.length)return void 0 === n[t] ? null : n[t];
+ n[t] = i
+ } else {
+ if (1 === arguments.length)return void 0 === this.options[t] ? null : this.options[t];
+ o[t] = i
+ }
+ return this._setOptions(o), this
+ },
+ _setOptions: function (e) {
+ var t;
+ for (t in e)this._setOption(t, e[t]);
+ return this
+ },
+ _setOption: function (e, t) {
+ return this.options[e] = t, "disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled", !!t), t && (this.hoverable.removeClass("ui-state-hover"), this.focusable.removeClass("ui-state-focus"))), this
+ },
+ enable: function () {
+ return this._setOptions({disabled: !1})
+ },
+ disable: function () {
+ return this._setOptions({disabled: !0})
+ },
+ _on: function (t, i, s) {
+ var n, a = this;
+ "boolean" != typeof t && (s = i, i = t, t = !1), s ? (i = n = e(i), this.bindings = this.bindings.add(i)) : (s = i, i = this.element, n = this.widget()), e.each(s, function (s, o) {
+ function r() {
+ return t || a.options.disabled !== !0 && !e(this).hasClass("ui-state-disabled") ? ("string" == typeof o ? a[o] : o).apply(a, arguments) : void 0
+ }
+
+ "string" != typeof o && (r.guid = o.guid = o.guid || r.guid || e.guid++);
+ var h = s.match(/^([\w:-]*)\s*(.*)$/), l = h[1] + a.eventNamespace, u = h[2];
+ u ? n.delegate(u, l, r) : i.bind(l, r)
+ })
+ },
+ _off: function (t, i) {
+ i = (i || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace, t.unbind(i).undelegate(i), this.bindings = e(this.bindings.not(t).get()), this.focusable = e(this.focusable.not(t).get()), this.hoverable = e(this.hoverable.not(t).get())
+ },
+ _delay: function (e, t) {
+ function i() {
+ return ("string" == typeof e ? s[e] : e).apply(s, arguments)
+ }
+
+ var s = this;
+ return setTimeout(i, t || 0)
+ },
+ _hoverable: function (t) {
+ this.hoverable = this.hoverable.add(t), this._on(t, {
+ mouseenter: function (t) {
+ e(t.currentTarget).addClass("ui-state-hover")
+ }, mouseleave: function (t) {
+ e(t.currentTarget).removeClass("ui-state-hover")
+ }
+ })
+ },
+ _focusable: function (t) {
+ this.focusable = this.focusable.add(t), this._on(t, {
+ focusin: function (t) {
+ e(t.currentTarget).addClass("ui-state-focus")
+ }, focusout: function (t) {
+ e(t.currentTarget).removeClass("ui-state-focus")
+ }
+ })
+ },
+ _trigger: function (t, i, s) {
+ var n, a, o = this.options[t];
+ if (s = s || {}, i = e.Event(i), i.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(), i.target = this.element[0], a = i.originalEvent)for (n in a)n in i || (i[n] = a[n]);
+ return this.element.trigger(i, s), !(e.isFunction(o) && o.apply(this.element[0], [i].concat(s)) === !1 || i.isDefaultPrevented())
+ }
+ }, e.each({show: "fadeIn", hide: "fadeOut"}, function (t, i) {
+ e.Widget.prototype["_" + t] = function (s, n, a) {
+ "string" == typeof n && (n = {effect: n});
+ var o, r = n ? n === !0 || "number" == typeof n ? i : n.effect || i : t;
+ n = n || {}, "number" == typeof n && (n = {duration: n}), o = !e.isEmptyObject(n), n.complete = a, n.delay && s.delay(n.delay), o && e.effects && e.effects.effect[r] ? s[t](n) : r !== t && s[r] ? s[r](n.duration, n.easing, a) : s.queue(function (i) {
+ e(this)[t](), a && a.call(s[0]), i()
+ })
+ }
+ }), e.widget;
+ var d = !1;
+ e(document).mouseup(function () {
+ d = !1
+ }), e.widget("ui.mouse", {
+ version: "1.11.4",
+ options: {cancel: "input,textarea,button,select,option", distance: 1, delay: 0},
+ _mouseInit: function () {
+ var t = this;
+ this.element.bind("mousedown." + this.widgetName, function (e) {
+ return t._mouseDown(e)
+ }).bind("click." + this.widgetName, function (i) {
+ return !0 === e.data(i.target, t.widgetName + ".preventClickEvent") ? (e.removeData(i.target, t.widgetName + ".preventClickEvent"), i.stopImmediatePropagation(), !1) : void 0
+ }), this.started = !1
+ },
+ _mouseDestroy: function () {
+ this.element.unbind("." + this.widgetName), this._mouseMoveDelegate && this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate)
+ },
+ _mouseDown: function (t) {
+ if (!d) {
+ this._mouseMoved = !1, this._mouseStarted && this._mouseUp(t), this._mouseDownEvent = t;
+ var i = this, s = 1 === t.which, n = "string" == typeof this.options.cancel && t.target.nodeName ? e(t.target).closest(this.options.cancel).length : !1;
+ return s && !n && this._mouseCapture(t) ? (this.mouseDelayMet = !this.options.delay, this.mouseDelayMet || (this._mouseDelayTimer = setTimeout(function () {
+ i.mouseDelayMet = !0
+ }, this.options.delay)), this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(t) !== !1, !this._mouseStarted) ? (t.preventDefault(), !0) : (!0 === e.data(t.target, this.widgetName + ".preventClickEvent") && e.removeData(t.target, this.widgetName + ".preventClickEvent"), this._mouseMoveDelegate = function (e) {
+ return i._mouseMove(e)
+ }, this._mouseUpDelegate = function (e) {
+ return i._mouseUp(e)
+ }, this.document.bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate), t.preventDefault(), d = !0, !0)) : !0
+ }
+ },
+ _mouseMove: function (t) {
+ if (this._mouseMoved) {
+ if (e.ui.ie && (!document.documentMode || 9 > document.documentMode) && !t.button)return this._mouseUp(t);
+ if (!t.which)return this._mouseUp(t)
+ }
+ return (t.which || t.button) && (this._mouseMoved = !0), this._mouseStarted ? (this._mouseDrag(t), t.preventDefault()) : (this._mouseDistanceMet(t) && this._mouseDelayMet(t) && (this._mouseStarted = this._mouseStart(this._mouseDownEvent, t) !== !1, this._mouseStarted ? this._mouseDrag(t) : this._mouseUp(t)), !this._mouseStarted)
+ },
+ _mouseUp: function (t) {
+ return this.document.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate), this._mouseStarted && (this._mouseStarted = !1, t.target === this._mouseDownEvent.target && e.data(t.target, this.widgetName + ".preventClickEvent", !0), this._mouseStop(t)), d = !1, !1
+ },
+ _mouseDistanceMet: function (e) {
+ return Math.max(Math.abs(this._mouseDownEvent.pageX - e.pageX), Math.abs(this._mouseDownEvent.pageY - e.pageY)) >= this.options.distance
+ },
+ _mouseDelayMet: function () {
+ return this.mouseDelayMet
+ },
+ _mouseStart: function () {
+ },
+ _mouseDrag: function () {
+ },
+ _mouseStop: function () {
+ },
+ _mouseCapture: function () {
+ return !0
+ }
+ }), function () {
+ function t(e, t, i) {
+ return [parseFloat(e[0]) * (p.test(e[0]) ? t / 100 : 1), parseFloat(e[1]) * (p.test(e[1]) ? i / 100 : 1)]
+ }
+
+ function i(t, i) {
+ return parseInt(e.css(t, i), 10) || 0
+ }
+
+ function s(t) {
+ var i = t[0];
+ return 9 === i.nodeType ? {
+ width: t.width(),
+ height: t.height(),
+ offset: {top: 0, left: 0}
+ } : e.isWindow(i) ? {
+ width: t.width(),
+ height: t.height(),
+ offset: {top: t.scrollTop(), left: t.scrollLeft()}
+ } : i.preventDefault ? {
+ width: 0,
+ height: 0,
+ offset: {top: i.pageY, left: i.pageX}
+ } : {width: t.outerWidth(), height: t.outerHeight(), offset: t.offset()}
+ }
+
+ e.ui = e.ui || {};
+ var n, a, o = Math.max, r = Math.abs, h = Math.round, l = /left|center|right/, u = /top|center|bottom/, d = /[\+\-]\d+(\.[\d]+)?%?/, c = /^\w+/, p = /%$/, f = e.fn.position;
+ e.position = {
+ scrollbarWidth: function () {
+ if (void 0 !== n)return n;
+ var t, i, s = e("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"), a = s.children()[0];
+ return e("body").append(s), t = a.offsetWidth, s.css("overflow", "scroll"), i = a.offsetWidth, t === i && (i = s[0].clientWidth), s.remove(), n = t - i
+ }, getScrollInfo: function (t) {
+ var i = t.isWindow || t.isDocument ? "" : t.element.css("overflow-x"), s = t.isWindow || t.isDocument ? "" : t.element.css("overflow-y"), n = "scroll" === i || "auto" === i && t.width < t.element[0].scrollWidth, a = "scroll" === s || "auto" === s && t.height < t.element[0].scrollHeight;
+ return {width: a ? e.position.scrollbarWidth() : 0, height: n ? e.position.scrollbarWidth() : 0}
+ }, getWithinInfo: function (t) {
+ var i = e(t || window), s = e.isWindow(i[0]), n = !!i[0] && 9 === i[0].nodeType;
+ return {
+ element: i,
+ isWindow: s,
+ isDocument: n,
+ offset: i.offset() || {left: 0, top: 0},
+ scrollLeft: i.scrollLeft(),
+ scrollTop: i.scrollTop(),
+ width: s || n ? i.width() : i.outerWidth(),
+ height: s || n ? i.height() : i.outerHeight()
+ }
+ }
+ }, e.fn.position = function (n) {
+ if (!n || !n.of)return f.apply(this, arguments);
+ n = e.extend({}, n);
+ var p, m, g, v, y, b, _ = e(n.of), x = e.position.getWithinInfo(n.within), w = e.position.getScrollInfo(x), k = (n.collision || "flip").split(" "), T = {};
+ return b = s(_), _[0].preventDefault && (n.at = "left top"), m = b.width, g = b.height, v = b.offset, y = e.extend({}, v), e.each(["my", "at"], function () {
+ var e, t, i = (n[this] || "").split(" ");
+ 1 === i.length && (i = l.test(i[0]) ? i.concat(["center"]) : u.test(i[0]) ? ["center"].concat(i) : ["center", "center"]), i[0] = l.test(i[0]) ? i[0] : "center", i[1] = u.test(i[1]) ? i[1] : "center", e = d.exec(i[0]), t = d.exec(i[1]), T[this] = [e ? e[0] : 0, t ? t[0] : 0], n[this] = [c.exec(i[0])[0], c.exec(i[1])[0]]
+ }), 1 === k.length && (k[1] = k[0]), "right" === n.at[0] ? y.left += m : "center" === n.at[0] && (y.left += m / 2), "bottom" === n.at[1] ? y.top += g : "center" === n.at[1] && (y.top += g / 2), p = t(T.at, m, g), y.left += p[0], y.top += p[1], this.each(function () {
+ var s, l, u = e(this), d = u.outerWidth(), c = u.outerHeight(), f = i(this, "marginLeft"), b = i(this, "marginTop"), D = d + f + i(this, "marginRight") + w.width, S = c + b + i(this, "marginBottom") + w.height, M = e.extend({}, y), C = t(T.my, u.outerWidth(), u.outerHeight());
+ "right" === n.my[0] ? M.left -= d : "center" === n.my[0] && (M.left -= d / 2), "bottom" === n.my[1] ? M.top -= c : "center" === n.my[1] && (M.top -= c / 2), M.left += C[0], M.top += C[1], a || (M.left = h(M.left), M.top = h(M.top)), s = {
+ marginLeft: f,
+ marginTop: b
+ }, e.each(["left", "top"], function (t, i) {
+ e.ui.position[k[t]] && e.ui.position[k[t]][i](M, {
+ targetWidth: m,
+ targetHeight: g,
+ elemWidth: d,
+ elemHeight: c,
+ collisionPosition: s,
+ collisionWidth: D,
+ collisionHeight: S,
+ offset: [p[0] + C[0], p[1] + C[1]],
+ my: n.my,
+ at: n.at,
+ within: x,
+ elem: u
+ })
+ }), n.using && (l = function (e) {
+ var t = v.left - M.left, i = t + m - d, s = v.top - M.top, a = s + g - c, h = {
+ target: {
+ element: _,
+ left: v.left,
+ top: v.top,
+ width: m,
+ height: g
+ },
+ element: {element: u, left: M.left, top: M.top, width: d, height: c},
+ horizontal: 0 > i ? "left" : t > 0 ? "right" : "center",
+ vertical: 0 > a ? "top" : s > 0 ? "bottom" : "middle"
+ };
+ d > m && m > r(t + i) && (h.horizontal = "center"), c > g && g > r(s + a) && (h.vertical = "middle"), h.important = o(r(t), r(i)) > o(r(s), r(a)) ? "horizontal" : "vertical", n.using.call(this, e, h)
+ }), u.offset(e.extend(M, {using: l}))
+ })
+ }, e.ui.position = {
+ fit: {
+ left: function (e, t) {
+ var i, s = t.within, n = s.isWindow ? s.scrollLeft : s.offset.left, a = s.width, r = e.left - t.collisionPosition.marginLeft, h = n - r, l = r + t.collisionWidth - a - n;
+ t.collisionWidth > a ? h > 0 && 0 >= l ? (i = e.left + h + t.collisionWidth - a - n, e.left += h - i) : e.left = l > 0 && 0 >= h ? n : h > l ? n + a - t.collisionWidth : n : h > 0 ? e.left += h : l > 0 ? e.left -= l : e.left = o(e.left - r, e.left)
+ }, top: function (e, t) {
+ var i, s = t.within, n = s.isWindow ? s.scrollTop : s.offset.top, a = t.within.height, r = e.top - t.collisionPosition.marginTop, h = n - r, l = r + t.collisionHeight - a - n;
+ t.collisionHeight > a ? h > 0 && 0 >= l ? (i = e.top + h + t.collisionHeight - a - n, e.top += h - i) : e.top = l > 0 && 0 >= h ? n : h > l ? n + a - t.collisionHeight : n : h > 0 ? e.top += h : l > 0 ? e.top -= l : e.top = o(e.top - r, e.top)
+ }
+ }, flip: {
+ left: function (e, t) {
+ var i, s, n = t.within, a = n.offset.left + n.scrollLeft, o = n.width, h = n.isWindow ? n.scrollLeft : n.offset.left, l = e.left - t.collisionPosition.marginLeft, u = l - h, d = l + t.collisionWidth - o - h, c = "left" === t.my[0] ? -t.elemWidth : "right" === t.my[0] ? t.elemWidth : 0, p = "left" === t.at[0] ? t.targetWidth : "right" === t.at[0] ? -t.targetWidth : 0, f = -2 * t.offset[0];
+ 0 > u ? (i = e.left + c + p + f + t.collisionWidth - o - a, (0 > i || r(u) > i) && (e.left += c + p + f)) : d > 0 && (s = e.left - t.collisionPosition.marginLeft + c + p + f - h, (s > 0 || d > r(s)) && (e.left += c + p + f))
+ }, top: function (e, t) {
+ var i, s, n = t.within, a = n.offset.top + n.scrollTop, o = n.height, h = n.isWindow ? n.scrollTop : n.offset.top, l = e.top - t.collisionPosition.marginTop, u = l - h, d = l + t.collisionHeight - o - h, c = "top" === t.my[1], p = c ? -t.elemHeight : "bottom" === t.my[1] ? t.elemHeight : 0, f = "top" === t.at[1] ? t.targetHeight : "bottom" === t.at[1] ? -t.targetHeight : 0, m = -2 * t.offset[1];
+ 0 > u ? (s = e.top + p + f + m + t.collisionHeight - o - a, (0 > s || r(u) > s) && (e.top += p + f + m)) : d > 0 && (i = e.top - t.collisionPosition.marginTop + p + f + m - h, (i > 0 || d > r(i)) && (e.top += p + f + m))
+ }
+ }, flipfit: {
+ left: function () {
+ e.ui.position.flip.left.apply(this, arguments), e.ui.position.fit.left.apply(this, arguments)
+ }, top: function () {
+ e.ui.position.flip.top.apply(this, arguments), e.ui.position.fit.top.apply(this, arguments)
+ }
+ }
+ }, function () {
+ var t, i, s, n, o, r = document.getElementsByTagName("body")[0], h = document.createElement("div");
+ t = document.createElement(r ? "div" : "body"), s = {
+ visibility: "hidden",
+ width: 0,
+ height: 0,
+ border: 0,
+ margin: 0,
+ background: "none"
+ }, r && e.extend(s, {position: "absolute", left: "-1000px", top: "-1000px"});
+ for (o in s)t.style[o] = s[o];
+ t.appendChild(h), i = r || document.documentElement, i.insertBefore(t, i.firstChild), h.style.cssText = "position: absolute; left: 10.7432222px;", n = e(h).offset().left, a = n > 10 && 11 > n, t.innerHTML = "", i.removeChild(t)
+ }()
+ }(), e.ui.position, e.widget("ui.draggable", e.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "drag",
+ options: {
+ addClasses: !0,
+ appendTo: "parent",
+ axis: !1,
+ connectToSortable: !1,
+ containment: !1,
+ cursor: "auto",
+ cursorAt: !1,
+ grid: !1,
+ handle: !1,
+ helper: "original",
+ iframeFix: !1,
+ opacity: !1,
+ refreshPositions: !1,
+ revert: !1,
+ revertDuration: 500,
+ scope: "default",
+ scroll: !0,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ snap: !1,
+ snapMode: "both",
+ snapTolerance: 20,
+ stack: !1,
+ zIndex: !1,
+ drag: null,
+ start: null,
+ stop: null
+ },
+ _create: function () {
+ "original" === this.options.helper && this._setPositionRelative(), this.options.addClasses && this.element.addClass("ui-draggable"), this.options.disabled && this.element.addClass("ui-draggable-disabled"), this._setHandleClassName(), this._mouseInit()
+ },
+ _setOption: function (e, t) {
+ this._super(e, t), "handle" === e && (this._removeHandleClassName(), this._setHandleClassName())
+ },
+ _destroy: function () {
+ return (this.helper || this.element).is(".ui-draggable-dragging") ? (this.destroyOnClear = !0, void 0) : (this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"), this._removeHandleClassName(), this._mouseDestroy(), void 0)
+ },
+ _mouseCapture: function (t) {
+ var i = this.options;
+ return this._blurActiveElement(t), this.helper || i.disabled || e(t.target).closest(".ui-resizable-handle").length > 0 ? !1 : (this.handle = this._getHandle(t), this.handle ? (this._blockFrames(i.iframeFix === !0 ? "iframe" : i.iframeFix), !0) : !1)
+ },
+ _blockFrames: function (t) {
+ this.iframeBlocks = this.document.find(t).map(function () {
+ var t = e(this);
+ return e("<div>").css("position", "absolute").appendTo(t.parent()).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).offset(t.offset())[0]
+ })
+ },
+ _unblockFrames: function () {
+ this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
+ },
+ _blurActiveElement: function (t) {
+ var i = this.document[0];
+ if (this.handleElement.is(t.target))try {
+ i.activeElement && "body" !== i.activeElement.nodeName.toLowerCase() && e(i.activeElement).blur()
+ } catch (s) {
+ }
+ },
+ _mouseStart: function (t) {
+ var i = this.options;
+ return this.helper = this._createHelper(t), this.helper.addClass("ui-draggable-dragging"), this._cacheHelperProportions(), e.ui.ddmanager && (e.ui.ddmanager.current = this), this._cacheMargins(), this.cssPosition = this.helper.css("position"), this.scrollParent = this.helper.scrollParent(!0), this.offsetParent = this.helper.offsetParent(), this.hasFixedAncestor = this.helper.parents().filter(function () {
+ return "fixed" === e(this).css("position")
+ }).length > 0, this.positionAbs = this.element.offset(), this._refreshOffsets(t), this.originalPosition = this.position = this._generatePosition(t, !1), this.originalPageX = t.pageX, this.originalPageY = t.pageY, i.cursorAt && this._adjustOffsetFromHelper(i.cursorAt), this._setContainment(), this._trigger("start", t) === !1 ? (this._clear(), !1) : (this._cacheHelperProportions(), e.ui.ddmanager && !i.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t), this._normalizeRightBottom(), this._mouseDrag(t, !0), e.ui.ddmanager && e.ui.ddmanager.dragStart(this, t), !0)
+ },
+ _refreshOffsets: function (e) {
+ this.offset = {
+ top: this.positionAbs.top - this.margins.top,
+ left: this.positionAbs.left - this.margins.left,
+ scroll: !1,
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ }, this.offset.click = {left: e.pageX - this.offset.left, top: e.pageY - this.offset.top}
+ },
+ _mouseDrag: function (t, i) {
+ if (this.hasFixedAncestor && (this.offset.parent = this._getParentOffset()), this.position = this._generatePosition(t, !0), this.positionAbs = this._convertPositionTo("absolute"), !i) {
+ var s = this._uiHash();
+ if (this._trigger("drag", t, s) === !1)return this._mouseUp({}), !1;
+ this.position = s.position
+ }
+ return this.helper[0].style.left = this.position.left + "px", this.helper[0].style.top = this.position.top + "px", e.ui.ddmanager && e.ui.ddmanager.drag(this, t), !1
+ },
+ _mouseStop: function (t) {
+ var i = this, s = !1;
+ return e.ui.ddmanager && !this.options.dropBehaviour && (s = e.ui.ddmanager.drop(this, t)), this.dropped && (s = this.dropped, this.dropped = !1), "invalid" === this.options.revert && !s || "valid" === this.options.revert && s || this.options.revert === !0 || e.isFunction(this.options.revert) && this.options.revert.call(this.element, s) ? e(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function () {
+ i._trigger("stop", t) !== !1 && i._clear()
+ }) : this._trigger("stop", t) !== !1 && this._clear(), !1
+ },
+ _mouseUp: function (t) {
+ return this._unblockFrames(), e.ui.ddmanager && e.ui.ddmanager.dragStop(this, t), this.handleElement.is(t.target) && this.element.focus(), e.ui.mouse.prototype._mouseUp.call(this, t)
+ },
+ cancel: function () {
+ return this.helper.is(".ui-draggable-dragging") ? this._mouseUp({}) : this._clear(), this
+ },
+ _getHandle: function (t) {
+ return this.options.handle ? !!e(t.target).closest(this.element.find(this.options.handle)).length : !0
+ },
+ _setHandleClassName: function () {
+ this.handleElement = this.options.handle ? this.element.find(this.options.handle) : this.element, this.handleElement.addClass("ui-draggable-handle")
+ },
+ _removeHandleClassName: function () {
+ this.handleElement.removeClass("ui-draggable-handle")
+ },
+ _createHelper: function (t) {
+ var i = this.options, s = e.isFunction(i.helper), n = s ? e(i.helper.apply(this.element[0], [t])) : "clone" === i.helper ? this.element.clone().removeAttr("id") : this.element;
+ return n.parents("body").length || n.appendTo("parent" === i.appendTo ? this.element[0].parentNode : i.appendTo), s && n[0] === this.element[0] && this._setPositionRelative(), n[0] === this.element[0] || /(fixed|absolute)/.test(n.css("position")) || n.css("position", "absolute"), n
+ },
+ _setPositionRelative: function () {
+ /^(?:r|a|f)/.test(this.element.css("position")) || (this.element[0].style.position = "relative")
+ },
+ _adjustOffsetFromHelper: function (t) {
+ "string" == typeof t && (t = t.split(" ")), e.isArray(t) && (t = {
+ left: +t[0],
+ top: +t[1] || 0
+ }), "left"in t && (this.offset.click.left = t.left + this.margins.left), "right"in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left), "top"in t && (this.offset.click.top = t.top + this.margins.top), "bottom"in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
+ },
+ _isRootNode: function (e) {
+ return /(html|body)/i.test(e.tagName) || e === this.document[0]
+ },
+ _getParentOffset: function () {
+ var t = this.offsetParent.offset(), i = this.document[0];
+ return "absolute" === this.cssPosition && this.scrollParent[0] !== i && e.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(), t.top += this.scrollParent.scrollTop()), this._isRootNode(this.offsetParent[0]) && (t = {
+ top: 0,
+ left: 0
+ }), {
+ top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ }
+ },
+ _getRelativeOffset: function () {
+ if ("relative" !== this.cssPosition)return {top: 0, left: 0};
+ var e = this.element.position(), t = this._isRootNode(this.scrollParent[0]);
+ return {
+ top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + (t ? 0 : this.scrollParent.scrollTop()),
+ left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + (t ? 0 : this.scrollParent.scrollLeft())
+ }
+ },
+ _cacheMargins: function () {
+ this.margins = {
+ left: parseInt(this.element.css("marginLeft"), 10) || 0,
+ top: parseInt(this.element.css("marginTop"), 10) || 0,
+ right: parseInt(this.element.css("marginRight"), 10) || 0,
+ bottom: parseInt(this.element.css("marginBottom"), 10) || 0
+ }
+ },
+ _cacheHelperProportions: function () {
+ this.helperProportions = {width: this.helper.outerWidth(), height: this.helper.outerHeight()}
+ },
+ _setContainment: function () {
+ var t, i, s, n = this.options, a = this.document[0];
+ return this.relativeContainer = null, n.containment ? "window" === n.containment ? (this.containment = [e(window).scrollLeft() - this.offset.relative.left - this.offset.parent.left, e(window).scrollTop() - this.offset.relative.top - this.offset.parent.top, e(window).scrollLeft() + e(window).width() - this.helperProportions.width - this.margins.left, e(window).scrollTop() + (e(window).height() || a.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : "document" === n.containment ? (this.containment = [0, 0, e(a).width() - this.helperProportions.width - this.margins.left, (e(a).height() || a.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top], void 0) : n.containment.constructor === Array ? (this.containment = n.containment, void 0) : ("parent" === n.containment && (n.containment = this.helper[0].parentNode), i = e(n.containment), s = i[0], s && (t = /(scroll|auto)/.test(i.css("overflow")), this.containment = [(parseInt(i.css("borderLeftWidth"), 10) || 0) + (parseInt(i.css("paddingLeft"), 10) || 0), (parseInt(i.css("borderTopWidth"), 10) || 0) + (parseInt(i.css("paddingTop"), 10) || 0), (t ? Math.max(s.scrollWidth, s.offsetWidth) : s.offsetWidth) - (parseInt(i.css("borderRightWidth"), 10) || 0) - (parseInt(i.css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left - this.margins.right, (t ? Math.max(s.scrollHeight, s.offsetHeight) : s.offsetHeight) - (parseInt(i.css("borderBottomWidth"), 10) || 0) - (parseInt(i.css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top - this.margins.bottom], this.relativeContainer = i), void 0) : (this.containment = null, void 0)
+ },
+ _convertPositionTo: function (e, t) {
+ t || (t = this.position);
+ var i = "absolute" === e ? 1 : -1, s = this._isRootNode(this.scrollParent[0]);
+ return {
+ top: t.top + this.offset.relative.top * i + this.offset.parent.top * i - ("fixed" === this.cssPosition ? -this.offset.scroll.top : s ? 0 : this.offset.scroll.top) * i,
+ left: t.left + this.offset.relative.left * i + this.offset.parent.left * i - ("fixed" === this.cssPosition ? -this.offset.scroll.left : s ? 0 : this.offset.scroll.left) * i
+ }
+ },
+ _generatePosition: function (e, t) {
+ var i, s, n, a, o = this.options, r = this._isRootNode(this.scrollParent[0]), h = e.pageX, l = e.pageY;
+ return r && this.offset.scroll || (this.offset.scroll = {
+ top: this.scrollParent.scrollTop(),
+ left: this.scrollParent.scrollLeft()
+ }), t && (this.containment && (this.relativeContainer ? (s = this.relativeContainer.offset(), i = [this.containment[0] + s.left, this.containment[1] + s.top, this.containment[2] + s.left, this.containment[3] + s.top]) : i = this.containment, e.pageX - this.offset.click.left < i[0] && (h = i[0] + this.offset.click.left), e.pageY - this.offset.click.top < i[1] && (l = i[1] + this.offset.click.top), e.pageX - this.offset.click.left > i[2] && (h = i[2] + this.offset.click.left), e.pageY - this.offset.click.top > i[3] && (l = i[3] + this.offset.click.top)), o.grid && (n = o.grid[1] ? this.originalPageY + Math.round((l - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY, l = i ? n - this.offset.click.top >= i[1] || n - this.offset.click.top > i[3] ? n : n - this.offset.click.top >= i[1] ? n - o.grid[1] : n + o.grid[1] : n, a = o.grid[0] ? this.originalPageX + Math.round((h - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX, h = i ? a - this.offset.click.left >= i[0] || a - this.offset.click.left > i[2] ? a : a - this.offset.click.left >= i[0] ? a - o.grid[0] : a + o.grid[0] : a), "y" === o.axis && (h = this.originalPageX), "x" === o.axis && (l = this.originalPageY)), {
+ top: l - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.offset.scroll.top : r ? 0 : this.offset.scroll.top),
+ left: h - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.offset.scroll.left : r ? 0 : this.offset.scroll.left)
+ }
+ },
+ _clear: function () {
+ this.helper.removeClass("ui-draggable-dragging"), this.helper[0] === this.element[0] || this.cancelHelperRemoval || this.helper.remove(), this.helper = null, this.cancelHelperRemoval = !1, this.destroyOnClear && this.destroy()
+ },
+ _normalizeRightBottom: function () {
+ "y" !== this.options.axis && "auto" !== this.helper.css("right") && (this.helper.width(this.helper.width()), this.helper.css("right", "auto")), "x" !== this.options.axis && "auto" !== this.helper.css("bottom") && (this.helper.height(this.helper.height()), this.helper.css("bottom", "auto"))
+ },
+ _trigger: function (t, i, s) {
+ return s = s || this._uiHash(), e.ui.plugin.call(this, t, [i, s, this], !0), /^(drag|start|stop)/.test(t) && (this.positionAbs = this._convertPositionTo("absolute"), s.offset = this.positionAbs), e.Widget.prototype._trigger.call(this, t, i, s)
+ },
+ plugins: {},
+ _uiHash: function () {
+ return {
+ helper: this.helper,
+ position: this.position,
+ originalPosition: this.originalPosition,
+ offset: this.positionAbs
+ }
+ }
+ }), e.ui.plugin.add("draggable", "connectToSortable", {
+ start: function (t, i, s) {
+ var n = e.extend({}, i, {item: s.element});
+ s.sortables = [], e(s.options.connectToSortable).each(function () {
+ var i = e(this).sortable("instance");
+ i && !i.options.disabled && (s.sortables.push(i), i.refreshPositions(), i._trigger("activate", t, n))
+ })
+ }, stop: function (t, i, s) {
+ var n = e.extend({}, i, {item: s.element});
+ s.cancelHelperRemoval = !1, e.each(s.sortables, function () {
+ var e = this;
+ e.isOver ? (e.isOver = 0, s.cancelHelperRemoval = !0, e.cancelHelperRemoval = !1, e._storedCSS = {
+ position: e.placeholder.css("position"),
+ top: e.placeholder.css("top"),
+ left: e.placeholder.css("left")
+ }, e._mouseStop(t), e.options.helper = e.options._helper) : (e.cancelHelperRemoval = !0, e._trigger("deactivate", t, n))
+ })
+ }, drag: function (t, i, s) {
+ e.each(s.sortables, function () {
+ var n = !1, a = this;
+ a.positionAbs = s.positionAbs, a.helperProportions = s.helperProportions, a.offset.click = s.offset.click, a._intersectsWith(a.containerCache) && (n = !0, e.each(s.sortables, function () {
+ return this.positionAbs = s.positionAbs, this.helperProportions = s.helperProportions, this.offset.click = s.offset.click, this !== a && this._intersectsWith(this.containerCache) && e.contains(a.element[0], this.element[0]) && (n = !1), n
+ })), n ? (a.isOver || (a.isOver = 1, s._parent = i.helper.parent(), a.currentItem = i.helper.appendTo(a.element).data("ui-sortable-item", !0), a.options._helper = a.options.helper, a.options.helper = function () {
+ return i.helper[0]
+ }, t.target = a.currentItem[0], a._mouseCapture(t, !0), a._mouseStart(t, !0, !0), a.offset.click.top = s.offset.click.top, a.offset.click.left = s.offset.click.left, a.offset.parent.left -= s.offset.parent.left - a.offset.parent.left, a.offset.parent.top -= s.offset.parent.top - a.offset.parent.top, s._trigger("toSortable", t), s.dropped = a.element, e.each(s.sortables, function () {
+ this.refreshPositions()
+ }), s.currentItem = s.element, a.fromOutside = s), a.currentItem && (a._mouseDrag(t), i.position = a.position)) : a.isOver && (a.isOver = 0, a.cancelHelperRemoval = !0, a.options._revert = a.options.revert, a.options.revert = !1, a._trigger("out", t, a._uiHash(a)), a._mouseStop(t, !0), a.options.revert = a.options._revert, a.options.helper = a.options._helper, a.placeholder && a.placeholder.remove(), i.helper.appendTo(s._parent), s._refreshOffsets(t), i.position = s._generatePosition(t, !0), s._trigger("fromSortable", t), s.dropped = !1, e.each(s.sortables, function () {
+ this.refreshPositions()
+ }))
+ })
+ }
+ }), e.ui.plugin.add("draggable", "cursor", {
+ start: function (t, i, s) {
+ var n = e("body"), a = s.options;
+ n.css("cursor") && (a._cursor = n.css("cursor")), n.css("cursor", a.cursor)
+ }, stop: function (t, i, s) {
+ var n = s.options;
+ n._cursor && e("body").css("cursor", n._cursor)
+ }
+ }), e.ui.plugin.add("draggable", "opacity", {
+ start: function (t, i, s) {
+ var n = e(i.helper), a = s.options;
+ n.css("opacity") && (a._opacity = n.css("opacity")), n.css("opacity", a.opacity)
+ }, stop: function (t, i, s) {
+ var n = s.options;
+ n._opacity && e(i.helper).css("opacity", n._opacity)
+ }
+ }), e.ui.plugin.add("draggable", "scroll", {
+ start: function (e, t, i) {
+ i.scrollParentNotHidden || (i.scrollParentNotHidden = i.helper.scrollParent(!1)), i.scrollParentNotHidden[0] !== i.document[0] && "HTML" !== i.scrollParentNotHidden[0].tagName && (i.overflowOffset = i.scrollParentNotHidden.offset())
+ }, drag: function (t, i, s) {
+ var n = s.options, a = !1, o = s.scrollParentNotHidden[0], r = s.document[0];
+ o !== r && "HTML" !== o.tagName ? (n.axis && "x" === n.axis || (s.overflowOffset.top + o.offsetHeight - t.pageY < n.scrollSensitivity ? o.scrollTop = a = o.scrollTop + n.scrollSpeed : t.pageY - s.overflowOffset.top < n.scrollSensitivity && (o.scrollTop = a = o.scrollTop - n.scrollSpeed)), n.axis && "y" === n.axis || (s.overflowOffset.left + o.offsetWidth - t.pageX < n.scrollSensitivity ? o.scrollLeft = a = o.scrollLeft + n.scrollSpeed : t.pageX - s.overflowOffset.left < n.scrollSensitivity && (o.scrollLeft = a = o.scrollLeft - n.scrollSpeed))) : (n.axis && "x" === n.axis || (t.pageY - e(r).scrollTop() < n.scrollSensitivity ? a = e(r).scrollTop(e(r).scrollTop() - n.scrollSpeed) : e(window).height() - (t.pageY - e(r).scrollTop()) < n.scrollSensitivity && (a = e(r).scrollTop(e(r).scrollTop() + n.scrollSpeed))), n.axis && "y" === n.axis || (t.pageX - e(r).scrollLeft() < n.scrollSensitivity ? a = e(r).scrollLeft(e(r).scrollLeft() - n.scrollSpeed) : e(window).width() - (t.pageX - e(r).scrollLeft()) < n.scrollSensitivity && (a = e(r).scrollLeft(e(r).scrollLeft() + n.scrollSpeed)))), a !== !1 && e.ui.ddmanager && !n.dropBehaviour && e.ui.ddmanager.prepareOffsets(s, t)
+ }
+ }), e.ui.plugin.add("draggable", "snap", {
+ start: function (t, i, s) {
+ var n = s.options;
+ s.snapElements = [], e(n.snap.constructor !== String ? n.snap.items || ":data(ui-draggable)" : n.snap).each(function () {
+ var t = e(this), i = t.offset();
+ this !== s.element[0] && s.snapElements.push({
+ item: this,
+ width: t.outerWidth(),
+ height: t.outerHeight(),
+ top: i.top,
+ left: i.left
+ })
+ })
+ }, drag: function (t, i, s) {
+ var n, a, o, r, h, l, u, d, c, p, f = s.options, m = f.snapTolerance, g = i.offset.left, v = g + s.helperProportions.width, y = i.offset.top, b = y + s.helperProportions.height;
+ for (c = s.snapElements.length - 1; c >= 0; c--)h = s.snapElements[c].left - s.margins.left, l = h + s.snapElements[c].width, u = s.snapElements[c].top - s.margins.top, d = u + s.snapElements[c].height, h - m > v || g > l + m || u - m > b || y > d + m || !e.contains(s.snapElements[c].item.ownerDocument, s.snapElements[c].item) ? (s.snapElements[c].snapping && s.options.snap.release && s.options.snap.release.call(s.element, t, e.extend(s._uiHash(), {snapItem: s.snapElements[c].item})), s.snapElements[c].snapping = !1) : ("inner" !== f.snapMode && (n = m >= Math.abs(u - b), a = m >= Math.abs(d - y), o = m >= Math.abs(h - v), r = m >= Math.abs(l - g), n && (i.position.top = s._convertPositionTo("relative", {
+ top: u - s.helperProportions.height,
+ left: 0
+ }).top), a && (i.position.top = s._convertPositionTo("relative", {
+ top: d,
+ left: 0
+ }).top), o && (i.position.left = s._convertPositionTo("relative", {
+ top: 0,
+ left: h - s.helperProportions.width
+ }).left), r && (i.position.left = s._convertPositionTo("relative", {
+ top: 0,
+ left: l
+ }).left)), p = n || a || o || r, "outer" !== f.snapMode && (n = m >= Math.abs(u - y), a = m >= Math.abs(d - b), o = m >= Math.abs(h - g), r = m >= Math.abs(l - v), n && (i.position.top = s._convertPositionTo("relative", {
+ top: u,
+ left: 0
+ }).top), a && (i.position.top = s._convertPositionTo("relative", {
+ top: d - s.helperProportions.height,
+ left: 0
+ }).top), o && (i.position.left = s._convertPositionTo("relative", {
+ top: 0,
+ left: h
+ }).left), r && (i.position.left = s._convertPositionTo("relative", {
+ top: 0,
+ left: l - s.helperProportions.width
+ }).left)), !s.snapElements[c].snapping && (n || a || o || r || p) && s.options.snap.snap && s.options.snap.snap.call(s.element, t, e.extend(s._uiHash(), {snapItem: s.snapElements[c].item})), s.snapElements[c].snapping = n || a || o || r || p)
+ }
+ }), e.ui.plugin.add("draggable", "stack", {
+ start: function (t, i, s) {
+ var n, a = s.options, o = e.makeArray(e(a.stack)).sort(function (t, i) {
+ return (parseInt(e(t).css("zIndex"), 10) || 0) - (parseInt(e(i).css("zIndex"), 10) || 0)
+ });
+ o.length && (n = parseInt(e(o[0]).css("zIndex"), 10) || 0, e(o).each(function (t) {
+ e(this).css("zIndex", n + t)
+ }), this.css("zIndex", n + o.length))
+ }
+ }), e.ui.plugin.add("draggable", "zIndex", {
+ start: function (t, i, s) {
+ var n = e(i.helper), a = s.options;
+ n.css("zIndex") && (a._zIndex = n.css("zIndex")), n.css("zIndex", a.zIndex)
+ }, stop: function (t, i, s) {
+ var n = s.options;
+ n._zIndex && e(i.helper).css("zIndex", n._zIndex)
+ }
+ }), e.ui.draggable, e.widget("ui.droppable", {
+ version: "1.11.4",
+ widgetEventPrefix: "drop",
+ options: {
+ accept: "*",
+ activeClass: !1,
+ addClasses: !0,
+ greedy: !1,
+ hoverClass: !1,
+ scope: "default",
+ tolerance: "intersect",
+ activate: null,
+ deactivate: null,
+ drop: null,
+ out: null,
+ over: null
+ },
+ _create: function () {
+ var t, i = this.options, s = i.accept;
+ this.isover = !1, this.isout = !0, this.accept = e.isFunction(s) ? s : function (e) {
+ return e.is(s)
+ }, this.proportions = function () {
+ return arguments.length ? (t = arguments[0], void 0) : t ? t : t = {
+ width: this.element[0].offsetWidth,
+ height: this.element[0].offsetHeight
+ }
+ }, this._addToManager(i.scope), i.addClasses && this.element.addClass("ui-droppable")
+ },
+ _addToManager: function (t) {
+ e.ui.ddmanager.droppables[t] = e.ui.ddmanager.droppables[t] || [], e.ui.ddmanager.droppables[t].push(this)
+ },
+ _splice: function (e) {
+ for (var t = 0; e.length > t; t++)e[t] === this && e.splice(t, 1)
+ },
+ _destroy: function () {
+ var t = e.ui.ddmanager.droppables[this.options.scope];
+ this._splice(t), this.element.removeClass("ui-droppable ui-droppable-disabled")
+ },
+ _setOption: function (t, i) {
+ if ("accept" === t)this.accept = e.isFunction(i) ? i : function (e) {
+ return e.is(i)
+ }; else if ("scope" === t) {
+ var s = e.ui.ddmanager.droppables[this.options.scope];
+ this._splice(s), this._addToManager(i)
+ }
+ this._super(t, i)
+ },
+ _activate: function (t) {
+ var i = e.ui.ddmanager.current;
+ this.options.activeClass && this.element.addClass(this.options.activeClass), i && this._trigger("activate", t, this.ui(i))
+ },
+ _deactivate: function (t) {
+ var i = e.ui.ddmanager.current;
+ this.options.activeClass && this.element.removeClass(this.options.activeClass), i && this._trigger("deactivate", t, this.ui(i))
+ },
+ _over: function (t) {
+ var i = e.ui.ddmanager.current;
+ i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.addClass(this.options.hoverClass), this._trigger("over", t, this.ui(i)))
+ },
+ _out: function (t) {
+ var i = e.ui.ddmanager.current;
+ i && (i.currentItem || i.element)[0] !== this.element[0] && this.accept.call(this.element[0], i.currentItem || i.element) && (this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("out", t, this.ui(i)))
+ },
+ _drop: function (t, i) {
+ var s = i || e.ui.ddmanager.current, n = !1;
+ return s && (s.currentItem || s.element)[0] !== this.element[0] ? (this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function () {
+ var i = e(this).droppable("instance");
+ return i.options.greedy && !i.options.disabled && i.options.scope === s.options.scope && i.accept.call(i.element[0], s.currentItem || s.element) && e.ui.intersect(s, e.extend(i, {offset: i.element.offset()}), i.options.tolerance, t) ? (n = !0, !1) : void 0
+ }), n ? !1 : this.accept.call(this.element[0], s.currentItem || s.element) ? (this.options.activeClass && this.element.removeClass(this.options.activeClass), this.options.hoverClass && this.element.removeClass(this.options.hoverClass), this._trigger("drop", t, this.ui(s)), this.element) : !1) : !1
+ },
+ ui: function (e) {
+ return {
+ draggable: e.currentItem || e.element,
+ helper: e.helper,
+ position: e.position,
+ offset: e.positionAbs
+ }
+ }
+ }), e.ui.intersect = function () {
+ function e(e, t, i) {
+ return e >= t && t + i > e
+ }
+
+ return function (t, i, s, n) {
+ if (!i.offset)return !1;
+ var a = (t.positionAbs || t.position.absolute).left + t.margins.left, o = (t.positionAbs || t.position.absolute).top + t.margins.top, r = a + t.helperProportions.width, h = o + t.helperProportions.height, l = i.offset.left, u = i.offset.top, d = l + i.proportions().width, c = u + i.proportions().height;
+ switch (s) {
+ case"fit":
+ return a >= l && d >= r && o >= u && c >= h;
+ case"intersect":
+ return a + t.helperProportions.width / 2 > l && d > r - t.helperProportions.width / 2 && o + t.helperProportions.height / 2 > u && c > h - t.helperProportions.height / 2;
+ case"pointer":
+ return e(n.pageY, u, i.proportions().height) && e(n.pageX, l, i.proportions().width);
+ case"touch":
+ return (o >= u && c >= o || h >= u && c >= h || u > o && h > c) && (a >= l && d >= a || r >= l && d >= r || l > a && r > d);
+ default:
+ return !1
+ }
+ }
+ }(), e.ui.ddmanager = {
+ current: null, droppables: {"default": []}, prepareOffsets: function (t, i) {
+ var s, n, a = e.ui.ddmanager.droppables[t.options.scope] || [], o = i ? i.type : null, r = (t.currentItem || t.element).find(":data(ui-droppable)").addBack();
+ e:for (s = 0; a.length > s; s++)if (!(a[s].options.disabled || t && !a[s].accept.call(a[s].element[0], t.currentItem || t.element))) {
+ for (n = 0; r.length > n; n++)if (r[n] === a[s].element[0]) {
+ a[s].proportions().height = 0;
+ continue e
+ }
+ a[s].visible = "none" !== a[s].element.css("display"), a[s].visible && ("mousedown" === o && a[s]._activate.call(a[s], i), a[s].offset = a[s].element.offset(), a[s].proportions({
+ width: a[s].element[0].offsetWidth,
+ height: a[s].element[0].offsetHeight
+ }))
+ }
+ }, drop: function (t, i) {
+ var s = !1;
+ return e.each((e.ui.ddmanager.droppables[t.options.scope] || []).slice(), function () {
+ this.options && (!this.options.disabled && this.visible && e.ui.intersect(t, this, this.options.tolerance, i) && (s = this._drop.call(this, i) || s), !this.options.disabled && this.visible && this.accept.call(this.element[0], t.currentItem || t.element) && (this.isout = !0, this.isover = !1, this._deactivate.call(this, i)))
+ }), s
+ }, dragStart: function (t, i) {
+ t.element.parentsUntil("body").bind("scroll.droppable", function () {
+ t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
+ })
+ }, drag: function (t, i) {
+ t.options.refreshPositions && e.ui.ddmanager.prepareOffsets(t, i), e.each(e.ui.ddmanager.droppables[t.options.scope] || [], function () {
+ if (!this.options.disabled && !this.greedyChild && this.visible) {
+ var s, n, a, o = e.ui.intersect(t, this, this.options.tolerance, i), r = !o && this.isover ? "isout" : o && !this.isover ? "isover" : null;
+ r && (this.options.greedy && (n = this.options.scope, a = this.element.parents(":data(ui-droppable)").filter(function () {
+ return e(this).droppable("instance").options.scope === n
+ }), a.length && (s = e(a[0]).droppable("instance"), s.greedyChild = "isover" === r)), s && "isover" === r && (s.isover = !1, s.isout = !0, s._out.call(s, i)), this[r] = !0, this["isout" === r ? "isover" : "isout"] = !1, this["isover" === r ? "_over" : "_out"].call(this, i), s && "isout" === r && (s.isout = !1, s.isover = !0, s._over.call(s, i)))
+ }
+ })
+ }, dragStop: function (t, i) {
+ t.element.parentsUntil("body").unbind("scroll.droppable"), t.options.refreshPositions || e.ui.ddmanager.prepareOffsets(t, i)
+ }
+ }, e.ui.droppable, e.widget("ui.resizable", e.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "resize",
+ options: {
+ alsoResize: !1,
+ animate: !1,
+ animateDuration: "slow",
+ animateEasing: "swing",
+ aspectRatio: !1,
+ autoHide: !1,
+ containment: !1,
+ ghost: !1,
+ grid: !1,
+ handles: "e,s,se",
+ helper: !1,
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 10,
+ minWidth: 10,
+ zIndex: 90,
+ resize: null,
+ start: null,
+ stop: null
+ },
+ _num: function (e) {
+ return parseInt(e, 10) || 0
+ },
+ _isNumber: function (e) {
+ return !isNaN(parseInt(e, 10))
+ },
+ _hasScroll: function (t, i) {
+ if ("hidden" === e(t).css("overflow"))return !1;
+ var s = i && "left" === i ? "scrollLeft" : "scrollTop", n = !1;
+ return t[s] > 0 ? !0 : (t[s] = 1, n = t[s] > 0, t[s] = 0, n)
+ },
+ _create: function () {
+ var t, i, s, n, a, o = this, r = this.options;
+ if (this.element.addClass("ui-resizable"), e.extend(this, {
+ _aspectRatio: !!r.aspectRatio,
+ aspectRatio: r.aspectRatio,
+ originalElement: this.element,
+ _proportionallyResizeElements: [],
+ _helper: r.helper || r.ghost || r.animate ? r.helper || "ui-resizable-helper" : null
+ }), this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i) && (this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+ position: this.element.css("position"),
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight(),
+ top: this.element.css("top"),
+ left: this.element.css("left")
+ })), this.element = this.element.parent().data("ui-resizable", this.element.resizable("instance")), this.elementIsWrapper = !0, this.element.css({
+ marginLeft: this.originalElement.css("marginLeft"),
+ marginTop: this.originalElement.css("marginTop"),
+ marginRight: this.originalElement.css("marginRight"),
+ marginBottom: this.originalElement.css("marginBottom")
+ }), this.originalElement.css({
+ marginLeft: 0,
+ marginTop: 0,
+ marginRight: 0,
+ marginBottom: 0
+ }), this.originalResizeStyle = this.originalElement.css("resize"), this.originalElement.css("resize", "none"), this._proportionallyResizeElements.push(this.originalElement.css({
+ position: "static",
+ zoom: 1,
+ display: "block"
+ })), this.originalElement.css({margin: this.originalElement.css("margin")}), this._proportionallyResize()), this.handles = r.handles || (e(".ui-resizable-handle", this.element).length ? {
+ n: ".ui-resizable-n",
+ e: ".ui-resizable-e",
+ s: ".ui-resizable-s",
+ w: ".ui-resizable-w",
+ se: ".ui-resizable-se",
+ sw: ".ui-resizable-sw",
+ ne: ".ui-resizable-ne",
+ nw: ".ui-resizable-nw"
+ } : "e,s,se"), this._handles = e(), this.handles.constructor === String)for ("all" === this.handles && (this.handles = "n,e,s,w,se,sw,ne,nw"), t = this.handles.split(","), this.handles = {}, i = 0; t.length > i; i++)s = e.trim(t[i]), a = "ui-resizable-" + s, n = e("<div class='ui-resizable-handle " + a + "'></div>"), n.css({zIndex: r.zIndex}), "se" === s && n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"), this.handles[s] = ".ui-resizable-" + s, this.element.append(n);
+ this._renderAxis = function (t) {
+ var i, s, n, a;
+ t = t || this.element;
+ for (i in this.handles)this.handles[i].constructor === String ? this.handles[i] = this.element.children(this.handles[i]).first().show() : (this.handles[i].jquery || this.handles[i].nodeType) && (this.handles[i] = e(this.handles[i]), this._on(this.handles[i], {mousedown: o._mouseDown})), this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i) && (s = e(this.handles[i], this.element), a = /sw|ne|nw|se|n|s/.test(i) ? s.outerHeight() : s.outerWidth(), n = ["padding", /ne|nw|n/.test(i) ? "Top" : /se|sw|s/.test(i) ? "Bottom" : /^e$/.test(i) ? "Right" : "Left"].join(""), t.css(n, a), this._proportionallyResize()), this._handles = this._handles.add(this.handles[i])
+ }, this._renderAxis(this.element), this._handles = this._handles.add(this.element.find(".ui-resizable-handle")), this._handles.disableSelection(), this._handles.mouseover(function () {
+ o.resizing || (this.className && (n = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)), o.axis = n && n[1] ? n[1] : "se")
+ }), r.autoHide && (this._handles.hide(), e(this.element).addClass("ui-resizable-autohide").mouseenter(function () {
+ r.disabled || (e(this).removeClass("ui-resizable-autohide"), o._handles.show())
+ }).mouseleave(function () {
+ r.disabled || o.resizing || (e(this).addClass("ui-resizable-autohide"), o._handles.hide())
+ })), this._mouseInit()
+ },
+ _destroy: function () {
+ this._mouseDestroy();
+ var t, i = function (t) {
+ e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()
+ };
+ return this.elementIsWrapper && (i(this.element), t = this.element, this.originalElement.css({
+ position: t.css("position"),
+ width: t.outerWidth(),
+ height: t.outerHeight(),
+ top: t.css("top"),
+ left: t.css("left")
+ }).insertAfter(t), t.remove()), this.originalElement.css("resize", this.originalResizeStyle), i(this.originalElement), this
+ },
+ _mouseCapture: function (t) {
+ var i, s, n = !1;
+ for (i in this.handles)s = e(this.handles[i])[0], (s === t.target || e.contains(s, t.target)) && (n = !0);
+ return !this.options.disabled && n
+ },
+ _mouseStart: function (t) {
+ var i, s, n, a = this.options, o = this.element;
+ return this.resizing = !0, this._renderProxy(), i = this._num(this.helper.css("left")), s = this._num(this.helper.css("top")), a.containment && (i += e(a.containment).scrollLeft() || 0, s += e(a.containment).scrollTop() || 0), this.offset = this.helper.offset(), this.position = {
+ left: i,
+ top: s
+ }, this.size = this._helper ? {
+ width: this.helper.width(),
+ height: this.helper.height()
+ } : {width: o.width(), height: o.height()}, this.originalSize = this._helper ? {
+ width: o.outerWidth(),
+ height: o.outerHeight()
+ } : {width: o.width(), height: o.height()}, this.sizeDiff = {
+ width: o.outerWidth() - o.width(),
+ height: o.outerHeight() - o.height()
+ }, this.originalPosition = {left: i, top: s}, this.originalMousePosition = {
+ left: t.pageX,
+ top: t.pageY
+ }, this.aspectRatio = "number" == typeof a.aspectRatio ? a.aspectRatio : this.originalSize.width / this.originalSize.height || 1, n = e(".ui-resizable-" + this.axis).css("cursor"), e("body").css("cursor", "auto" === n ? this.axis + "-resize" : n), o.addClass("ui-resizable-resizing"), this._propagate("start", t), !0
+ },
+ _mouseDrag: function (t) {
+ var i, s, n = this.originalMousePosition, a = this.axis, o = t.pageX - n.left || 0, r = t.pageY - n.top || 0, h = this._change[a];
+ return this._updatePrevProperties(), h ? (i = h.apply(this, [t, o, r]), this._updateVirtualBoundaries(t.shiftKey), (this._aspectRatio || t.shiftKey) && (i = this._updateRatio(i, t)), i = this._respectSize(i, t), this._updateCache(i), this._propagate("resize", t), s = this._applyChanges(), !this._helper && this._proportionallyResizeElements.length && this._proportionallyResize(), e.isEmptyObject(s) || (this._updatePrevProperties(), this._trigger("resize", t, this.ui()), this._applyChanges()), !1) : !1
+ },
+ _mouseStop: function (t) {
+ this.resizing = !1;
+ var i, s, n, a, o, r, h, l = this.options, u = this;
+ return this._helper && (i = this._proportionallyResizeElements, s = i.length && /textarea/i.test(i[0].nodeName), n = s && this._hasScroll(i[0], "left") ? 0 : u.sizeDiff.height, a = s ? 0 : u.sizeDiff.width, o = {
+ width: u.helper.width() - a,
+ height: u.helper.height() - n
+ }, r = parseInt(u.element.css("left"), 10) + (u.position.left - u.originalPosition.left) || null, h = parseInt(u.element.css("top"), 10) + (u.position.top - u.originalPosition.top) || null, l.animate || this.element.css(e.extend(o, {
+ top: h,
+ left: r
+ })), u.helper.height(u.size.height), u.helper.width(u.size.width), this._helper && !l.animate && this._proportionallyResize()), e("body").css("cursor", "auto"), this.element.removeClass("ui-resizable-resizing"), this._propagate("stop", t), this._helper && this.helper.remove(), !1
+ },
+ _updatePrevProperties: function () {
+ this.prevPosition = {
+ top: this.position.top,
+ left: this.position.left
+ }, this.prevSize = {width: this.size.width, height: this.size.height}
+ },
+ _applyChanges: function () {
+ var e = {};
+ return this.position.top !== this.prevPosition.top && (e.top = this.position.top + "px"), this.position.left !== this.prevPosition.left && (e.left = this.position.left + "px"), this.size.width !== this.prevSize.width && (e.width = this.size.width + "px"), this.size.height !== this.prevSize.height && (e.height = this.size.height + "px"), this.helper.css(e), e
+ },
+ _updateVirtualBoundaries: function (e) {
+ var t, i, s, n, a, o = this.options;
+ a = {
+ minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+ maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : 1 / 0,
+ minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+ maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : 1 / 0
+ }, (this._aspectRatio || e) && (t = a.minHeight * this.aspectRatio, s = a.minWidth / this.aspectRatio, i = a.maxHeight * this.aspectRatio, n = a.maxWidth / this.aspectRatio, t > a.minWidth && (a.minWidth = t), s > a.minHeight && (a.minHeight = s), a.maxWidth > i && (a.maxWidth = i), a.maxHeight > n && (a.maxHeight = n)), this._vBoundaries = a
+ },
+ _updateCache: function (e) {
+ this.offset = this.helper.offset(), this._isNumber(e.left) && (this.position.left = e.left), this._isNumber(e.top) && (this.position.top = e.top), this._isNumber(e.height) && (this.size.height = e.height), this._isNumber(e.width) && (this.size.width = e.width)
+ },
+ _updateRatio: function (e) {
+ var t = this.position, i = this.size, s = this.axis;
+ return this._isNumber(e.height) ? e.width = e.height * this.aspectRatio : this._isNumber(e.width) && (e.height = e.width / this.aspectRatio), "sw" === s && (e.left = t.left + (i.width - e.width), e.top = null), "nw" === s && (e.top = t.top + (i.height - e.height), e.left = t.left + (i.width - e.width)), e
+ },
+ _respectSize: function (e) {
+ var t = this._vBoundaries, i = this.axis, s = this._isNumber(e.width) && t.maxWidth && t.maxWidth < e.width, n = this._isNumber(e.height) && t.maxHeight && t.maxHeight < e.height, a = this._isNumber(e.width) && t.minWidth && t.minWidth > e.width, o = this._isNumber(e.height) && t.minHeight && t.minHeight > e.height, r = this.originalPosition.left + this.originalSize.width, h = this.position.top + this.size.height, l = /sw|nw|w/.test(i), u = /nw|ne|n/.test(i);
+ return a && (e.width = t.minWidth), o && (e.height = t.minHeight), s && (e.width = t.maxWidth), n && (e.height = t.maxHeight), a && l && (e.left = r - t.minWidth), s && l && (e.left = r - t.maxWidth), o && u && (e.top = h - t.minHeight), n && u && (e.top = h - t.maxHeight), e.width || e.height || e.left || !e.top ? e.width || e.height || e.top || !e.left || (e.left = null) : e.top = null, e
+ },
+ _getPaddingPlusBorderDimensions: function (e) {
+ for (var t = 0, i = [], s = [e.css("borderTopWidth"), e.css("borderRightWidth"), e.css("borderBottomWidth"), e.css("borderLeftWidth")], n = [e.css("paddingTop"), e.css("paddingRight"), e.css("paddingBottom"), e.css("paddingLeft")]; 4 > t; t++)i[t] = parseInt(s[t], 10) || 0, i[t] += parseInt(n[t], 10) || 0;
+ return {height: i[0] + i[2], width: i[1] + i[3]}
+ },
+ _proportionallyResize: function () {
+ if (this._proportionallyResizeElements.length)for (var e, t = 0, i = this.helper || this.element; this._proportionallyResizeElements.length > t; t++)e = this._proportionallyResizeElements[t], this.outerDimensions || (this.outerDimensions = this._getPaddingPlusBorderDimensions(e)), e.css({
+ height: i.height() - this.outerDimensions.height || 0,
+ width: i.width() - this.outerDimensions.width || 0
+ })
+ },
+ _renderProxy: function () {
+ var t = this.element, i = this.options;
+ this.elementOffset = t.offset(), this._helper ? (this.helper = this.helper || e("<div style='overflow:hidden;'></div>"), this.helper.addClass(this._helper).css({
+ width: this.element.outerWidth() - 1,
+ height: this.element.outerHeight() - 1,
+ position: "absolute",
+ left: this.elementOffset.left + "px",
+ top: this.elementOffset.top + "px",
+ zIndex: ++i.zIndex
+ }), this.helper.appendTo("body").disableSelection()) : this.helper = this.element
+ },
+ _change: {
+ e: function (e, t) {
+ return {width: this.originalSize.width + t}
+ }, w: function (e, t) {
+ var i = this.originalSize, s = this.originalPosition;
+ return {left: s.left + t, width: i.width - t}
+ }, n: function (e, t, i) {
+ var s = this.originalSize, n = this.originalPosition;
+ return {top: n.top + i, height: s.height - i}
+ }, s: function (e, t, i) {
+ return {height: this.originalSize.height + i}
+ }, se: function (t, i, s) {
+ return e.extend(this._change.s.apply(this, arguments), this._change.e.apply(this, [t, i, s]))
+ }, sw: function (t, i, s) {
+ return e.extend(this._change.s.apply(this, arguments), this._change.w.apply(this, [t, i, s]))
+ }, ne: function (t, i, s) {
+ return e.extend(this._change.n.apply(this, arguments), this._change.e.apply(this, [t, i, s]))
+ }, nw: function (t, i, s) {
+ return e.extend(this._change.n.apply(this, arguments), this._change.w.apply(this, [t, i, s]))
+ }
+ },
+ _propagate: function (t, i) {
+ e.ui.plugin.call(this, t, [i, this.ui()]), "resize" !== t && this._trigger(t, i, this.ui())
+ },
+ plugins: {},
+ ui: function () {
+ return {
+ originalElement: this.originalElement,
+ element: this.element,
+ helper: this.helper,
+ position: this.position,
+ size: this.size,
+ originalSize: this.originalSize,
+ originalPosition: this.originalPosition
+ }
+ }
+ }), e.ui.plugin.add("resizable", "animate", {
+ stop: function (t) {
+ var i = e(this).resizable("instance"), s = i.options, n = i._proportionallyResizeElements, a = n.length && /textarea/i.test(n[0].nodeName), o = a && i._hasScroll(n[0], "left") ? 0 : i.sizeDiff.height, r = a ? 0 : i.sizeDiff.width, h = {
+ width: i.size.width - r,
+ height: i.size.height - o
+ }, l = parseInt(i.element.css("left"), 10) + (i.position.left - i.originalPosition.left) || null, u = parseInt(i.element.css("top"), 10) + (i.position.top - i.originalPosition.top) || null;
+ i.element.animate(e.extend(h, u && l ? {top: u, left: l} : {}), {
+ duration: s.animateDuration,
+ easing: s.animateEasing,
+ step: function () {
+ var s = {
+ width: parseInt(i.element.css("width"), 10),
+ height: parseInt(i.element.css("height"), 10),
+ top: parseInt(i.element.css("top"), 10),
+ left: parseInt(i.element.css("left"), 10)
+ };
+ n && n.length && e(n[0]).css({
+ width: s.width,
+ height: s.height
+ }), i._updateCache(s), i._propagate("resize", t)
+ }
+ })
+ }
+ }), e.ui.plugin.add("resizable", "containment", {
+ start: function () {
+ var t, i, s, n, a, o, r, h = e(this).resizable("instance"), l = h.options, u = h.element, d = l.containment, c = d instanceof e ? d.get(0) : /parent/.test(d) ? u.parent().get(0) : d;
+ c && (h.containerElement = e(c), /document/.test(d) || d === document ? (h.containerOffset = {
+ left: 0,
+ top: 0
+ }, h.containerPosition = {left: 0, top: 0}, h.parentData = {
+ element: e(document),
+ left: 0,
+ top: 0,
+ width: e(document).width(),
+ height: e(document).height() || document.body.parentNode.scrollHeight
+ }) : (t = e(c), i = [], e(["Top", "Right", "Left", "Bottom"]).each(function (e, s) {
+ i[e] = h._num(t.css("padding" + s))
+ }), h.containerOffset = t.offset(), h.containerPosition = t.position(), h.containerSize = {
+ height: t.innerHeight() - i[3],
+ width: t.innerWidth() - i[1]
+ }, s = h.containerOffset, n = h.containerSize.height, a = h.containerSize.width, o = h._hasScroll(c, "left") ? c.scrollWidth : a, r = h._hasScroll(c) ? c.scrollHeight : n, h.parentData = {
+ element: c,
+ left: s.left,
+ top: s.top,
+ width: o,
+ height: r
+ }))
+ }, resize: function (t) {
+ var i, s, n, a, o = e(this).resizable("instance"), r = o.options, h = o.containerOffset, l = o.position, u = o._aspectRatio || t.shiftKey, d = {
+ top: 0,
+ left: 0
+ }, c = o.containerElement, p = !0;
+ c[0] !== document && /static/.test(c.css("position")) && (d = h), l.left < (o._helper ? h.left : 0) && (o.size.width = o.size.width + (o._helper ? o.position.left - h.left : o.position.left - d.left), u && (o.size.height = o.size.width / o.aspectRatio, p = !1), o.position.left = r.helper ? h.left : 0), l.top < (o._helper ? h.top : 0) && (o.size.height = o.size.height + (o._helper ? o.position.top - h.top : o.position.top), u && (o.size.width = o.size.height * o.aspectRatio, p = !1), o.position.top = o._helper ? h.top : 0), n = o.containerElement.get(0) === o.element.parent().get(0), a = /relative|absolute/.test(o.containerElement.css("position")), n && a ? (o.offset.left = o.parentData.left + o.position.left, o.offset.top = o.parentData.top + o.position.top) : (o.offset.left = o.element.offset().left, o.offset.top = o.element.offset().top), i = Math.abs(o.sizeDiff.width + (o._helper ? o.offset.left - d.left : o.offset.left - h.left)), s = Math.abs(o.sizeDiff.height + (o._helper ? o.offset.top - d.top : o.offset.top - h.top)), i + o.size.width >= o.parentData.width && (o.size.width = o.parentData.width - i, u && (o.size.height = o.size.width / o.aspectRatio, p = !1)), s + o.size.height >= o.parentData.height && (o.size.height = o.parentData.height - s, u && (o.size.width = o.size.height * o.aspectRatio, p = !1)), p || (o.position.left = o.prevPosition.left, o.position.top = o.prevPosition.top, o.size.width = o.prevSize.width, o.size.height = o.prevSize.height)
+ }, stop: function () {
+ var t = e(this).resizable("instance"), i = t.options, s = t.containerOffset, n = t.containerPosition, a = t.containerElement, o = e(t.helper), r = o.offset(), h = o.outerWidth() - t.sizeDiff.width, l = o.outerHeight() - t.sizeDiff.height;
+ t._helper && !i.animate && /relative/.test(a.css("position")) && e(this).css({
+ left: r.left - n.left - s.left,
+ width: h,
+ height: l
+ }), t._helper && !i.animate && /static/.test(a.css("position")) && e(this).css({
+ left: r.left - n.left - s.left,
+ width: h,
+ height: l
+ })
+ }
+ }), e.ui.plugin.add("resizable", "alsoResize", {
+ start: function () {
+ var t = e(this).resizable("instance"), i = t.options;
+ e(i.alsoResize).each(function () {
+ var t = e(this);
+ t.data("ui-resizable-alsoresize", {
+ width: parseInt(t.width(), 10),
+ height: parseInt(t.height(), 10),
+ left: parseInt(t.css("left"), 10),
+ top: parseInt(t.css("top"), 10)
+ })
+ })
+ }, resize: function (t, i) {
+ var s = e(this).resizable("instance"), n = s.options, a = s.originalSize, o = s.originalPosition, r = {
+ height: s.size.height - a.height || 0,
+ width: s.size.width - a.width || 0,
+ top: s.position.top - o.top || 0,
+ left: s.position.left - o.left || 0
+ };
+ e(n.alsoResize).each(function () {
+ var t = e(this), s = e(this).data("ui-resizable-alsoresize"), n = {}, a = t.parents(i.originalElement[0]).length ? ["width", "height"] : ["width", "height", "top", "left"];
+ e.each(a, function (e, t) {
+ var i = (s[t] || 0) + (r[t] || 0);
+ i && i >= 0 && (n[t] = i || null)
+ }), t.css(n)
+ })
+ }, stop: function () {
+ e(this).removeData("resizable-alsoresize")
+ }
+ }), e.ui.plugin.add("resizable", "ghost", {
+ start: function () {
+ var t = e(this).resizable("instance"), i = t.options, s = t.size;
+ t.ghost = t.originalElement.clone(), t.ghost.css({
+ opacity: .25,
+ display: "block",
+ position: "relative",
+ height: s.height,
+ width: s.width,
+ margin: 0,
+ left: 0,
+ top: 0
+ }).addClass("ui-resizable-ghost").addClass("string" == typeof i.ghost ? i.ghost : ""), t.ghost.appendTo(t.helper)
+ }, resize: function () {
+ var t = e(this).resizable("instance");
+ t.ghost && t.ghost.css({position: "relative", height: t.size.height, width: t.size.width})
+ }, stop: function () {
+ var t = e(this).resizable("instance");
+ t.ghost && t.helper && t.helper.get(0).removeChild(t.ghost.get(0))
+ }
+ }), e.ui.plugin.add("resizable", "grid", {
+ resize: function () {
+ var t, i = e(this).resizable("instance"), s = i.options, n = i.size, a = i.originalSize, o = i.originalPosition, r = i.axis, h = "number" == typeof s.grid ? [s.grid, s.grid] : s.grid, l = h[0] || 1, u = h[1] || 1, d = Math.round((n.width - a.width) / l) * l, c = Math.round((n.height - a.height) / u) * u, p = a.width + d, f = a.height + c, m = s.maxWidth && p > s.maxWidth, g = s.maxHeight && f > s.maxHeight, v = s.minWidth && s.minWidth > p, y = s.minHeight && s.minHeight > f;
+ s.grid = h, v && (p += l), y && (f += u), m && (p -= l), g && (f -= u), /^(se|s|e)$/.test(r) ? (i.size.width = p, i.size.height = f) : /^(ne)$/.test(r) ? (i.size.width = p, i.size.height = f, i.position.top = o.top - c) : /^(sw)$/.test(r) ? (i.size.width = p, i.size.height = f, i.position.left = o.left - d) : ((0 >= f - u || 0 >= p - l) && (t = i._getPaddingPlusBorderDimensions(this)), f - u > 0 ? (i.size.height = f, i.position.top = o.top - c) : (f = u - t.height, i.size.height = f, i.position.top = o.top + a.height - f), p - l > 0 ? (i.size.width = p, i.position.left = o.left - d) : (p = l - t.width, i.size.width = p, i.position.left = o.left + a.width - p))
+ }
+ }), e.ui.resizable, e.widget("ui.selectable", e.ui.mouse, {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoRefresh: !0,
+ distance: 0,
+ filter: "*",
+ tolerance: "touch",
+ selected: null,
+ selecting: null,
+ start: null,
+ stop: null,
+ unselected: null,
+ unselecting: null
+ },
+ _create: function () {
+ var t, i = this;
+ this.element.addClass("ui-selectable"), this.dragged = !1, this.refresh = function () {
+ t = e(i.options.filter, i.element[0]), t.addClass("ui-selectee"), t.each(function () {
+ var t = e(this), i = t.offset();
+ e.data(this, "selectable-item", {
+ element: this,
+ $element: t,
+ left: i.left,
+ top: i.top,
+ right: i.left + t.outerWidth(),
+ bottom: i.top + t.outerHeight(),
+ startselected: !1,
+ selected: t.hasClass("ui-selected"),
+ selecting: t.hasClass("ui-selecting"),
+ unselecting: t.hasClass("ui-unselecting")
+ })
+ })
+ }, this.refresh(), this.selectees = t.addClass("ui-selectee"), this._mouseInit(), this.helper = e("<div class='ui-selectable-helper'></div>")
+ },
+ _destroy: function () {
+ this.selectees.removeClass("ui-selectee").removeData("selectable-item"), this.element.removeClass("ui-selectable ui-selectable-disabled"), this._mouseDestroy()
+ },
+ _mouseStart: function (t) {
+ var i = this, s = this.options;
+ this.opos = [t.pageX, t.pageY], this.options.disabled || (this.selectees = e(s.filter, this.element[0]), this._trigger("start", t), e(s.appendTo).append(this.helper), this.helper.css({
+ left: t.pageX,
+ top: t.pageY,
+ width: 0,
+ height: 0
+ }), s.autoRefresh && this.refresh(), this.selectees.filter(".ui-selected").each(function () {
+ var s = e.data(this, "selectable-item");
+ s.startselected = !0, t.metaKey || t.ctrlKey || (s.$element.removeClass("ui-selected"), s.selected = !1, s.$element.addClass("ui-unselecting"), s.unselecting = !0, i._trigger("unselecting", t, {unselecting: s.element}))
+ }), e(t.target).parents().addBack().each(function () {
+ var s, n = e.data(this, "selectable-item");
+ return n ? (s = !t.metaKey && !t.ctrlKey || !n.$element.hasClass("ui-selected"), n.$element.removeClass(s ? "ui-unselecting" : "ui-selected").addClass(s ? "ui-selecting" : "ui-unselecting"), n.unselecting = !s, n.selecting = s, n.selected = s, s ? i._trigger("selecting", t, {selecting: n.element}) : i._trigger("unselecting", t, {unselecting: n.element}), !1) : void 0
+ }))
+ },
+ _mouseDrag: function (t) {
+ if (this.dragged = !0, !this.options.disabled) {
+ var i, s = this, n = this.options, a = this.opos[0], o = this.opos[1], r = t.pageX, h = t.pageY;
+ return a > r && (i = r, r = a, a = i), o > h && (i = h, h = o, o = i), this.helper.css({
+ left: a,
+ top: o,
+ width: r - a,
+ height: h - o
+ }), this.selectees.each(function () {
+ var i = e.data(this, "selectable-item"), l = !1;
+ i && i.element !== s.element[0] && ("touch" === n.tolerance ? l = !(i.left > r || a > i.right || i.top > h || o > i.bottom) : "fit" === n.tolerance && (l = i.left > a && r > i.right && i.top > o && h > i.bottom), l ? (i.selected && (i.$element.removeClass("ui-selected"), i.selected = !1), i.unselecting && (i.$element.removeClass("ui-unselecting"), i.unselecting = !1), i.selecting || (i.$element.addClass("ui-selecting"), i.selecting = !0, s._trigger("selecting", t, {selecting: i.element}))) : (i.selecting && ((t.metaKey || t.ctrlKey) && i.startselected ? (i.$element.removeClass("ui-selecting"), i.selecting = !1, i.$element.addClass("ui-selected"), i.selected = !0) : (i.$element.removeClass("ui-selecting"), i.selecting = !1, i.startselected && (i.$element.addClass("ui-unselecting"), i.unselecting = !0), s._trigger("unselecting", t, {unselecting: i.element}))), i.selected && (t.metaKey || t.ctrlKey || i.startselected || (i.$element.removeClass("ui-selected"), i.selected = !1, i.$element.addClass("ui-unselecting"), i.unselecting = !0, s._trigger("unselecting", t, {unselecting: i.element})))))
+ }), !1
+ }
+ },
+ _mouseStop: function (t) {
+ var i = this;
+ return this.dragged = !1, e(".ui-unselecting", this.element[0]).each(function () {
+ var s = e.data(this, "selectable-item");
+ s.$element.removeClass("ui-unselecting"), s.unselecting = !1, s.startselected = !1, i._trigger("unselected", t, {unselected: s.element})
+ }), e(".ui-selecting", this.element[0]).each(function () {
+ var s = e.data(this, "selectable-item");
+ s.$element.removeClass("ui-selecting").addClass("ui-selected"), s.selecting = !1, s.selected = !0, s.startselected = !0, i._trigger("selected", t, {selected: s.element})
+ }), this._trigger("stop", t), this.helper.remove(), !1
+ }
+ }), e.widget("ui.sortable", e.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "sort",
+ ready: !1,
+ options: {
+ appendTo: "parent",
+ axis: !1,
+ connectWith: !1,
+ containment: !1,
+ cursor: "auto",
+ cursorAt: !1,
+ dropOnEmpty: !0,
+ forcePlaceholderSize: !1,
+ forceHelperSize: !1,
+ grid: !1,
+ handle: !1,
+ helper: "original",
+ items: "> *",
+ opacity: !1,
+ placeholder: !1,
+ revert: !1,
+ scroll: !0,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1e3,
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+ _isOverAxis: function (e, t, i) {
+ return e >= t && t + i > e
+ },
+ _isFloating: function (e) {
+ return /left|right/.test(e.css("float")) || /inline|table-cell/.test(e.css("display"))
+ },
+ _create: function () {
+ this.containerCache = {}, this.element.addClass("ui-sortable"), this.refresh(), this.offset = this.element.offset(), this._mouseInit(), this._setHandleClassName(), this.ready = !0
+ },
+ _setOption: function (e, t) {
+ this._super(e, t), "handle" === e && this._setHandleClassName()
+ },
+ _setHandleClassName: function () {
+ this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"), e.each(this.items, function () {
+ (this.instance.options.handle ? this.item.find(this.instance.options.handle) : this.item).addClass("ui-sortable-handle")
+ })
+ },
+ _destroy: function () {
+ this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"), this._mouseDestroy();
+ for (var e = this.items.length - 1; e >= 0; e--)this.items[e].item.removeData(this.widgetName + "-item");
+ return this
+ },
+ _mouseCapture: function (t, i) {
+ var s = null, n = !1, a = this;
+ return this.reverting ? !1 : this.options.disabled || "static" === this.options.type ? !1 : (this._refreshItems(t), e(t.target).parents().each(function () {
+ return e.data(this, a.widgetName + "-item") === a ? (s = e(this), !1) : void 0
+ }), e.data(t.target, a.widgetName + "-item") === a && (s = e(t.target)), s ? !this.options.handle || i || (e(this.options.handle, s).find("*").addBack().each(function () {
+ this === t.target && (n = !0)
+ }), n) ? (this.currentItem = s, this._removeCurrentsFromItems(), !0) : !1 : !1)
+ },
+ _mouseStart: function (t, i, s) {
+ var n, a, o = this.options;
+ if (this.currentContainer = this, this.refreshPositions(), this.helper = this._createHelper(t), this._cacheHelperProportions(), this._cacheMargins(), this.scrollParent = this.helper.scrollParent(), this.offset = this.currentItem.offset(), this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ }, e.extend(this.offset, {
+ click: {left: t.pageX - this.offset.left, top: t.pageY - this.offset.top},
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset()
+ }), this.helper.css("position", "absolute"), this.cssPosition = this.helper.css("position"), this.originalPosition = this._generatePosition(t), this.originalPageX = t.pageX, this.originalPageY = t.pageY, o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt), this.domPosition = {
+ prev: this.currentItem.prev()[0],
+ parent: this.currentItem.parent()[0]
+ }, this.helper[0] !== this.currentItem[0] && this.currentItem.hide(), this._createPlaceholder(), o.containment && this._setContainment(), o.cursor && "auto" !== o.cursor && (a = this.document.find("body"), this.storedCursor = a.css("cursor"), a.css("cursor", o.cursor), this.storedStylesheet = e("<style>*{ cursor: " + o.cursor + " !important; }</style>").appendTo(a)), o.opacity && (this.helper.css("opacity") && (this._storedOpacity = this.helper.css("opacity")), this.helper.css("opacity", o.opacity)), o.zIndex && (this.helper.css("zIndex") && (this._storedZIndex = this.helper.css("zIndex")), this.helper.css("zIndex", o.zIndex)), this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName && (this.overflowOffset = this.scrollParent.offset()), this._trigger("start", t, this._uiHash()), this._preserveHelperProportions || this._cacheHelperProportions(), !s)for (n = this.containers.length - 1; n >= 0; n--)this.containers[n]._trigger("activate", t, this._uiHash(this));
+ return e.ui.ddmanager && (e.ui.ddmanager.current = this), e.ui.ddmanager && !o.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t), this.dragging = !0, this.helper.addClass("ui-sortable-helper"), this._mouseDrag(t), !0
+ },
+ _mouseDrag: function (t) {
+ var i, s, n, a, o = this.options, r = !1;
+ for (this.position = this._generatePosition(t), this.positionAbs = this._convertPositionTo("absolute"), this.lastPositionAbs || (this.lastPositionAbs = this.positionAbs), this.options.scroll && (this.scrollParent[0] !== this.document[0] && "HTML" !== this.scrollParent[0].tagName ? (this.overflowOffset.top + this.scrollParent[0].offsetHeight - t.pageY < o.scrollSensitivity ? this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop + o.scrollSpeed : t.pageY - this.overflowOffset.top < o.scrollSensitivity && (this.scrollParent[0].scrollTop = r = this.scrollParent[0].scrollTop - o.scrollSpeed), this.overflowOffset.left + this.scrollParent[0].offsetWidth - t.pageX < o.scrollSensitivity ? this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft + o.scrollSpeed : t.pageX - this.overflowOffset.left < o.scrollSensitivity && (this.scrollParent[0].scrollLeft = r = this.scrollParent[0].scrollLeft - o.scrollSpeed)) : (t.pageY - this.document.scrollTop() < o.scrollSensitivity ? r = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed) : this.window.height() - (t.pageY - this.document.scrollTop()) < o.scrollSensitivity && (r = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed)), t.pageX - this.document.scrollLeft() < o.scrollSensitivity ? r = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed) : this.window.width() - (t.pageX - this.document.scrollLeft()) < o.scrollSensitivity && (r = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed))), r !== !1 && e.ui.ddmanager && !o.dropBehaviour && e.ui.ddmanager.prepareOffsets(this, t)), this.positionAbs = this._convertPositionTo("absolute"), this.options.axis && "y" === this.options.axis || (this.helper[0].style.left = this.position.left + "px"), this.options.axis && "x" === this.options.axis || (this.helper[0].style.top = this.position.top + "px"), i = this.items.length - 1; i >= 0; i--)if (s = this.items[i], n = s.item[0], a = this._intersectsWithPointer(s), a && s.instance === this.currentContainer && n !== this.currentItem[0] && this.placeholder[1 === a ? "next" : "prev"]()[0] !== n && !e.contains(this.placeholder[0], n) && ("semi-dynamic" === this.options.type ? !e.contains(this.element[0], n) : !0)) {
+ if (this.direction = 1 === a ? "down" : "up", "pointer" !== this.options.tolerance && !this._intersectsWithSides(s))break;
+ this._rearrange(t, s), this._trigger("change", t, this._uiHash());
+ break
+ }
+ return this._contactContainers(t), e.ui.ddmanager && e.ui.ddmanager.drag(this, t), this._trigger("sort", t, this._uiHash()), this.lastPositionAbs = this.positionAbs, !1
+ },
+ _mouseStop: function (t, i) {
+ if (t) {
+ if (e.ui.ddmanager && !this.options.dropBehaviour && e.ui.ddmanager.drop(this, t), this.options.revert) {
+ var s = this, n = this.placeholder.offset(), a = this.options.axis, o = {};
+ a && "x" !== a || (o.left = n.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft)), a && "y" !== a || (o.top = n.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop)), this.reverting = !0, e(this.helper).animate(o, parseInt(this.options.revert, 10) || 500, function () {
+ s._clear(t)
+ })
+ } else this._clear(t, i);
+ return !1
+ }
+ },
+ cancel: function () {
+ if (this.dragging) {
+ this._mouseUp({target: null}), "original" === this.options.helper ? this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper") : this.currentItem.show();
+ for (var t = this.containers.length - 1; t >= 0; t--)this.containers[t]._trigger("deactivate", null, this._uiHash(this)), this.containers[t].containerCache.over && (this.containers[t]._trigger("out", null, this._uiHash(this)), this.containers[t].containerCache.over = 0)
+ }
+ return this.placeholder && (this.placeholder[0].parentNode && this.placeholder[0].parentNode.removeChild(this.placeholder[0]), "original" !== this.options.helper && this.helper && this.helper[0].parentNode && this.helper.remove(), e.extend(this, {
+ helper: null,
+ dragging: !1,
+ reverting: !1,
+ _noFinalSort: null
+ }), this.domPosition.prev ? e(this.domPosition.prev).after(this.currentItem) : e(this.domPosition.parent).prepend(this.currentItem)), this
+ },
+ serialize: function (t) {
+ var i = this._getItemsAsjQuery(t && t.connected), s = [];
+ return t = t || {}, e(i).each(function () {
+ var i = (e(t.item || this).attr(t.attribute || "id") || "").match(t.expression || /(.+)[\-=_](.+)/);
+ i && s.push((t.key || i[1] + "[]") + "=" + (t.key && t.expression ? i[1] : i[2]))
+ }), !s.length && t.key && s.push(t.key + "="), s.join("&")
+ },
+ toArray: function (t) {
+ var i = this._getItemsAsjQuery(t && t.connected), s = [];
+ return t = t || {}, i.each(function () {
+ s.push(e(t.item || this).attr(t.attribute || "id") || "")
+ }), s
+ },
+ _intersectsWith: function (e) {
+ var t = this.positionAbs.left, i = t + this.helperProportions.width, s = this.positionAbs.top, n = s + this.helperProportions.height, a = e.left, o = a + e.width, r = e.top, h = r + e.height, l = this.offset.click.top, u = this.offset.click.left, d = "x" === this.options.axis || s + l > r && h > s + l, c = "y" === this.options.axis || t + u > a && o > t + u, p = d && c;
+ return "pointer" === this.options.tolerance || this.options.forcePointerForContainers || "pointer" !== this.options.tolerance && this.helperProportions[this.floating ? "width" : "height"] > e[this.floating ? "width" : "height"] ? p : t + this.helperProportions.width / 2 > a && o > i - this.helperProportions.width / 2 && s + this.helperProportions.height / 2 > r && h > n - this.helperProportions.height / 2
+ },
+ _intersectsWithPointer: function (e) {
+ var t = "x" === this.options.axis || this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top, e.height), i = "y" === this.options.axis || this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left, e.width), s = t && i, n = this._getDragVerticalDirection(), a = this._getDragHorizontalDirection();
+ return s ? this.floating ? a && "right" === a || "down" === n ? 2 : 1 : n && ("down" === n ? 2 : 1) : !1
+ },
+ _intersectsWithSides: function (e) {
+ var t = this._isOverAxis(this.positionAbs.top + this.offset.click.top, e.top + e.height / 2, e.height), i = this._isOverAxis(this.positionAbs.left + this.offset.click.left, e.left + e.width / 2, e.width), s = this._getDragVerticalDirection(), n = this._getDragHorizontalDirection();
+ return this.floating && n ? "right" === n && i || "left" === n && !i : s && ("down" === s && t || "up" === s && !t)
+ },
+ _getDragVerticalDirection: function () {
+ var e = this.positionAbs.top - this.lastPositionAbs.top;
+ return 0 !== e && (e > 0 ? "down" : "up")
+ },
+ _getDragHorizontalDirection: function () {
+ var e = this.positionAbs.left - this.lastPositionAbs.left;
+ return 0 !== e && (e > 0 ? "right" : "left")
+ },
+ refresh: function (e) {
+ return this._refreshItems(e), this._setHandleClassName(), this.refreshPositions(), this
+ },
+ _connectWith: function () {
+ var e = this.options;
+ return e.connectWith.constructor === String ? [e.connectWith] : e.connectWith
+ },
+ _getItemsAsjQuery: function (t) {
+ function i() {
+ r.push(this)
+ }
+
+ var s, n, a, o, r = [], h = [], l = this._connectWith();
+ if (l && t)for (s = l.length - 1; s >= 0; s--)for (a = e(l[s], this.document[0]), n = a.length - 1; n >= 0; n--)o = e.data(a[n], this.widgetFullName), o && o !== this && !o.options.disabled && h.push([e.isFunction(o.options.items) ? o.options.items.call(o.element) : e(o.options.items, o.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), o]);
+ for (h.push([e.isFunction(this.options.items) ? this.options.items.call(this.element, null, {
+ options: this.options,
+ item: this.currentItem
+ }) : e(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]), s = h.length - 1; s >= 0; s--)h[s][0].each(i);
+ return e(r)
+ },
+ _removeCurrentsFromItems: function () {
+ var t = this.currentItem.find(":data(" + this.widgetName + "-item)");
+ this.items = e.grep(this.items, function (e) {
+ for (var i = 0; t.length > i; i++)if (t[i] === e.item[0])return !1;
+ return !0
+ })
+ },
+ _refreshItems: function (t) {
+ this.items = [], this.containers = [this];
+ var i, s, n, a, o, r, h, l, u = this.items, d = [[e.isFunction(this.options.items) ? this.options.items.call(this.element[0], t, {item: this.currentItem}) : e(this.options.items, this.element), this]], c = this._connectWith();
+ if (c && this.ready)for (i = c.length - 1; i >= 0; i--)for (n = e(c[i], this.document[0]), s = n.length - 1; s >= 0; s--)a = e.data(n[s], this.widgetFullName), a && a !== this && !a.options.disabled && (d.push([e.isFunction(a.options.items) ? a.options.items.call(a.element[0], t, {item: this.currentItem}) : e(a.options.items, a.element), a]), this.containers.push(a));
+ for (i = d.length - 1; i >= 0; i--)for (o = d[i][1], r = d[i][0], s = 0, l = r.length; l > s; s++)h = e(r[s]), h.data(this.widgetName + "-item", o), u.push({
+ item: h,
+ instance: o,
+ width: 0,
+ height: 0,
+ left: 0,
+ top: 0
+ })
+ },
+ refreshPositions: function (t) {
+ this.floating = this.items.length ? "x" === this.options.axis || this._isFloating(this.items[0].item) : !1, this.offsetParent && this.helper && (this.offset.parent = this._getParentOffset());
+ var i, s, n, a;
+ for (i = this.items.length - 1; i >= 0; i--)s = this.items[i], s.instance !== this.currentContainer && this.currentContainer && s.item[0] !== this.currentItem[0] || (n = this.options.toleranceElement ? e(this.options.toleranceElement, s.item) : s.item, t || (s.width = n.outerWidth(), s.height = n.outerHeight()), a = n.offset(), s.left = a.left, s.top = a.top);
+ if (this.options.custom && this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this); else for (i = this.containers.length - 1; i >= 0; i--)a = this.containers[i].element.offset(), this.containers[i].containerCache.left = a.left, this.containers[i].containerCache.top = a.top, this.containers[i].containerCache.width = this.containers[i].element.outerWidth(), this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ return this
+ },
+ _createPlaceholder: function (t) {
+ t = t || this;
+ var i, s = t.options;
+ s.placeholder && s.placeholder.constructor !== String || (i = s.placeholder, s.placeholder = {
+ element: function () {
+ var s = t.currentItem[0].nodeName.toLowerCase(), n = e("<" + s + ">", t.document[0]).addClass(i || t.currentItem[0].className + " ui-sortable-placeholder").removeClass("ui-sortable-helper");
+ return "tbody" === s ? t._createTrPlaceholder(t.currentItem.find("tr").eq(0), e("<tr>", t.document[0]).appendTo(n)) : "tr" === s ? t._createTrPlaceholder(t.currentItem, n) : "img" === s && n.attr("src", t.currentItem.attr("src")), i || n.css("visibility", "hidden"), n
+ }, update: function (e, n) {
+ (!i || s.forcePlaceholderSize) && (n.height() || n.height(t.currentItem.innerHeight() - parseInt(t.currentItem.css("paddingTop") || 0, 10) - parseInt(t.currentItem.css("paddingBottom") || 0, 10)), n.width() || n.width(t.currentItem.innerWidth() - parseInt(t.currentItem.css("paddingLeft") || 0, 10) - parseInt(t.currentItem.css("paddingRight") || 0, 10)))
+ }
+ }), t.placeholder = e(s.placeholder.element.call(t.element, t.currentItem)), t.currentItem.after(t.placeholder), s.placeholder.update(t, t.placeholder)
+ },
+ _createTrPlaceholder: function (t, i) {
+ var s = this;
+ t.children().each(function () {
+ e("<td>&#160;</td>", s.document[0]).attr("colspan", e(this).attr("colspan") || 1).appendTo(i)
+ })
+ },
+ _contactContainers: function (t) {
+ var i, s, n, a, o, r, h, l, u, d, c = null, p = null;
+ for (i = this.containers.length - 1; i >= 0; i--)if (!e.contains(this.currentItem[0], this.containers[i].element[0]))if (this._intersectsWith(this.containers[i].containerCache)) {
+ if (c && e.contains(this.containers[i].element[0], c.element[0]))continue;
+ c = this.containers[i], p = i
+ } else this.containers[i].containerCache.over && (this.containers[i]._trigger("out", t, this._uiHash(this)), this.containers[i].containerCache.over = 0);
+ if (c)if (1 === this.containers.length)this.containers[p].containerCache.over || (this.containers[p]._trigger("over", t, this._uiHash(this)), this.containers[p].containerCache.over = 1); else {
+ for (n = 1e4, a = null, u = c.floating || this._isFloating(this.currentItem), o = u ? "left" : "top", r = u ? "width" : "height", d = u ? "clientX" : "clientY", s = this.items.length - 1; s >= 0; s--)e.contains(this.containers[p].element[0], this.items[s].item[0]) && this.items[s].item[0] !== this.currentItem[0] && (h = this.items[s].item.offset()[o], l = !1, t[d] - h > this.items[s][r] / 2 && (l = !0), n > Math.abs(t[d] - h) && (n = Math.abs(t[d] - h), a = this.items[s], this.direction = l ? "up" : "down"));
+ if (!a && !this.options.dropOnEmpty)return;
+ if (this.currentContainer === this.containers[p])return this.currentContainer.containerCache.over || (this.containers[p]._trigger("over", t, this._uiHash()), this.currentContainer.containerCache.over = 1), void 0;
+ a ? this._rearrange(t, a, null, !0) : this._rearrange(t, null, this.containers[p].element, !0), this._trigger("change", t, this._uiHash()), this.containers[p]._trigger("change", t, this._uiHash(this)), this.currentContainer = this.containers[p], this.options.placeholder.update(this.currentContainer, this.placeholder), this.containers[p]._trigger("over", t, this._uiHash(this)), this.containers[p].containerCache.over = 1
+ }
+ },
+ _createHelper: function (t) {
+ var i = this.options, s = e.isFunction(i.helper) ? e(i.helper.apply(this.element[0], [t, this.currentItem])) : "clone" === i.helper ? this.currentItem.clone() : this.currentItem;
+ return s.parents("body").length || e("parent" !== i.appendTo ? i.appendTo : this.currentItem[0].parentNode)[0].appendChild(s[0]), s[0] === this.currentItem[0] && (this._storedCSS = {
+ width: this.currentItem[0].style.width,
+ height: this.currentItem[0].style.height,
+ position: this.currentItem.css("position"),
+ top: this.currentItem.css("top"),
+ left: this.currentItem.css("left")
+ }), (!s[0].style.width || i.forceHelperSize) && s.width(this.currentItem.width()), (!s[0].style.height || i.forceHelperSize) && s.height(this.currentItem.height()), s
+ },
+ _adjustOffsetFromHelper: function (t) {
+ "string" == typeof t && (t = t.split(" ")), e.isArray(t) && (t = {
+ left: +t[0],
+ top: +t[1] || 0
+ }), "left"in t && (this.offset.click.left = t.left + this.margins.left), "right"in t && (this.offset.click.left = this.helperProportions.width - t.right + this.margins.left), "top"in t && (this.offset.click.top = t.top + this.margins.top), "bottom"in t && (this.offset.click.top = this.helperProportions.height - t.bottom + this.margins.top)
+ },
+ _getParentOffset: function () {
+ this.offsetParent = this.helper.offsetParent();
+ var t = this.offsetParent.offset();
+ return "absolute" === this.cssPosition && this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) && (t.left += this.scrollParent.scrollLeft(), t.top += this.scrollParent.scrollTop()), (this.offsetParent[0] === this.document[0].body || this.offsetParent[0].tagName && "html" === this.offsetParent[0].tagName.toLowerCase() && e.ui.ie) && (t = {
+ top: 0,
+ left: 0
+ }), {
+ top: t.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+ left: t.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+ }
+ },
+ _getRelativeOffset: function () {
+ if ("relative" === this.cssPosition) {
+ var e = this.currentItem.position();
+ return {
+ top: e.top - (parseInt(this.helper.css("top"), 10) || 0) + this.scrollParent.scrollTop(),
+ left: e.left - (parseInt(this.helper.css("left"), 10) || 0) + this.scrollParent.scrollLeft()
+ }
+ }
+ return {top: 0, left: 0}
+ },
+ _cacheMargins: function () {
+ this.margins = {
+ left: parseInt(this.currentItem.css("marginLeft"), 10) || 0,
+ top: parseInt(this.currentItem.css("marginTop"), 10) || 0
+ }
+ },
+ _cacheHelperProportions: function () {
+ this.helperProportions = {width: this.helper.outerWidth(), height: this.helper.outerHeight()}
+ },
+ _setContainment: function () {
+ var t, i, s, n = this.options;
+ "parent" === n.containment && (n.containment = this.helper[0].parentNode), ("document" === n.containment || "window" === n.containment) && (this.containment = [0 - this.offset.relative.left - this.offset.parent.left, 0 - this.offset.relative.top - this.offset.parent.top, "document" === n.containment ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left, ("document" === n.containment ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top]), /^(document|window|parent)$/.test(n.containment) || (t = e(n.containment)[0], i = e(n.containment).offset(), s = "hidden" !== e(t).css("overflow"), this.containment = [i.left + (parseInt(e(t).css("borderLeftWidth"), 10) || 0) + (parseInt(e(t).css("paddingLeft"), 10) || 0) - this.margins.left, i.top + (parseInt(e(t).css("borderTopWidth"), 10) || 0) + (parseInt(e(t).css("paddingTop"), 10) || 0) - this.margins.top, i.left + (s ? Math.max(t.scrollWidth, t.offsetWidth) : t.offsetWidth) - (parseInt(e(t).css("borderLeftWidth"), 10) || 0) - (parseInt(e(t).css("paddingRight"), 10) || 0) - this.helperProportions.width - this.margins.left, i.top + (s ? Math.max(t.scrollHeight, t.offsetHeight) : t.offsetHeight) - (parseInt(e(t).css("borderTopWidth"), 10) || 0) - (parseInt(e(t).css("paddingBottom"), 10) || 0) - this.helperProportions.height - this.margins.top])
+ },
+ _convertPositionTo: function (t, i) {
+ i || (i = this.position);
+ var s = "absolute" === t ? 1 : -1, n = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent, a = /(html|body)/i.test(n[0].tagName);
+ return {
+ top: i.top + this.offset.relative.top * s + this.offset.parent.top * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : a ? 0 : n.scrollTop()) * s,
+ left: i.left + this.offset.relative.left * s + this.offset.parent.left * s - ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : a ? 0 : n.scrollLeft()) * s
+ }
+ },
+ _generatePosition: function (t) {
+ var i, s, n = this.options, a = t.pageX, o = t.pageY, r = "absolute" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && e.contains(this.scrollParent[0], this.offsetParent[0]) ? this.scrollParent : this.offsetParent, h = /(html|body)/i.test(r[0].tagName);
+ return "relative" !== this.cssPosition || this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0] || (this.offset.relative = this._getRelativeOffset()), this.originalPosition && (this.containment && (t.pageX - this.offset.click.left < this.containment[0] && (a = this.containment[0] + this.offset.click.left), t.pageY - this.offset.click.top < this.containment[1] && (o = this.containment[1] + this.offset.click.top), t.pageX - this.offset.click.left > this.containment[2] && (a = this.containment[2] + this.offset.click.left), t.pageY - this.offset.click.top > this.containment[3] && (o = this.containment[3] + this.offset.click.top)), n.grid && (i = this.originalPageY + Math.round((o - this.originalPageY) / n.grid[1]) * n.grid[1], o = this.containment ? i - this.offset.click.top >= this.containment[1] && i - this.offset.click.top <= this.containment[3] ? i : i - this.offset.click.top >= this.containment[1] ? i - n.grid[1] : i + n.grid[1] : i, s = this.originalPageX + Math.round((a - this.originalPageX) / n.grid[0]) * n.grid[0], a = this.containment ? s - this.offset.click.left >= this.containment[0] && s - this.offset.click.left <= this.containment[2] ? s : s - this.offset.click.left >= this.containment[0] ? s - n.grid[0] : s + n.grid[0] : s)), {
+ top: o - this.offset.click.top - this.offset.relative.top - this.offset.parent.top + ("fixed" === this.cssPosition ? -this.scrollParent.scrollTop() : h ? 0 : r.scrollTop()),
+ left: a - this.offset.click.left - this.offset.relative.left - this.offset.parent.left + ("fixed" === this.cssPosition ? -this.scrollParent.scrollLeft() : h ? 0 : r.scrollLeft())
+ }
+ },
+ _rearrange: function (e, t, i, s) {
+ i ? i[0].appendChild(this.placeholder[0]) : t.item[0].parentNode.insertBefore(this.placeholder[0], "down" === this.direction ? t.item[0] : t.item[0].nextSibling), this.counter = this.counter ? ++this.counter : 1;
+ var n = this.counter;
+ this._delay(function () {
+ n === this.counter && this.refreshPositions(!s)
+ })
+ },
+ _clear: function (e, t) {
+ function i(e, t, i) {
+ return function (s) {
+ i._trigger(e, s, t._uiHash(t))
+ }
+ }
+
+ this.reverting = !1;
+ var s, n = [];
+ if (!this._noFinalSort && this.currentItem.parent().length && this.placeholder.before(this.currentItem), this._noFinalSort = null, this.helper[0] === this.currentItem[0]) {
+ for (s in this._storedCSS)("auto" === this._storedCSS[s] || "static" === this._storedCSS[s]) && (this._storedCSS[s] = "");
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")
+ } else this.currentItem.show();
+ for (this.fromOutside && !t && n.push(function (e) {
+ this._trigger("receive", e, this._uiHash(this.fromOutside))
+ }), !this.fromOutside && this.domPosition.prev === this.currentItem.prev().not(".ui-sortable-helper")[0] && this.domPosition.parent === this.currentItem.parent()[0] || t || n.push(function (e) {
+ this._trigger("update", e, this._uiHash())
+ }), this !== this.currentContainer && (t || (n.push(function (e) {
+ this._trigger("remove", e, this._uiHash())
+ }), n.push(function (e) {
+ return function (t) {
+ e._trigger("receive", t, this._uiHash(this))
+ }
+ }.call(this, this.currentContainer)), n.push(function (e) {
+ return function (t) {
+ e._trigger("update", t, this._uiHash(this))
+ }
+ }.call(this, this.currentContainer)))), s = this.containers.length - 1; s >= 0; s--)t || n.push(i("deactivate", this, this.containers[s])), this.containers[s].containerCache.over && (n.push(i("out", this, this.containers[s])), this.containers[s].containerCache.over = 0);
+ if (this.storedCursor && (this.document.find("body").css("cursor", this.storedCursor), this.storedStylesheet.remove()), this._storedOpacity && this.helper.css("opacity", this._storedOpacity), this._storedZIndex && this.helper.css("zIndex", "auto" === this._storedZIndex ? "" : this._storedZIndex), this.dragging = !1, t || this._trigger("beforeStop", e, this._uiHash()), this.placeholder[0].parentNode.removeChild(this.placeholder[0]), this.cancelHelperRemoval || (this.helper[0] !== this.currentItem[0] && this.helper.remove(), this.helper = null), !t) {
+ for (s = 0; n.length > s; s++)n[s].call(this, e);
+ this._trigger("stop", e, this._uiHash())
+ }
+ return this.fromOutside = !1, !this.cancelHelperRemoval
+ },
+ _trigger: function () {
+ e.Widget.prototype._trigger.apply(this, arguments) === !1 && this.cancel()
+ },
+ _uiHash: function (t) {
+ var i = t || this;
+ return {
+ helper: i.helper,
+ placeholder: i.placeholder || e([]),
+ position: i.position,
+ originalPosition: i.originalPosition,
+ offset: i.positionAbs,
+ item: i.currentItem,
+ sender: t ? t.element : null
+ }
+ }
+ }), e.widget("ui.accordion", {
+ version: "1.11.4",
+ options: {
+ active: 0,
+ animate: {},
+ collapsible: !1,
+ event: "click",
+ header: "> li > :first-child,> :not(li):even",
+ heightStyle: "auto",
+ icons: {activeHeader: "ui-icon-triangle-1-s", header: "ui-icon-triangle-1-e"},
+ activate: null,
+ beforeActivate: null
+ },
+ hideProps: {
+ borderTopWidth: "hide",
+ borderBottomWidth: "hide",
+ paddingTop: "hide",
+ paddingBottom: "hide",
+ height: "hide"
+ },
+ showProps: {
+ borderTopWidth: "show",
+ borderBottomWidth: "show",
+ paddingTop: "show",
+ paddingBottom: "show",
+ height: "show"
+ },
+ _create: function () {
+ var t = this.options;
+ this.prevShow = this.prevHide = e(), this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role", "tablist"), t.collapsible || t.active !== !1 && null != t.active || (t.active = 0), this._processPanels(), 0 > t.active && (t.active += this.headers.length), this._refresh()
+ },
+ _getCreateEventData: function () {
+ return {header: this.active, panel: this.active.length ? this.active.next() : e()}
+ },
+ _createIcons: function () {
+ var t = this.options.icons;
+ t && (e("<span>").addClass("ui-accordion-header-icon ui-icon " + t.header).prependTo(this.headers), this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader), this.headers.addClass("ui-accordion-icons"))
+ },
+ _destroyIcons: function () {
+ this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()
+ },
+ _destroy: function () {
+ var e;
+ this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"), this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(), this._destroyIcons(), e = this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display", "").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(), "content" !== this.options.heightStyle && e.css("height", "")
+ },
+ _setOption: function (e, t) {
+ return "active" === e ? (this._activate(t), void 0) : ("event" === e && (this.options.event && this._off(this.headers, this.options.event), this._setupEvents(t)), this._super(e, t), "collapsible" !== e || t || this.options.active !== !1 || this._activate(0), "icons" === e && (this._destroyIcons(), t && this._createIcons()), "disabled" === e && (this.element.toggleClass("ui-state-disabled", !!t).attr("aria-disabled", t), this.headers.add(this.headers.next()).toggleClass("ui-state-disabled", !!t)), void 0)
+ },
+ _keydown: function (t) {
+ if (!t.altKey && !t.ctrlKey) {
+ var i = e.ui.keyCode, s = this.headers.length, n = this.headers.index(t.target), a = !1;
+ switch (t.keyCode) {
+ case i.RIGHT:
+ case i.DOWN:
+ a = this.headers[(n + 1) % s];
+ break;
+ case i.LEFT:
+ case i.UP:
+ a = this.headers[(n - 1 + s) % s];
+ break;
+ case i.SPACE:
+ case i.ENTER:
+ this._eventHandler(t);
+ break;
+ case i.HOME:
+ a = this.headers[0];
+ break;
+ case i.END:
+ a = this.headers[s - 1]
+ }
+ a && (e(t.target).attr("tabIndex", -1), e(a).attr("tabIndex", 0), a.focus(), t.preventDefault())
+ }
+ },
+ _panelKeyDown: function (t) {
+ t.keyCode === e.ui.keyCode.UP && t.ctrlKey && e(t.currentTarget).prev().focus()
+ },
+ refresh: function () {
+ var t = this.options;
+ this._processPanels(), t.active === !1 && t.collapsible === !0 || !this.headers.length ? (t.active = !1, this.active = e()) : t.active === !1 ? this._activate(0) : this.active.length && !e.contains(this.element[0], this.active[0]) ? this.headers.length === this.headers.find(".ui-state-disabled").length ? (t.active = !1, this.active = e()) : this._activate(Math.max(0, t.active - 1)) : t.active = this.headers.index(this.active), this._destroyIcons(), this._refresh()
+ },
+ _processPanels: function () {
+ var e = this.headers, t = this.panels;
+ this.headers = this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"), this.panels = this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(), t && (this._off(e.not(this.headers)), this._off(t.not(this.panels)))
+ },
+ _refresh: function () {
+ var t, i = this.options, s = i.heightStyle, n = this.element.parent();
+ this.active = this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"), this.active.next().addClass("ui-accordion-content-active").show(), this.headers.attr("role", "tab").each(function () {
+ var t = e(this), i = t.uniqueId().attr("id"), s = t.next(), n = s.uniqueId().attr("id");
+ t.attr("aria-controls", n), s.attr("aria-labelledby", i)
+ }).next().attr("role", "tabpanel"), this.headers.not(this.active).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ }).next().attr({"aria-hidden": "true"}).hide(), this.active.length ? this.active.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ }).next().attr({"aria-hidden": "false"}) : this.headers.eq(0).attr("tabIndex", 0), this._createIcons(), this._setupEvents(i.event), "fill" === s ? (t = n.height(), this.element.siblings(":visible").each(function () {
+ var i = e(this), s = i.css("position");
+ "absolute" !== s && "fixed" !== s && (t -= i.outerHeight(!0))
+ }), this.headers.each(function () {
+ t -= e(this).outerHeight(!0)
+ }), this.headers.next().each(function () {
+ e(this).height(Math.max(0, t - e(this).innerHeight() + e(this).height()))
+ }).css("overflow", "auto")) : "auto" === s && (t = 0, this.headers.next().each(function () {
+ t = Math.max(t, e(this).css("height", "").height())
+ }).height(t))
+ },
+ _activate: function (t) {
+ var i = this._findActive(t)[0];
+ i !== this.active[0] && (i = i || this.active[0], this._eventHandler({
+ target: i,
+ currentTarget: i,
+ preventDefault: e.noop
+ }))
+ },
+ _findActive: function (t) {
+ return "number" == typeof t ? this.headers.eq(t) : e()
+ },
+ _setupEvents: function (t) {
+ var i = {keydown: "_keydown"};
+ t && e.each(t.split(" "), function (e, t) {
+ i[t] = "_eventHandler"
+ }), this._off(this.headers.add(this.headers.next())), this._on(this.headers, i), this._on(this.headers.next(), {keydown: "_panelKeyDown"}), this._hoverable(this.headers), this._focusable(this.headers)
+ },
+ _eventHandler: function (t) {
+ var i = this.options, s = this.active, n = e(t.currentTarget), a = n[0] === s[0], o = a && i.collapsible, r = o ? e() : n.next(), h = s.next(), l = {
+ oldHeader: s,
+ oldPanel: h,
+ newHeader: o ? e() : n,
+ newPanel: r
+ };
+ t.preventDefault(), a && !i.collapsible || this._trigger("beforeActivate", t, l) === !1 || (i.active = o ? !1 : this.headers.index(n), this.active = a ? e() : n, this._toggle(l), s.removeClass("ui-accordion-header-active ui-state-active"), i.icons && s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header), a || (n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"), i.icons && n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader), n.next().addClass("ui-accordion-content-active")))
+ },
+ _toggle: function (t) {
+ var i = t.newPanel, s = this.prevShow.length ? this.prevShow : t.oldPanel;
+ this.prevShow.add(this.prevHide).stop(!0, !0), this.prevShow = i, this.prevHide = s, this.options.animate ? this._animate(i, s, t) : (s.hide(), i.show(), this._toggleComplete(t)), s.attr({"aria-hidden": "true"}), s.prev().attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ }), i.length && s.length ? s.prev().attr({
+ tabIndex: -1,
+ "aria-expanded": "false"
+ }) : i.length && this.headers.filter(function () {
+ return 0 === parseInt(e(this).attr("tabIndex"), 10)
+ }).attr("tabIndex", -1), i.attr("aria-hidden", "false").prev().attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ },
+ _animate: function (e, t, i) {
+ var s, n, a, o = this, r = 0, h = e.css("box-sizing"), l = e.length && (!t.length || e.index() < t.index()), u = this.options.animate || {}, d = l && u.down || u, c = function () {
+ o._toggleComplete(i)
+ };
+ return "number" == typeof d && (a = d), "string" == typeof d && (n = d), n = n || d.easing || u.easing, a = a || d.duration || u.duration, t.length ? e.length ? (s = e.show().outerHeight(), t.animate(this.hideProps, {
+ duration: a,
+ easing: n,
+ step: function (e, t) {
+ t.now = Math.round(e)
+ }
+ }), e.hide().animate(this.showProps, {
+ duration: a, easing: n, complete: c, step: function (e, i) {
+ i.now = Math.round(e), "height" !== i.prop ? "content-box" === h && (r += i.now) : "content" !== o.options.heightStyle && (i.now = Math.round(s - t.outerHeight() - r), r = 0)
+ }
+ }), void 0) : t.animate(this.hideProps, a, n, c) : e.animate(this.showProps, a, n, c)
+ },
+ _toggleComplete: function (e) {
+ var t = e.oldPanel;
+ t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"), t.length && (t.parent()[0].className = t.parent()[0].className), this._trigger("activate", null, e)
+ }
+ }), e.widget("ui.menu", {
+ version: "1.11.4",
+ defaultElement: "<ul>",
+ delay: 300,
+ options: {
+ icons: {submenu: "ui-icon-carat-1-e"},
+ items: "> *",
+ menus: "ul",
+ position: {my: "left-1 top", at: "right top"},
+ role: "menu",
+ blur: null,
+ focus: null,
+ select: null
+ },
+ _create: function () {
+ this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length).attr({
+ role: this.options.role,
+ tabIndex: 0
+ }), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({
+ "mousedown .ui-menu-item": function (e) {
+ e.preventDefault()
+ }, "click .ui-menu-item": function (t) {
+ var i = e(t.target);
+ !this.mouseHandled && i.not(".ui-state-disabled").length && (this.select(t), t.isPropagationStopped() || (this.mouseHandled = !0), i.has(".ui-menu").length ? this.expand(t) : !this.element.is(":focus") && e(this.document[0].activeElement).closest(".ui-menu").length && (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
+ }, "mouseenter .ui-menu-item": function (t) {
+ if (!this.previousFilter) {
+ var i = e(t.currentTarget);
+ i.siblings(".ui-state-active").removeClass("ui-state-active"), this.focus(t, i)
+ }
+ }, mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function (e, t) {
+ var i = this.active || this.element.find(this.options.items).eq(0);
+ t || this.focus(e, i)
+ }, blur: function (t) {
+ this._delay(function () {
+ e.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(t)
+ })
+ }, keydown: "_keydown"
+ }), this.refresh(), this._on(this.document, {
+ click: function (e) {
+ this._closeOnDocumentClick(e) && this.collapseAll(e), this.mouseHandled = !1
+ }
+ })
+ },
+ _destroy: function () {
+ this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function () {
+ var t = e(this);
+ t.data("ui-menu-submenu-carat") && t.remove()
+ }), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
+ },
+ _keydown: function (t) {
+ var i, s, n, a, o = !0;
+ switch (t.keyCode) {
+ case e.ui.keyCode.PAGE_UP:
+ this.previousPage(t);
+ break;
+ case e.ui.keyCode.PAGE_DOWN:
+ this.nextPage(t);
+ break;
+ case e.ui.keyCode.HOME:
+ this._move("first", "first", t);
+ break;
+ case e.ui.keyCode.END:
+ this._move("last", "last", t);
+ break;
+ case e.ui.keyCode.UP:
+ this.previous(t);
+ break;
+ case e.ui.keyCode.DOWN:
+ this.next(t);
+ break;
+ case e.ui.keyCode.LEFT:
+ this.collapse(t);
+ break;
+ case e.ui.keyCode.RIGHT:
+ this.active && !this.active.is(".ui-state-disabled") && this.expand(t);
+ break;
+ case e.ui.keyCode.ENTER:
+ case e.ui.keyCode.SPACE:
+ this._activate(t);
+ break;
+ case e.ui.keyCode.ESCAPE:
+ this.collapse(t);
+ break;
+ default:
+ o = !1, s = this.previousFilter || "", n = String.fromCharCode(t.keyCode), a = !1, clearTimeout(this.filterTimer), n === s ? a = !0 : n = s + n, i = this._filterMenuItems(n), i = a && -1 !== i.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : i, i.length || (n = String.fromCharCode(t.keyCode), i = this._filterMenuItems(n)), i.length ? (this.focus(t, i), this.previousFilter = n, this.filterTimer = this._delay(function () {
+ delete this.previousFilter
+ }, 1e3)) : delete this.previousFilter
+ }
+ o && t.preventDefault()
+ },
+ _activate: function (e) {
+ this.active.is(".ui-state-disabled") || (this.active.is("[aria-haspopup='true']") ? this.expand(e) : this.select(e))
+ },
+ refresh: function () {
+ var t, i, s = this, n = this.options.icons.submenu, a = this.element.find(this.options.menus);
+ this.element.toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length), a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({
+ role: this.options.role,
+ "aria-hidden": "true",
+ "aria-expanded": "false"
+ }).each(function () {
+ var t = e(this), i = t.parent(), s = e("<span>").addClass("ui-menu-icon ui-icon " + n).data("ui-menu-submenu-carat", !0);
+ i.attr("aria-haspopup", "true").prepend(s), t.attr("aria-labelledby", i.attr("id"))
+ }), t = a.add(this.element), i = t.find(this.options.items), i.not(".ui-menu-item").each(function () {
+ var t = e(this);
+ s._isDivider(t) && t.addClass("ui-widget-content ui-menu-divider")
+ }), i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({
+ tabIndex: -1,
+ role: this._itemRole()
+ }), i.filter(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !e.contains(this.element[0], this.active[0]) && this.blur()
+ },
+ _itemRole: function () {
+ return {menu: "menuitem", listbox: "option"}[this.options.role]
+ },
+ _setOption: function (e, t) {
+ "icons" === e && this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu), "disabled" === e && this.element.toggleClass("ui-state-disabled", !!t).attr("aria-disabled", t), this._super(e, t)
+ },
+ focus: function (e, t) {
+ var i, s;
+ this.blur(e, e && "focus" === e.type), this._scrollIntoView(t), this.active = t.first(), s = this.active.addClass("ui-state-focus").removeClass("ui-state-active"), this.options.role && this.element.attr("aria-activedescendant", s.attr("id")), this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"), e && "keydown" === e.type ? this._close() : this.timer = this._delay(function () {
+ this._close()
+ }, this.delay), i = t.children(".ui-menu"), i.length && e && /^mouse/.test(e.type) && this._startOpening(i), this.activeMenu = t.parent(), this._trigger("focus", e, {item: t})
+ },
+ _scrollIntoView: function (t) {
+ var i, s, n, a, o, r;
+ this._hasScroll() && (i = parseFloat(e.css(this.activeMenu[0], "borderTopWidth")) || 0, s = parseFloat(e.css(this.activeMenu[0], "paddingTop")) || 0, n = t.offset().top - this.activeMenu.offset().top - i - s, a = this.activeMenu.scrollTop(), o = this.activeMenu.height(), r = t.outerHeight(), 0 > n ? this.activeMenu.scrollTop(a + n) : n + r > o && this.activeMenu.scrollTop(a + n - o + r))
+ },
+ blur: function (e, t) {
+ t || clearTimeout(this.timer), this.active && (this.active.removeClass("ui-state-focus"), this.active = null, this._trigger("blur", e, {item: this.active}))
+ },
+ _startOpening: function (e) {
+ clearTimeout(this.timer), "true" === e.attr("aria-hidden") && (this.timer = this._delay(function () {
+ this._close(), this._open(e)
+ }, this.delay))
+ },
+ _open: function (t) {
+ var i = e.extend({of: this.active}, this.options.position);
+ clearTimeout(this.timer), this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden", "true"), t.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(i)
+ },
+ collapseAll: function (t, i) {
+ clearTimeout(this.timer), this.timer = this._delay(function () {
+ var s = i ? this.element : e(t && t.target).closest(this.element.find(".ui-menu"));
+ s.length || (s = this.element), this._close(s), this.blur(t), this.activeMenu = s
+ }, this.delay)
+ },
+ _close: function (e) {
+ e || (e = this.active ? this.active.parent() : this.element), e.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")
+ },
+ _closeOnDocumentClick: function (t) {
+ return !e(t.target).closest(".ui-menu").length
+ },
+ _isDivider: function (e) {
+ return !/[^\-\u2014\u2013\s]/.test(e.text())
+ },
+ collapse: function (e) {
+ var t = this.active && this.active.parent().closest(".ui-menu-item", this.element);
+ t && t.length && (this._close(), this.focus(e, t))
+ },
+ expand: function (e) {
+ var t = this.active && this.active.children(".ui-menu ").find(this.options.items).first();
+ t && t.length && (this._open(t.parent()), this._delay(function () {
+ this.focus(e, t)
+ }))
+ },
+ next: function (e) {
+ this._move("next", "first", e)
+ },
+ previous: function (e) {
+ this._move("prev", "last", e)
+ },
+ isFirstItem: function () {
+ return this.active && !this.active.prevAll(".ui-menu-item").length
+ },
+ isLastItem: function () {
+ return this.active && !this.active.nextAll(".ui-menu-item").length
+ },
+ _move: function (e, t, i) {
+ var s;
+ this.active && (s = "first" === e || "last" === e ? this.active["first" === e ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[e + "All"](".ui-menu-item").eq(0)), s && s.length && this.active || (s = this.activeMenu.find(this.options.items)[t]()), this.focus(i, s)
+ },
+ nextPage: function (t) {
+ var i, s, n;
+ return this.active ? (this.isLastItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.nextAll(".ui-menu-item").each(function () {
+ return i = e(this), 0 > i.offset().top - s - n
+ }), this.focus(t, i)) : this.focus(t, this.activeMenu.find(this.options.items)[this.active ? "last" : "first"]())), void 0) : (this.next(t), void 0)
+ },
+ previousPage: function (t) {
+ var i, s, n;
+ return this.active ? (this.isFirstItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.prevAll(".ui-menu-item").each(function () {
+ return i = e(this), i.offset().top - s + n > 0
+ }), this.focus(t, i)) : this.focus(t, this.activeMenu.find(this.options.items).first())), void 0) : (this.next(t), void 0)
+ },
+ _hasScroll: function () {
+ return this.element.outerHeight() < this.element.prop("scrollHeight")
+ },
+ select: function (t) {
+ this.active = this.active || e(t.target).closest(".ui-menu-item");
+ var i = {item: this.active};
+ this.active.has(".ui-menu").length || this.collapseAll(t, !0), this._trigger("select", t, i)
+ },
+ _filterMenuItems: function (t) {
+ var i = t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"), s = RegExp("^" + i, "i");
+ return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function () {
+ return s.test(e.trim(e(this).text()))
+ })
+ }
+ }), e.widget("ui.autocomplete", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ options: {
+ appendTo: null,
+ autoFocus: !1,
+ delay: 300,
+ minLength: 1,
+ position: {my: "left top", at: "left bottom", collision: "none"},
+ source: null,
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ response: null,
+ search: null,
+ select: null
+ },
+ requestIndex: 0,
+ pending: 0,
+ _create: function () {
+ var t, i, s, n = this.element[0].nodeName.toLowerCase(), a = "textarea" === n, o = "input" === n;
+ this.isMultiLine = a ? !0 : o ? !1 : this.element.prop("isContentEditable"), this.valueMethod = this.element[a || o ? "val" : "text"], this.isNewMenu = !0, this.element.addClass("ui-autocomplete-input").attr("autocomplete", "off"), this._on(this.element, {
+ keydown: function (n) {
+ if (this.element.prop("readOnly"))return t = !0, s = !0, i = !0, void 0;
+ t = !1, s = !1, i = !1;
+ var a = e.ui.keyCode;
+ switch (n.keyCode) {
+ case a.PAGE_UP:
+ t = !0, this._move("previousPage", n);
+ break;
+ case a.PAGE_DOWN:
+ t = !0, this._move("nextPage", n);
+ break;
+ case a.UP:
+ t = !0, this._keyEvent("previous", n);
+ break;
+ case a.DOWN:
+ t = !0, this._keyEvent("next", n);
+ break;
+ case a.ENTER:
+ this.menu.active && (t = !0, n.preventDefault(), this.menu.select(n));
+ break;
+ case a.TAB:
+ this.menu.active && this.menu.select(n);
+ break;
+ case a.ESCAPE:
+ this.menu.element.is(":visible") && (this.isMultiLine || this._value(this.term), this.close(n), n.preventDefault());
+ break;
+ default:
+ i = !0, this._searchTimeout(n)
+ }
+ }, keypress: function (s) {
+ if (t)return t = !1, (!this.isMultiLine || this.menu.element.is(":visible")) && s.preventDefault(), void 0;
+ if (!i) {
+ var n = e.ui.keyCode;
+ switch (s.keyCode) {
+ case n.PAGE_UP:
+ this._move("previousPage", s);
+ break;
+ case n.PAGE_DOWN:
+ this._move("nextPage", s);
+ break;
+ case n.UP:
+ this._keyEvent("previous", s);
+ break;
+ case n.DOWN:
+ this._keyEvent("next", s)
+ }
+ }
+ }, input: function (e) {
+ return s ? (s = !1, e.preventDefault(), void 0) : (this._searchTimeout(e), void 0)
+ }, focus: function () {
+ this.selectedItem = null, this.previous = this._value()
+ }, blur: function (e) {
+ return this.cancelBlur ? (delete this.cancelBlur, void 0) : (clearTimeout(this.searching), this.close(e), this._change(e), void 0)
+ }
+ }), this._initSource(), this.menu = e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role: null}).hide().menu("instance"), this._on(this.menu.element, {
+ mousedown: function (t) {
+ t.preventDefault(), this.cancelBlur = !0, this._delay(function () {
+ delete this.cancelBlur
+ });
+ var i = this.menu.element[0];
+ e(t.target).closest(".ui-menu-item").length || this._delay(function () {
+ var t = this;
+ this.document.one("mousedown", function (s) {
+ s.target === t.element[0] || s.target === i || e.contains(i, s.target) || t.close()
+ })
+ })
+ }, menufocus: function (t, i) {
+ var s, n;
+ return this.isNewMenu && (this.isNewMenu = !1, t.originalEvent && /^mouse/.test(t.originalEvent.type)) ? (this.menu.blur(), this.document.one("mousemove", function () {
+ e(t.target).trigger(t.originalEvent)
+ }), void 0) : (n = i.item.data("ui-autocomplete-item"), !1 !== this._trigger("focus", t, {item: n}) && t.originalEvent && /^key/.test(t.originalEvent.type) && this._value(n.value), s = i.item.attr("aria-label") || n.value, s && e.trim(s).length && (this.liveRegion.children().hide(), e("<div>").text(s).appendTo(this.liveRegion)), void 0)
+ }, menuselect: function (e, t) {
+ var i = t.item.data("ui-autocomplete-item"), s = this.previous;
+ this.element[0] !== this.document[0].activeElement && (this.element.focus(), this.previous = s, this._delay(function () {
+ this.previous = s, this.selectedItem = i
+ })), !1 !== this._trigger("select", e, {item: i}) && this._value(i.value), this.term = this._value(), this.close(e), this.selectedItem = i
+ }
+ }), this.liveRegion = e("<span>", {
+ role: "status",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ }).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body), this._on(this.window, {
+ beforeunload: function () {
+ this.element.removeAttr("autocomplete")
+ }
+ })
+ },
+ _destroy: function () {
+ clearTimeout(this.searching), this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"), this.menu.element.remove(), this.liveRegion.remove()
+ },
+ _setOption: function (e, t) {
+ this._super(e, t), "source" === e && this._initSource(), "appendTo" === e && this.menu.element.appendTo(this._appendTo()), "disabled" === e && t && this.xhr && this.xhr.abort()
+ },
+ _appendTo: function () {
+ var t = this.options.appendTo;
+ return t && (t = t.jquery || t.nodeType ? e(t) : this.document.find(t).eq(0)), t && t[0] || (t = this.element.closest(".ui-front")), t.length || (t = this.document[0].body), t
+ },
+ _initSource: function () {
+ var t, i, s = this;
+ e.isArray(this.options.source) ? (t = this.options.source, this.source = function (i, s) {
+ s(e.ui.autocomplete.filter(t, i.term))
+ }) : "string" == typeof this.options.source ? (i = this.options.source, this.source = function (t, n) {
+ s.xhr && s.xhr.abort(), s.xhr = e.ajax({
+ url: i, data: t, dataType: "json", success: function (e) {
+ n(e)
+ }, error: function () {
+ n([])
+ }
+ })
+ }) : this.source = this.options.source
+ },
+ _searchTimeout: function (e) {
+ clearTimeout(this.searching), this.searching = this._delay(function () {
+ var t = this.term === this._value(), i = this.menu.element.is(":visible"), s = e.altKey || e.ctrlKey || e.metaKey || e.shiftKey;
+ (!t || t && !i && !s) && (this.selectedItem = null, this.search(null, e))
+ }, this.options.delay)
+ },
+ search: function (e, t) {
+ return e = null != e ? e : this._value(), this.term = this._value(), e.length < this.options.minLength ? this.close(t) : this._trigger("search", t) !== !1 ? this._search(e) : void 0
+ },
+ _search: function (e) {
+ this.pending++, this.element.addClass("ui-autocomplete-loading"), this.cancelSearch = !1, this.source({term: e}, this._response())
+ },
+ _response: function () {
+ var t = ++this.requestIndex;
+ return e.proxy(function (e) {
+ t === this.requestIndex && this.__response(e), this.pending--, this.pending || this.element.removeClass("ui-autocomplete-loading")
+ }, this)
+ },
+ __response: function (e) {
+ e && (e = this._normalize(e)), this._trigger("response", null, {content: e}), !this.options.disabled && e && e.length && !this.cancelSearch ? (this._suggest(e), this._trigger("open")) : this._close()
+ },
+ close: function (e) {
+ this.cancelSearch = !0, this._close(e)
+ },
+ _close: function (e) {
+ this.menu.element.is(":visible") && (this.menu.element.hide(), this.menu.blur(), this.isNewMenu = !0, this._trigger("close", e))
+ },
+ _change: function (e) {
+ this.previous !== this._value() && this._trigger("change", e, {item: this.selectedItem})
+ },
+ _normalize: function (t) {
+ return t.length && t[0].label && t[0].value ? t : e.map(t, function (t) {
+ return "string" == typeof t ? {label: t, value: t} : e.extend({}, t, {
+ label: t.label || t.value,
+ value: t.value || t.label
+ })
+ })
+ },
+ _suggest: function (t) {
+ var i = this.menu.element.empty();
+ this._renderMenu(i, t), this.isNewMenu = !0, this.menu.refresh(), i.show(), this._resizeMenu(), i.position(e.extend({of: this.element}, this.options.position)), this.options.autoFocus && this.menu.next()
+ },
+ _resizeMenu: function () {
+ var e = this.menu.element;
+ e.outerWidth(Math.max(e.width("").outerWidth() + 1, this.element.outerWidth()))
+ },
+ _renderMenu: function (t, i) {
+ var s = this;
+ e.each(i, function (e, i) {
+ s._renderItemData(t, i)
+ })
+ },
+ _renderItemData: function (e, t) {
+ return this._renderItem(e, t).data("ui-autocomplete-item", t)
+ },
+ _renderItem: function (t, i) {
+ return e("<li>").text(i.label).appendTo(t)
+ },
+ _move: function (e, t) {
+ return this.menu.element.is(":visible") ? this.menu.isFirstItem() && /^previous/.test(e) || this.menu.isLastItem() && /^next/.test(e) ? (this.isMultiLine || this._value(this.term), this.menu.blur(), void 0) : (this.menu[e](t), void 0) : (this.search(null, t), void 0)
+ },
+ widget: function () {
+ return this.menu.element
+ },
+ _value: function () {
+ return this.valueMethod.apply(this.element, arguments)
+ },
+ _keyEvent: function (e, t) {
+ (!this.isMultiLine || this.menu.element.is(":visible")) && (this._move(e, t), t.preventDefault())
+ }
+ }), e.extend(e.ui.autocomplete, {
+ escapeRegex: function (e) {
+ return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
+ }, filter: function (t, i) {
+ var s = RegExp(e.ui.autocomplete.escapeRegex(i), "i");
+ return e.grep(t, function (e) {
+ return s.test(e.label || e.value || e)
+ })
+ }
+ }), e.widget("ui.autocomplete", e.ui.autocomplete, {
+ options: {
+ messages: {
+ noResults: "No search results.",
+ results: function (e) {
+ return e + (e > 1 ? " results are" : " result is") + " available, use up and down arrow keys to navigate."
+ }
+ }
+ }, __response: function (t) {
+ var i;
+ this._superApply(arguments), this.options.disabled || this.cancelSearch || (i = t && t.length ? this.options.messages.results(t.length) : this.options.messages.noResults, this.liveRegion.children().hide(), e("<div>").text(i).appendTo(this.liveRegion))
+ }
+ }), e.ui.autocomplete;
+ var c, p = "ui-button ui-widget ui-state-default ui-corner-all", f = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", m = function () {
+ var t = e(this);
+ setTimeout(function () {
+ t.find(":ui-button").button("refresh")
+ }, 1)
+ }, g = function (t) {
+ var i = t.name, s = t.form, n = e([]);
+ return i && (i = i.replace(/'/g, "\\'"), n = s ? e(s).find("[name='" + i + "'][type=radio]") : e("[name='" + i + "'][type=radio]", t.ownerDocument).filter(function () {
+ return !this.form
+ })), n
+ };
+ e.widget("ui.button", {
+ version: "1.11.4",
+ defaultElement: "<button>",
+ options: {disabled: null, text: !0, label: null, icons: {primary: null, secondary: null}},
+ _create: function () {
+ this.element.closest("form").unbind("reset" + this.eventNamespace).bind("reset" + this.eventNamespace, m), "boolean" != typeof this.options.disabled ? this.options.disabled = !!this.element.prop("disabled") : this.element.prop("disabled", this.options.disabled), this._determineButtonType(), this.hasTitle = !!this.buttonElement.attr("title");
+ var t = this, i = this.options, s = "checkbox" === this.type || "radio" === this.type, n = s ? "" : "ui-state-active";
+ null === i.label && (i.label = "input" === this.type ? this.buttonElement.val() : this.buttonElement.html()), this._hoverable(this.buttonElement), this.buttonElement.addClass(p).attr("role", "button").bind("mouseenter" + this.eventNamespace, function () {
+ i.disabled || this === c && e(this).addClass("ui-state-active")
+ }).bind("mouseleave" + this.eventNamespace, function () {
+ i.disabled || e(this).removeClass(n)
+ }).bind("click" + this.eventNamespace, function (e) {
+ i.disabled && (e.preventDefault(), e.stopImmediatePropagation())
+ }), this._on({
+ focus: function () {
+ this.buttonElement.addClass("ui-state-focus")
+ }, blur: function () {
+ this.buttonElement.removeClass("ui-state-focus")
+ }
+ }), s && this.element.bind("change" + this.eventNamespace, function () {
+ t.refresh()
+ }), "checkbox" === this.type ? this.buttonElement.bind("click" + this.eventNamespace, function () {
+ return i.disabled ? !1 : void 0
+ }) : "radio" === this.type ? this.buttonElement.bind("click" + this.eventNamespace, function () {
+ if (i.disabled)return !1;
+ e(this).addClass("ui-state-active"), t.buttonElement.attr("aria-pressed", "true");
+ var s = t.element[0];
+ g(s).not(s).map(function () {
+ return e(this).button("widget")[0]
+ }).removeClass("ui-state-active").attr("aria-pressed", "false")
+ }) : (this.buttonElement.bind("mousedown" + this.eventNamespace, function () {
+ return i.disabled ? !1 : (e(this).addClass("ui-state-active"), c = this, t.document.one("mouseup", function () {
+ c = null
+ }), void 0)
+ }).bind("mouseup" + this.eventNamespace, function () {
+ return i.disabled ? !1 : (e(this).removeClass("ui-state-active"), void 0)
+ }).bind("keydown" + this.eventNamespace, function (t) {
+ return i.disabled ? !1 : ((t.keyCode === e.ui.keyCode.SPACE || t.keyCode === e.ui.keyCode.ENTER) && e(this).addClass("ui-state-active"), void 0)
+ }).bind("keyup" + this.eventNamespace + " blur" + this.eventNamespace, function () {
+ e(this).removeClass("ui-state-active")
+ }), this.buttonElement.is("a") && this.buttonElement.keyup(function (t) {
+ t.keyCode === e.ui.keyCode.SPACE && e(this).click()
+ })), this._setOption("disabled", i.disabled), this._resetButton()
+ },
+ _determineButtonType: function () {
+ var e, t, i;
+ this.type = this.element.is("[type=checkbox]") ? "checkbox" : this.element.is("[type=radio]") ? "radio" : this.element.is("input") ? "input" : "button", "checkbox" === this.type || "radio" === this.type ? (e = this.element.parents().last(), t = "label[for='" + this.element.attr("id") + "']", this.buttonElement = e.find(t), this.buttonElement.length || (e = e.length ? e.siblings() : this.element.siblings(), this.buttonElement = e.filter(t), this.buttonElement.length || (this.buttonElement = e.find(t))), this.element.addClass("ui-helper-hidden-accessible"), i = this.element.is(":checked"), i && this.buttonElement.addClass("ui-state-active"), this.buttonElement.prop("aria-pressed", i)) : this.buttonElement = this.element
+ },
+ widget: function () {
+ return this.buttonElement
+ },
+ _destroy: function () {
+ this.element.removeClass("ui-helper-hidden-accessible"), this.buttonElement.removeClass(p + " ui-state-active " + f).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()), this.hasTitle || this.buttonElement.removeAttr("title")
+ },
+ _setOption: function (e, t) {
+ return this._super(e, t), "disabled" === e ? (this.widget().toggleClass("ui-state-disabled", !!t), this.element.prop("disabled", !!t), t && ("checkbox" === this.type || "radio" === this.type ? this.buttonElement.removeClass("ui-state-focus") : this.buttonElement.removeClass("ui-state-focus ui-state-active")), void 0) : (this._resetButton(), void 0)
+ },
+ refresh: function () {
+ var t = this.element.is("input, button") ? this.element.is(":disabled") : this.element.hasClass("ui-button-disabled");
+ t !== this.options.disabled && this._setOption("disabled", t), "radio" === this.type ? g(this.element[0]).each(function () {
+ e(this).is(":checked") ? e(this).button("widget").addClass("ui-state-active").attr("aria-pressed", "true") : e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed", "false")
+ }) : "checkbox" === this.type && (this.element.is(":checked") ? this.buttonElement.addClass("ui-state-active").attr("aria-pressed", "true") : this.buttonElement.removeClass("ui-state-active").attr("aria-pressed", "false"))
+ },
+ _resetButton: function () {
+ if ("input" === this.type)return this.options.label && this.element.val(this.options.label), void 0;
+ var t = this.buttonElement.removeClass(f), i = e("<span></span>", this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(), s = this.options.icons, n = s.primary && s.secondary, a = [];
+ s.primary || s.secondary ? (this.options.text && a.push("ui-button-text-icon" + (n ? "s" : s.primary ? "-primary" : "-secondary")), s.primary && t.prepend("<span class='ui-button-icon-primary ui-icon " + s.primary + "'></span>"), s.secondary && t.append("<span class='ui-button-icon-secondary ui-icon " + s.secondary + "'></span>"), this.options.text || (a.push(n ? "ui-button-icons-only" : "ui-button-icon-only"), this.hasTitle || t.attr("title", e.trim(i)))) : a.push("ui-button-text-only"), t.addClass(a.join(" "))
+ }
+ }), e.widget("ui.buttonset", {
+ version: "1.11.4",
+ options: {items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},
+ _create: function () {
+ this.element.addClass("ui-buttonset")
+ },
+ _init: function () {
+ this.refresh()
+ },
+ _setOption: function (e, t) {
+ "disabled" === e && this.buttons.button("option", e, t), this._super(e, t)
+ },
+ refresh: function () {
+ var t = "rtl" === this.element.css("direction"), i = this.element.find(this.options.items), s = i.filter(":ui-button");
+ i.not(":ui-button").button(), s.button("refresh"), this.buttons = i.map(function () {
+ return e(this).button("widget")[0]
+ }).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t ? "ui-corner-right" : "ui-corner-left").end().filter(":last").addClass(t ? "ui-corner-left" : "ui-corner-right").end().end()
+ },
+ _destroy: function () {
+ this.element.removeClass("ui-buttonset"), this.buttons.map(function () {
+ return e(this).button("widget")[0]
+ }).removeClass("ui-corner-left ui-corner-right").end().button("destroy")
+ }
+ }), e.ui.button, e.extend(e.ui, {datepicker: {version: "1.11.4"}});
+ var v;
+ e.extend(n.prototype, {
+ markerClassName: "hasDatepicker",
+ maxRows: 4,
+ _widgetDatepicker: function () {
+ return this.dpDiv
+ },
+ setDefaults: function (e) {
+ return r(this._defaults, e || {}), this
+ },
+ _attachDatepicker: function (t, i) {
+ var s, n, a;
+ s = t.nodeName.toLowerCase(), n = "div" === s || "span" === s, t.id || (this.uuid += 1, t.id = "dp" + this.uuid), a = this._newInst(e(t), n), a.settings = e.extend({}, i || {}), "input" === s ? this._connectDatepicker(t, a) : n && this._inlineDatepicker(t, a)
+ },
+ _newInst: function (t, i) {
+ var s = t[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1");
+ return {
+ id: s,
+ input: t,
+ selectedDay: 0,
+ selectedMonth: 0,
+ selectedYear: 0,
+ drawMonth: 0,
+ drawYear: 0,
+ inline: i,
+ dpDiv: i ? a(e("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")) : this.dpDiv
+ }
+ },
+ _connectDatepicker: function (t, i) {
+ var s = e(t);
+ i.append = e([]), i.trigger = e([]), s.hasClass(this.markerClassName) || (this._attachments(s, i), s.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp), this._autoSize(i), e.data(t, "datepicker", i), i.settings.disabled && this._disableDatepicker(t))
+ },
+ _attachments: function (t, i) {
+ var s, n, a, o = this._get(i, "appendText"), r = this._get(i, "isRTL");
+ i.append && i.append.remove(), o && (i.append = e("<span class='" + this._appendClass + "'>" + o + "</span>"), t[r ? "before" : "after"](i.append)), t.unbind("focus", this._showDatepicker), i.trigger && i.trigger.remove(), s = this._get(i, "showOn"), ("focus" === s || "both" === s) && t.focus(this._showDatepicker), ("button" === s || "both" === s) && (n = this._get(i, "buttonText"), a = this._get(i, "buttonImage"), i.trigger = e(this._get(i, "buttonImageOnly") ? e("<img/>").addClass(this._triggerClass).attr({
+ src: a,
+ alt: n,
+ title: n
+ }) : e("<button type='button'></button>").addClass(this._triggerClass).html(a ? e("<img/>").attr({
+ src: a,
+ alt: n,
+ title: n
+ }) : n)), t[r ? "before" : "after"](i.trigger), i.trigger.click(function () {
+ return e.datepicker._datepickerShowing && e.datepicker._lastInput === t[0] ? e.datepicker._hideDatepicker() : e.datepicker._datepickerShowing && e.datepicker._lastInput !== t[0] ? (e.datepicker._hideDatepicker(), e.datepicker._showDatepicker(t[0])) : e.datepicker._showDatepicker(t[0]), !1
+ }))
+ },
+ _autoSize: function (e) {
+ if (this._get(e, "autoSize") && !e.inline) {
+ var t, i, s, n, a = new Date(2009, 11, 20), o = this._get(e, "dateFormat");
+ o.match(/[DM]/) && (t = function (e) {
+ for (i = 0, s = 0, n = 0; e.length > n; n++)e[n].length > i && (i = e[n].length, s = n);
+ return s
+ }, a.setMonth(t(this._get(e, o.match(/MM/) ? "monthNames" : "monthNamesShort"))), a.setDate(t(this._get(e, o.match(/DD/) ? "dayNames" : "dayNamesShort")) + 20 - a.getDay())), e.input.attr("size", this._formatDate(e, a).length)
+ }
+ },
+ _inlineDatepicker: function (t, i) {
+ var s = e(t);
+ s.hasClass(this.markerClassName) || (s.addClass(this.markerClassName).append(i.dpDiv), e.data(t, "datepicker", i), this._setDate(i, this._getDefaultDate(i), !0), this._updateDatepicker(i), this._updateAlternate(i), i.settings.disabled && this._disableDatepicker(t), i.dpDiv.css("display", "block"))
+ },
+ _dialogDatepicker: function (t, i, s, n, a) {
+ var o, h, l, u, d, c = this._dialogInst;
+ return c || (this.uuid += 1, o = "dp" + this.uuid, this._dialogInput = e("<input type='text' id='" + o + "' style='position: absolute; top: -100px; width: 0px;'/>"), this._dialogInput.keydown(this._doKeyDown), e("body").append(this._dialogInput), c = this._dialogInst = this._newInst(this._dialogInput, !1), c.settings = {}, e.data(this._dialogInput[0], "datepicker", c)), r(c.settings, n || {}), i = i && i.constructor === Date ? this._formatDate(c, i) : i, this._dialogInput.val(i), this._pos = a ? a.length ? a : [a.pageX, a.pageY] : null, this._pos || (h = document.documentElement.clientWidth, l = document.documentElement.clientHeight, u = document.documentElement.scrollLeft || document.body.scrollLeft, d = document.documentElement.scrollTop || document.body.scrollTop, this._pos = [h / 2 - 100 + u, l / 2 - 150 + d]), this._dialogInput.css("left", this._pos[0] + 20 + "px").css("top", this._pos[1] + "px"), c.settings.onSelect = s, this._inDialog = !0, this.dpDiv.addClass(this._dialogClass), this._showDatepicker(this._dialogInput[0]), e.blockUI && e.blockUI(this.dpDiv), e.data(this._dialogInput[0], "datepicker", c), this
+ },
+ _destroyDatepicker: function (t) {
+ var i, s = e(t), n = e.data(t, "datepicker");
+ s.hasClass(this.markerClassName) && (i = t.nodeName.toLowerCase(), e.removeData(t, "datepicker"), "input" === i ? (n.append.remove(), n.trigger.remove(), s.removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress).unbind("keyup", this._doKeyUp)) : ("div" === i || "span" === i) && s.removeClass(this.markerClassName).empty(), v === n && (v = null))
+ },
+ _enableDatepicker: function (t) {
+ var i, s, n = e(t), a = e.data(t, "datepicker");
+ n.hasClass(this.markerClassName) && (i = t.nodeName.toLowerCase(), "input" === i ? (t.disabled = !1, a.trigger.filter("button").each(function () {
+ this.disabled = !1
+ }).end().filter("img").css({
+ opacity: "1.0",
+ cursor: ""
+ })) : ("div" === i || "span" === i) && (s = n.children("." + this._inlineClass), s.children().removeClass("ui-state-disabled"), s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !1)), this._disabledInputs = e.map(this._disabledInputs, function (e) {
+ return e === t ? null : e
+ }))
+ },
+ _disableDatepicker: function (t) {
+ var i, s, n = e(t), a = e.data(t, "datepicker");
+ n.hasClass(this.markerClassName) && (i = t.nodeName.toLowerCase(), "input" === i ? (t.disabled = !0, a.trigger.filter("button").each(function () {
+ this.disabled = !0
+ }).end().filter("img").css({
+ opacity: "0.5",
+ cursor: "default"
+ })) : ("div" === i || "span" === i) && (s = n.children("." + this._inlineClass), s.children().addClass("ui-state-disabled"), s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled", !0)), this._disabledInputs = e.map(this._disabledInputs, function (e) {
+ return e === t ? null : e
+ }), this._disabledInputs[this._disabledInputs.length] = t)
+ },
+ _isDisabledDatepicker: function (e) {
+ if (!e)return !1;
+ for (var t = 0; this._disabledInputs.length > t; t++)if (this._disabledInputs[t] === e)return !0;
+ return !1
+ },
+ _getInst: function (t) {
+ try {
+ return e.data(t, "datepicker")
+ } catch (i) {
+ throw"Missing instance data for this datepicker"
+ }
+ },
+ _optionDatepicker: function (t, i, s) {
+ var n, a, o, h, l = this._getInst(t);
+ return 2 === arguments.length && "string" == typeof i ? "defaults" === i ? e.extend({}, e.datepicker._defaults) : l ? "all" === i ? e.extend({}, l.settings) : this._get(l, i) : null : (n = i || {}, "string" == typeof i && (n = {}, n[i] = s), l && (this._curInst === l && this._hideDatepicker(), a = this._getDateDatepicker(t, !0), o = this._getMinMaxDate(l, "min"), h = this._getMinMaxDate(l, "max"), r(l.settings, n), null !== o && void 0 !== n.dateFormat && void 0 === n.minDate && (l.settings.minDate = this._formatDate(l, o)), null !== h && void 0 !== n.dateFormat && void 0 === n.maxDate && (l.settings.maxDate = this._formatDate(l, h)), "disabled"in n && (n.disabled ? this._disableDatepicker(t) : this._enableDatepicker(t)), this._attachments(e(t), l), this._autoSize(l), this._setDate(l, a), this._updateAlternate(l), this._updateDatepicker(l)), void 0)
+ },
+ _changeDatepicker: function (e, t, i) {
+ this._optionDatepicker(e, t, i)
+ },
+ _refreshDatepicker: function (e) {
+ var t = this._getInst(e);
+ t && this._updateDatepicker(t)
+ },
+ _setDateDatepicker: function (e, t) {
+ var i = this._getInst(e);
+ i && (this._setDate(i, t), this._updateDatepicker(i), this._updateAlternate(i))
+ },
+ _getDateDatepicker: function (e, t) {
+ var i = this._getInst(e);
+ return i && !i.inline && this._setDateFromField(i, t), i ? this._getDate(i) : null
+ },
+ _doKeyDown: function (t) {
+ var i, s, n, a = e.datepicker._getInst(t.target), o = !0, r = a.dpDiv.is(".ui-datepicker-rtl");
+ if (a._keyEvent = !0, e.datepicker._datepickerShowing)switch (t.keyCode) {
+ case 9:
+ e.datepicker._hideDatepicker(), o = !1;
+ break;
+ case 13:
+ return n = e("td." + e.datepicker._dayOverClass + ":not(." + e.datepicker._currentClass + ")", a.dpDiv), n[0] && e.datepicker._selectDay(t.target, a.selectedMonth, a.selectedYear, n[0]), i = e.datepicker._get(a, "onSelect"), i ? (s = e.datepicker._formatDate(a), i.apply(a.input ? a.input[0] : null, [s, a])) : e.datepicker._hideDatepicker(), !1;
+ case 27:
+ e.datepicker._hideDatepicker();
+ break;
+ case 33:
+ e.datepicker._adjustDate(t.target, t.ctrlKey ? -e.datepicker._get(a, "stepBigMonths") : -e.datepicker._get(a, "stepMonths"), "M");
+ break;
+ case 34:
+ e.datepicker._adjustDate(t.target, t.ctrlKey ? +e.datepicker._get(a, "stepBigMonths") : +e.datepicker._get(a, "stepMonths"), "M");
+ break;
+ case 35:
+ (t.ctrlKey || t.metaKey) && e.datepicker._clearDate(t.target), o = t.ctrlKey || t.metaKey;
+ break;
+ case 36:
+ (t.ctrlKey || t.metaKey) && e.datepicker._gotoToday(t.target), o = t.ctrlKey || t.metaKey;
+ break;
+ case 37:
+ (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, r ? 1 : -1, "D"), o = t.ctrlKey || t.metaKey, t.originalEvent.altKey && e.datepicker._adjustDate(t.target, t.ctrlKey ? -e.datepicker._get(a, "stepBigMonths") : -e.datepicker._get(a, "stepMonths"), "M");
+ break;
+ case 38:
+ (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, -7, "D"), o = t.ctrlKey || t.metaKey;
+ break;
+ case 39:
+ (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, r ? -1 : 1, "D"), o = t.ctrlKey || t.metaKey, t.originalEvent.altKey && e.datepicker._adjustDate(t.target, t.ctrlKey ? +e.datepicker._get(a, "stepBigMonths") : +e.datepicker._get(a, "stepMonths"), "M");
+ break;
+ case 40:
+ (t.ctrlKey || t.metaKey) && e.datepicker._adjustDate(t.target, 7, "D"), o = t.ctrlKey || t.metaKey;
+ break;
+ default:
+ o = !1
+ } else 36 === t.keyCode && t.ctrlKey ? e.datepicker._showDatepicker(this) : o = !1;
+ o && (t.preventDefault(), t.stopPropagation())
+ },
+ _doKeyPress: function (t) {
+ var i, s, n = e.datepicker._getInst(t.target);
+ return e.datepicker._get(n, "constrainInput") ? (i = e.datepicker._possibleChars(e.datepicker._get(n, "dateFormat")), s = String.fromCharCode(null == t.charCode ? t.keyCode : t.charCode), t.ctrlKey || t.metaKey || " " > s || !i || i.indexOf(s) > -1) : void 0
+ },
+ _doKeyUp: function (t) {
+ var i, s = e.datepicker._getInst(t.target);
+ if (s.input.val() !== s.lastVal)try {
+ i = e.datepicker.parseDate(e.datepicker._get(s, "dateFormat"), s.input ? s.input.val() : null, e.datepicker._getFormatConfig(s)), i && (e.datepicker._setDateFromField(s), e.datepicker._updateAlternate(s), e.datepicker._updateDatepicker(s))
+ } catch (n) {
+ }
+ return !0
+ },
+ _showDatepicker: function (t) {
+ if (t = t.target || t, "input" !== t.nodeName.toLowerCase() && (t = e("input", t.parentNode)[0]), !e.datepicker._isDisabledDatepicker(t) && e.datepicker._lastInput !== t) {
+ var i, n, a, o, h, l, u;
+ i = e.datepicker._getInst(t), e.datepicker._curInst && e.datepicker._curInst !== i && (e.datepicker._curInst.dpDiv.stop(!0, !0), i && e.datepicker._datepickerShowing && e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])), n = e.datepicker._get(i, "beforeShow"), a = n ? n.apply(t, [t, i]) : {}, a !== !1 && (r(i.settings, a), i.lastVal = null, e.datepicker._lastInput = t, e.datepicker._setDateFromField(i), e.datepicker._inDialog && (t.value = ""), e.datepicker._pos || (e.datepicker._pos = e.datepicker._findPos(t), e.datepicker._pos[1] += t.offsetHeight), o = !1, e(t).parents().each(function () {
+ return o |= "fixed" === e(this).css("position"), !o
+ }), h = {
+ left: e.datepicker._pos[0],
+ top: e.datepicker._pos[1]
+ }, e.datepicker._pos = null, i.dpDiv.empty(), i.dpDiv.css({
+ position: "absolute",
+ display: "block",
+ top: "-1000px"
+ }), e.datepicker._updateDatepicker(i), h = e.datepicker._checkOffset(i, h, o), i.dpDiv.css({
+ position: e.datepicker._inDialog && e.blockUI ? "static" : o ? "fixed" : "absolute",
+ display: "none",
+ left: h.left + "px",
+ top: h.top + "px"
+ }), i.inline || (l = e.datepicker._get(i, "showAnim"), u = e.datepicker._get(i, "duration"), i.dpDiv.css("z-index", s(e(t)) + 1), e.datepicker._datepickerShowing = !0, e.effects && e.effects.effect[l] ? i.dpDiv.show(l, e.datepicker._get(i, "showOptions"), u) : i.dpDiv[l || "show"](l ? u : null), e.datepicker._shouldFocusInput(i) && i.input.focus(), e.datepicker._curInst = i))
+ }
+ },
+ _updateDatepicker: function (t) {
+ this.maxRows = 4, v = t, t.dpDiv.empty().append(this._generateHTML(t)), this._attachHandlers(t);
+ var i, s = this._getNumberOfMonths(t), n = s[1], a = 17, r = t.dpDiv.find("." + this._dayOverClass + " a");
+ r.length > 0 && o.apply(r.get(0)), t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""), n > 1 && t.dpDiv.addClass("ui-datepicker-multi-" + n).css("width", a * n + "em"), t.dpDiv[(1 !== s[0] || 1 !== s[1] ? "add" : "remove") + "Class"]("ui-datepicker-multi"), t.dpDiv[(this._get(t, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"), t === e.datepicker._curInst && e.datepicker._datepickerShowing && e.datepicker._shouldFocusInput(t) && t.input.focus(), t.yearshtml && (i = t.yearshtml, setTimeout(function () {
+ i === t.yearshtml && t.yearshtml && t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml), i = t.yearshtml = null
+ }, 0))
+ },
+ _shouldFocusInput: function (e) {
+ return e.input && e.input.is(":visible") && !e.input.is(":disabled") && !e.input.is(":focus")
+ },
+ _checkOffset: function (t, i, s) {
+ var n = t.dpDiv.outerWidth(), a = t.dpDiv.outerHeight(), o = t.input ? t.input.outerWidth() : 0, r = t.input ? t.input.outerHeight() : 0, h = document.documentElement.clientWidth + (s ? 0 : e(document).scrollLeft()), l = document.documentElement.clientHeight + (s ? 0 : e(document).scrollTop());
+ return i.left -= this._get(t, "isRTL") ? n - o : 0, i.left -= s && i.left === t.input.offset().left ? e(document).scrollLeft() : 0, i.top -= s && i.top === t.input.offset().top + r ? e(document).scrollTop() : 0, i.left -= Math.min(i.left, i.left + n > h && h > n ? Math.abs(i.left + n - h) : 0), i.top -= Math.min(i.top, i.top + a > l && l > a ? Math.abs(a + r) : 0), i
+ },
+ _findPos: function (t) {
+ for (var i, s = this._getInst(t), n = this._get(s, "isRTL"); t && ("hidden" === t.type || 1 !== t.nodeType || e.expr.filters.hidden(t));)t = t[n ? "previousSibling" : "nextSibling"];
+ return i = e(t).offset(), [i.left, i.top]
+ },
+ _hideDatepicker: function (t) {
+ var i, s, n, a, o = this._curInst;
+ !o || t && o !== e.data(t, "datepicker") || this._datepickerShowing && (i = this._get(o, "showAnim"), s = this._get(o, "duration"), n = function () {
+ e.datepicker._tidyDialog(o)
+ }, e.effects && (e.effects.effect[i] || e.effects[i]) ? o.dpDiv.hide(i, e.datepicker._get(o, "showOptions"), s, n) : o.dpDiv["slideDown" === i ? "slideUp" : "fadeIn" === i ? "fadeOut" : "hide"](i ? s : null, n), i || n(), this._datepickerShowing = !1, a = this._get(o, "onClose"), a && a.apply(o.input ? o.input[0] : null, [o.input ? o.input.val() : "", o]), this._lastInput = null, this._inDialog && (this._dialogInput.css({
+ position: "absolute",
+ left: "0",
+ top: "-100px"
+ }), e.blockUI && (e.unblockUI(), e("body").append(this.dpDiv))), this._inDialog = !1)
+ },
+ _tidyDialog: function (e) {
+ e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")
+ },
+ _checkExternalClick: function (t) {
+ if (e.datepicker._curInst) {
+ var i = e(t.target), s = e.datepicker._getInst(i[0]);
+ (i[0].id !== e.datepicker._mainDivId && 0 === i.parents("#" + e.datepicker._mainDivId).length && !i.hasClass(e.datepicker.markerClassName) && !i.closest("." + e.datepicker._triggerClass).length && e.datepicker._datepickerShowing && (!e.datepicker._inDialog || !e.blockUI) || i.hasClass(e.datepicker.markerClassName) && e.datepicker._curInst !== s) && e.datepicker._hideDatepicker()
+ }
+ },
+ _adjustDate: function (t, i, s) {
+ var n = e(t), a = this._getInst(n[0]);
+ this._isDisabledDatepicker(n[0]) || (this._adjustInstDate(a, i + ("M" === s ? this._get(a, "showCurrentAtPos") : 0), s), this._updateDatepicker(a))
+ },
+ _gotoToday: function (t) {
+ var i, s = e(t), n = this._getInst(s[0]);
+ this._get(n, "gotoCurrent") && n.currentDay ? (n.selectedDay = n.currentDay, n.drawMonth = n.selectedMonth = n.currentMonth, n.drawYear = n.selectedYear = n.currentYear) : (i = new Date, n.selectedDay = i.getDate(), n.drawMonth = n.selectedMonth = i.getMonth(), n.drawYear = n.selectedYear = i.getFullYear()), this._notifyChange(n), this._adjustDate(s)
+ },
+ _selectMonthYear: function (t, i, s) {
+ var n = e(t), a = this._getInst(n[0]);
+ a["selected" + ("M" === s ? "Month" : "Year")] = a["draw" + ("M" === s ? "Month" : "Year")] = parseInt(i.options[i.selectedIndex].value, 10), this._notifyChange(a), this._adjustDate(n)
+ },
+ _selectDay: function (t, i, s, n) {
+ var a, o = e(t);
+ e(n).hasClass(this._unselectableClass) || this._isDisabledDatepicker(o[0]) || (a = this._getInst(o[0]), a.selectedDay = a.currentDay = e("a", n).html(), a.selectedMonth = a.currentMonth = i, a.selectedYear = a.currentYear = s, this._selectDate(t, this._formatDate(a, a.currentDay, a.currentMonth, a.currentYear)))
+ },
+ _clearDate: function (t) {
+ var i = e(t);
+ this._selectDate(i, "")
+ },
+ _selectDate: function (t, i) {
+ var s, n = e(t), a = this._getInst(n[0]);
+ i = null != i ? i : this._formatDate(a), a.input && a.input.val(i), this._updateAlternate(a), s = this._get(a, "onSelect"), s ? s.apply(a.input ? a.input[0] : null, [i, a]) : a.input && a.input.trigger("change"), a.inline ? this._updateDatepicker(a) : (this._hideDatepicker(), this._lastInput = a.input[0], "object" != typeof a.input[0] && a.input.focus(), this._lastInput = null)
+ },
+ _updateAlternate: function (t) {
+ var i, s, n, a = this._get(t, "altField");
+ a && (i = this._get(t, "altFormat") || this._get(t, "dateFormat"), s = this._getDate(t), n = this.formatDate(i, s, this._getFormatConfig(t)), e(a).each(function () {
+ e(this).val(n)
+ }))
+ },
+ noWeekends: function (e) {
+ var t = e.getDay();
+ return [t > 0 && 6 > t, ""]
+ },
+ iso8601Week: function (e) {
+ var t, i = new Date(e.getTime());
+ return i.setDate(i.getDate() + 4 - (i.getDay() || 7)), t = i.getTime(), i.setMonth(0), i.setDate(1), Math.floor(Math.round((t - i) / 864e5) / 7) + 1
+ },
+ parseDate: function (t, i, s) {
+ if (null == t || null == i)throw"Invalid arguments";
+ if (i = "object" == typeof i ? "" + i : i + "", "" === i)return null;
+ var n, a, o, r, h = 0, l = (s ? s.shortYearCutoff : null) || this._defaults.shortYearCutoff, u = "string" != typeof l ? l : (new Date).getFullYear() % 100 + parseInt(l, 10), d = (s ? s.dayNamesShort : null) || this._defaults.dayNamesShort, c = (s ? s.dayNames : null) || this._defaults.dayNames, p = (s ? s.monthNamesShort : null) || this._defaults.monthNamesShort, f = (s ? s.monthNames : null) || this._defaults.monthNames, m = -1, g = -1, v = -1, y = -1, b = !1, _ = function (e) {
+ var i = t.length > n + 1 && t.charAt(n + 1) === e;
+ return i && n++, i
+ }, x = function (e) {
+ var t = _(e), s = "@" === e ? 14 : "!" === e ? 20 : "y" === e && t ? 4 : "o" === e ? 3 : 2, n = "y" === e ? s : 1, a = RegExp("^\\d{" + n + "," + s + "}"), o = i.substring(h).match(a);
+ if (!o)throw"Missing number at position " + h;
+ return h += o[0].length, parseInt(o[0], 10)
+ }, w = function (t, s, n) {
+ var a = -1, o = e.map(_(t) ? n : s, function (e, t) {
+ return [[t, e]]
+ }).sort(function (e, t) {
+ return -(e[1].length - t[1].length)
+ });
+ if (e.each(o, function (e, t) {
+ var s = t[1];
+ return i.substr(h, s.length).toLowerCase() === s.toLowerCase() ? (a = t[0], h += s.length, !1) : void 0
+ }), -1 !== a)return a + 1;
+ throw"Unknown name at position " + h
+ }, k = function () {
+ if (i.charAt(h) !== t.charAt(n))throw"Unexpected literal at position " + h;
+ h++
+ };
+ for (n = 0; t.length > n; n++)if (b)"'" !== t.charAt(n) || _("'") ? k() : b = !1; else switch (t.charAt(n)) {
+ case"d":
+ v = x("d");
+ break;
+ case"D":
+ w("D", d, c);
+ break;
+ case"o":
+ y = x("o");
+ break;
+ case"m":
+ g = x("m");
+ break;
+ case"M":
+ g = w("M", p, f);
+ break;
+ case"y":
+ m = x("y");
+ break;
+ case"@":
+ r = new Date(x("@")), m = r.getFullYear(), g = r.getMonth() + 1, v = r.getDate();
+ break;
+ case"!":
+ r = new Date((x("!") - this._ticksTo1970) / 1e4), m = r.getFullYear(), g = r.getMonth() + 1, v = r.getDate();
+ break;
+ case"'":
+ _("'") ? k() : b = !0;
+ break;
+ default:
+ k()
+ }
+ if (i.length > h && (o = i.substr(h), !/^\s+/.test(o)))throw"Extra/unparsed characters found in date: " + o;
+ if (-1 === m ? m = (new Date).getFullYear() : 100 > m && (m += (new Date).getFullYear() - (new Date).getFullYear() % 100 + (u >= m ? 0 : -100)), y > -1)for (g = 1, v = y; ;) {
+ if (a = this._getDaysInMonth(m, g - 1), a >= v)break;
+ g++, v -= a
+ }
+ if (r = this._daylightSavingAdjust(new Date(m, g - 1, v)), r.getFullYear() !== m || r.getMonth() + 1 !== g || r.getDate() !== v)throw"Invalid date";
+ return r
+ },
+ ATOM: "yy-mm-dd",
+ COOKIE: "D, dd M yy",
+ ISO_8601: "yy-mm-dd",
+ RFC_822: "D, d M y",
+ RFC_850: "DD, dd-M-y",
+ RFC_1036: "D, d M y",
+ RFC_1123: "D, d M yy",
+ RFC_2822: "D, d M yy",
+ RSS: "D, d M y",
+ TICKS: "!",
+ TIMESTAMP: "@",
+ W3C: "yy-mm-dd",
+ _ticksTo1970: 1e7 * 60 * 60 * 24 * (718685 + Math.floor(492.5) - Math.floor(19.7) + Math.floor(4.925)),
+ formatDate: function (e, t, i) {
+ if (!t)return "";
+ var s, n = (i ? i.dayNamesShort : null) || this._defaults.dayNamesShort, a = (i ? i.dayNames : null) || this._defaults.dayNames, o = (i ? i.monthNamesShort : null) || this._defaults.monthNamesShort, r = (i ? i.monthNames : null) || this._defaults.monthNames, h = function (t) {
+ var i = e.length > s + 1 && e.charAt(s + 1) === t;
+ return i && s++, i
+ }, l = function (e, t, i) {
+ var s = "" + t;
+ if (h(e))for (; i > s.length;)s = "0" + s;
+ return s
+ }, u = function (e, t, i, s) {
+ return h(e) ? s[t] : i[t]
+ }, d = "", c = !1;
+ if (t)for (s = 0; e.length > s; s++)if (c)"'" !== e.charAt(s) || h("'") ? d += e.charAt(s) : c = !1; else switch (e.charAt(s)) {
+ case"d":
+ d += l("d", t.getDate(), 2);
+ break;
+ case"D":
+ d += u("D", t.getDay(), n, a);
+ break;
+ case"o":
+ d += l("o", Math.round((new Date(t.getFullYear(), t.getMonth(), t.getDate()).getTime() - new Date(t.getFullYear(), 0, 0).getTime()) / 864e5), 3);
+ break;
+ case"m":
+ d += l("m", t.getMonth() + 1, 2);
+ break;
+ case"M":
+ d += u("M", t.getMonth(), o, r);
+ break;
+ case"y":
+ d += h("y") ? t.getFullYear() : (10 > t.getYear() % 100 ? "0" : "") + t.getYear() % 100;
+ break;
+ case"@":
+ d += t.getTime();
+ break;
+ case"!":
+ d += 1e4 * t.getTime() + this._ticksTo1970;
+ break;
+ case"'":
+ h("'") ? d += "'" : c = !0;
+ break;
+ default:
+ d += e.charAt(s)
+ }
+ return d
+ },
+ _possibleChars: function (e) {
+ var t, i = "", s = !1, n = function (i) {
+ var s = e.length > t + 1 && e.charAt(t + 1) === i;
+ return s && t++, s
+ };
+ for (t = 0; e.length > t; t++)if (s)"'" !== e.charAt(t) || n("'") ? i += e.charAt(t) : s = !1; else switch (e.charAt(t)) {
+ case"d":
+ case"m":
+ case"y":
+ case"@":
+ i += "0123456789";
+ break;
+ case"D":
+ case"M":
+ return null;
+ case"'":
+ n("'") ? i += "'" : s = !0;
+ break;
+ default:
+ i += e.charAt(t)
+ }
+ return i
+ },
+ _get: function (e, t) {
+ return void 0 !== e.settings[t] ? e.settings[t] : this._defaults[t]
+ },
+ _setDateFromField: function (e, t) {
+ if (e.input.val() !== e.lastVal) {
+ var i = this._get(e, "dateFormat"), s = e.lastVal = e.input ? e.input.val() : null, n = this._getDefaultDate(e), a = n, o = this._getFormatConfig(e);
+ try {
+ a = this.parseDate(i, s, o) || n
+ } catch (r) {
+ s = t ? "" : s
+ }
+ e.selectedDay = a.getDate(), e.drawMonth = e.selectedMonth = a.getMonth(), e.drawYear = e.selectedYear = a.getFullYear(), e.currentDay = s ? a.getDate() : 0, e.currentMonth = s ? a.getMonth() : 0, e.currentYear = s ? a.getFullYear() : 0, this._adjustInstDate(e)
+ }
+ },
+ _getDefaultDate: function (e) {
+ return this._restrictMinMax(e, this._determineDate(e, this._get(e, "defaultDate"), new Date))
+ },
+ _determineDate: function (t, i, s) {
+ var n = function (e) {
+ var t = new Date;
+ return t.setDate(t.getDate() + e), t
+ }, a = function (i) {
+ try {
+ return e.datepicker.parseDate(e.datepicker._get(t, "dateFormat"), i, e.datepicker._getFormatConfig(t))
+ } catch (s) {
+ }
+ for (var n = (i.toLowerCase().match(/^c/) ? e.datepicker._getDate(t) : null) || new Date, a = n.getFullYear(), o = n.getMonth(), r = n.getDate(), h = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g, l = h.exec(i); l;) {
+ switch (l[2] || "d") {
+ case"d":
+ case"D":
+ r += parseInt(l[1], 10);
+ break;
+ case"w":
+ case"W":
+ r += 7 * parseInt(l[1], 10);
+ break;
+ case"m":
+ case"M":
+ o += parseInt(l[1], 10), r = Math.min(r, e.datepicker._getDaysInMonth(a, o));
+ break;
+ case"y":
+ case"Y":
+ a += parseInt(l[1], 10), r = Math.min(r, e.datepicker._getDaysInMonth(a, o))
+ }
+ l = h.exec(i)
+ }
+ return new Date(a, o, r)
+ }, o = null == i || "" === i ? s : "string" == typeof i ? a(i) : "number" == typeof i ? isNaN(i) ? s : n(i) : new Date(i.getTime());
+ return o = o && "Invalid Date" == "" + o ? s : o, o && (o.setHours(0), o.setMinutes(0), o.setSeconds(0), o.setMilliseconds(0)), this._daylightSavingAdjust(o)
+ },
+ _daylightSavingAdjust: function (e) {
+ return e ? (e.setHours(e.getHours() > 12 ? e.getHours() + 2 : 0), e) : null
+ },
+ _setDate: function (e, t, i) {
+ var s = !t, n = e.selectedMonth, a = e.selectedYear, o = this._restrictMinMax(e, this._determineDate(e, t, new Date));
+ e.selectedDay = e.currentDay = o.getDate(), e.drawMonth = e.selectedMonth = e.currentMonth = o.getMonth(), e.drawYear = e.selectedYear = e.currentYear = o.getFullYear(), n === e.selectedMonth && a === e.selectedYear || i || this._notifyChange(e), this._adjustInstDate(e), e.input && e.input.val(s ? "" : this._formatDate(e))
+ },
+ _getDate: function (e) {
+ var t = !e.currentYear || e.input && "" === e.input.val() ? null : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay));
+ return t
+ },
+ _attachHandlers: function (t) {
+ var i = this._get(t, "stepMonths"), s = "#" + t.id.replace(/\\\\/g, "\\");
+ t.dpDiv.find("[data-handler]").map(function () {
+ var t = {
+ prev: function () {
+ e.datepicker._adjustDate(s, -i, "M")
+ }, next: function () {
+ e.datepicker._adjustDate(s, +i, "M")
+ }, hide: function () {
+ e.datepicker._hideDatepicker()
+ }, today: function () {
+ e.datepicker._gotoToday(s)
+ }, selectDay: function () {
+ return e.datepicker._selectDay(s, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this), !1
+ }, selectMonth: function () {
+ return e.datepicker._selectMonthYear(s, this, "M"), !1
+ }, selectYear: function () {
+ return e.datepicker._selectMonthYear(s, this, "Y"), !1
+ }
+ };
+ e(this).bind(this.getAttribute("data-event"), t[this.getAttribute("data-handler")])
+ })
+ },
+ _generateHTML: function (e) {
+ var t, i, s, n, a, o, r, h, l, u, d, c, p, f, m, g, v, y, b, _, x, w, k, T, D, S, M, C, N, A, P, I, H, z, F, E, O, j, W, L = new Date, R = this._daylightSavingAdjust(new Date(L.getFullYear(), L.getMonth(), L.getDate())), Y = this._get(e, "isRTL"), B = this._get(e, "showButtonPanel"), J = this._get(e, "hideIfNoPrevNext"), q = this._get(e, "navigationAsDateFormat"), K = this._getNumberOfMonths(e), V = this._get(e, "showCurrentAtPos"), U = this._get(e, "stepMonths"), Q = 1 !== K[0] || 1 !== K[1], G = this._daylightSavingAdjust(e.currentDay ? new Date(e.currentYear, e.currentMonth, e.currentDay) : new Date(9999, 9, 9)), X = this._getMinMaxDate(e, "min"), $ = this._getMinMaxDate(e, "max"), Z = e.drawMonth - V, et = e.drawYear;
+ if (0 > Z && (Z += 12, et--), $)for (t = this._daylightSavingAdjust(new Date($.getFullYear(), $.getMonth() - K[0] * K[1] + 1, $.getDate())), t = X && X > t ? X : t; this._daylightSavingAdjust(new Date(et, Z, 1)) > t;)Z--, 0 > Z && (Z = 11, et--);
+ for (e.drawMonth = Z, e.drawYear = et, i = this._get(e, "prevText"), i = q ? this.formatDate(i, this._daylightSavingAdjust(new Date(et, Z - U, 1)), this._getFormatConfig(e)) : i, s = this._canAdjustMonth(e, -1, et, Z) ? "<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "e" : "w") + "'>" + i + "</span></a>" : J ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='" + i + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "e" : "w") + "'>" + i + "</span></a>", n = this._get(e, "nextText"), n = q ? this.formatDate(n, this._daylightSavingAdjust(new Date(et, Z + U, 1)), this._getFormatConfig(e)) : n, a = this._canAdjustMonth(e, 1, et, Z) ? "<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='" + n + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "w" : "e") + "'>" + n + "</span></a>" : J ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='" + n + "'><span class='ui-icon ui-icon-circle-triangle-" + (Y ? "w" : "e") + "'>" + n + "</span></a>", o = this._get(e, "currentText"), r = this._get(e, "gotoCurrent") && e.currentDay ? G : R, o = q ? this.formatDate(o, r, this._getFormatConfig(e)) : o, h = e.inline ? "" : "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" + this._get(e, "closeText") + "</button>", l = B ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (Y ? h : "") + (this._isInRange(e, r) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>" + o + "</button>" : "") + (Y ? "" : h) + "</div>" : "", u = parseInt(this._get(e, "firstDay"), 10), u = isNaN(u) ? 0 : u, d = this._get(e, "showWeek"), c = this._get(e, "dayNames"), p = this._get(e, "dayNamesMin"), f = this._get(e, "monthNames"), m = this._get(e, "monthNamesShort"), g = this._get(e, "beforeShowDay"), v = this._get(e, "showOtherMonths"), y = this._get(e, "selectOtherMonths"), b = this._getDefaultDate(e), _ = "", w = 0; K[0] > w; w++) {
+ for (k = "", this.maxRows = 4, T = 0; K[1] > T; T++) {
+ if (D = this._daylightSavingAdjust(new Date(et, Z, e.selectedDay)), S = " ui-corner-all", M = "", Q) {
+ if (M += "<div class='ui-datepicker-group", K[1] > 1)switch (T) {
+ case 0:
+ M += " ui-datepicker-group-first", S = " ui-corner-" + (Y ? "right" : "left");
+ break;
+ case K[1] - 1:
+ M += " ui-datepicker-group-last", S = " ui-corner-" + (Y ? "left" : "right");
+ break;
+ default:
+ M += " ui-datepicker-group-middle", S = ""
+ }
+ M += "'>"
+ }
+ for (M += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + S + "'>" + (/all|left/.test(S) && 0 === w ? Y ? a : s : "") + (/all|right/.test(S) && 0 === w ? Y ? s : a : "") + this._generateMonthYearHeader(e, Z, et, X, $, w > 0 || T > 0, f, m) + "</div><table class='ui-datepicker-calendar'><thead>" + "<tr>", C = d ? "<th class='ui-datepicker-week-col'>" + this._get(e, "weekHeader") + "</th>" : "", x = 0; 7 > x; x++)N = (x + u) % 7, C += "<th scope='col'" + ((x + u + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" + "<span title='" + c[N] + "'>" + p[N] + "</span></th>";
+ for (M += C + "</tr></thead><tbody>", A = this._getDaysInMonth(et, Z), et === e.selectedYear && Z === e.selectedMonth && (e.selectedDay = Math.min(e.selectedDay, A)), P = (this._getFirstDayOfMonth(et, Z) - u + 7) % 7, I = Math.ceil((P + A) / 7), H = Q ? this.maxRows > I ? this.maxRows : I : I, this.maxRows = H, z = this._daylightSavingAdjust(new Date(et, Z, 1 - P)), F = 0; H > F; F++) {
+ for (M += "<tr>", E = d ? "<td class='ui-datepicker-week-col'>" + this._get(e, "calculateWeek")(z) + "</td>" : "", x = 0; 7 > x; x++)O = g ? g.apply(e.input ? e.input[0] : null, [z]) : [!0, ""], j = z.getMonth() !== Z, W = j && !y || !O[0] || X && X > z || $ && z > $, E += "<td class='" + ((x + u + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + (j ? " ui-datepicker-other-month" : "") + (z.getTime() === D.getTime() && Z === e.selectedMonth && e._keyEvent || b.getTime() === z.getTime() && b.getTime() === D.getTime() ? " " + this._dayOverClass : "") + (W ? " " + this._unselectableClass + " ui-state-disabled" : "") + (j && !v ? "" : " " + O[1] + (z.getTime() === G.getTime() ? " " + this._currentClass : "") + (z.getTime() === R.getTime() ? " ui-datepicker-today" : "")) + "'" + (j && !v || !O[2] ? "" : " title='" + O[2].replace(/'/g, "&#39;") + "'") + (W ? "" : " data-handler='selectDay' data-event='click' data-month='" + z.getMonth() + "' data-year='" + z.getFullYear() + "'") + ">" + (j && !v ? "&#xa0;" : W ? "<span class='ui-state-default'>" + z.getDate() + "</span>" : "<a class='ui-state-default" + (z.getTime() === R.getTime() ? " ui-state-highlight" : "") + (z.getTime() === G.getTime() ? " ui-state-active" : "") + (j ? " ui-priority-secondary" : "") + "' href='#'>" + z.getDate() + "</a>") + "</td>", z.setDate(z.getDate() + 1), z = this._daylightSavingAdjust(z);
+ M += E + "</tr>"
+ }
+ Z++, Z > 11 && (Z = 0, et++), M += "</tbody></table>" + (Q ? "</div>" + (K[0] > 0 && T === K[1] - 1 ? "<div class='ui-datepicker-row-break'></div>" : "") : ""), k += M
+ }
+ _ += k
+ }
+ return _ += l, e._keyEvent = !1, _
+ },
+ _generateMonthYearHeader: function (e, t, i, s, n, a, o, r) {
+ var h, l, u, d, c, p, f, m, g = this._get(e, "changeMonth"), v = this._get(e, "changeYear"), y = this._get(e, "showMonthAfterYear"), b = "<div class='ui-datepicker-title'>", _ = "";
+ if (a || !g)_ += "<span class='ui-datepicker-month'>" + o[t] + "</span>"; else {
+ for (h = s && s.getFullYear() === i, l = n && n.getFullYear() === i, _ += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>", u = 0; 12 > u; u++)(!h || u >= s.getMonth()) && (!l || n.getMonth() >= u) && (_ += "<option value='" + u + "'" + (u === t ? " selected='selected'" : "") + ">" + r[u] + "</option>");
+ _ += "</select>"
+ }
+ if (y || (b += _ + (!a && g && v ? "" : "&#xa0;")), !e.yearshtml)if (e.yearshtml = "", a || !v)b += "<span class='ui-datepicker-year'>" + i + "</span>"; else {
+ for (d = this._get(e, "yearRange").split(":"), c = (new Date).getFullYear(), p = function (e) {
+ var t = e.match(/c[+\-].*/) ? i + parseInt(e.substring(1), 10) : e.match(/[+\-].*/) ? c + parseInt(e, 10) : parseInt(e, 10);
+ return isNaN(t) ? c : t
+ }, f = p(d[0]), m = Math.max(f, p(d[1] || "")), f = s ? Math.max(f, s.getFullYear()) : f, m = n ? Math.min(m, n.getFullYear()) : m, e.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>"; m >= f; f++)e.yearshtml += "<option value='" + f + "'" + (f === i ? " selected='selected'" : "") + ">" + f + "</option>";
+ e.yearshtml += "</select>", b += e.yearshtml, e.yearshtml = null
+ }
+ return b += this._get(e, "yearSuffix"), y && (b += (!a && g && v ? "" : "&#xa0;") + _), b += "</div>"
+ },
+ _adjustInstDate: function (e, t, i) {
+ var s = e.drawYear + ("Y" === i ? t : 0), n = e.drawMonth + ("M" === i ? t : 0), a = Math.min(e.selectedDay, this._getDaysInMonth(s, n)) + ("D" === i ? t : 0), o = this._restrictMinMax(e, this._daylightSavingAdjust(new Date(s, n, a)));
+ e.selectedDay = o.getDate(), e.drawMonth = e.selectedMonth = o.getMonth(), e.drawYear = e.selectedYear = o.getFullYear(), ("M" === i || "Y" === i) && this._notifyChange(e)
+ },
+ _restrictMinMax: function (e, t) {
+ var i = this._getMinMaxDate(e, "min"), s = this._getMinMaxDate(e, "max"), n = i && i > t ? i : t;
+ return s && n > s ? s : n
+ },
+ _notifyChange: function (e) {
+ var t = this._get(e, "onChangeMonthYear");
+ t && t.apply(e.input ? e.input[0] : null, [e.selectedYear, e.selectedMonth + 1, e])
+ },
+ _getNumberOfMonths: function (e) {
+ var t = this._get(e, "numberOfMonths");
+ return null == t ? [1, 1] : "number" == typeof t ? [1, t] : t
+ },
+ _getMinMaxDate: function (e, t) {
+ return this._determineDate(e, this._get(e, t + "Date"), null)
+ },
+ _getDaysInMonth: function (e, t) {
+ return 32 - this._daylightSavingAdjust(new Date(e, t, 32)).getDate()
+ },
+ _getFirstDayOfMonth: function (e, t) {
+ return new Date(e, t, 1).getDay()
+ },
+ _canAdjustMonth: function (e, t, i, s) {
+ var n = this._getNumberOfMonths(e), a = this._daylightSavingAdjust(new Date(i, s + (0 > t ? t : n[0] * n[1]), 1));
+ return 0 > t && a.setDate(this._getDaysInMonth(a.getFullYear(), a.getMonth())), this._isInRange(e, a)
+ },
+ _isInRange: function (e, t) {
+ var i, s, n = this._getMinMaxDate(e, "min"), a = this._getMinMaxDate(e, "max"), o = null, r = null, h = this._get(e, "yearRange");
+ return h && (i = h.split(":"), s = (new Date).getFullYear(), o = parseInt(i[0], 10), r = parseInt(i[1], 10), i[0].match(/[+\-].*/) && (o += s), i[1].match(/[+\-].*/) && (r += s)), (!n || t.getTime() >= n.getTime()) && (!a || t.getTime() <= a.getTime()) && (!o || t.getFullYear() >= o) && (!r || r >= t.getFullYear())
+ },
+ _getFormatConfig: function (e) {
+ var t = this._get(e, "shortYearCutoff");
+ return t = "string" != typeof t ? t : (new Date).getFullYear() % 100 + parseInt(t, 10), {
+ shortYearCutoff: t,
+ dayNamesShort: this._get(e, "dayNamesShort"),
+ dayNames: this._get(e, "dayNames"),
+ monthNamesShort: this._get(e, "monthNamesShort"),
+ monthNames: this._get(e, "monthNames")
+ }
+ },
+ _formatDate: function (e, t, i, s) {
+ t || (e.currentDay = e.selectedDay, e.currentMonth = e.selectedMonth, e.currentYear = e.selectedYear);
+ var n = t ? "object" == typeof t ? t : this._daylightSavingAdjust(new Date(s, i, t)) : this._daylightSavingAdjust(new Date(e.currentYear, e.currentMonth, e.currentDay));
+ return this.formatDate(this._get(e, "dateFormat"), n, this._getFormatConfig(e))
+ }
+ }), e.fn.datepicker = function (t) {
+ if (!this.length)return this;
+ e.datepicker.initialized || (e(document).mousedown(e.datepicker._checkExternalClick), e.datepicker.initialized = !0), 0 === e("#" + e.datepicker._mainDivId).length && e("body").append(e.datepicker.dpDiv);
+ var i = Array.prototype.slice.call(arguments, 1);
+ return "string" != typeof t || "isDisabled" !== t && "getDate" !== t && "widget" !== t ? "option" === t && 2 === arguments.length && "string" == typeof arguments[1] ? e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this[0]].concat(i)) : this.each(function () {
+ "string" == typeof t ? e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this].concat(i)) : e.datepicker._attachDatepicker(this, t)
+ }) : e.datepicker["_" + t + "Datepicker"].apply(e.datepicker, [this[0]].concat(i))
+ }, e.datepicker = new n, e.datepicker.initialized = !1, e.datepicker.uuid = (new Date).getTime(), e.datepicker.version = "1.11.4", e.datepicker, e.widget("ui.dialog", {
+ version: "1.11.4",
+ options: {
+ appendTo: "body",
+ autoOpen: !0,
+ buttons: [],
+ closeOnEscape: !0,
+ closeText: "Close",
+ dialogClass: "",
+ draggable: !0,
+ hide: null,
+ height: "auto",
+ maxHeight: null,
+ maxWidth: null,
+ minHeight: 150,
+ minWidth: 150,
+ modal: !1,
+ position: {
+ my: "center", at: "center", of: window, collision: "fit", using: function (t) {
+ var i = e(this).css(t).offset().top;
+ 0 > i && e(this).css("top", t.top - i)
+ }
+ },
+ resizable: !0,
+ show: null,
+ title: null,
+ width: 300,
+ beforeClose: null,
+ close: null,
+ drag: null,
+ dragStart: null,
+ dragStop: null,
+ focus: null,
+ open: null,
+ resize: null,
+ resizeStart: null,
+ resizeStop: null
+ },
+ sizeRelatedOptions: {
+ buttons: !0,
+ height: !0,
+ maxHeight: !0,
+ maxWidth: !0,
+ minHeight: !0,
+ minWidth: !0,
+ width: !0
+ },
+ resizableRelatedOptions: {maxHeight: !0, maxWidth: !0, minHeight: !0, minWidth: !0},
+ _create: function () {
+ this.originalCss = {
+ display: this.element[0].style.display,
+ width: this.element[0].style.width,
+ minHeight: this.element[0].style.minHeight,
+ maxHeight: this.element[0].style.maxHeight,
+ height: this.element[0].style.height
+ }, this.originalPosition = {
+ parent: this.element.parent(),
+ index: this.element.parent().children().index(this.element)
+ }, this.originalTitle = this.element.attr("title"), this.options.title = this.options.title || this.originalTitle, this._createWrapper(), this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog), this._createTitlebar(), this._createButtonPane(), this.options.draggable && e.fn.draggable && this._makeDraggable(), this.options.resizable && e.fn.resizable && this._makeResizable(), this._isOpen = !1, this._trackFocus()
+ },
+ _init: function () {
+ this.options.autoOpen && this.open()
+ },
+ _appendTo: function () {
+ var t = this.options.appendTo;
+ return t && (t.jquery || t.nodeType) ? e(t) : this.document.find(t || "body").eq(0)
+ },
+ _destroy: function () {
+ var e, t = this.originalPosition;
+ this._untrackInstance(), this._destroyOverlay(), this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(), this.uiDialog.stop(!0, !0).remove(), this.originalTitle && this.element.attr("title", this.originalTitle), e = t.parent.children().eq(t.index), e.length && e[0] !== this.element[0] ? e.before(this.element) : t.parent.append(this.element)
+ },
+ widget: function () {
+ return this.uiDialog
+ },
+ disable: e.noop,
+ enable: e.noop,
+ close: function (t) {
+ var i, s = this;
+ if (this._isOpen && this._trigger("beforeClose", t) !== !1) {
+ if (this._isOpen = !1, this._focusedElement = null, this._destroyOverlay(), this._untrackInstance(), !this.opener.filter(":focusable").focus().length)try {
+ i = this.document[0].activeElement, i && "body" !== i.nodeName.toLowerCase() && e(i).blur()
+ } catch (n) {
+ }
+ this._hide(this.uiDialog, this.options.hide, function () {
+ s._trigger("close", t)
+ })
+ }
+ },
+ isOpen: function () {
+ return this._isOpen
+ },
+ moveToTop: function () {
+ this._moveToTop()
+ },
+ _moveToTop: function (t, i) {
+ var s = !1, n = this.uiDialog.siblings(".ui-front:visible").map(function () {
+ return +e(this).css("z-index")
+ }).get(), a = Math.max.apply(null, n);
+ return a >= +this.uiDialog.css("z-index") && (this.uiDialog.css("z-index", a + 1), s = !0), s && !i && this._trigger("focus", t), s
+ },
+ open: function () {
+ var t = this;
+ return this._isOpen ? (this._moveToTop() && this._focusTabbable(), void 0) : (this._isOpen = !0, this.opener = e(this.document[0].activeElement), this._size(), this._position(), this._createOverlay(), this._moveToTop(null, !0), this.overlay && this.overlay.css("z-index", this.uiDialog.css("z-index") - 1), this._show(this.uiDialog, this.options.show, function () {
+ t._focusTabbable(), t._trigger("focus")
+ }), this._makeFocusTarget(), this._trigger("open"), void 0)
+ },
+ _focusTabbable: function () {
+ var e = this._focusedElement;
+ e || (e = this.element.find("[autofocus]")), e.length || (e = this.element.find(":tabbable")), e.length || (e = this.uiDialogButtonPane.find(":tabbable")), e.length || (e = this.uiDialogTitlebarClose.filter(":tabbable")), e.length || (e = this.uiDialog), e.eq(0).focus()
+ },
+ _keepFocus: function (t) {
+ function i() {
+ var t = this.document[0].activeElement, i = this.uiDialog[0] === t || e.contains(this.uiDialog[0], t);
+ i || this._focusTabbable()
+ }
+
+ t.preventDefault(), i.call(this), this._delay(i)
+ },
+ _createWrapper: function () {
+ this.uiDialog = e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " + this.options.dialogClass).hide().attr({
+ tabIndex: -1,
+ role: "dialog"
+ }).appendTo(this._appendTo()), this._on(this.uiDialog, {
+ keydown: function (t) {
+ if (this.options.closeOnEscape && !t.isDefaultPrevented() && t.keyCode && t.keyCode === e.ui.keyCode.ESCAPE)return t.preventDefault(), this.close(t), void 0;
+ if (t.keyCode === e.ui.keyCode.TAB && !t.isDefaultPrevented()) {
+ var i = this.uiDialog.find(":tabbable"), s = i.filter(":first"), n = i.filter(":last");
+ t.target !== n[0] && t.target !== this.uiDialog[0] || t.shiftKey ? t.target !== s[0] && t.target !== this.uiDialog[0] || !t.shiftKey || (this._delay(function () {
+ n.focus()
+ }), t.preventDefault()) : (this._delay(function () {
+ s.focus()
+ }), t.preventDefault())
+ }
+ }, mousedown: function (e) {
+ this._moveToTop(e) && this._focusTabbable()
+ }
+ }), this.element.find("[aria-describedby]").length || this.uiDialog.attr({"aria-describedby": this.element.uniqueId().attr("id")})
+ },
+ _createTitlebar: function () {
+ var t;
+ this.uiDialogTitlebar = e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog), this._on(this.uiDialogTitlebar, {
+ mousedown: function (t) {
+ e(t.target).closest(".ui-dialog-titlebar-close") || this.uiDialog.focus()
+ }
+ }), this.uiDialogTitlebarClose = e("<button type='button'></button>").button({
+ label: this.options.closeText,
+ icons: {primary: "ui-icon-closethick"},
+ text: !1
+ }).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar), this._on(this.uiDialogTitlebarClose, {
+ click: function (e) {
+ e.preventDefault(), this.close(e)
+ }
+ }), t = e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar), this._title(t), this.uiDialog.attr({"aria-labelledby": t.attr("id")})
+ },
+ _title: function (e) {
+ this.options.title || e.html("&#160;"), e.text(this.options.title)
+ },
+ _createButtonPane: function () {
+ this.uiDialogButtonPane = e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"), this.uiButtonSet = e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane), this._createButtons()
+ },
+ _createButtons: function () {
+ var t = this, i = this.options.buttons;
+ return this.uiDialogButtonPane.remove(), this.uiButtonSet.empty(), e.isEmptyObject(i) || e.isArray(i) && !i.length ? (this.uiDialog.removeClass("ui-dialog-buttons"), void 0) : (e.each(i, function (i, s) {
+ var n, a;
+ s = e.isFunction(s) ? {
+ click: s,
+ text: i
+ } : s, s = e.extend({type: "button"}, s), n = s.click, s.click = function () {
+ n.apply(t.element[0], arguments)
+ }, a = {
+ icons: s.icons,
+ text: s.showText
+ }, delete s.icons, delete s.showText, e("<button></button>", s).button(a).appendTo(t.uiButtonSet)
+ }), this.uiDialog.addClass("ui-dialog-buttons"), this.uiDialogButtonPane.appendTo(this.uiDialog), void 0)
+ },
+ _makeDraggable: function () {
+ function t(e) {
+ return {position: e.position, offset: e.offset}
+ }
+
+ var i = this, s = this.options;
+ this.uiDialog.draggable({
+ cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+ handle: ".ui-dialog-titlebar",
+ containment: "document",
+ start: function (s, n) {
+ e(this).addClass("ui-dialog-dragging"), i._blockFrames(), i._trigger("dragStart", s, t(n))
+ },
+ drag: function (e, s) {
+ i._trigger("drag", e, t(s))
+ },
+ stop: function (n, a) {
+ var o = a.offset.left - i.document.scrollLeft(), r = a.offset.top - i.document.scrollTop();
+ s.position = {
+ my: "left top",
+ at: "left" + (o >= 0 ? "+" : "") + o + " " + "top" + (r >= 0 ? "+" : "") + r,
+ of: i.window
+ }, e(this).removeClass("ui-dialog-dragging"), i._unblockFrames(), i._trigger("dragStop", n, t(a))
+ }
+ })
+ },
+ _makeResizable: function () {
+ function t(e) {
+ return {
+ originalPosition: e.originalPosition,
+ originalSize: e.originalSize,
+ position: e.position,
+ size: e.size
+ }
+ }
+
+ var i = this, s = this.options, n = s.resizable, a = this.uiDialog.css("position"), o = "string" == typeof n ? n : "n,e,s,w,se,sw,ne,nw";
+ this.uiDialog.resizable({
+ cancel: ".ui-dialog-content",
+ containment: "document",
+ alsoResize: this.element,
+ maxWidth: s.maxWidth,
+ maxHeight: s.maxHeight,
+ minWidth: s.minWidth,
+ minHeight: this._minHeight(),
+ handles: o,
+ start: function (s, n) {
+ e(this).addClass("ui-dialog-resizing"), i._blockFrames(), i._trigger("resizeStart", s, t(n))
+ },
+ resize: function (e, s) {
+ i._trigger("resize", e, t(s))
+ },
+ stop: function (n, a) {
+ var o = i.uiDialog.offset(), r = o.left - i.document.scrollLeft(), h = o.top - i.document.scrollTop();
+ s.height = i.uiDialog.height(), s.width = i.uiDialog.width(), s.position = {
+ my: "left top",
+ at: "left" + (r >= 0 ? "+" : "") + r + " " + "top" + (h >= 0 ? "+" : "") + h,
+ of: i.window
+ }, e(this).removeClass("ui-dialog-resizing"), i._unblockFrames(), i._trigger("resizeStop", n, t(a))
+ }
+ }).css("position", a)
+ },
+ _trackFocus: function () {
+ this._on(this.widget(), {
+ focusin: function (t) {
+ this._makeFocusTarget(), this._focusedElement = e(t.target)
+ }
+ })
+ },
+ _makeFocusTarget: function () {
+ this._untrackInstance(), this._trackingInstances().unshift(this)
+ },
+ _untrackInstance: function () {
+ var t = this._trackingInstances(), i = e.inArray(this, t);
+ -1 !== i && t.splice(i, 1)
+ },
+ _trackingInstances: function () {
+ var e = this.document.data("ui-dialog-instances");
+ return e || (e = [], this.document.data("ui-dialog-instances", e)), e
+ },
+ _minHeight: function () {
+ var e = this.options;
+ return "auto" === e.height ? e.minHeight : Math.min(e.minHeight, e.height)
+ },
+ _position: function () {
+ var e = this.uiDialog.is(":visible");
+ e || this.uiDialog.show(), this.uiDialog.position(this.options.position), e || this.uiDialog.hide()
+ },
+ _setOptions: function (t) {
+ var i = this, s = !1, n = {};
+ e.each(t, function (e, t) {
+ i._setOption(e, t), e in i.sizeRelatedOptions && (s = !0), e in i.resizableRelatedOptions && (n[e] = t)
+ }), s && (this._size(), this._position()), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", n)
+ },
+ _setOption: function (e, t) {
+ var i, s, n = this.uiDialog;
+ "dialogClass" === e && n.removeClass(this.options.dialogClass).addClass(t), "disabled" !== e && (this._super(e, t), "appendTo" === e && this.uiDialog.appendTo(this._appendTo()), "buttons" === e && this._createButtons(), "closeText" === e && this.uiDialogTitlebarClose.button({label: "" + t}), "draggable" === e && (i = n.is(":data(ui-draggable)"), i && !t && n.draggable("destroy"), !i && t && this._makeDraggable()), "position" === e && this._position(), "resizable" === e && (s = n.is(":data(ui-resizable)"), s && !t && n.resizable("destroy"), s && "string" == typeof t && n.resizable("option", "handles", t), s || t === !1 || this._makeResizable()), "title" === e && this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))
+ },
+ _size: function () {
+ var e, t, i, s = this.options;
+ this.element.show().css({
+ width: "auto",
+ minHeight: 0,
+ maxHeight: "none",
+ height: 0
+ }), s.minWidth > s.width && (s.width = s.minWidth), e = this.uiDialog.css({
+ height: "auto",
+ width: s.width
+ }).outerHeight(), t = Math.max(0, s.minHeight - e), i = "number" == typeof s.maxHeight ? Math.max(0, s.maxHeight - e) : "none", "auto" === s.height ? this.element.css({
+ minHeight: t,
+ maxHeight: i,
+ height: "auto"
+ }) : this.element.height(Math.max(0, s.height - e)), this.uiDialog.is(":data(ui-resizable)") && this.uiDialog.resizable("option", "minHeight", this._minHeight())
+ },
+ _blockFrames: function () {
+ this.iframeBlocks = this.document.find("iframe").map(function () {
+ var t = e(this);
+ return e("<div>").css({
+ position: "absolute",
+ width: t.outerWidth(),
+ height: t.outerHeight()
+ }).appendTo(t.parent()).offset(t.offset())[0]
+ })
+ },
+ _unblockFrames: function () {
+ this.iframeBlocks && (this.iframeBlocks.remove(), delete this.iframeBlocks)
+ },
+ _allowInteraction: function (t) {
+ return e(t.target).closest(".ui-dialog").length ? !0 : !!e(t.target).closest(".ui-datepicker").length
+ },
+ _createOverlay: function () {
+ if (this.options.modal) {
+ var t = !0;
+ this._delay(function () {
+ t = !1
+ }), this.document.data("ui-dialog-overlays") || this._on(this.document, {
+ focusin: function (e) {
+ t || this._allowInteraction(e) || (e.preventDefault(), this._trackingInstances()[0]._focusTabbable())
+ }
+ }), this.overlay = e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()), this._on(this.overlay, {mousedown: "_keepFocus"}), this.document.data("ui-dialog-overlays", (this.document.data("ui-dialog-overlays") || 0) + 1)
+ }
+ },
+ _destroyOverlay: function () {
+ if (this.options.modal && this.overlay) {
+ var e = this.document.data("ui-dialog-overlays") - 1;
+ e ? this.document.data("ui-dialog-overlays", e) : this.document.unbind("focusin").removeData("ui-dialog-overlays"), this.overlay.remove(), this.overlay = null
+ }
+ }
+ }), e.widget("ui.progressbar", {
+ version: "1.11.4",
+ options: {max: 100, value: 0, change: null, complete: null},
+ min: 0,
+ _create: function () {
+ this.oldValue = this.options.value = this._constrainedValue(), this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({
+ role: "progressbar",
+ "aria-valuemin": this.min
+ }), this.valueDiv = e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element), this._refreshValue()
+ },
+ _destroy: function () {
+ this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"), this.valueDiv.remove()
+ },
+ value: function (e) {
+ return void 0 === e ? this.options.value : (this.options.value = this._constrainedValue(e), this._refreshValue(), void 0)
+ },
+ _constrainedValue: function (e) {
+ return void 0 === e && (e = this.options.value), this.indeterminate = e === !1, "number" != typeof e && (e = 0), this.indeterminate ? !1 : Math.min(this.options.max, Math.max(this.min, e))
+ },
+ _setOptions: function (e) {
+ var t = e.value;
+ delete e.value, this._super(e), this.options.value = this._constrainedValue(t), this._refreshValue()
+ },
+ _setOption: function (e, t) {
+ "max" === e && (t = Math.max(this.min, t)), "disabled" === e && this.element.toggleClass("ui-state-disabled", !!t).attr("aria-disabled", t), this._super(e, t)
+ },
+ _percentage: function () {
+ return this.indeterminate ? 100 : 100 * (this.options.value - this.min) / (this.options.max - this.min)
+ },
+ _refreshValue: function () {
+ var t = this.options.value, i = this._percentage();
+ this.valueDiv.toggle(this.indeterminate || t > this.min).toggleClass("ui-corner-right", t === this.options.max).width(i.toFixed(0) + "%"), this.element.toggleClass("ui-progressbar-indeterminate", this.indeterminate), this.indeterminate ? (this.element.removeAttr("aria-valuenow"), this.overlayDiv || (this.overlayDiv = e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))) : (this.element.attr({
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": t
+ }), this.overlayDiv && (this.overlayDiv.remove(), this.overlayDiv = null)), this.oldValue !== t && (this.oldValue = t, this._trigger("change")), t === this.options.max && this._trigger("complete")
+ }
+ }), e.widget("ui.selectmenu", {
+ version: "1.11.4",
+ defaultElement: "<select>",
+ options: {
+ appendTo: null,
+ disabled: null,
+ icons: {button: "ui-icon-triangle-1-s"},
+ position: {my: "left top", at: "left bottom", collision: "none"},
+ width: null,
+ change: null,
+ close: null,
+ focus: null,
+ open: null,
+ select: null
+ },
+ _create: function () {
+ var e = this.element.uniqueId().attr("id");
+ this.ids = {
+ element: e,
+ button: e + "-button",
+ menu: e + "-menu"
+ }, this._drawButton(), this._drawMenu(), this.options.disabled && this.disable()
+ },
+ _drawButton: function () {
+ var t = this;
+ this.label = e("label[for='" + this.ids.element + "']").attr("for", this.ids.button), this._on(this.label, {
+ click: function (e) {
+ this.button.focus(), e.preventDefault()
+ }
+ }), this.element.hide(), this.button = e("<span>", {
+ "class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+ tabindex: this.options.disabled ? -1 : 0,
+ id: this.ids.button,
+ role: "combobox",
+ "aria-expanded": "false",
+ "aria-autocomplete": "list",
+ "aria-owns": this.ids.menu,
+ "aria-haspopup": "true"
+ }).insertAfter(this.element), e("<span>", {"class": "ui-icon " + this.options.icons.button}).prependTo(this.button), this.buttonText = e("<span>", {"class": "ui-selectmenu-text"}).appendTo(this.button), this._setText(this.buttonText, this.element.find("option:selected").text()), this._resizeButton(), this._on(this.button, this._buttonEvents), this.button.one("focusin", function () {
+ t.menuItems || t._refreshMenu()
+ }), this._hoverable(this.button), this._focusable(this.button)
+ },
+ _drawMenu: function () {
+ var t = this;
+ this.menu = e("<ul>", {
+ "aria-hidden": "true",
+ "aria-labelledby": this.ids.button,
+ id: this.ids.menu
+ }), this.menuWrap = e("<div>", {"class": "ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()), this.menuInstance = this.menu.menu({
+ role: "listbox",
+ select: function (e, i) {
+ e.preventDefault(), t._setSelection(), t._select(i.item.data("ui-selectmenu-item"), e)
+ },
+ focus: function (e, i) {
+ var s = i.item.data("ui-selectmenu-item");
+ null != t.focusIndex && s.index !== t.focusIndex && (t._trigger("focus", e, {item: s}), t.isOpen || t._select(s, e)), t.focusIndex = s.index, t.button.attr("aria-activedescendant", t.menuItems.eq(s.index).attr("id"))
+ }
+ }).menu("instance"), this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"), this.menuInstance._off(this.menu, "mouseleave"), this.menuInstance._closeOnDocumentClick = function () {
+ return !1
+ }, this.menuInstance._isDivider = function () {
+ return !1
+ }
+ },
+ refresh: function () {
+ this._refreshMenu(), this._setText(this.buttonText, this._getSelectedItem().text()), this.options.width || this._resizeButton()
+ },
+ _refreshMenu: function () {
+ this.menu.empty();
+ var e, t = this.element.find("option");
+ t.length && (this._parseOptions(t), this._renderMenu(this.menu, this.items), this.menuInstance.refresh(), this.menuItems = this.menu.find("li").not(".ui-selectmenu-optgroup"), e = this._getSelectedItem(), this.menuInstance.focus(null, e), this._setAria(e.data("ui-selectmenu-item")), this._setOption("disabled", this.element.prop("disabled")))
+ },
+ open: function (e) {
+ this.options.disabled || (this.menuItems ? (this.menu.find(".ui-state-focus").removeClass("ui-state-focus"), this.menuInstance.focus(null, this._getSelectedItem())) : this._refreshMenu(), this.isOpen = !0, this._toggleAttr(), this._resizeMenu(), this._position(), this._on(this.document, this._documentClick), this._trigger("open", e))
+ },
+ _position: function () {
+ this.menuWrap.position(e.extend({of: this.button}, this.options.position))
+ },
+ close: function (e) {
+ this.isOpen && (this.isOpen = !1, this._toggleAttr(), this.range = null, this._off(this.document), this._trigger("close", e))
+ },
+ widget: function () {
+ return this.button
+ },
+ menuWidget: function () {
+ return this.menu
+ },
+ _renderMenu: function (t, i) {
+ var s = this, n = "";
+ e.each(i, function (i, a) {
+ a.optgroup !== n && (e("<li>", {
+ "class": "ui-selectmenu-optgroup ui-menu-divider" + (a.element.parent("optgroup").prop("disabled") ? " ui-state-disabled" : ""),
+ text: a.optgroup
+ }).appendTo(t), n = a.optgroup), s._renderItemData(t, a)
+ })
+ },
+ _renderItemData: function (e, t) {
+ return this._renderItem(e, t).data("ui-selectmenu-item", t)
+ },
+ _renderItem: function (t, i) {
+ var s = e("<li>");
+ return i.disabled && s.addClass("ui-state-disabled"), this._setText(s, i.label), s.appendTo(t)
+ },
+ _setText: function (e, t) {
+ t ? e.text(t) : e.html("&#160;")
+ },
+ _move: function (e, t) {
+ var i, s, n = ".ui-menu-item";
+ this.isOpen ? i = this.menuItems.eq(this.focusIndex) : (i = this.menuItems.eq(this.element[0].selectedIndex), n += ":not(.ui-state-disabled)"), s = "first" === e || "last" === e ? i["first" === e ? "prevAll" : "nextAll"](n).eq(-1) : i[e + "All"](n).eq(0), s.length && this.menuInstance.focus(t, s)
+ },
+ _getSelectedItem: function () {
+ return this.menuItems.eq(this.element[0].selectedIndex)
+ },
+ _toggle: function (e) {
+ this[this.isOpen ? "close" : "open"](e)
+ },
+ _setSelection: function () {
+ var e;
+ this.range && (window.getSelection ? (e = window.getSelection(), e.removeAllRanges(), e.addRange(this.range)) : this.range.select(), this.button.focus())
+ },
+ _documentClick: {
+ mousedown: function (t) {
+ this.isOpen && (e(t.target).closest(".ui-selectmenu-menu, #" + this.ids.button).length || this.close(t))
+ }
+ },
+ _buttonEvents: {
+ mousedown: function () {
+ var e;
+ window.getSelection ? (e = window.getSelection(), e.rangeCount && (this.range = e.getRangeAt(0))) : this.range = document.selection.createRange()
+ }, click: function (e) {
+ this._setSelection(), this._toggle(e)
+ }, keydown: function (t) {
+ var i = !0;
+ switch (t.keyCode) {
+ case e.ui.keyCode.TAB:
+ case e.ui.keyCode.ESCAPE:
+ this.close(t), i = !1;
+ break;
+ case e.ui.keyCode.ENTER:
+ this.isOpen && this._selectFocusedItem(t);
+ break;
+ case e.ui.keyCode.UP:
+ t.altKey ? this._toggle(t) : this._move("prev", t);
+ break;
+ case e.ui.keyCode.DOWN:
+ t.altKey ? this._toggle(t) : this._move("next", t);
+ break;
+ case e.ui.keyCode.SPACE:
+ this.isOpen ? this._selectFocusedItem(t) : this._toggle(t);
+ break;
+ case e.ui.keyCode.LEFT:
+ this._move("prev", t);
+ break;
+ case e.ui.keyCode.RIGHT:
+ this._move("next", t);
+ break;
+ case e.ui.keyCode.HOME:
+ case e.ui.keyCode.PAGE_UP:
+ this._move("first", t);
+ break;
+ case e.ui.keyCode.END:
+ case e.ui.keyCode.PAGE_DOWN:
+ this._move("last", t);
+ break;
+ default:
+ this.menu.trigger(t), i = !1
+ }
+ i && t.preventDefault()
+ }
+ },
+ _selectFocusedItem: function (e) {
+ var t = this.menuItems.eq(this.focusIndex);
+ t.hasClass("ui-state-disabled") || this._select(t.data("ui-selectmenu-item"), e)
+ },
+ _select: function (e, t) {
+ var i = this.element[0].selectedIndex;
+ this.element[0].selectedIndex = e.index, this._setText(this.buttonText, e.label), this._setAria(e), this._trigger("select", t, {item: e}), e.index !== i && this._trigger("change", t, {item: e}), this.close(t)
+ },
+ _setAria: function (e) {
+ var t = this.menuItems.eq(e.index).attr("id");
+ this.button.attr({
+ "aria-labelledby": t,
+ "aria-activedescendant": t
+ }), this.menu.attr("aria-activedescendant", t)
+ },
+ _setOption: function (e, t) {
+ "icons" === e && this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(t.button), this._super(e, t), "appendTo" === e && this.menuWrap.appendTo(this._appendTo()), "disabled" === e && (this.menuInstance.option("disabled", t), this.button.toggleClass("ui-state-disabled", t).attr("aria-disabled", t), this.element.prop("disabled", t), t ? (this.button.attr("tabindex", -1), this.close()) : this.button.attr("tabindex", 0)), "width" === e && this._resizeButton()
+ },
+ _appendTo: function () {
+ var t = this.options.appendTo;
+ return t && (t = t.jquery || t.nodeType ? e(t) : this.document.find(t).eq(0)), t && t[0] || (t = this.element.closest(".ui-front")), t.length || (t = this.document[0].body), t
+ },
+ _toggleAttr: function () {
+ this.button.toggleClass("ui-corner-top", this.isOpen).toggleClass("ui-corner-all", !this.isOpen).attr("aria-expanded", this.isOpen), this.menuWrap.toggleClass("ui-selectmenu-open", this.isOpen), this.menu.attr("aria-hidden", !this.isOpen)
+ },
+ _resizeButton: function () {
+ var e = this.options.width;
+ e || (e = this.element.show().outerWidth(), this.element.hide()), this.button.outerWidth(e)
+ },
+ _resizeMenu: function () {
+ this.menu.outerWidth(Math.max(this.button.outerWidth(), this.menu.width("").outerWidth() + 1))
+ },
+ _getCreateOptions: function () {
+ return {disabled: this.element.prop("disabled")}
+ },
+ _parseOptions: function (t) {
+ var i = [];
+ t.each(function (t, s) {
+ var n = e(s), a = n.parent("optgroup");
+ i.push({
+ element: n,
+ index: t,
+ value: n.val(),
+ label: n.text(),
+ optgroup: a.attr("label") || "",
+ disabled: a.prop("disabled") || n.prop("disabled")
+ })
+ }), this.items = i
+ },
+ _destroy: function () {
+ this.menuWrap.remove(), this.button.remove(), this.element.show(), this.element.removeUniqueId(), this.label.attr("for", this.ids.element)
+ }
+ }), e.widget("ui.slider", e.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "slide",
+ options: {
+ animate: !1,
+ distance: 0,
+ max: 100,
+ min: 0,
+ orientation: "horizontal",
+ range: !1,
+ step: 1,
+ value: 0,
+ values: null,
+ change: null,
+ slide: null,
+ start: null,
+ stop: null
+ },
+ numPages: 5,
+ _create: function () {
+ this._keySliding = !1, this._mouseSliding = !1, this._animateOff = !0, this._handleIndex = null, this._detectOrientation(), this._mouseInit(), this._calculateNewMax(), this.element.addClass("ui-slider ui-slider-" + this.orientation + " ui-widget" + " ui-widget-content" + " ui-corner-all"), this._refresh(), this._setOption("disabled", this.options.disabled), this._animateOff = !1
+ },
+ _refresh: function () {
+ this._createRange(), this._createHandles(), this._setupEvents(), this._refreshValue()
+ },
+ _createHandles: function () {
+ var t, i, s = this.options, n = this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"), a = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>", o = [];
+ for (i = s.values && s.values.length || 1, n.length > i && (n.slice(i).remove(), n = n.slice(0, i)), t = n.length; i > t; t++)o.push(a);
+ this.handles = n.add(e(o.join("")).appendTo(this.element)), this.handle = this.handles.eq(0), this.handles.each(function (t) {
+ e(this).data("ui-slider-handle-index", t)
+ })
+ },
+ _createRange: function () {
+ var t = this.options, i = "";
+ t.range ? (t.range === !0 && (t.values ? t.values.length && 2 !== t.values.length ? t.values = [t.values[0], t.values[0]] : e.isArray(t.values) && (t.values = t.values.slice(0)) : t.values = [this._valueMin(), this._valueMin()]), this.range && this.range.length ? this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({
+ left: "",
+ bottom: ""
+ }) : (this.range = e("<div></div>").appendTo(this.element), i = "ui-slider-range ui-widget-header ui-corner-all"), this.range.addClass(i + ("min" === t.range || "max" === t.range ? " ui-slider-range-" + t.range : ""))) : (this.range && this.range.remove(), this.range = null)
+ },
+ _setupEvents: function () {
+ this._off(this.handles), this._on(this.handles, this._handleEvents), this._hoverable(this.handles), this._focusable(this.handles)
+ },
+ _destroy: function () {
+ this.handles.remove(), this.range && this.range.remove(), this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"), this._mouseDestroy()
+ },
+ _mouseCapture: function (t) {
+ var i, s, n, a, o, r, h, l, u = this, d = this.options;
+ return d.disabled ? !1 : (this.elementSize = {
+ width: this.element.outerWidth(),
+ height: this.element.outerHeight()
+ }, this.elementOffset = this.element.offset(), i = {
+ x: t.pageX,
+ y: t.pageY
+ }, s = this._normValueFromMouse(i), n = this._valueMax() - this._valueMin() + 1, this.handles.each(function (t) {
+ var i = Math.abs(s - u.values(t));
+ (n > i || n === i && (t === u._lastChangedValue || u.values(t) === d.min)) && (n = i, a = e(this), o = t)
+ }), r = this._start(t, o), r === !1 ? !1 : (this._mouseSliding = !0, this._handleIndex = o, a.addClass("ui-state-active").focus(), h = a.offset(), l = !e(t.target).parents().addBack().is(".ui-slider-handle"), this._clickOffset = l ? {
+ left: 0,
+ top: 0
+ } : {
+ left: t.pageX - h.left - a.width() / 2,
+ top: t.pageY - h.top - a.height() / 2 - (parseInt(a.css("borderTopWidth"), 10) || 0) - (parseInt(a.css("borderBottomWidth"), 10) || 0) + (parseInt(a.css("marginTop"), 10) || 0)
+ }, this.handles.hasClass("ui-state-hover") || this._slide(t, o, s), this._animateOff = !0, !0))
+ },
+ _mouseStart: function () {
+ return !0
+ },
+ _mouseDrag: function (e) {
+ var t = {x: e.pageX, y: e.pageY}, i = this._normValueFromMouse(t);
+ return this._slide(e, this._handleIndex, i), !1
+ },
+ _mouseStop: function (e) {
+ return this.handles.removeClass("ui-state-active"), this._mouseSliding = !1, this._stop(e, this._handleIndex), this._change(e, this._handleIndex), this._handleIndex = null, this._clickOffset = null, this._animateOff = !1, !1
+ },
+ _detectOrientation: function () {
+ this.orientation = "vertical" === this.options.orientation ? "vertical" : "horizontal"
+ },
+ _normValueFromMouse: function (e) {
+ var t, i, s, n, a;
+ return "horizontal" === this.orientation ? (t = this.elementSize.width, i = e.x - this.elementOffset.left - (this._clickOffset ? this._clickOffset.left : 0)) : (t = this.elementSize.height, i = e.y - this.elementOffset.top - (this._clickOffset ? this._clickOffset.top : 0)), s = i / t, s > 1 && (s = 1), 0 > s && (s = 0), "vertical" === this.orientation && (s = 1 - s), n = this._valueMax() - this._valueMin(), a = this._valueMin() + s * n, this._trimAlignValue(a)
+ },
+ _start: function (e, t) {
+ var i = {handle: this.handles[t], value: this.value()};
+ return this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()), this._trigger("start", e, i)
+ },
+ _slide: function (e, t, i) {
+ var s, n, a;
+ this.options.values && this.options.values.length ? (s = this.values(t ? 0 : 1), 2 === this.options.values.length && this.options.range === !0 && (0 === t && i > s || 1 === t && s > i) && (i = s), i !== this.values(t) && (n = this.values(), n[t] = i, a = this._trigger("slide", e, {
+ handle: this.handles[t],
+ value: i,
+ values: n
+ }), s = this.values(t ? 0 : 1), a !== !1 && this.values(t, i))) : i !== this.value() && (a = this._trigger("slide", e, {
+ handle: this.handles[t],
+ value: i
+ }), a !== !1 && this.value(i))
+ },
+ _stop: function (e, t) {
+ var i = {handle: this.handles[t], value: this.value()};
+ this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()), this._trigger("stop", e, i)
+ },
+ _change: function (e, t) {
+ if (!this._keySliding && !this._mouseSliding) {
+ var i = {handle: this.handles[t], value: this.value()};
+ this.options.values && this.options.values.length && (i.value = this.values(t), i.values = this.values()), this._lastChangedValue = t, this._trigger("change", e, i)
+ }
+ },
+ value: function (e) {
+ return arguments.length ? (this.options.value = this._trimAlignValue(e), this._refreshValue(), this._change(null, 0), void 0) : this._value()
+ },
+ values: function (t, i) {
+ var s, n, a;
+ if (arguments.length > 1)return this.options.values[t] = this._trimAlignValue(i), this._refreshValue(), this._change(null, t), void 0;
+ if (!arguments.length)return this._values();
+ if (!e.isArray(arguments[0]))return this.options.values && this.options.values.length ? this._values(t) : this.value();
+ for (s = this.options.values, n = arguments[0], a = 0; s.length > a; a += 1)s[a] = this._trimAlignValue(n[a]), this._change(null, a);
+ this._refreshValue()
+ },
+ _setOption: function (t, i) {
+ var s, n = 0;
+ switch ("range" === t && this.options.range === !0 && ("min" === i ? (this.options.value = this._values(0), this.options.values = null) : "max" === i && (this.options.value = this._values(this.options.values.length - 1), this.options.values = null)), e.isArray(this.options.values) && (n = this.options.values.length), "disabled" === t && this.element.toggleClass("ui-state-disabled", !!i), this._super(t, i), t) {
+ case"orientation":
+ this._detectOrientation(), this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-" + this.orientation), this._refreshValue(), this.handles.css("horizontal" === i ? "bottom" : "left", "");
+ break;
+ case"value":
+ this._animateOff = !0, this._refreshValue(), this._change(null, 0), this._animateOff = !1;
+ break;
+ case"values":
+ for (this._animateOff = !0, this._refreshValue(), s = 0; n > s; s += 1)this._change(null, s);
+ this._animateOff = !1;
+ break;
+ case"step":
+ case"min":
+ case"max":
+ this._animateOff = !0, this._calculateNewMax(), this._refreshValue(), this._animateOff = !1;
+ break;
+ case"range":
+ this._animateOff = !0, this._refresh(), this._animateOff = !1
+ }
+ },
+ _value: function () {
+ var e = this.options.value;
+ return e = this._trimAlignValue(e)
+ },
+ _values: function (e) {
+ var t, i, s;
+ if (arguments.length)return t = this.options.values[e], t = this._trimAlignValue(t);
+ if (this.options.values && this.options.values.length) {
+ for (i = this.options.values.slice(), s = 0; i.length > s; s += 1)i[s] = this._trimAlignValue(i[s]);
+ return i
+ }
+ return []
+ },
+ _trimAlignValue: function (e) {
+ if (this._valueMin() >= e)return this._valueMin();
+ if (e >= this._valueMax())return this._valueMax();
+ var t = this.options.step > 0 ? this.options.step : 1, i = (e - this._valueMin()) % t, s = e - i;
+ return 2 * Math.abs(i) >= t && (s += i > 0 ? t : -t), parseFloat(s.toFixed(5))
+ },
+ _calculateNewMax: function () {
+ var e = this.options.max, t = this._valueMin(), i = this.options.step, s = Math.floor(+(e - t).toFixed(this._precision()) / i) * i;
+ e = s + t, this.max = parseFloat(e.toFixed(this._precision()))
+ },
+ _precision: function () {
+ var e = this._precisionOf(this.options.step);
+ return null !== this.options.min && (e = Math.max(e, this._precisionOf(this.options.min))), e
+ },
+ _precisionOf: function (e) {
+ var t = "" + e, i = t.indexOf(".");
+ return -1 === i ? 0 : t.length - i - 1
+ },
+ _valueMin: function () {
+ return this.options.min
+ },
+ _valueMax: function () {
+ return this.max
+ },
+ _refreshValue: function () {
+ var t, i, s, n, a, o = this.options.range, r = this.options, h = this, l = this._animateOff ? !1 : r.animate, u = {};
+ this.options.values && this.options.values.length ? this.handles.each(function (s) {
+ i = 100 * ((h.values(s) - h._valueMin()) / (h._valueMax() - h._valueMin())), u["horizontal" === h.orientation ? "left" : "bottom"] = i + "%", e(this).stop(1, 1)[l ? "animate" : "css"](u, r.animate), h.options.range === !0 && ("horizontal" === h.orientation ? (0 === s && h.range.stop(1, 1)[l ? "animate" : "css"]({left: i + "%"}, r.animate), 1 === s && h.range[l ? "animate" : "css"]({width: i - t + "%"}, {
+ queue: !1,
+ duration: r.animate
+ })) : (0 === s && h.range.stop(1, 1)[l ? "animate" : "css"]({bottom: i + "%"}, r.animate), 1 === s && h.range[l ? "animate" : "css"]({height: i - t + "%"}, {
+ queue: !1,
+ duration: r.animate
+ }))), t = i
+ }) : (s = this.value(), n = this._valueMin(), a = this._valueMax(), i = a !== n ? 100 * ((s - n) / (a - n)) : 0, u["horizontal" === this.orientation ? "left" : "bottom"] = i + "%", this.handle.stop(1, 1)[l ? "animate" : "css"](u, r.animate), "min" === o && "horizontal" === this.orientation && this.range.stop(1, 1)[l ? "animate" : "css"]({width: i + "%"}, r.animate), "max" === o && "horizontal" === this.orientation && this.range[l ? "animate" : "css"]({width: 100 - i + "%"}, {
+ queue: !1,
+ duration: r.animate
+ }), "min" === o && "vertical" === this.orientation && this.range.stop(1, 1)[l ? "animate" : "css"]({height: i + "%"}, r.animate), "max" === o && "vertical" === this.orientation && this.range[l ? "animate" : "css"]({height: 100 - i + "%"}, {
+ queue: !1,
+ duration: r.animate
+ }))
+ },
+ _handleEvents: {
+ keydown: function (t) {
+ var i, s, n, a, o = e(t.target).data("ui-slider-handle-index");
+ switch (t.keyCode) {
+ case e.ui.keyCode.HOME:
+ case e.ui.keyCode.END:
+ case e.ui.keyCode.PAGE_UP:
+ case e.ui.keyCode.PAGE_DOWN:
+ case e.ui.keyCode.UP:
+ case e.ui.keyCode.RIGHT:
+ case e.ui.keyCode.DOWN:
+ case e.ui.keyCode.LEFT:
+ if (t.preventDefault(), !this._keySliding && (this._keySliding = !0, e(t.target).addClass("ui-state-active"), i = this._start(t, o), i === !1))return
+ }
+ switch (a = this.options.step, s = n = this.options.values && this.options.values.length ? this.values(o) : this.value(), t.keyCode) {
+ case e.ui.keyCode.HOME:
+ n = this._valueMin();
+ break;
+ case e.ui.keyCode.END:
+ n = this._valueMax();
+ break;
+ case e.ui.keyCode.PAGE_UP:
+ n = this._trimAlignValue(s + (this._valueMax() - this._valueMin()) / this.numPages);
+ break;
+ case e.ui.keyCode.PAGE_DOWN:
+ n = this._trimAlignValue(s - (this._valueMax() - this._valueMin()) / this.numPages);
+ break;
+ case e.ui.keyCode.UP:
+ case e.ui.keyCode.RIGHT:
+ if (s === this._valueMax())return;
+ n = this._trimAlignValue(s + a);
+ break;
+ case e.ui.keyCode.DOWN:
+ case e.ui.keyCode.LEFT:
+ if (s === this._valueMin())return;
+ n = this._trimAlignValue(s - a)
+ }
+ this._slide(t, o, n)
+ }, keyup: function (t) {
+ var i = e(t.target).data("ui-slider-handle-index");
+ this._keySliding && (this._keySliding = !1, this._stop(t, i), this._change(t, i), e(t.target).removeClass("ui-state-active"))
+ }
+ }
+ }), e.widget("ui.spinner", {
+ version: "1.11.4",
+ defaultElement: "<input>",
+ widgetEventPrefix: "spin",
+ options: {
+ culture: null,
+ icons: {down: "ui-icon-triangle-1-s", up: "ui-icon-triangle-1-n"},
+ incremental: !0,
+ max: null,
+ min: null,
+ numberFormat: null,
+ page: 10,
+ step: 1,
+ change: null,
+ spin: null,
+ start: null,
+ stop: null
+ },
+ _create: function () {
+ this._setOption("max", this.options.max), this._setOption("min", this.options.min), this._setOption("step", this.options.step), "" !== this.value() && this._value(this.element.val(), !0), this._draw(), this._on(this._events), this._refresh(), this._on(this.window, {
+ beforeunload: function () {
+ this.element.removeAttr("autocomplete")
+ }
+ })
+ },
+ _getCreateOptions: function () {
+ var t = {}, i = this.element;
+ return e.each(["min", "max", "step"], function (e, s) {
+ var n = i.attr(s);
+ void 0 !== n && n.length && (t[s] = n)
+ }), t
+ },
+ _events: {
+ keydown: function (e) {
+ this._start(e) && this._keydown(e) && e.preventDefault()
+ }, keyup: "_stop", focus: function () {
+ this.previous = this.element.val()
+ }, blur: function (e) {
+ return this.cancelBlur ? (delete this.cancelBlur, void 0) : (this._stop(), this._refresh(), this.previous !== this.element.val() && this._trigger("change", e), void 0)
+ }, mousewheel: function (e, t) {
+ if (t) {
+ if (!this.spinning && !this._start(e))return !1;
+ this._spin((t > 0 ? 1 : -1) * this.options.step, e), clearTimeout(this.mousewheelTimer), this.mousewheelTimer = this._delay(function () {
+ this.spinning && this._stop(e)
+ }, 100), e.preventDefault()
+ }
+ }, "mousedown .ui-spinner-button": function (t) {
+ function i() {
+ var e = this.element[0] === this.document[0].activeElement;
+ e || (this.element.focus(), this.previous = s, this._delay(function () {
+ this.previous = s
+ }))
+ }
+
+ var s;
+ s = this.element[0] === this.document[0].activeElement ? this.previous : this.element.val(), t.preventDefault(), i.call(this), this.cancelBlur = !0, this._delay(function () {
+ delete this.cancelBlur, i.call(this)
+ }), this._start(t) !== !1 && this._repeat(null, e(t.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, t)
+ }, "mouseup .ui-spinner-button": "_stop", "mouseenter .ui-spinner-button": function (t) {
+ return e(t.currentTarget).hasClass("ui-state-active") ? this._start(t) === !1 ? !1 : (this._repeat(null, e(t.currentTarget).hasClass("ui-spinner-up") ? 1 : -1, t), void 0) : void 0
+ }, "mouseleave .ui-spinner-button": "_stop"
+ },
+ _draw: function () {
+ var e = this.uiSpinner = this.element.addClass("ui-spinner-input").attr("autocomplete", "off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());
+ this.element.attr("role", "spinbutton"), this.buttons = e.find(".ui-spinner-button").attr("tabIndex", -1).button().removeClass("ui-corner-all"), this.buttons.height() > Math.ceil(.5 * e.height()) && e.height() > 0 && e.height(e.height()), this.options.disabled && this.disable()
+ },
+ _keydown: function (t) {
+ var i = this.options, s = e.ui.keyCode;
+ switch (t.keyCode) {
+ case s.UP:
+ return this._repeat(null, 1, t), !0;
+ case s.DOWN:
+ return this._repeat(null, -1, t), !0;
+ case s.PAGE_UP:
+ return this._repeat(null, i.page, t), !0;
+ case s.PAGE_DOWN:
+ return this._repeat(null, -i.page, t), !0
+ }
+ return !1
+ },
+ _uiSpinnerHtml: function () {
+ return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"
+ },
+ _buttonHtml: function () {
+ return "<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" + "</a>" + "<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" + "<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" + "</a>"
+ },
+ _start: function (e) {
+ return this.spinning || this._trigger("start", e) !== !1 ? (this.counter || (this.counter = 1), this.spinning = !0, !0) : !1
+ },
+ _repeat: function (e, t, i) {
+ e = e || 500, clearTimeout(this.timer), this.timer = this._delay(function () {
+ this._repeat(40, t, i)
+ }, e), this._spin(t * this.options.step, i)
+ },
+ _spin: function (e, t) {
+ var i = this.value() || 0;
+ this.counter || (this.counter = 1), i = this._adjustValue(i + e * this._increment(this.counter)), this.spinning && this._trigger("spin", t, {value: i}) === !1 || (this._value(i), this.counter++)
+ },
+ _increment: function (t) {
+ var i = this.options.incremental;
+ return i ? e.isFunction(i) ? i(t) : Math.floor(t * t * t / 5e4 - t * t / 500 + 17 * t / 200 + 1) : 1
+ },
+ _precision: function () {
+ var e = this._precisionOf(this.options.step);
+ return null !== this.options.min && (e = Math.max(e, this._precisionOf(this.options.min))), e
+ },
+ _precisionOf: function (e) {
+ var t = "" + e, i = t.indexOf(".");
+ return -1 === i ? 0 : t.length - i - 1
+ },
+ _adjustValue: function (e) {
+ var t, i, s = this.options;
+ return t = null !== s.min ? s.min : 0, i = e - t, i = Math.round(i / s.step) * s.step, e = t + i, e = parseFloat(e.toFixed(this._precision())), null !== s.max && e > s.max ? s.max : null !== s.min && s.min > e ? s.min : e
+ },
+ _stop: function (e) {
+ this.spinning && (clearTimeout(this.timer), clearTimeout(this.mousewheelTimer), this.counter = 0, this.spinning = !1, this._trigger("stop", e))
+ },
+ _setOption: function (e, t) {
+ if ("culture" === e || "numberFormat" === e) {
+ var i = this._parse(this.element.val());
+ return this.options[e] = t, this.element.val(this._format(i)), void 0
+ }
+ ("max" === e || "min" === e || "step" === e) && "string" == typeof t && (t = this._parse(t)), "icons" === e && (this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up), this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)), this._super(e, t), "disabled" === e && (this.widget().toggleClass("ui-state-disabled", !!t), this.element.prop("disabled", !!t), this.buttons.button(t ? "disable" : "enable"))
+ },
+ _setOptions: h(function (e) {
+ this._super(e)
+ }),
+ _parse: function (e) {
+ return "string" == typeof e && "" !== e && (e = window.Globalize && this.options.numberFormat ? Globalize.parseFloat(e, 10, this.options.culture) : +e), "" === e || isNaN(e) ? null : e
+ },
+ _format: function (e) {
+ return "" === e ? "" : window.Globalize && this.options.numberFormat ? Globalize.format(e, this.options.numberFormat, this.options.culture) : e
+ },
+ _refresh: function () {
+ this.element.attr({
+ "aria-valuemin": this.options.min,
+ "aria-valuemax": this.options.max,
+ "aria-valuenow": this._parse(this.element.val())
+ })
+ },
+ isValid: function () {
+ var e = this.value();
+ return null === e ? !1 : e === this._adjustValue(e)
+ },
+ _value: function (e, t) {
+ var i;
+ "" !== e && (i = this._parse(e), null !== i && (t || (i = this._adjustValue(i)), e = this._format(i))), this.element.val(e), this._refresh()
+ },
+ _destroy: function () {
+ this.element.removeClass("ui-spinner-input").prop("disabled", !1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"), this.uiSpinner.replaceWith(this.element)
+ },
+ stepUp: h(function (e) {
+ this._stepUp(e)
+ }),
+ _stepUp: function (e) {
+ this._start() && (this._spin((e || 1) * this.options.step), this._stop())
+ },
+ stepDown: h(function (e) {
+ this._stepDown(e)
+ }),
+ _stepDown: function (e) {
+ this._start() && (this._spin((e || 1) * -this.options.step), this._stop())
+ },
+ pageUp: h(function (e) {
+ this._stepUp((e || 1) * this.options.page)
+ }),
+ pageDown: h(function (e) {
+ this._stepDown((e || 1) * this.options.page)
+ }),
+ value: function (e) {
+ return arguments.length ? (h(this._value).call(this, e), void 0) : this._parse(this.element.val())
+ },
+ widget: function () {
+ return this.uiSpinner
+ }
+ }), e.widget("ui.tabs", {
+ version: "1.11.4",
+ delay: 300,
+ options: {
+ active: null,
+ collapsible: !1,
+ event: "click",
+ heightStyle: "content",
+ hide: null,
+ show: null,
+ activate: null,
+ beforeActivate: null,
+ beforeLoad: null,
+ load: null
+ },
+ _isLocal: function () {
+ var e = /#.*$/;
+ return function (t) {
+ var i, s;
+ t = t.cloneNode(!1), i = t.href.replace(e, ""), s = location.href.replace(e, "");
+ try {
+ i = decodeURIComponent(i)
+ } catch (n) {
+ }
+ try {
+ s = decodeURIComponent(s)
+ } catch (n) {
+ }
+ return t.hash.length > 1 && i === s
+ }
+ }(),
+ _create: function () {
+ var t = this, i = this.options;
+ this.running = !1, this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible", i.collapsible), this._processTabs(), i.active = this._initialActive(), e.isArray(i.disabled) && (i.disabled = e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"), function (e) {
+ return t.tabs.index(e)
+ }))).sort()), this.active = this.options.active !== !1 && this.anchors.length ? this._findActive(i.active) : e(), this._refresh(), this.active.length && this.load(i.active)
+ },
+ _initialActive: function () {
+ var t = this.options.active, i = this.options.collapsible, s = location.hash.substring(1);
+ return null === t && (s && this.tabs.each(function (i, n) {
+ return e(n).attr("aria-controls") === s ? (t = i, !1) : void 0
+ }), null === t && (t = this.tabs.index(this.tabs.filter(".ui-tabs-active"))), (null === t || -1 === t) && (t = this.tabs.length ? 0 : !1)), t !== !1 && (t = this.tabs.index(this.tabs.eq(t)), -1 === t && (t = i ? !1 : 0)), !i && t === !1 && this.anchors.length && (t = 0), t
+ },
+ _getCreateEventData: function () {
+ return {tab: this.active, panel: this.active.length ? this._getPanelForTab(this.active) : e()}
+ },
+ _tabKeydown: function (t) {
+ var i = e(this.document[0].activeElement).closest("li"), s = this.tabs.index(i), n = !0;
+ if (!this._handlePageNav(t)) {
+ switch (t.keyCode) {
+ case e.ui.keyCode.RIGHT:
+ case e.ui.keyCode.DOWN:
+ s++;
+ break;
+ case e.ui.keyCode.UP:
+ case e.ui.keyCode.LEFT:
+ n = !1, s--;
+ break;
+ case e.ui.keyCode.END:
+ s = this.anchors.length - 1;
+ break;
+ case e.ui.keyCode.HOME:
+ s = 0;
+ break;
+ case e.ui.keyCode.SPACE:
+ return t.preventDefault(), clearTimeout(this.activating), this._activate(s), void 0;
+ case e.ui.keyCode.ENTER:
+ return t.preventDefault(), clearTimeout(this.activating), this._activate(s === this.options.active ? !1 : s), void 0;
+ default:
+ return
+ }
+ t.preventDefault(), clearTimeout(this.activating), s = this._focusNextTab(s, n), t.ctrlKey || t.metaKey || (i.attr("aria-selected", "false"), this.tabs.eq(s).attr("aria-selected", "true"), this.activating = this._delay(function () {
+ this.option("active", s)
+ }, this.delay))
+ }
+ },
+ _panelKeydown: function (t) {
+ this._handlePageNav(t) || t.ctrlKey && t.keyCode === e.ui.keyCode.UP && (t.preventDefault(), this.active.focus())
+ },
+ _handlePageNav: function (t) {
+ return t.altKey && t.keyCode === e.ui.keyCode.PAGE_UP ? (this._activate(this._focusNextTab(this.options.active - 1, !1)), !0) : t.altKey && t.keyCode === e.ui.keyCode.PAGE_DOWN ? (this._activate(this._focusNextTab(this.options.active + 1, !0)), !0) : void 0
+ },
+ _findNextTab: function (t, i) {
+ function s() {
+ return t > n && (t = 0), 0 > t && (t = n), t
+ }
+
+ for (var n = this.tabs.length - 1; -1 !== e.inArray(s(), this.options.disabled);)t = i ? t + 1 : t - 1;
+ return t
+ },
+ _focusNextTab: function (e, t) {
+ return e = this._findNextTab(e, t), this.tabs.eq(e).focus(), e
+ },
+ _setOption: function (e, t) {
+ return "active" === e ? (this._activate(t), void 0) : "disabled" === e ? (this._setupDisabled(t), void 0) : (this._super(e, t), "collapsible" === e && (this.element.toggleClass("ui-tabs-collapsible", t), t || this.options.active !== !1 || this._activate(0)), "event" === e && this._setupEvents(t), "heightStyle" === e && this._setupHeightStyle(t), void 0)
+ },
+ _sanitizeSelector: function (e) {
+ return e ? e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&") : ""
+ },
+ refresh: function () {
+ var t = this.options, i = this.tablist.children(":has(a[href])");
+ t.disabled = e.map(i.filter(".ui-state-disabled"), function (e) {
+ return i.index(e)
+ }), this._processTabs(), t.active !== !1 && this.anchors.length ? this.active.length && !e.contains(this.tablist[0], this.active[0]) ? this.tabs.length === t.disabled.length ? (t.active = !1, this.active = e()) : this._activate(this._findNextTab(Math.max(0, t.active - 1), !1)) : t.active = this.tabs.index(this.active) : (t.active = !1, this.active = e()), this._refresh()
+ },
+ _refresh: function () {
+ this._setupDisabled(this.options.disabled), this._setupEvents(this.options.event), this._setupHeightStyle(this.options.heightStyle), this.tabs.not(this.active).attr({
+ "aria-selected": "false",
+ "aria-expanded": "false",
+ tabIndex: -1
+ }), this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden": "true"}), this.active.length ? (this.active.addClass("ui-tabs-active ui-state-active").attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ }), this._getPanelForTab(this.active).show().attr({"aria-hidden": "false"})) : this.tabs.eq(0).attr("tabIndex", 0)
+ },
+ _processTabs: function () {
+ var t = this, i = this.tabs, s = this.anchors, n = this.panels;
+ this.tablist = this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role", "tablist").delegate("> li", "mousedown" + this.eventNamespace, function (t) {
+ e(this).is(".ui-state-disabled") && t.preventDefault()
+ }).delegate(".ui-tabs-anchor", "focus" + this.eventNamespace, function () {
+ e(this).closest("li").is(".ui-state-disabled") && this.blur()
+ }), this.tabs = this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({
+ role: "tab",
+ tabIndex: -1
+ }), this.anchors = this.tabs.map(function () {
+ return e("a", this)[0]
+ }).addClass("ui-tabs-anchor").attr({
+ role: "presentation",
+ tabIndex: -1
+ }), this.panels = e(), this.anchors.each(function (i, s) {
+ var n, a, o, r = e(s).uniqueId().attr("id"), h = e(s).closest("li"), l = h.attr("aria-controls");
+ t._isLocal(s) ? (n = s.hash, o = n.substring(1), a = t.element.find(t._sanitizeSelector(n))) : (o = h.attr("aria-controls") || e({}).uniqueId()[0].id, n = "#" + o, a = t.element.find(n), a.length || (a = t._createPanel(o), a.insertAfter(t.panels[i - 1] || t.tablist)), a.attr("aria-live", "polite")), a.length && (t.panels = t.panels.add(a)), l && h.data("ui-tabs-aria-controls", l), h.attr({
+ "aria-controls": o,
+ "aria-labelledby": r
+ }), a.attr("aria-labelledby", r)
+ }), this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role", "tabpanel"), i && (this._off(i.not(this.tabs)), this._off(s.not(this.anchors)), this._off(n.not(this.panels)))
+ },
+ _getList: function () {
+ return this.tablist || this.element.find("ol,ul").eq(0)
+ },
+ _createPanel: function (t) {
+ return e("<div>").attr("id", t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy", !0)
+ },
+ _setupDisabled: function (t) {
+ e.isArray(t) && (t.length ? t.length === this.anchors.length && (t = !0) : t = !1);
+ for (var i, s = 0; i = this.tabs[s]; s++)t === !0 || -1 !== e.inArray(s, t) ? e(i).addClass("ui-state-disabled").attr("aria-disabled", "true") : e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");
+ this.options.disabled = t
+ },
+ _setupEvents: function (t) {
+ var i = {};
+ t && e.each(t.split(" "), function (e, t) {
+ i[t] = "_eventHandler"
+ }), this._off(this.anchors.add(this.tabs).add(this.panels)), this._on(!0, this.anchors, {
+ click: function (e) {
+ e.preventDefault()
+ }
+ }), this._on(this.anchors, i), this._on(this.tabs, {keydown: "_tabKeydown"}), this._on(this.panels, {keydown: "_panelKeydown"}), this._focusable(this.tabs), this._hoverable(this.tabs)
+ },
+ _setupHeightStyle: function (t) {
+ var i, s = this.element.parent();
+ "fill" === t ? (i = s.height(), i -= this.element.outerHeight() - this.element.height(), this.element.siblings(":visible").each(function () {
+ var t = e(this), s = t.css("position");
+ "absolute" !== s && "fixed" !== s && (i -= t.outerHeight(!0))
+ }), this.element.children().not(this.panels).each(function () {
+ i -= e(this).outerHeight(!0)
+ }), this.panels.each(function () {
+ e(this).height(Math.max(0, i - e(this).innerHeight() + e(this).height()))
+ }).css("overflow", "auto")) : "auto" === t && (i = 0, this.panels.each(function () {
+ i = Math.max(i, e(this).height("").height())
+ }).height(i))
+ },
+ _eventHandler: function (t) {
+ var i = this.options, s = this.active, n = e(t.currentTarget), a = n.closest("li"), o = a[0] === s[0], r = o && i.collapsible, h = r ? e() : this._getPanelForTab(a), l = s.length ? this._getPanelForTab(s) : e(), u = {
+ oldTab: s,
+ oldPanel: l,
+ newTab: r ? e() : a,
+ newPanel: h
+ };
+ t.preventDefault(), a.hasClass("ui-state-disabled") || a.hasClass("ui-tabs-loading") || this.running || o && !i.collapsible || this._trigger("beforeActivate", t, u) === !1 || (i.active = r ? !1 : this.tabs.index(a), this.active = o ? e() : a, this.xhr && this.xhr.abort(), l.length || h.length || e.error("jQuery UI Tabs: Mismatching fragment identifier."), h.length && this.load(this.tabs.index(a), t), this._toggle(t, u))
+ },
+ _toggle: function (t, i) {
+ function s() {
+ a.running = !1, a._trigger("activate", t, i)
+ }
+
+ function n() {
+ i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"), o.length && a.options.show ? a._show(o, a.options.show, s) : (o.show(), s())
+ }
+
+ var a = this, o = i.newPanel, r = i.oldPanel;
+ this.running = !0, r.length && this.options.hide ? this._hide(r, this.options.hide, function () {
+ i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), n()
+ }) : (i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"), r.hide(), n()), r.attr("aria-hidden", "true"), i.oldTab.attr({
+ "aria-selected": "false",
+ "aria-expanded": "false"
+ }), o.length && r.length ? i.oldTab.attr("tabIndex", -1) : o.length && this.tabs.filter(function () {
+ return 0 === e(this).attr("tabIndex")
+ }).attr("tabIndex", -1), o.attr("aria-hidden", "false"), i.newTab.attr({
+ "aria-selected": "true",
+ "aria-expanded": "true",
+ tabIndex: 0
+ })
+ },
+ _activate: function (t) {
+ var i, s = this._findActive(t);
+ s[0] !== this.active[0] && (s.length || (s = this.active), i = s.find(".ui-tabs-anchor")[0], this._eventHandler({
+ target: i,
+ currentTarget: i,
+ preventDefault: e.noop
+ }))
+ },
+ _findActive: function (t) {
+ return t === !1 ? e() : this.tabs.eq(t)
+ },
+ _getIndex: function (e) {
+ return "string" == typeof e && (e = this.anchors.index(this.anchors.filter("[href$='" + e + "']"))), e
+ },
+ _destroy: function () {
+ this.xhr && this.xhr.abort(), this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"), this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"), this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(), this.tablist.unbind(this.eventNamespace), this.tabs.add(this.panels).each(function () {
+ e.data(this, "ui-tabs-destroy") ? e(this).remove() : e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")
+ }), this.tabs.each(function () {
+ var t = e(this), i = t.data("ui-tabs-aria-controls");
+ i ? t.attr("aria-controls", i).removeData("ui-tabs-aria-controls") : t.removeAttr("aria-controls")
+ }), this.panels.show(), "content" !== this.options.heightStyle && this.panels.css("height", "")
+ },
+ enable: function (t) {
+ var i = this.options.disabled;
+ i !== !1 && (void 0 === t ? i = !1 : (t = this._getIndex(t), i = e.isArray(i) ? e.map(i, function (e) {
+ return e !== t ? e : null
+ }) : e.map(this.tabs, function (e, i) {
+ return i !== t ? i : null
+ })), this._setupDisabled(i))
+ },
+ disable: function (t) {
+ var i = this.options.disabled;
+ if (i !== !0) {
+ if (void 0 === t)i = !0; else {
+ if (t = this._getIndex(t), -1 !== e.inArray(t, i))return;
+ i = e.isArray(i) ? e.merge([t], i).sort() : [t]
+ }
+ this._setupDisabled(i)
+ }
+ },
+ load: function (t, i) {
+ t = this._getIndex(t);
+ var s = this, n = this.tabs.eq(t), a = n.find(".ui-tabs-anchor"), o = this._getPanelForTab(n), r = {
+ tab: n,
+ panel: o
+ }, h = function (e, t) {
+ "abort" === t && s.panels.stop(!1, !0), n.removeClass("ui-tabs-loading"), o.removeAttr("aria-busy"), e === s.xhr && delete s.xhr
+ };
+ this._isLocal(a[0]) || (this.xhr = e.ajax(this._ajaxSettings(a, i, r)), this.xhr && "canceled" !== this.xhr.statusText && (n.addClass("ui-tabs-loading"), o.attr("aria-busy", "true"), this.xhr.done(function (e, t, n) {
+ setTimeout(function () {
+ o.html(e), s._trigger("load", i, r), h(n, t)
+ }, 1)
+ }).fail(function (e, t) {
+ setTimeout(function () {
+ h(e, t)
+ }, 1)
+ })))
+ },
+ _ajaxSettings: function (t, i, s) {
+ var n = this;
+ return {
+ url: t.attr("href"), beforeSend: function (t, a) {
+ return n._trigger("beforeLoad", i, e.extend({jqXHR: t, ajaxSettings: a}, s))
+ }
+ }
+ },
+ _getPanelForTab: function (t) {
+ var i = e(t).attr("aria-controls");
+ return this.element.find(this._sanitizeSelector("#" + i))
+ }
+ }), e.widget("ui.tooltip", {
+ version: "1.11.4", options: {
+ content: function () {
+ var t = e(this).attr("title") || "";
+ return e("<a>").text(t).html()
+ },
+ hide: !0,
+ items: "[title]:not([disabled])",
+ position: {my: "left top+15", at: "left bottom", collision: "flipfit flip"},
+ show: !0,
+ tooltipClass: null,
+ track: !1,
+ close: null,
+ open: null
+ }, _addDescribedBy: function (t, i) {
+ var s = (t.attr("aria-describedby") || "").split(/\s+/);
+ s.push(i), t.data("ui-tooltip-id", i).attr("aria-describedby", e.trim(s.join(" ")))
+ }, _removeDescribedBy: function (t) {
+ var i = t.data("ui-tooltip-id"), s = (t.attr("aria-describedby") || "").split(/\s+/), n = e.inArray(i, s);
+ -1 !== n && s.splice(n, 1), t.removeData("ui-tooltip-id"), s = e.trim(s.join(" ")), s ? t.attr("aria-describedby", s) : t.removeAttr("aria-describedby")
+ }, _create: function () {
+ this._on({
+ mouseover: "open",
+ focusin: "open"
+ }), this.tooltips = {}, this.parents = {}, this.options.disabled && this._disable(), this.liveRegion = e("<div>").attr({
+ role: "log",
+ "aria-live": "assertive",
+ "aria-relevant": "additions"
+ }).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)
+ }, _setOption: function (t, i) {
+ var s = this;
+ return "disabled" === t ? (this[i ? "_disable" : "_enable"](), this.options[t] = i, void 0) : (this._super(t, i), "content" === t && e.each(this.tooltips, function (e, t) {
+ s._updateContent(t.element)
+ }), void 0)
+ }, _disable: function () {
+ var t = this;
+ e.each(this.tooltips, function (i, s) {
+ var n = e.Event("blur");
+ n.target = n.currentTarget = s.element[0], t.close(n, !0)
+ }), this.element.find(this.options.items).addBack().each(function () {
+ var t = e(this);
+ t.is("[title]") && t.data("ui-tooltip-title", t.attr("title")).removeAttr("title")
+ })
+ }, _enable: function () {
+ this.element.find(this.options.items).addBack().each(function () {
+ var t = e(this);
+ t.data("ui-tooltip-title") && t.attr("title", t.data("ui-tooltip-title"))
+ })
+ }, open: function (t) {
+ var i = this, s = e(t ? t.target : this.element).closest(this.options.items);
+ s.length && !s.data("ui-tooltip-id") && (s.attr("title") && s.data("ui-tooltip-title", s.attr("title")), s.data("ui-tooltip-open", !0), t && "mouseover" === t.type && s.parents().each(function () {
+ var t, s = e(this);
+ s.data("ui-tooltip-open") && (t = e.Event("blur"), t.target = t.currentTarget = this, i.close(t, !0)), s.attr("title") && (s.uniqueId(), i.parents[this.id] = {
+ element: this,
+ title: s.attr("title")
+ }, s.attr("title", ""))
+ }), this._registerCloseHandlers(t, s), this._updateContent(s, t))
+ }, _updateContent: function (e, t) {
+ var i, s = this.options.content, n = this, a = t ? t.type : null;
+ return "string" == typeof s ? this._open(t, e, s) : (i = s.call(e[0], function (i) {
+ n._delay(function () {
+ e.data("ui-tooltip-open") && (t && (t.type = a), this._open(t, e, i))
+ })
+ }), i && this._open(t, e, i), void 0)
+ }, _open: function (t, i, s) {
+ function n(e) {
+ l.of = e, o.is(":hidden") || o.position(l)
+ }
+
+ var a, o, r, h, l = e.extend({}, this.options.position);
+ if (s) {
+ if (a = this._find(i))return a.tooltip.find(".ui-tooltip-content").html(s), void 0;
+ i.is("[title]") && (t && "mouseover" === t.type ? i.attr("title", "") : i.removeAttr("title")), a = this._tooltip(i), o = a.tooltip, this._addDescribedBy(i, o.attr("id")), o.find(".ui-tooltip-content").html(s), this.liveRegion.children().hide(), s.clone ? (h = s.clone(), h.removeAttr("id").find("[id]").removeAttr("id")) : h = s, e("<div>").html(h).appendTo(this.liveRegion), this.options.track && t && /^mouse/.test(t.type) ? (this._on(this.document, {mousemove: n}), n(t)) : o.position(e.extend({of: i}, this.options.position)), o.hide(), this._show(o, this.options.show), this.options.show && this.options.show.delay && (r = this.delayedShow = setInterval(function () {
+ o.is(":visible") && (n(l.of), clearInterval(r))
+ }, e.fx.interval)), this._trigger("open", t, {tooltip: o})
+ }
+ }, _registerCloseHandlers: function (t, i) {
+ var s = {
+ keyup: function (t) {
+ if (t.keyCode === e.ui.keyCode.ESCAPE) {
+ var s = e.Event(t);
+ s.currentTarget = i[0], this.close(s, !0)
+ }
+ }
+ };
+ i[0] !== this.element[0] && (s.remove = function () {
+ this._removeTooltip(this._find(i).tooltip)
+ }), t && "mouseover" !== t.type || (s.mouseleave = "close"), t && "focusin" !== t.type || (s.focusout = "close"), this._on(!0, i, s)
+ }, close: function (t) {
+ var i, s = this, n = e(t ? t.currentTarget : this.element), a = this._find(n);
+ return a ? (i = a.tooltip, a.closing || (clearInterval(this.delayedShow), n.data("ui-tooltip-title") && !n.attr("title") && n.attr("title", n.data("ui-tooltip-title")), this._removeDescribedBy(n), a.hiding = !0, i.stop(!0), this._hide(i, this.options.hide, function () {
+ s._removeTooltip(e(this))
+ }), n.removeData("ui-tooltip-open"), this._off(n, "mouseleave focusout keyup"), n[0] !== this.element[0] && this._off(n, "remove"), this._off(this.document, "mousemove"), t && "mouseleave" === t.type && e.each(this.parents, function (t, i) {
+ e(i.element).attr("title", i.title), delete s.parents[t]
+ }), a.closing = !0, this._trigger("close", t, {tooltip: i}), a.hiding || (a.closing = !1)), void 0) : (n.removeData("ui-tooltip-open"), void 0)
+ }, _tooltip: function (t) {
+ var i = e("<div>").attr("role", "tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content " + (this.options.tooltipClass || "")), s = i.uniqueId().attr("id");
+ return e("<div>").addClass("ui-tooltip-content").appendTo(i), i.appendTo(this.document[0].body), this.tooltips[s] = {
+ element: t,
+ tooltip: i
+ }
+ }, _find: function (e) {
+ var t = e.data("ui-tooltip-id");
+ return t ? this.tooltips[t] : null
+ }, _removeTooltip: function (e) {
+ e.remove(), delete this.tooltips[e.attr("id")]
+ }, _destroy: function () {
+ var t = this;
+ e.each(this.tooltips, function (i, s) {
+ var n = e.Event("blur"), a = s.element;
+ n.target = n.currentTarget = a[0], t.close(n, !0), e("#" + i).remove(), a.data("ui-tooltip-title") && (a.attr("title") || a.attr("title", a.data("ui-tooltip-title")), a.removeData("ui-tooltip-title"))
+ }), this.liveRegion.remove()
+ }
+ });
+ var y = "ui-effects-", b = e;
+ e.effects = {effect: {}}, function (e, t) {
+ function i(e, t, i) {
+ var s = d[t.type] || {};
+ return null == e ? i || !t.def ? null : t.def : (e = s.floor ? ~~e : parseFloat(e), isNaN(e) ? t.def : s.mod ? (e + s.mod) % s.mod : 0 > e ? 0 : e > s.max ? s.max : e)
+ }
+
+ function s(i) {
+ var s = l(), n = s._rgba = [];
+ return i = i.toLowerCase(), f(h, function (e, a) {
+ var o, r = a.re.exec(i), h = r && a.parse(r), l = a.space || "rgba";
+ return h ? (o = s[l](h), s[u[l].cache] = o[u[l].cache], n = s._rgba = o._rgba, !1) : t
+ }), n.length ? ("0,0,0,0" === n.join() && e.extend(n, a.transparent), s) : a[i]
+ }
+
+ function n(e, t, i) {
+ return i = (i + 1) % 1, 1 > 6 * i ? e + 6 * (t - e) * i : 1 > 2 * i ? t : 2 > 3 * i ? e + 6 * (t - e) * (2 / 3 - i) : e
+ }
+
+ var a, o = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", r = /^([\-+])=\s*(\d+\.?\d*)/, h = [{
+ re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function (e) {
+ return [e[1], e[2], e[3], e[4]]
+ }
+ }, {
+ re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ parse: function (e) {
+ return [2.55 * e[1], 2.55 * e[2], 2.55 * e[3], e[4]]
+ }
+ }, {
+ re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, parse: function (e) {
+ return [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]
+ }
+ }, {
+ re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, parse: function (e) {
+ return [parseInt(e[1] + e[1], 16), parseInt(e[2] + e[2], 16), parseInt(e[3] + e[3], 16)]
+ }
+ }, {
+ re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+ space: "hsla",
+ parse: function (e) {
+ return [e[1], e[2] / 100, e[3] / 100, e[4]]
+ }
+ }], l = e.Color = function (t, i, s, n) {
+ return new e.Color.fn.parse(t, i, s, n)
+ }, u = {
+ rgba: {
+ props: {
+ red: {idx: 0, type: "byte"},
+ green: {idx: 1, type: "byte"},
+ blue: {idx: 2, type: "byte"}
+ }
+ },
+ hsla: {
+ props: {
+ hue: {idx: 0, type: "degrees"},
+ saturation: {idx: 1, type: "percent"},
+ lightness: {idx: 2, type: "percent"}
+ }
+ }
+ }, d = {
+ "byte": {floor: !0, max: 255},
+ percent: {max: 1},
+ degrees: {mod: 360, floor: !0}
+ }, c = l.support = {}, p = e("<p>")[0], f = e.each;
+ p.style.cssText = "background-color:rgba(1,1,1,.5)", c.rgba = p.style.backgroundColor.indexOf("rgba") > -1, f(u, function (e, t) {
+ t.cache = "_" + e, t.props.alpha = {idx: 3, type: "percent", def: 1}
+ }), l.fn = e.extend(l.prototype, {
+ parse: function (n, o, r, h) {
+ if (n === t)return this._rgba = [null, null, null, null], this;
+ (n.jquery || n.nodeType) && (n = e(n).css(o), o = t);
+ var d = this, c = e.type(n), p = this._rgba = [];
+ return o !== t && (n = [n, o, r, h], c = "array"), "string" === c ? this.parse(s(n) || a._default) : "array" === c ? (f(u.rgba.props, function (e, t) {
+ p[t.idx] = i(n[t.idx], t)
+ }), this) : "object" === c ? (n instanceof l ? f(u, function (e, t) {
+ n[t.cache] && (d[t.cache] = n[t.cache].slice())
+ }) : f(u, function (t, s) {
+ var a = s.cache;
+ f(s.props, function (e, t) {
+ if (!d[a] && s.to) {
+ if ("alpha" === e || null == n[e])return;
+ d[a] = s.to(d._rgba)
+ }
+ d[a][t.idx] = i(n[e], t, !0)
+ }), d[a] && 0 > e.inArray(null, d[a].slice(0, 3)) && (d[a][3] = 1, s.from && (d._rgba = s.from(d[a])))
+ }), this) : t
+ }, is: function (e) {
+ var i = l(e), s = !0, n = this;
+ return f(u, function (e, a) {
+ var o, r = i[a.cache];
+ return r && (o = n[a.cache] || a.to && a.to(n._rgba) || [], f(a.props, function (e, i) {
+ return null != r[i.idx] ? s = r[i.idx] === o[i.idx] : t
+ })), s
+ }), s
+ }, _space: function () {
+ var e = [], t = this;
+ return f(u, function (i, s) {
+ t[s.cache] && e.push(i)
+ }), e.pop()
+ }, transition: function (e, t) {
+ var s = l(e), n = s._space(), a = u[n], o = 0 === this.alpha() ? l("transparent") : this, r = o[a.cache] || a.to(o._rgba), h = r.slice();
+ return s = s[a.cache], f(a.props, function (e, n) {
+ var a = n.idx, o = r[a], l = s[a], u = d[n.type] || {};
+ null !== l && (null === o ? h[a] = l : (u.mod && (l - o > u.mod / 2 ? o += u.mod : o - l > u.mod / 2 && (o -= u.mod)), h[a] = i((l - o) * t + o, n)))
+ }), this[n](h)
+ }, blend: function (t) {
+ if (1 === this._rgba[3])return this;
+ var i = this._rgba.slice(), s = i.pop(), n = l(t)._rgba;
+ return l(e.map(i, function (e, t) {
+ return (1 - s) * n[t] + s * e
+ }))
+ }, toRgbaString: function () {
+ var t = "rgba(", i = e.map(this._rgba, function (e, t) {
+ return null == e ? t > 2 ? 1 : 0 : e
+ });
+ return 1 === i[3] && (i.pop(), t = "rgb("), t + i.join() + ")"
+ }, toHslaString: function () {
+ var t = "hsla(", i = e.map(this.hsla(), function (e, t) {
+ return null == e && (e = t > 2 ? 1 : 0), t && 3 > t && (e = Math.round(100 * e) + "%"), e
+ });
+ return 1 === i[3] && (i.pop(), t = "hsl("), t + i.join() + ")"
+ }, toHexString: function (t) {
+ var i = this._rgba.slice(), s = i.pop();
+ return t && i.push(~~(255 * s)), "#" + e.map(i, function (e) {
+ return e = (e || 0).toString(16), 1 === e.length ? "0" + e : e
+ }).join("")
+ }, toString: function () {
+ return 0 === this._rgba[3] ? "transparent" : this.toRgbaString()
+ }
+ }), l.fn.parse.prototype = l.fn, u.hsla.to = function (e) {
+ if (null == e[0] || null == e[1] || null == e[2])return [null, null, null, e[3]];
+ var t, i, s = e[0] / 255, n = e[1] / 255, a = e[2] / 255, o = e[3], r = Math.max(s, n, a), h = Math.min(s, n, a), l = r - h, u = r + h, d = .5 * u;
+ return t = h === r ? 0 : s === r ? 60 * (n - a) / l + 360 : n === r ? 60 * (a - s) / l + 120 : 60 * (s - n) / l + 240, i = 0 === l ? 0 : .5 >= d ? l / u : l / (2 - u), [Math.round(t) % 360, i, d, null == o ? 1 : o]
+ }, u.hsla.from = function (e) {
+ if (null == e[0] || null == e[1] || null == e[2])return [null, null, null, e[3]];
+ var t = e[0] / 360, i = e[1], s = e[2], a = e[3], o = .5 >= s ? s * (1 + i) : s + i - s * i, r = 2 * s - o;
+ return [Math.round(255 * n(r, o, t + 1 / 3)), Math.round(255 * n(r, o, t)), Math.round(255 * n(r, o, t - 1 / 3)), a]
+ }, f(u, function (s, n) {
+ var a = n.props, o = n.cache, h = n.to, u = n.from;
+ l.fn[s] = function (s) {
+ if (h && !this[o] && (this[o] = h(this._rgba)), s === t)return this[o].slice();
+ var n, r = e.type(s), d = "array" === r || "object" === r ? s : arguments, c = this[o].slice();
+ return f(a, function (e, t) {
+ var s = d["object" === r ? e : t.idx];
+ null == s && (s = c[t.idx]), c[t.idx] = i(s, t)
+ }), u ? (n = l(u(c)), n[o] = c, n) : l(c)
+ }, f(a, function (t, i) {
+ l.fn[t] || (l.fn[t] = function (n) {
+ var a, o = e.type(n), h = "alpha" === t ? this._hsla ? "hsla" : "rgba" : s, l = this[h](), u = l[i.idx];
+ return "undefined" === o ? u : ("function" === o && (n = n.call(this, u), o = e.type(n)), null == n && i.empty ? this : ("string" === o && (a = r.exec(n), a && (n = u + parseFloat(a[2]) * ("+" === a[1] ? 1 : -1))), l[i.idx] = n, this[h](l)))
+ })
+ })
+ }), l.hook = function (t) {
+ var i = t.split(" ");
+ f(i, function (t, i) {
+ e.cssHooks[i] = {
+ set: function (t, n) {
+ var a, o, r = "";
+ if ("transparent" !== n && ("string" !== e.type(n) || (a = s(n)))) {
+ if (n = l(a || n), !c.rgba && 1 !== n._rgba[3]) {
+ for (o = "backgroundColor" === i ? t.parentNode : t; ("" === r || "transparent" === r) && o && o.style;)try {
+ r = e.css(o, "backgroundColor"), o = o.parentNode
+ } catch (h) {
+ }
+ n = n.blend(r && "transparent" !== r ? r : "_default")
+ }
+ n = n.toRgbaString()
+ }
+ try {
+ t.style[i] = n
+ } catch (h) {
+ }
+ }
+ }, e.fx.step[i] = function (t) {
+ t.colorInit || (t.start = l(t.elem, i), t.end = l(t.end), t.colorInit = !0), e.cssHooks[i].set(t.elem, t.start.transition(t.end, t.pos))
+ }
+ })
+ }, l.hook(o), e.cssHooks.borderColor = {
+ expand: function (e) {
+ var t = {};
+ return f(["Top", "Right", "Bottom", "Left"], function (i, s) {
+ t["border" + s + "Color"] = e
+ }), t
+ }
+ }, a = e.Color.names = {
+ aqua: "#00ffff",
+ black: "#000000",
+ blue: "#0000ff",
+ fuchsia: "#ff00ff",
+ gray: "#808080",
+ green: "#008000",
+ lime: "#00ff00",
+ maroon: "#800000",
+ navy: "#000080",
+ olive: "#808000",
+ purple: "#800080",
+ red: "#ff0000",
+ silver: "#c0c0c0",
+ teal: "#008080",
+ white: "#ffffff",
+ yellow: "#ffff00",
+ transparent: [null, null, null, 0],
+ _default: "#ffffff"
+ }
+ }(b), function () {
+ function t(t) {
+ var i, s, n = t.ownerDocument.defaultView ? t.ownerDocument.defaultView.getComputedStyle(t, null) : t.currentStyle, a = {};
+ if (n && n.length && n[0] && n[n[0]])for (s = n.length; s--;)i = n[s], "string" == typeof n[i] && (a[e.camelCase(i)] = n[i]); else for (i in n)"string" == typeof n[i] && (a[i] = n[i]);
+ return a
+ }
+
+ function i(t, i) {
+ var s, a, o = {};
+ for (s in i)a = i[s], t[s] !== a && (n[s] || (e.fx.step[s] || !isNaN(parseFloat(a))) && (o[s] = a));
+ return o
+ }
+
+ var s = ["add", "remove", "toggle"], n = {
+ border: 1,
+ borderBottom: 1,
+ borderColor: 1,
+ borderLeft: 1,
+ borderRight: 1,
+ borderTop: 1,
+ borderWidth: 1,
+ margin: 1,
+ padding: 1
+ };
+ e.each(["borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle"], function (t, i) {
+ e.fx.step[i] = function (e) {
+ ("none" !== e.end && !e.setAttr || 1 === e.pos && !e.setAttr) && (b.style(e.elem, i, e.end), e.setAttr = !0)
+ }
+ }), e.fn.addBack || (e.fn.addBack = function (e) {
+ return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
+ }), e.effects.animateClass = function (n, a, o, r) {
+ var h = e.speed(a, o, r);
+ return this.queue(function () {
+ var a, o = e(this), r = o.attr("class") || "", l = h.children ? o.find("*").addBack() : o;
+ l = l.map(function () {
+ var i = e(this);
+ return {el: i, start: t(this)}
+ }), a = function () {
+ e.each(s, function (e, t) {
+ n[t] && o[t + "Class"](n[t])
+ })
+ }, a(), l = l.map(function () {
+ return this.end = t(this.el[0]), this.diff = i(this.start, this.end), this
+ }), o.attr("class", r), l = l.map(function () {
+ var t = this, i = e.Deferred(), s = e.extend({}, h, {
+ queue: !1, complete: function () {
+ i.resolve(t)
+ }
+ });
+ return this.el.animate(this.diff, s), i.promise()
+ }), e.when.apply(e, l.get()).done(function () {
+ a(), e.each(arguments, function () {
+ var t = this.el;
+ e.each(this.diff, function (e) {
+ t.css(e, "")
+ })
+ }), h.complete.call(o[0])
+ })
+ })
+ }, e.fn.extend({
+ addClass: function (t) {
+ return function (i, s, n, a) {
+ return s ? e.effects.animateClass.call(this, {add: i}, s, n, a) : t.apply(this, arguments)
+ }
+ }(e.fn.addClass), removeClass: function (t) {
+ return function (i, s, n, a) {
+ return arguments.length > 1 ? e.effects.animateClass.call(this, {remove: i}, s, n, a) : t.apply(this, arguments)
+ }
+ }(e.fn.removeClass), toggleClass: function (t) {
+ return function (i, s, n, a, o) {
+ return "boolean" == typeof s || void 0 === s ? n ? e.effects.animateClass.call(this, s ? {add: i} : {remove: i}, n, a, o) : t.apply(this, arguments) : e.effects.animateClass.call(this, {toggle: i}, s, n, a)
+ }
+ }(e.fn.toggleClass), switchClass: function (t, i, s, n, a) {
+ return e.effects.animateClass.call(this, {add: i, remove: t}, s, n, a)
+ }
+ })
+ }(), function () {
+ function t(t, i, s, n) {
+ return e.isPlainObject(t) && (i = t, t = t.effect), t = {effect: t}, null == i && (i = {}), e.isFunction(i) && (n = i, s = null, i = {}), ("number" == typeof i || e.fx.speeds[i]) && (n = s, s = i, i = {}), e.isFunction(s) && (n = s, s = null), i && e.extend(t, i), s = s || i.duration, t.duration = e.fx.off ? 0 : "number" == typeof s ? s : s in e.fx.speeds ? e.fx.speeds[s] : e.fx.speeds._default, t.complete = n || i.complete, t
+ }
+
+ function i(t) {
+ return !t || "number" == typeof t || e.fx.speeds[t] ? !0 : "string" != typeof t || e.effects.effect[t] ? e.isFunction(t) ? !0 : "object" != typeof t || t.effect ? !1 : !0 : !0
+ }
+
+ e.extend(e.effects, {
+ version: "1.11.4", save: function (e, t) {
+ for (var i = 0; t.length > i; i++)null !== t[i] && e.data(y + t[i], e[0].style[t[i]])
+ }, restore: function (e, t) {
+ var i, s;
+ for (s = 0; t.length > s; s++)null !== t[s] && (i = e.data(y + t[s]), void 0 === i && (i = ""), e.css(t[s], i))
+ }, setMode: function (e, t) {
+ return "toggle" === t && (t = e.is(":hidden") ? "show" : "hide"), t
+ }, getBaseline: function (e, t) {
+ var i, s;
+ switch (e[0]) {
+ case"top":
+ i = 0;
+ break;
+ case"middle":
+ i = .5;
+ break;
+ case"bottom":
+ i = 1;
+ break;
+ default:
+ i = e[0] / t.height
+ }
+ switch (e[1]) {
+ case"left":
+ s = 0;
+ break;
+ case"center":
+ s = .5;
+ break;
+ case"right":
+ s = 1;
+ break;
+ default:
+ s = e[1] / t.width
+ }
+ return {x: s, y: i}
+ }, createWrapper: function (t) {
+ if (t.parent().is(".ui-effects-wrapper"))return t.parent();
+ var i = {
+ width: t.outerWidth(!0),
+ height: t.outerHeight(!0),
+ "float": t.css("float")
+ }, s = e("<div></div>").addClass("ui-effects-wrapper").css({
+ fontSize: "100%",
+ background: "transparent",
+ border: "none",
+ margin: 0,
+ padding: 0
+ }), n = {width: t.width(), height: t.height()}, a = document.activeElement;
+ try {
+ a.id
+ } catch (o) {
+ a = document.body
+ }
+ return t.wrap(s), (t[0] === a || e.contains(t[0], a)) && e(a).focus(), s = t.parent(), "static" === t.css("position") ? (s.css({position: "relative"}), t.css({position: "relative"})) : (e.extend(i, {
+ position: t.css("position"),
+ zIndex: t.css("z-index")
+ }), e.each(["top", "left", "bottom", "right"], function (e, s) {
+ i[s] = t.css(s), isNaN(parseInt(i[s], 10)) && (i[s] = "auto")
+ }), t.css({
+ position: "relative",
+ top: 0,
+ left: 0,
+ right: "auto",
+ bottom: "auto"
+ })), t.css(n), s.css(i).show()
+ }, removeWrapper: function (t) {
+ var i = document.activeElement;
+ return t.parent().is(".ui-effects-wrapper") && (t.parent().replaceWith(t), (t[0] === i || e.contains(t[0], i)) && e(i).focus()), t
+ }, setTransition: function (t, i, s, n) {
+ return n = n || {}, e.each(i, function (e, i) {
+ var a = t.cssUnit(i);
+ a[0] > 0 && (n[i] = a[0] * s + a[1])
+ }), n
+ }
+ }), e.fn.extend({
+ effect: function () {
+ function i(t) {
+ function i() {
+ e.isFunction(a) && a.call(n[0]), e.isFunction(t) && t()
+ }
+
+ var n = e(this), a = s.complete, r = s.mode;
+ (n.is(":hidden") ? "hide" === r : "show" === r) ? (n[r](), i()) : o.call(n[0], s, i)
+ }
+
+ var s = t.apply(this, arguments), n = s.mode, a = s.queue, o = e.effects.effect[s.effect];
+ return e.fx.off || !o ? n ? this[n](s.duration, s.complete) : this.each(function () {
+ s.complete && s.complete.call(this)
+ }) : a === !1 ? this.each(i) : this.queue(a || "fx", i)
+ }, show: function (e) {
+ return function (s) {
+ if (i(s))return e.apply(this, arguments);
+ var n = t.apply(this, arguments);
+ return n.mode = "show", this.effect.call(this, n)
+ }
+ }(e.fn.show), hide: function (e) {
+ return function (s) {
+ if (i(s))return e.apply(this, arguments);
+ var n = t.apply(this, arguments);
+ return n.mode = "hide", this.effect.call(this, n)
+ }
+ }(e.fn.hide), toggle: function (e) {
+ return function (s) {
+ if (i(s) || "boolean" == typeof s)return e.apply(this, arguments);
+ var n = t.apply(this, arguments);
+ return n.mode = "toggle", this.effect.call(this, n)
+ }
+ }(e.fn.toggle), cssUnit: function (t) {
+ var i = this.css(t), s = [];
+ return e.each(["em", "px", "%", "pt"], function (e, t) {
+ i.indexOf(t) > 0 && (s = [parseFloat(i), t])
+ }), s
+ }
+ })
+ }(), function () {
+ var t = {};
+ e.each(["Quad", "Cubic", "Quart", "Quint", "Expo"], function (e, i) {
+ t[i] = function (t) {
+ return Math.pow(t, e + 2)
+ }
+ }), e.extend(t, {
+ Sine: function (e) {
+ return 1 - Math.cos(e * Math.PI / 2)
+ }, Circ: function (e) {
+ return 1 - Math.sqrt(1 - e * e)
+ }, Elastic: function (e) {
+ return 0 === e || 1 === e ? e : -Math.pow(2, 8 * (e - 1)) * Math.sin((80 * (e - 1) - 7.5) * Math.PI / 15)
+ }, Back: function (e) {
+ return e * e * (3 * e - 2)
+ }, Bounce: function (e) {
+ for (var t, i = 4; ((t = Math.pow(2, --i)) - 1) / 11 > e;);
+ return 1 / Math.pow(4, 3 - i) - 7.5625 * Math.pow((3 * t - 2) / 22 - e, 2)
+ }
+ }), e.each(t, function (t, i) {
+ e.easing["easeIn" + t] = i, e.easing["easeOut" + t] = function (e) {
+ return 1 - i(1 - e)
+ }, e.easing["easeInOut" + t] = function (e) {
+ return .5 > e ? i(2 * e) / 2 : 1 - i(-2 * e + 2) / 2
+ }
+ })
+ }(), e.effects, e.effects.effect.blind = function (t, i) {
+ var s, n, a, o = e(this), r = /up|down|vertical/, h = /up|left|vertical|horizontal/, l = ["position", "top", "bottom", "left", "right", "height", "width"], u = e.effects.setMode(o, t.mode || "hide"), d = t.direction || "up", c = r.test(d), p = c ? "height" : "width", f = c ? "top" : "left", m = h.test(d), g = {}, v = "show" === u;
+ o.parent().is(".ui-effects-wrapper") ? e.effects.save(o.parent(), l) : e.effects.save(o, l), o.show(), s = e.effects.createWrapper(o).css({overflow: "hidden"}), n = s[p](), a = parseFloat(s.css(f)) || 0, g[p] = v ? n : 0, m || (o.css(c ? "bottom" : "right", 0).css(c ? "top" : "left", "auto").css({position: "absolute"}), g[f] = v ? a : n + a), v && (s.css(p, 0), m || s.css(f, a + n)), s.animate(g, {
+ duration: t.duration,
+ easing: t.easing,
+ queue: !1,
+ complete: function () {
+ "hide" === u && o.hide(), e.effects.restore(o, l), e.effects.removeWrapper(o), i()
+ }
+ })
+ }, e.effects.effect.bounce = function (t, i) {
+ var s, n, a, o = e(this), r = ["position", "top", "bottom", "left", "right", "height", "width"], h = e.effects.setMode(o, t.mode || "effect"), l = "hide" === h, u = "show" === h, d = t.direction || "up", c = t.distance, p = t.times || 5, f = 2 * p + (u || l ? 1 : 0), m = t.duration / f, g = t.easing, v = "up" === d || "down" === d ? "top" : "left", y = "up" === d || "left" === d, b = o.queue(), _ = b.length;
+ for ((u || l) && r.push("opacity"), e.effects.save(o, r), o.show(), e.effects.createWrapper(o), c || (c = o["top" === v ? "outerHeight" : "outerWidth"]() / 3), u && (a = {opacity: 1}, a[v] = 0, o.css("opacity", 0).css(v, y ? 2 * -c : 2 * c).animate(a, m, g)), l && (c /= Math.pow(2, p - 1)), a = {}, a[v] = 0, s = 0; p > s; s++)n = {}, n[v] = (y ? "-=" : "+=") + c, o.animate(n, m, g).animate(a, m, g), c = l ? 2 * c : c / 2;
+ l && (n = {opacity: 0}, n[v] = (y ? "-=" : "+=") + c, o.animate(n, m, g)), o.queue(function () {
+ l && o.hide(), e.effects.restore(o, r), e.effects.removeWrapper(o), i()
+ }), _ > 1 && b.splice.apply(b, [1, 0].concat(b.splice(_, f + 1))), o.dequeue()
+ }, e.effects.effect.clip = function (t, i) {
+ var s, n, a, o = e(this), r = ["position", "top", "bottom", "left", "right", "height", "width"], h = e.effects.setMode(o, t.mode || "hide"), l = "show" === h, u = t.direction || "vertical", d = "vertical" === u, c = d ? "height" : "width", p = d ? "top" : "left", f = {};
+ e.effects.save(o, r), o.show(), s = e.effects.createWrapper(o).css({overflow: "hidden"}), n = "IMG" === o[0].tagName ? s : o, a = n[c](), l && (n.css(c, 0), n.css(p, a / 2)), f[c] = l ? a : 0, f[p] = l ? 0 : a / 2, n.animate(f, {
+ queue: !1,
+ duration: t.duration,
+ easing: t.easing,
+ complete: function () {
+ l || o.hide(), e.effects.restore(o, r), e.effects.removeWrapper(o), i()
+ }
+ })
+ }, e.effects.effect.drop = function (t, i) {
+ var s, n = e(this), a = ["position", "top", "bottom", "left", "right", "opacity", "height", "width"], o = e.effects.setMode(n, t.mode || "hide"), r = "show" === o, h = t.direction || "left", l = "up" === h || "down" === h ? "top" : "left", u = "up" === h || "left" === h ? "pos" : "neg", d = {opacity: r ? 1 : 0};
+ e.effects.save(n, a), n.show(), e.effects.createWrapper(n), s = t.distance || n["top" === l ? "outerHeight" : "outerWidth"](!0) / 2, r && n.css("opacity", 0).css(l, "pos" === u ? -s : s), d[l] = (r ? "pos" === u ? "+=" : "-=" : "pos" === u ? "-=" : "+=") + s, n.animate(d, {
+ queue: !1,
+ duration: t.duration,
+ easing: t.easing,
+ complete: function () {
+ "hide" === o && n.hide(), e.effects.restore(n, a), e.effects.removeWrapper(n), i()
+ }
+ })
+ }, e.effects.effect.explode = function (t, i) {
+ function s() {
+ b.push(this), b.length === d * c && n()
+ }
+
+ function n() {
+ p.css({visibility: "visible"}), e(b).remove(), m || p.hide(), i()
+ }
+
+ var a, o, r, h, l, u, d = t.pieces ? Math.round(Math.sqrt(t.pieces)) : 3, c = d, p = e(this), f = e.effects.setMode(p, t.mode || "hide"), m = "show" === f, g = p.show().css("visibility", "hidden").offset(), v = Math.ceil(p.outerWidth() / c), y = Math.ceil(p.outerHeight() / d), b = [];
+ for (a = 0; d > a; a++)for (h = g.top + a * y, u = a - (d - 1) / 2, o = 0; c > o; o++)r = g.left + o * v, l = o - (c - 1) / 2, p.clone().appendTo("body").wrap("<div></div>").css({
+ position: "absolute",
+ visibility: "visible",
+ left: -o * v,
+ top: -a * y
+ }).parent().addClass("ui-effects-explode").css({
+ position: "absolute",
+ overflow: "hidden",
+ width: v,
+ height: y,
+ left: r + (m ? l * v : 0),
+ top: h + (m ? u * y : 0),
+ opacity: m ? 0 : 1
+ }).animate({
+ left: r + (m ? 0 : l * v),
+ top: h + (m ? 0 : u * y),
+ opacity: m ? 1 : 0
+ }, t.duration || 500, t.easing, s)
+ }, e.effects.effect.fade = function (t, i) {
+ var s = e(this), n = e.effects.setMode(s, t.mode || "toggle");
+ s.animate({opacity: n}, {queue: !1, duration: t.duration, easing: t.easing, complete: i})
+ }, e.effects.effect.fold = function (t, i) {
+ var s, n, a = e(this), o = ["position", "top", "bottom", "left", "right", "height", "width"], r = e.effects.setMode(a, t.mode || "hide"), h = "show" === r, l = "hide" === r, u = t.size || 15, d = /([0-9]+)%/.exec(u), c = !!t.horizFirst, p = h !== c, f = p ? ["width", "height"] : ["height", "width"], m = t.duration / 2, g = {}, v = {};
+ e.effects.save(a, o), a.show(), s = e.effects.createWrapper(a).css({overflow: "hidden"}), n = p ? [s.width(), s.height()] : [s.height(), s.width()], d && (u = parseInt(d[1], 10) / 100 * n[l ? 0 : 1]), h && s.css(c ? {
+ height: 0,
+ width: u
+ } : {
+ height: u,
+ width: 0
+ }), g[f[0]] = h ? n[0] : u, v[f[1]] = h ? n[1] : 0, s.animate(g, m, t.easing).animate(v, m, t.easing, function () {
+ l && a.hide(), e.effects.restore(a, o), e.effects.removeWrapper(a), i()
+ })
+ }, e.effects.effect.highlight = function (t, i) {
+ var s = e(this), n = ["backgroundImage", "backgroundColor", "opacity"], a = e.effects.setMode(s, t.mode || "show"), o = {backgroundColor: s.css("backgroundColor")};
+ "hide" === a && (o.opacity = 0), e.effects.save(s, n), s.show().css({
+ backgroundImage: "none",
+ backgroundColor: t.color || "#ffff99"
+ }).animate(o, {
+ queue: !1, duration: t.duration, easing: t.easing, complete: function () {
+ "hide" === a && s.hide(), e.effects.restore(s, n), i()
+ }
+ })
+ }, e.effects.effect.size = function (t, i) {
+ var s, n, a, o = e(this), r = ["position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity"], h = ["position", "top", "bottom", "left", "right", "overflow", "opacity"], l = ["width", "height", "overflow"], u = ["fontSize"], d = ["borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom"], c = ["borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight"], p = e.effects.setMode(o, t.mode || "effect"), f = t.restore || "effect" !== p, m = t.scale || "both", g = t.origin || ["middle", "center"], v = o.css("position"), y = f ? r : h, b = {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ };
+ "show" === p && o.show(), s = {
+ height: o.height(),
+ width: o.width(),
+ outerHeight: o.outerHeight(),
+ outerWidth: o.outerWidth()
+ }, "toggle" === t.mode && "show" === p ? (o.from = t.to || b, o.to = t.from || s) : (o.from = t.from || ("show" === p ? b : s), o.to = t.to || ("hide" === p ? b : s)), a = {
+ from: {
+ y: o.from.height / s.height,
+ x: o.from.width / s.width
+ }, to: {y: o.to.height / s.height, x: o.to.width / s.width}
+ }, ("box" === m || "both" === m) && (a.from.y !== a.to.y && (y = y.concat(d), o.from = e.effects.setTransition(o, d, a.from.y, o.from), o.to = e.effects.setTransition(o, d, a.to.y, o.to)), a.from.x !== a.to.x && (y = y.concat(c), o.from = e.effects.setTransition(o, c, a.from.x, o.from), o.to = e.effects.setTransition(o, c, a.to.x, o.to))), ("content" === m || "both" === m) && a.from.y !== a.to.y && (y = y.concat(u).concat(l), o.from = e.effects.setTransition(o, u, a.from.y, o.from), o.to = e.effects.setTransition(o, u, a.to.y, o.to)), e.effects.save(o, y), o.show(), e.effects.createWrapper(o), o.css("overflow", "hidden").css(o.from), g && (n = e.effects.getBaseline(g, s), o.from.top = (s.outerHeight - o.outerHeight()) * n.y, o.from.left = (s.outerWidth - o.outerWidth()) * n.x, o.to.top = (s.outerHeight - o.to.outerHeight) * n.y, o.to.left = (s.outerWidth - o.to.outerWidth) * n.x), o.css(o.from), ("content" === m || "both" === m) && (d = d.concat(["marginTop", "marginBottom"]).concat(u), c = c.concat(["marginLeft", "marginRight"]), l = r.concat(d).concat(c), o.find("*[width]").each(function () {
+ var i = e(this), s = {
+ height: i.height(),
+ width: i.width(),
+ outerHeight: i.outerHeight(),
+ outerWidth: i.outerWidth()
+ };
+ f && e.effects.save(i, l), i.from = {
+ height: s.height * a.from.y,
+ width: s.width * a.from.x,
+ outerHeight: s.outerHeight * a.from.y,
+ outerWidth: s.outerWidth * a.from.x
+ }, i.to = {
+ height: s.height * a.to.y,
+ width: s.width * a.to.x,
+ outerHeight: s.height * a.to.y,
+ outerWidth: s.width * a.to.x
+ }, a.from.y !== a.to.y && (i.from = e.effects.setTransition(i, d, a.from.y, i.from), i.to = e.effects.setTransition(i, d, a.to.y, i.to)), a.from.x !== a.to.x && (i.from = e.effects.setTransition(i, c, a.from.x, i.from), i.to = e.effects.setTransition(i, c, a.to.x, i.to)), i.css(i.from), i.animate(i.to, t.duration, t.easing, function () {
+ f && e.effects.restore(i, l)
+ })
+ })), o.animate(o.to, {
+ queue: !1, duration: t.duration, easing: t.easing, complete: function () {
+ 0 === o.to.opacity && o.css("opacity", o.from.opacity), "hide" === p && o.hide(), e.effects.restore(o, y), f || ("static" === v ? o.css({
+ position: "relative",
+ top: o.to.top,
+ left: o.to.left
+ }) : e.each(["top", "left"], function (e, t) {
+ o.css(t, function (t, i) {
+ var s = parseInt(i, 10), n = e ? o.to.left : o.to.top;
+ return "auto" === i ? n + "px" : s + n + "px"
+ })
+ })), e.effects.removeWrapper(o), i()
+ }
+ })
+ }, e.effects.effect.scale = function (t, i) {
+ var s = e(this), n = e.extend(!0, {}, t), a = e.effects.setMode(s, t.mode || "effect"), o = parseInt(t.percent, 10) || (0 === parseInt(t.percent, 10) ? 0 : "hide" === a ? 0 : 100), r = t.direction || "both", h = t.origin, l = {
+ height: s.height(),
+ width: s.width(),
+ outerHeight: s.outerHeight(),
+ outerWidth: s.outerWidth()
+ }, u = {y: "horizontal" !== r ? o / 100 : 1, x: "vertical" !== r ? o / 100 : 1};
+ n.effect = "size", n.queue = !1, n.complete = i, "effect" !== a && (n.origin = h || ["middle", "center"], n.restore = !0), n.from = t.from || ("show" === a ? {
+ height: 0,
+ width: 0,
+ outerHeight: 0,
+ outerWidth: 0
+ } : l), n.to = {
+ height: l.height * u.y,
+ width: l.width * u.x,
+ outerHeight: l.outerHeight * u.y,
+ outerWidth: l.outerWidth * u.x
+ }, n.fade && ("show" === a && (n.from.opacity = 0, n.to.opacity = 1), "hide" === a && (n.from.opacity = 1, n.to.opacity = 0)), s.effect(n)
+ }, e.effects.effect.puff = function (t, i) {
+ var s = e(this), n = e.effects.setMode(s, t.mode || "hide"), a = "hide" === n, o = parseInt(t.percent, 10) || 150, r = o / 100, h = {
+ height: s.height(),
+ width: s.width(),
+ outerHeight: s.outerHeight(),
+ outerWidth: s.outerWidth()
+ };
+ e.extend(t, {
+ effect: "scale",
+ queue: !1,
+ fade: !0,
+ mode: n,
+ complete: i,
+ percent: a ? o : 100,
+ from: a ? h : {
+ height: h.height * r,
+ width: h.width * r,
+ outerHeight: h.outerHeight * r,
+ outerWidth: h.outerWidth * r
+ }
+ }), s.effect(t)
+ }, e.effects.effect.pulsate = function (t, i) {
+ var s, n = e(this), a = e.effects.setMode(n, t.mode || "show"), o = "show" === a, r = "hide" === a, h = o || "hide" === a, l = 2 * (t.times || 5) + (h ? 1 : 0), u = t.duration / l, d = 0, c = n.queue(), p = c.length;
+ for ((o || !n.is(":visible")) && (n.css("opacity", 0).show(), d = 1), s = 1; l > s; s++)n.animate({opacity: d}, u, t.easing), d = 1 - d;
+ n.animate({opacity: d}, u, t.easing), n.queue(function () {
+ r && n.hide(), i()
+ }), p > 1 && c.splice.apply(c, [1, 0].concat(c.splice(p, l + 1))), n.dequeue()
+ }, e.effects.effect.shake = function (t, i) {
+ var s, n = e(this), a = ["position", "top", "bottom", "left", "right", "height", "width"], o = e.effects.setMode(n, t.mode || "effect"), r = t.direction || "left", h = t.distance || 20, l = t.times || 3, u = 2 * l + 1, d = Math.round(t.duration / u), c = "up" === r || "down" === r ? "top" : "left", p = "up" === r || "left" === r, f = {}, m = {}, g = {}, v = n.queue(), y = v.length;
+ for (e.effects.save(n, a), n.show(), e.effects.createWrapper(n), f[c] = (p ? "-=" : "+=") + h, m[c] = (p ? "+=" : "-=") + 2 * h, g[c] = (p ? "-=" : "+=") + 2 * h, n.animate(f, d, t.easing), s = 1; l > s; s++)n.animate(m, d, t.easing).animate(g, d, t.easing);
+ n.animate(m, d, t.easing).animate(f, d / 2, t.easing).queue(function () {
+ "hide" === o && n.hide(), e.effects.restore(n, a), e.effects.removeWrapper(n), i()
+ }), y > 1 && v.splice.apply(v, [1, 0].concat(v.splice(y, u + 1))), n.dequeue()
+ }, e.effects.effect.slide = function (t, i) {
+ var s, n = e(this), a = ["position", "top", "bottom", "left", "right", "width", "height"], o = e.effects.setMode(n, t.mode || "show"), r = "show" === o, h = t.direction || "left", l = "up" === h || "down" === h ? "top" : "left", u = "up" === h || "left" === h, d = {};
+ e.effects.save(n, a), n.show(), s = t.distance || n["top" === l ? "outerHeight" : "outerWidth"](!0), e.effects.createWrapper(n).css({overflow: "hidden"}), r && n.css(l, u ? isNaN(s) ? "-" + s : -s : s), d[l] = (r ? u ? "+=" : "-=" : u ? "-=" : "+=") + s, n.animate(d, {
+ queue: !1,
+ duration: t.duration,
+ easing: t.easing,
+ complete: function () {
+ "hide" === o && n.hide(), e.effects.restore(n, a), e.effects.removeWrapper(n), i()
+ }
+ })
+ }, e.effects.effect.transfer = function (t, i) {
+ var s = e(this), n = e(t.to), a = "fixed" === n.css("position"), o = e("body"), r = a ? o.scrollTop() : 0, h = a ? o.scrollLeft() : 0, l = n.offset(), u = {
+ top: l.top - r,
+ left: l.left - h,
+ height: n.innerHeight(),
+ width: n.innerWidth()
+ }, d = s.offset(), c = e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({
+ top: d.top - r,
+ left: d.left - h,
+ height: s.innerHeight(),
+ width: s.innerWidth(),
+ position: a ? "fixed" : "absolute"
+ }).animate(u, t.duration, t.easing, function () {
+ c.remove(), i()
+ })
+ }
+}); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.css
new file mode 100644
index 00000000..a58bc8c9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.css
@@ -0,0 +1,963 @@
+/*!
+ * jQuery UI CSS Framework 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/theming/
+ */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+
+.ui-helper-clearfix:after {
+ clear: both;
+}
+
+.ui-helper-clearfix {
+ min-height: 0; /* support: IE7 */
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable {
+ position: relative;
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0; /* support: IE7 */
+ font-size: 100%;
+}
+
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em;
+}
+
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible; /* removes extra width in IE */
+}
+
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+ text-decoration: none;
+}
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2.2em;
+}
+
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+ width: 2.4em;
+}
+
+.ui-button-icons-only {
+ width: 3.4em;
+}
+
+button.ui-button-icons-only {
+ width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal;
+}
+
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em;
+}
+
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px;
+}
+
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em;
+}
+
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em;
+}
+
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em;
+}
+
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+ padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px;
+}
+
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+ left: .5em;
+}
+
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+ margin-right: 7px;
+}
+
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+}
+
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+}
+
+.ui-datepicker .ui-datepicker-next {
+ right: 2px;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+}
+
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+}
+
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+}
+
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+}
+
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+}
+
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+}
+
+.ui-datepicker td {
+ border: 0;
+ padding: 1px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+}
+
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+}
+
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+}
+
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+}
+
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px;
+}
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none;
+}
+
+.ui-menu .ui-menu {
+ position: absolute;
+}
+
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0; /* support: IE7 */
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+}
+
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+ margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden;
+}
+
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,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");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ /* Support: IE7 */
+ overflow-x: hidden;
+ padding-bottom: 1px;
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+}
+
+.ui-selectmenu-open {
+ display: block;
+}
+
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%;
+}
+
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+}
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+}
+
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+}
+
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px;
+}
+
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none;
+}
+
+/* vertically center icon */
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0;
+}
+
+.ui-spinner-up {
+ top: 0;
+}
+
+.ui-spinner-down {
+ bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+ /* need to fix icons sprite */
+ background-position: -65px -16px;
+}
+
+.ui-tabs {
+ position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+}
+
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa;
+}
+
+body .ui-tooltip {
+ border-width: 2px;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css
new file mode 100644
index 00000000..c74dbd8e
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.structure.min.css
@@ -0,0 +1,894 @@
+/*! jQuery UI - v1.11.4 - 2015-04-12
+* http://jqueryui.com
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden {
+ display: none
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none
+}
+
+.ui-helper-clearfix:before, .ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse
+}
+
+.ui-helper-clearfix:after {
+ clear: both
+}
+
+.ui-helper-clearfix {
+ min-height: 0
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0)
+}
+
+.ui-front {
+ z-index: 100
+}
+
+.ui-state-disabled {
+ cursor: default !important
+}
+
+.ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat
+}
+
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-resizable {
+ position: relative
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle {
+ display: none
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black
+}
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ min-height: 0;
+ font-size: 100%
+}
+
+.ui-accordion .ui-accordion-icons {
+ padding-left: 2.2em
+}
+
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+ padding-left: 2.2em
+}
+
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+ position: absolute;
+ left: .5em;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default
+}
+
+.ui-button {
+ display: inline-block;
+ position: relative;
+ padding: 0;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ overflow: visible
+}
+
+.ui-button, .ui-button:link, .ui-button:visited, .ui-button:hover, .ui-button:active {
+ text-decoration: none
+}
+
+.ui-button-icon-only {
+ width: 2.2em
+}
+
+button.ui-button-icon-only {
+ width: 2.4em
+}
+
+.ui-button-icons-only {
+ width: 3.4em
+}
+
+button.ui-button-icons-only {
+ width: 3.7em
+}
+
+.ui-button .ui-button-text {
+ display: block;
+ line-height: normal
+}
+
+.ui-button-text-only .ui-button-text {
+ padding: .4em 1em
+}
+
+.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text {
+ padding: .4em;
+ text-indent: -9999999px
+}
+
+.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text {
+ padding: .4em 1em .4em 2.1em
+}
+
+.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text {
+ padding: .4em 2.1em .4em 1em
+}
+
+.ui-button-text-icons .ui-button-text {
+ padding-left: 2.1em;
+ padding-right: 2.1em
+}
+
+input.ui-button {
+ padding: .4em 1em
+}
+
+.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-button-icon-only .ui-icon {
+ left: 50%;
+ margin-left: -8px
+}
+
+.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary {
+ left: .5em
+}
+
+.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary {
+ right: .5em
+}
+
+.ui-buttonset {
+ margin-right: 7px
+}
+
+.ui-buttonset .ui-button {
+ margin-left: 0;
+ margin-right: -.3em
+}
+
+input.ui-button::-moz-focus-inner, button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none
+}
+
+.ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0
+}
+
+.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em
+}
+
+.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover {
+ top: 1px
+}
+
+.ui-datepicker .ui-datepicker-prev {
+ left: 2px
+}
+
+.ui-datepicker .ui-datepicker-next {
+ right: 2px
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+ right: 1px
+}
+
+.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px
+}
+
+.ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center
+}
+
+.ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0
+}
+
+.ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
+ width: 45%
+}
+
+.ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em
+}
+
+.ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0
+}
+
+.ui-datepicker td {
+ border: 0;
+ padding: 1px
+}
+
+.ui-datepicker td span, .ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left
+}
+
+.ui-datepicker.ui-datepicker-multi {
+ width: auto
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0
+}
+
+.ui-datepicker-rtl {
+ direction: rtl
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, .ui-datepicker-rtl .ui-datepicker-group {
+ float: right
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px
+}
+
+.ui-dialog {
+ overflow: hidden;
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0
+}
+
+.ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative
+}
+
+.ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis
+}
+
+.ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px
+}
+
+.ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto
+}
+
+.ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em
+}
+
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right
+}
+
+.ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer
+}
+
+.ui-dialog .ui-resizable-se {
+ width: 12px;
+ height: 12px;
+ right: -5px;
+ bottom: -5px;
+ background-position: 16px 16px
+}
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: none
+}
+
+.ui-menu .ui-menu {
+ position: absolute
+}
+
+.ui-menu .ui-menu-item {
+ position: relative;
+ margin: 0;
+ padding: 3px 1em 3px .4em;
+ cursor: pointer;
+ min-height: 0;
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
+}
+
+.ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0
+}
+
+.ui-menu .ui-state-focus, .ui-menu .ui-state-active {
+ margin: -1px
+}
+
+.ui-menu-icons {
+ position: relative
+}
+
+.ui-menu-icons .ui-menu-item {
+ padding-left: 2em
+}
+
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0
+}
+
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden
+}
+
+.ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%
+}
+
+.ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,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");
+ height: 100%;
+ filter: alpha(opacity=25);
+ opacity: 0.25
+}
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none
+}
+
+.ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ overflow-x: hidden;
+ padding-bottom: 1px
+}
+
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0
+}
+
+.ui-selectmenu-open {
+ display: block
+}
+
+.ui-selectmenu-button {
+ display: inline-block;
+ overflow: hidden;
+ position: relative;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.ui-selectmenu-button span.ui-icon {
+ right: 0.5em;
+ left: auto;
+ margin-top: -8px;
+ position: absolute;
+ top: 50%
+}
+
+.ui-selectmenu-button span.ui-selectmenu-text {
+ text-align: left;
+ padding: 0.4em 2.1em 0.4em 1em;
+ display: block;
+ line-height: 1.4;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left
+}
+
+.ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none
+}
+
+.ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0
+}
+
+.ui-slider.ui-state-disabled .ui-slider-handle, .ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit
+}
+
+.ui-slider-horizontal {
+ height: .8em
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em
+}
+
+.ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%
+}
+
+.ui-slider-horizontal .ui-slider-range-min {
+ left: 0
+}
+
+.ui-slider-horizontal .ui-slider-range-max {
+ right: 0
+}
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em
+}
+
+.ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%
+}
+
+.ui-slider-vertical .ui-slider-range-min {
+ bottom: 0
+}
+
+.ui-slider-vertical .ui-slider-range-max {
+ top: 0
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 22px
+}
+
+.ui-spinner-button {
+ width: 16px;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0
+}
+
+.ui-spinner a.ui-spinner-button {
+ border-top: none;
+ border-bottom: none;
+ border-right: none
+}
+
+.ui-spinner .ui-icon {
+ position: absolute;
+ margin-top: -8px;
+ top: 50%;
+ left: 0
+}
+
+.ui-spinner-up {
+ top: 0
+}
+
+.ui-spinner-down {
+ bottom: 0
+}
+
+.ui-spinner .ui-icon-triangle-1-s {
+ background-position: -65px -16px
+}
+
+.ui-tabs {
+ position: relative;
+ padding: .2em
+}
+
+.ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0
+}
+
+.ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap
+}
+
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px
+}
+
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text
+}
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+ -webkit-box-shadow: 0 0 5px #aaa;
+ box-shadow: 0 0 5px #aaa
+}
+
+body .ui-tooltip {
+ border-width: 2px
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.css
new file mode 100644
index 00000000..5f1de320
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.css
@@ -0,0 +1,962 @@
+/*!
+ * jQuery UI CSS Framework 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/theming/
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+ */
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1.1em;
+}
+
+.ui-widget .ui-widget {
+ font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1em;
+}
+
+.ui-widget-content {
+ border: 1px solid #dddddd;
+ background: #eeeeee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;
+ color: #333333;
+}
+
+.ui-widget-content a {
+ color: #333333;
+}
+
+.ui-widget-header {
+ border: 1px solid #e78f08;
+ background: #f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;
+ color: #ffffff;
+ font-weight: bold;
+}
+
+.ui-widget-header a {
+ color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1c94c4;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+ color: #1c94c4;
+ text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+ border: 1px solid #fbcb09;
+ background: #fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #c77405;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+ color: #c77405;
+ text-decoration: none;
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+ border: 1px solid #fbd850;
+ background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #eb8f00;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+ color: #eb8f00;
+ text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #fed22f;
+ background: #ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
+ color: #363636;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #363636;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;
+ color: #ffffff;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+ color: #ffffff;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #ffffff;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-state-default .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-active .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png");
+}
+
+.ui-state-highlight .ui-icon {
+ background-image: url("images/ui-icons_228ef1_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_ffd27a_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank {
+ background-position: 16px 16px;
+}
+
+.ui-icon-carat-1-n {
+ background-position: 0 0;
+}
+
+.ui-icon-carat-1-ne {
+ background-position: -16px 0;
+}
+
+.ui-icon-carat-1-e {
+ background-position: -32px 0;
+}
+
+.ui-icon-carat-1-se {
+ background-position: -48px 0;
+}
+
+.ui-icon-carat-1-s {
+ background-position: -64px 0;
+}
+
+.ui-icon-carat-1-sw {
+ background-position: -80px 0;
+}
+
+.ui-icon-carat-1-w {
+ background-position: -96px 0;
+}
+
+.ui-icon-carat-1-nw {
+ background-position: -112px 0;
+}
+
+.ui-icon-carat-2-n-s {
+ background-position: -128px 0;
+}
+
+.ui-icon-carat-2-e-w {
+ background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -64px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -64px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 0 -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px;
+}
+
+.ui-icon-document {
+ background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px;
+}
+
+.ui-icon-note {
+ background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px;
+}
+
+.ui-icon-person {
+ background-position: -144px -96px;
+}
+
+.ui-icon-print {
+ background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px;
+}
+
+.ui-icon-home {
+ background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px;
+}
+
+.ui-icon-search {
+ background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px;
+}
+
+.ui-icon-star {
+ background-position: -224px -112px;
+}
+
+.ui-icon-link {
+ background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px;
+}
+
+.ui-icon-close {
+ background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px;
+}
+
+.ui-icon-key {
+ background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px;
+}
+
+.ui-icon-image {
+ background-position: -208px -128px;
+}
+
+.ui-icon-video {
+ background-position: -224px -128px;
+}
+
+.ui-icon-script {
+ background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px;
+}
+
+.ui-icon-info {
+ background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px;
+}
+
+.ui-icon-help {
+ background-position: -48px -144px;
+}
+
+.ui-icon-check {
+ background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px;
+}
+
+.ui-icon-play {
+ background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px;
+}
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first {
+ background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px;
+}
+
+.ui-icon-power {
+ background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 4px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #666666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;
+ opacity: .5;
+ filter: Alpha(Opacity=50); /* support: IE8 */
+}
+
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20); /* support: IE8 */
+ border-radius: 5px;
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.min.css
new file mode 100644
index 00000000..e6654d08
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/jquery-ui-1.11.4.custom/jquery-ui.theme.min.css
@@ -0,0 +1,882 @@
+/*! jQuery UI - v1.11.4 - 2015-04-16
+* http://jqueryui.com
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-widget {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1.1em
+}
+
+.ui-widget .ui-widget {
+ font-size: 1em
+}
+
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1em
+}
+
+.ui-widget-content {
+ border: 1px solid #ddd;
+ background: #eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;
+ color: #333
+}
+
+.ui-widget-content a {
+ color: #333
+}
+
+.ui-widget-header {
+ border: 1px solid #e78f08;
+ background: #f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;
+ color: #fff;
+ font-weight: bold
+}
+
+.ui-widget-header a {
+ color: #fff
+}
+
+.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ border: 1px solid #ccc;
+ background: #f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1c94c4
+}
+
+.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited {
+ color: #1c94c4;
+ text-decoration: none
+}
+
+.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
+ border: 1px solid #fbcb09;
+ background: #fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #c77405
+}
+
+.ui-state-hover a, .ui-state-hover a:hover, .ui-state-hover a:link, .ui-state-hover a:visited, .ui-state-focus a, .ui-state-focus a:hover, .ui-state-focus a:link, .ui-state-focus a:visited {
+ color: #c77405;
+ text-decoration: none
+}
+
+.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
+ border: 1px solid #fbd850;
+ background: #fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;
+ font-weight: bold;
+ color: #eb8f00
+}
+
+.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited {
+ color: #eb8f00;
+ text-decoration: none
+}
+
+.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
+ border: 1px solid #fed22f;
+ background: #ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;
+ color: #363636
+}
+
+.ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
+ color: #363636
+}
+
+.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;
+ color: #fff
+}
+
+.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a {
+ color: #fff
+}
+
+.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
+ color: #fff
+}
+
+.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary {
+ font-weight: bold
+}
+
+.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70);
+ font-weight: normal
+}
+
+.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35);
+ background-image: none
+}
+
+.ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35)
+}
+
+.ui-icon {
+ width: 16px;
+ height: 16px
+}
+
+.ui-icon, .ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_222222_256x240.png")
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_ffffff_256x240.png")
+}
+
+.ui-state-default .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-active .ui-icon {
+ background-image: url("images/ui-icons_ef8c08_256x240.png")
+}
+
+.ui-state-highlight .ui-icon {
+ background-image: url("images/ui-icons_228ef1_256x240.png")
+}
+
+.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_ffd27a_256x240.png")
+}
+
+.ui-icon-blank {
+ background-position: 16px 16px
+}
+
+.ui-icon-carat-1-n {
+ background-position: 0 0
+}
+
+.ui-icon-carat-1-ne {
+ background-position: -16px 0
+}
+
+.ui-icon-carat-1-e {
+ background-position: -32px 0
+}
+
+.ui-icon-carat-1-se {
+ background-position: -48px 0
+}
+
+.ui-icon-carat-1-s {
+ background-position: -64px 0
+}
+
+.ui-icon-carat-1-sw {
+ background-position: -80px 0
+}
+
+.ui-icon-carat-1-w {
+ background-position: -96px 0
+}
+
+.ui-icon-carat-1-nw {
+ background-position: -112px 0
+}
+
+.ui-icon-carat-2-n-s {
+ background-position: -128px 0
+}
+
+.ui-icon-carat-2-e-w {
+ background-position: -144px 0
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -64px -16px
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -64px -32px
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 0 -48px
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px
+}
+
+.ui-icon-document {
+ background-position: -32px -96px
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px
+}
+
+.ui-icon-note {
+ background-position: -64px -96px
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px
+}
+
+.ui-icon-person {
+ background-position: -144px -96px
+}
+
+.ui-icon-print {
+ background-position: -160px -96px
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px
+}
+
+.ui-icon-home {
+ background-position: 0 -112px
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px
+}
+
+.ui-icon-search {
+ background-position: -160px -112px
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px
+}
+
+.ui-icon-star {
+ background-position: -224px -112px
+}
+
+.ui-icon-link {
+ background-position: -240px -112px
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px
+}
+
+.ui-icon-close {
+ background-position: -80px -128px
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px
+}
+
+.ui-icon-key {
+ background-position: -112px -128px
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px
+}
+
+.ui-icon-image {
+ background-position: -208px -128px
+}
+
+.ui-icon-video {
+ background-position: -224px -128px
+}
+
+.ui-icon-script {
+ background-position: -240px -128px
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px
+}
+
+.ui-icon-info {
+ background-position: -16px -144px
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px
+}
+
+.ui-icon-help {
+ background-position: -48px -144px
+}
+
+.ui-icon-check {
+ background-position: -64px -144px
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px
+}
+
+.ui-icon-play {
+ background-position: 0 -160px
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px
+}
+
+.ui-icon-seek-first {
+ background-position: -80px -160px
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px
+}
+
+.ui-icon-power {
+ background-position: 0 -176px
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px
+}
+
+.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl {
+ border-top-left-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr {
+ border-top-right-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl {
+ border-bottom-left-radius: 4px
+}
+
+.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br {
+ border-bottom-right-radius: 4px
+}
+
+.ui-widget-overlay {
+ background: #666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;
+ opacity: .5;
+ filter: Alpha(Opacity=50)
+}
+
+.ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: #000 url("images/ui-bg_flat_10_000000_40x100.png") 50% 50% repeat-x;
+ opacity: .2;
+ filter: Alpha(Opacity=20);
+ border-radius: 5px
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/avalon.modern.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/avalon.modern.js
new file mode 100644
index 00000000..f4f885a0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/avalon.modern.js
@@ -0,0 +1,4481 @@
+/*==================================================
+ Copyright (c) 2013-2014 司徒正美 and other contributors
+ http://www.cnblogs.com/rubylouvre/
+ https://github.com/RubyLouvre
+ http://weibo.com/jslouvre/
+
+ Released under the MIT license
+ avalon.modern.js 1.39 build in 2015.1.15
+ ______________________________
+ support IE6+ and other browsers
+ ==================================================*/
+(function (global, factory) {
+
+ if (typeof module === "object" && typeof module.exports === "object") {
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get avalon.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var avalon = require("avalon")(window);
+ module.exports = global.document ? factory(global, true) : function (w) {
+ if (!w.document) {
+ throw new Error("Avalon requires a window with a document")
+ }
+ return factory(w)
+ }
+ } else {
+ factory(global)
+ }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
+
+ /*********************************************************************
+ * 全局变量及方法 *
+ **********************************************************************/
+ var expose = Date.now()
+//http://stackoverflow.com/questions/7290086/javascript-use-strict-and-nicks-find-global-function
+ var DOC = window.document
+ var head = DOC.head //HEAD元素
+ head.insertAdjacentHTML("afterBegin", '<avalon ms-skip><style id="avalonStyle">.avalonHide{ display: none!important }</style></avalon>')
+ var ifGroup = head.firstChild
+
+ function log() {
+ if (avalon.config.debug) {
+// http://stackoverflow.com/questions/8785624/how-to-safely-wrap-console-log
+ console.log.apply(console, arguments)
+ }
+ }
+
+ var subscribers = "$" + expose
+ var otherRequire = window.require
+ var otherDefine = window.define
+ var stopRepeatAssign = false
+ var rword = /[^, ]+/g //切割字符串为一个个小块,以空格或豆号分开它们,结合replace实现字符串的forEach
+ var rcomplexType = /^(?:object|array)$/
+ var rsvg = /^\[object SVG\w*Element\]$/
+ var rwindow = /^\[object (?:Window|DOMWindow|global)\]$/
+ var oproto = Object.prototype
+ var ohasOwn = oproto.hasOwnProperty
+ var serialize = oproto.toString
+ var ap = Array.prototype
+ var aslice = ap.slice
+ var Registry = {} //将函数曝光到此对象上,方便访问器收集依赖
+ var W3C = window.dispatchEvent
+ var root = DOC.documentElement
+ var hyperspace = DOC.createDocumentFragment()
+ var cinerator = DOC.createElement("div")
+ var class2type = {}
+ "Boolean Number String Function Array Date RegExp Object Error".replace(rword, function (name) {
+ class2type["[object " + name + "]"] = name.toLowerCase()
+ })
+
+
+ function noop() {
+ }
+
+
+ function oneObject(array, val) {
+ if (typeof array === "string") {
+ array = array.match(rword) || []
+ }
+ var result = {},
+ value = val !== void 0 ? val : 1
+ for (var i = 0, n = array.length; i < n; i++) {
+ result[array[i]] = value
+ }
+ return result
+ }
+
+ function createCache(maxLength) {
+ var keys = []
+
+ function cache(key, value) {
+ if (keys.push(key) > maxLength) {
+ delete cache[keys.shift()]
+ }
+ return cache[key] = value;
+ }
+
+ return cache;
+ }
+
+//生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript
+ var generateID = function (prefix) {
+ prefix = prefix || "avalon"
+ return (prefix + Math.random() + Math.random()).replace(/0\./g, "")
+ }
+
+ function IE() {
+ if (window.VBArray) {
+ var mode = document.documentMode
+ return mode ? mode : window.XMLHttpRequest ? 7 : 6
+ } else {
+ return 0
+ }
+ }
+
+ var IEVersion = IE()
+ /*********************************************************************
+ * avalon的静态方法定义区 *
+ **********************************************************************/
+ avalon = function (el) { //创建jQuery式的无new 实例化结构
+ return new avalon.init(el)
+ }
+
+ avalon.init = function (el) {
+ this[0] = this.element = el
+ }
+ avalon.fn = avalon.prototype = avalon.init.prototype
+
+ avalon.type = function (obj) { //取得目标的类型
+ if (obj == null) {
+ return String(obj)
+ }
+ // 早期的webkit内核浏览器实现了已废弃的ecma262v4标准,可以将正则字面量当作函数使用,因此typeof在判定正则时会返回function
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[serialize.call(obj)] || "object" :
+ typeof obj
+ }
+
+ var isFunction = function (fn) {
+ return serialize.call(fn) == "[object Function]"
+ }
+
+ avalon.isFunction = isFunction
+
+ avalon.isWindow = function (obj) {
+ return rwindow.test(serialize.call(obj))
+ }
+
+ /*判定是否是一个朴素的javascript对象(Object),不是DOM对象,不是BOM对象,不是自定义类的实例*/
+
+ avalon.isPlainObject = function (obj) {
+ // 简单的 typeof obj === "object"检测,会致使用isPlainObject(window)在opera下通不过
+ return serialize.call(obj) === "[object Object]" && Object.getPrototypeOf(obj) === oproto
+ }
+
+//与jQuery.extend方法,可用于浅拷贝,深拷贝
+ avalon.mix = avalon.fn.mix = function () {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false
+
+ // 如果第一个参数为布尔,判定是否深拷贝
+ if (typeof target === "boolean") {
+ deep = target
+ target = arguments[1] || {}
+ i++
+ }
+
+ //确保接受方为一个复杂的数据类型
+ if (typeof target !== "object" && !isFunction(target)) {
+ target = {}
+ }
+
+ //如果只有一个参数,那么新成员添加于mix所在的对象上
+ if (i === length) {
+ target = this
+ i--
+ }
+
+ for (; i < length; i++) {
+ //只处理非空参数
+ if ((options = arguments[i]) != null) {
+ for (name in options) {
+ src = target[name]
+ copy = options[name]
+ // 防止环引用
+ if (target === copy) {
+ continue
+ }
+ if (deep && copy && (avalon.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
+
+ if (copyIsArray) {
+ copyIsArray = false
+ clone = src && Array.isArray(src) ? src : []
+
+ } else {
+ clone = src && avalon.isPlainObject(src) ? src : {}
+ }
+
+ target[name] = avalon.mix(deep, clone, copy)
+ } else if (copy !== void 0) {
+ target[name] = copy
+ }
+ }
+ }
+ }
+ return target
+ }
+
+ function _number(a, len) { //用于模拟slice, splice的效果
+ a = Math.floor(a) || 0
+ return a < 0 ? Math.max(len + a, 0) : Math.min(a, len);
+ }
+
+ avalon.mix({
+ rword: rword,
+ subscribers: subscribers,
+ version: 1.39,
+ ui: {},
+ log: log,
+ slice: function (nodes, start, end) {
+ return aslice.call(nodes, start, end)
+ },
+ noop: noop,
+ /*如果不用Error对象封装一下,str在控制台下可能会乱码*/
+ error: function (str, e) {
+ throw new (e || Error)(str)
+ },
+ /*将一个以空格或逗号隔开的字符串或数组,转换成一个键值都为1的对象*/
+ oneObject: oneObject,
+ /* avalon.range(10)
+ => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ avalon.range(1, 11)
+ => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ avalon.range(0, 30, 5)
+ => [0, 5, 10, 15, 20, 25]
+ avalon.range(0, -10, -1)
+ => [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
+ avalon.range(0)
+ => []*/
+ range: function (start, end, step) { // 用于生成整数数组
+ step || (step = 1)
+ if (end == null) {
+ end = start || 0
+ start = 0
+ }
+ var index = -1,
+ length = Math.max(0, Math.ceil((end - start) / step)),
+ result = Array(length)
+ while (++index < length) {
+ result[index] = start
+ start += step
+ }
+ return result
+ },
+ eventHooks: {},
+ /*绑定事件*/
+ bind: function (el, type, fn, phase) {
+ var hooks = avalon.eventHooks
+ var hook = hooks[type]
+ if (typeof hook === "object") {
+ type = hook.type
+ if (hook.deel) {
+ fn = hook.deel(el, fn)
+ }
+ }
+ el.addEventListener(type, fn, !!phase)
+ return fn
+ },
+ /*卸载事件*/
+ unbind: function (el, type, fn, phase) {
+ var hooks = avalon.eventHooks
+ var hook = hooks[type]
+ var callback = fn || noop
+ if (typeof hook === "object") {
+ type = hook.type
+ }
+ el.removeEventListener(type, callback, !!phase)
+ },
+ /*读写删除元素节点的样式*/
+ css: function (node, name, value) {
+ if (node instanceof avalon) {
+ node = node[0]
+ }
+ var prop = /[_-]/.test(name) ? camelize(name) : name
+ name = avalon.cssName(prop) || prop
+ if (value === void 0 || typeof value === "boolean") { //获取样式
+ var fn = cssHooks[prop + ":get"] || cssHooks["@:get"]
+ if (name === "background") {
+ name = "backgroundColor"
+ }
+ var val = fn(node, name)
+ return value === true ? parseFloat(val) || 0 : val
+ } else if (value === "") { //请除样式
+ node.style[name] = ""
+ } else { //设置样式
+ if (value == null || value !== value) {
+ return
+ }
+ if (isFinite(value) && !avalon.cssNumber[prop]) {
+ value += "px"
+ }
+ fn = cssHooks[prop + ":set"] || cssHooks["@:set"]
+ fn(node, name, value)
+ }
+ },
+ /*遍历数组与对象,回调的第一个参数为索引或键名,第二个或元素或键值*/
+ each: function (obj, fn) {
+ if (obj) { //排除null, undefined
+ var i = 0
+ if (isArrayLike(obj)) {
+ for (var n = obj.length; i < n; i++) {
+ fn(i, obj[i])
+ }
+ } else {
+ for (i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ fn(i, obj[i])
+ }
+ }
+ }
+ }
+ },
+ //收集元素的data-{{prefix}}-*属性,并转换为对象
+ getWidgetData: function (elem, prefix) {
+ var raw = avalon(elem).data()
+ var result = {}
+ for (var i in raw) {
+ if (i.indexOf(prefix) === 0) {
+ result[i.replace(prefix, "").replace(/\w/, function (a) {
+ return a.toLowerCase()
+ })] = raw[i]
+ }
+ }
+ return result
+ },
+ Array: {
+ /*只有当前数组不存在此元素时只添加它*/
+ ensure: function (target, item) {
+ if (target.indexOf(item) === -1) {
+ return target.push(item)
+ }
+ },
+ /*移除数组中指定位置的元素,返回布尔表示成功与否*/
+ removeAt: function (target, index) {
+ return !!target.splice(index, 1).length
+ },
+ /*移除数组中第一个匹配传参的那个元素,返回布尔表示成功与否*/
+ remove: function (target, item) {
+ var index = target.indexOf(item)
+ if (~index)
+ return avalon.Array.removeAt(target, index)
+ return false
+ }
+ }
+ })
+
+ var bindingHandlers = avalon.bindingHandlers = {}
+ var bindingExecutors = avalon.bindingExecutors = {}
+
+ /*判定是否类数组,如节点集合,纯数组,arguments与拥有非负整数的length属性的纯JS对象*/
+ function isArrayLike(obj) {
+ if (obj && typeof obj === "object") {
+ var n = obj.length,
+ str = serialize.call(obj)
+ if (/(Array|List|Collection|Map|Arguments)\]$/.test(str)) {
+ return true
+ } else if (str === "[object Object]" && n === (n >>> 0)) {
+ return true //由于ecma262v5能修改对象属性的enumerable,因此不能用propertyIsEnumerable来判定了
+ }
+ }
+ return false
+ }
+
+ /*视浏览器情况采用最快的异步回调(在avalon.ready里,还有一个分支,用于处理IE6-9)*/
+ avalon.nextTick = window.setImmediate ? setImmediate.bind(window) : function (callback) {
+ setTimeout(callback, 0) //IE10-11 or W3C
+ }
+
+ /*********************************************************************
+ * DOM 底层补丁 *
+ **********************************************************************/
+ if (!root.contains) { //safari5+是把contains方法放在Element.prototype上而不是Node.prototype
+ Node.prototype.contains = function (arg) {
+ return !!(this.compareDocumentPosition(arg) & 16)
+ }
+ }
+ avalon.contains = function (root, el) {
+ try {
+ while ((el = el.parentNode))
+ if (el === root)
+ return true;
+ return false
+ } catch (e) {
+ return false
+ }
+ }
+ if (window.SVGElement) {
+ var svgns = "http://www.w3.org/2000/svg"
+ var svg = DOC.createElementNS(svgns, "svg")
+ svg.innerHTML = '<circle cx="50" cy="50" r="40" fill="red" />'
+ if (!rsvg.test(svg.firstChild)) {// #409
+
+ function enumerateNode(node, targetNode) {
+ if (node && node.childNodes) {
+ var nodes = node.childNodes
+ for (var i = 0, el; el = nodes[i++];) {
+ if (el.tagName) {
+ var svg = DOC.createElementNS(svgns,
+ el.tagName.toLowerCase())
+ // copy attrs
+ ap.forEach.call(el.attributes, function (attr) {
+ svg.setAttribute(attr.name, attr.value)
+ })
+ // 递归处理子节点
+ enumerateNode(el, svg)
+ targetNode.appendChild(svg)
+ }
+ }
+ }
+ }
+
+ Object.defineProperties(SVGElement.prototype, {
+ "outerHTML": {//IE9-11,firefox不支持SVG元素的innerHTML,outerHTML属性
+ enumerable: true,
+ configurable: true,
+ get: function () {
+ return new XMLSerializer().serializeToString(this)
+ },
+ set: function (html) {
+ var tagName = this.tagName.toLowerCase(),
+ par = this.parentNode,
+ frag = avalon.parseHTML(html)
+ // 操作的svg,直接插入
+ if (tagName === "svg") {
+ par.insertBefore(frag, this)
+ // svg节点的子节点类似
+ } else {
+ var newFrag = DOC.createDocumentFragment()
+ enumerateNode(frag, newFrag)
+ par.insertBefore(newFrag, this)
+ }
+ par.removeChild(this)
+ }
+ },
+ "innerHTML": {
+ enumerable: true,
+ configurable: true,
+ get: function () {
+ var s = this.outerHTML
+ var ropen = new RegExp("<" + this.nodeName + '\\b(?:(["\'])[^"]*?(\\1)|[^>])*>', "i")
+ var rclose = new RegExp("<\/" + this.nodeName + ">$", "i")
+ return s.replace(ropen, "").replace(rclose, "")
+ },
+ set: function (html) {
+ if (avalon.clearHTML) {
+ avalon.clearHTML(this)
+ var frag = avalon.parseHTML(html)
+ enumerateNode(frag, this)
+ }
+ }
+ }
+ })
+ }
+ }
+//========================= event binding ====================
+ var eventHooks = avalon.eventHooks
+//针对firefox, chrome修正mouseenter, mouseleave(chrome30+)
+ if (!("onmouseenter" in root)) {
+ avalon.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+ }, function (origType, fixType) {
+ eventHooks[origType] = {
+ type: fixType,
+ deel: function (elem, fn) {
+ return function (e) {
+ var t = e.relatedTarget
+ if (!t || (t !== elem && !(elem.compareDocumentPosition(t) & 16))) {
+ delete e.type
+ e.type = origType
+ return fn.call(elem, e)
+ }
+ }
+ }
+ }
+ })
+ }
+//针对IE9+, w3c修正animationend
+ avalon.each({
+ AnimationEvent: "animationend",
+ WebKitAnimationEvent: "webkitAnimationEnd"
+ }, function (construct, fixType) {
+ if (window[construct] && !eventHooks.animationend) {
+ eventHooks.animationend = {
+ type: fixType
+ }
+ }
+ })
+
+ if (DOC.onmousewheel === void 0) {
+ /* IE6-11 chrome mousewheel wheelDetla 下 -120 上 120
+ firefox DOMMouseScroll detail 下3 上-3
+ firefox wheel detlaY 下3 上-3
+ IE9-11 wheel deltaY 下40 上-40
+ chrome wheel deltaY 下100 上-100 */
+ eventHooks.mousewheel = {
+ type: "wheel",
+ deel: function (elem, fn) {
+ return function (e) {
+ e.wheelDeltaY = e.wheelDelta = e.deltaY > 0 ? -120 : 120
+ e.wheelDeltaX = 0
+ Object.defineProperty(e, "type", {
+ value: "mousewheel"
+ })
+ fn.call(elem, e)
+ }
+ }
+ }
+ }
+
+ /*********************************************************************
+ * 配置系统 *
+ **********************************************************************/
+
+ function kernel(settings) {
+ for (var p in settings) {
+ if (!ohasOwn.call(settings, p))
+ continue
+ var val = settings[p]
+ if (typeof kernel.plugins[p] === "function") {
+ kernel.plugins[p](val)
+ } else if (typeof kernel[p] === "object") {
+ avalon.mix(kernel[p], val)
+ } else {
+ kernel[p] = val
+ }
+ }
+ return this
+ }
+
+ var openTag, closeTag, rexpr, rexprg, rbind, rregexp = /[-.*+?^${}()|[\]\/\\]/g
+
+ function escapeRegExp(target) {
+ //http://stevenlevithan.com/regex/xregexp/
+ //将字符串安全格式化为正则表达式的源码
+ return (target + "").replace(rregexp, "\\$&")
+ }
+
+ var innerRequire = noop
+ var plugins = {
+ loader: function (builtin) {
+ window.define = builtin ? innerRequire.define : otherDefine
+ window.require = builtin ? innerRequire : otherRequire
+ },
+ interpolate: function (array) {
+ openTag = array[0]
+ closeTag = array[1]
+ if (openTag === closeTag) {
+ throw new SyntaxError("openTag!==closeTag")
+ } else if (array + "" === "<!--,-->") {
+ kernel.commentInterpolate = true
+ } else {
+ var test = openTag + "test" + closeTag
+ cinerator.innerHTML = test
+ if (cinerator.innerHTML !== test && cinerator.innerHTML.indexOf("&lt;") > -1) {
+ throw new SyntaxError("此定界符不合法")
+ }
+ cinerator.innerHTML = ""
+ }
+ var o = escapeRegExp(openTag),
+ c = escapeRegExp(closeTag)
+ rexpr = new RegExp(o + "(.*?)" + c)
+ rexprg = new RegExp(o + "(.*?)" + c, "g")
+ rbind = new RegExp(o + ".*?" + c + "|\\sms-")
+ }
+ }
+
+ kernel.debug = true
+ kernel.plugins = plugins
+ kernel.plugins['interpolate'](["{{", "}}"])
+ kernel.paths = {}
+ kernel.shim = {}
+ kernel.maxRepeatSize = 100
+ avalon.config = kernel
+ /*********************************************************************
+ * 事件总线 *
+ **********************************************************************/
+ var EventBus = {
+ $watch: function (type, callback) {
+ if (typeof callback === "function") {
+ var callbacks = this.$events[type]
+ if (callbacks) {
+ callbacks.push(callback)
+ } else {
+ this.$events[type] = [callback]
+ }
+ } else { //重新开始监听此VM的第一重简单属性的变动
+ this.$events = this.$watch.backup
+ }
+ return this
+ },
+ $unwatch: function (type, callback) {
+ var n = arguments.length
+ if (n === 0) { //让此VM的所有$watch回调无效化
+ this.$watch.backup = this.$events
+ this.$events = {}
+ } else if (n === 1) {
+ this.$events[type] = []
+ } else {
+ var callbacks = this.$events[type] || []
+ var i = callbacks.length
+ while (~--i < 0) {
+ if (callbacks[i] === callback) {
+ return callbacks.splice(i, 1)
+ }
+ }
+ }
+ return this
+ },
+ $fire: function (type) {
+ var special
+ if (/^(\w+)!(\S+)$/.test(type)) {
+ special = RegExp.$1
+ type = RegExp.$2
+ }
+ var events = this.$events
+ var args = aslice.call(arguments, 1)
+ var detail = [type].concat(args)
+ if (special === "all") {
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ if (v !== this) {
+ v.$fire.apply(v, detail)
+ }
+ }
+ } else if (special === "up" || special === "down") {
+ var elements = events.expr ? findNodes(events.expr) : []
+ if (elements.length === 0)
+ return
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ if (v !== this) {
+ if (v.$events.expr) {
+ var eventNodes = findNodes(v.$events.expr)
+ if (eventNodes.length === 0) {
+ continue
+ }
+ //循环两个vmodel中的节点,查找匹配(向上匹配或者向下匹配)的节点并设置标识
+ Array.prototype.forEach.call(eventNodes, function (node) {
+ Array.prototype.forEach.call(elements, function (element) {
+ var ok = special === "down" ? element.contains(node) : //向下捕获
+ node.contains(element) //向上冒泡
+
+ if (ok) {
+ node._avalon = v //符合条件的加一个标识
+ }
+ });
+ })
+ }
+ }
+ }
+ var nodes = DOC.getElementsByTagName("*") //实现节点排序
+ var alls = []
+ Array.prototype.forEach.call(nodes, function (el) {
+ if (el._avalon) {
+ alls.push(el._avalon)
+ el._avalon = ""
+ el.removeAttribute("_avalon")
+ }
+ })
+ if (special === "up") {
+ alls.reverse()
+ }
+ for (var i = 0, el; el = alls[i++];) {
+ if (el.$fire.apply(el, detail) === false) {
+ break
+ }
+ }
+ } else {
+ var callbacks = events[type] || []
+ var all = events.$all || []
+ for (var i = 0, callback; callback = callbacks[i++];) {
+ if (isFunction(callback))
+ callback.apply(this, args)
+ }
+ for (var i = 0, callback; callback = all[i++];) {
+ if (isFunction(callback))
+ callback.apply(this, arguments)
+ }
+ }
+ }
+ }
+
+ var ravalon = /(\w+)\[(avalonctrl)="(\S+)"\]/
+ var findNodes = function (str) {
+ //pc safari v5.1: typeof DOC.querySelectorAll(str) === 'function'
+ //https://gist.github.com/DavidBruant/1016007
+ return DOC.querySelectorAll(str)
+ }
+ /*********************************************************************
+ * modelFactory *
+ **********************************************************************/
+//avalon最核心的方法的两个方法之一(另一个是avalon.scan),返回一个ViewModel(VM)
+ var VMODELS = avalon.vmodels = {} //所有vmodel都储存在这里
+ avalon.define = function (id, factory) {
+ var $id = id.$id || id
+ if (!$id) {
+ log("warning: vm必须指定$id")
+ }
+ if (VMODELS[$id]) {
+ log("warning: " + $id + " 已经存在于avalon.vmodels中")
+ }
+ if (typeof id === "object") {
+ var model = modelFactory(id)
+ } else {
+ var scope = {
+ $watch: noop
+ }
+ factory(scope) //得到所有定义
+ model = modelFactory(scope) //偷天换日,将scope换为model
+ stopRepeatAssign = true
+ factory(model)
+ stopRepeatAssign = false
+ }
+ model.$id = $id
+ return VMODELS[$id] = model
+ }
+
+//一些不需要被监听的属性
+ var $$skipArray = String("$id,$watch,$unwatch,$fire,$events,$model,$skipArray").match(rword)
+
+ function isObservable(name, value, $skipArray) {
+ if (isFunction(value) || value && value.nodeType) {
+ return false
+ }
+ if ($skipArray.indexOf(name) !== -1) {
+ return false
+ }
+ if ($$skipArray.indexOf(name) !== -1) {
+ return false
+ }
+ var $special = $skipArray.$special
+ if (name && name.charAt(0) === "$" && !$special[name]) {
+ return false
+ }
+ return true
+ }
+
+//ms-with,ms-each, ms-repeat绑定生成的代理对象储存池
+ var midway = {}
+
+ function getNewValue(accessor, name, value, $vmodel) {
+ switch (accessor.type) {
+ case 0://计算属性
+ var getter = accessor.get
+ var setter = accessor.set
+ if (isFunction(setter)) {
+ var $events = $vmodel.$events
+ var lock = $events[name]
+ $events[name] = [] //清空回调,防止内部冒泡而触发多次$fire
+ setter.call($vmodel, value)
+ $events[name] = lock
+ }
+ return getter.call($vmodel) //同步$model
+ case 1://监控属性
+ return value
+ case 2://对象属性(包括数组与哈希)
+ if (value !== $vmodel.$model[name]) {
+ var svmodel = accessor.svmodel = objectFactory($vmodel, name, value, accessor.valueType)
+ value = svmodel.$model //同步$model
+ var fn = midway[svmodel.$id]
+ fn && fn() //同步视图
+ }
+ return value
+ }
+ }
+
+ var defineProperty = Object.defineProperty
+ var canHideOwn = true
+//如果浏览器不支持ecma262v5的Object.defineProperties或者存在BUG,比如IE8
+//标准浏览器使用__defineGetter__, __defineSetter__实现
+ try {
+ defineProperty({}, "_", {
+ value: "x"
+ })
+ var defineProperties = Object.defineProperties
+ } catch (e) {
+ canHideOwn = false
+ }
+ function modelFactory(source, $special, $model) {
+ if (Array.isArray(source)) {
+ var arr = source.concat()
+ source.length = 0
+ var collection = Collection(source)
+ collection.pushArray(arr)
+ return collection
+ }
+ if (typeof source.nodeType === "number") {
+ return source
+ }
+ if (source.$id && source.$events) { //fix IE6-8 createWithProxy $val: val引发的BUG
+ return source
+ }
+ if (!Array.isArray(source.$skipArray)) {
+ source.$skipArray = []
+ }
+ source.$skipArray.$special = $special || {} //强制要监听的属性
+ var $vmodel = {} //要返回的对象, 它在IE6-8下可能被偷龙转凤
+ $model = $model || {} //vmodels.$model属性
+ var $events = {} //vmodel.$events属性
+ var watchedProperties = {} //监控属性
+ var initCallbacks = [] //初始化才执行的函数
+ for (var i in source) {
+ (function (name, val) {
+ $model[name] = val
+ if (!isObservable(name, val, source.$skipArray)) {
+ return //过滤所有非监控属性
+ }
+ //总共产生三种accessor
+ $events[name] = []
+ var valueType = avalon.type(val)
+ var accessor = function (newValue) {
+ var name = accessor._name
+ var $vmodel = this
+ var $model = $vmodel.$model
+ var oldValue = $model[name]
+ var $events = $vmodel.$events
+
+ if (arguments.length) {
+ if (stopRepeatAssign) {
+ return
+ }
+ //计算属性与对象属性需要重新计算newValue
+ if (accessor.type !== 1) {
+ newValue = getNewValue(accessor, name, newValue, $vmodel)
+ }
+ if (!isEqual(oldValue, newValue)) {
+ $model[name] = newValue
+ if ($events.$digest) {
+ if (accessor.pedding)
+ return
+ accessor.pedding = true
+ setTimeout(function () {
+ notifySubscribers($events[name]) //同步视图
+ safeFire($vmodel, name, $model[name], oldValue) //触发$watch回调
+ accessor.pedding = false
+ })
+ } else {
+ notifySubscribers($events[name]) //同步视图
+ safeFire($vmodel, name, newValue, oldValue) //触发$watch回调
+ }
+ }
+ } else {
+ if (accessor.type === 0) { //type 0 计算属性 1 监控属性 2 对象属性
+ //计算属性不需要收集视图刷新函数,都是由其他监控属性代劳
+ return $model[name] = accessor.get.call($vmodel)
+ } else {
+ collectSubscribers($events[name]) //收集视图函数
+ return accessor.svmodel || oldValue
+ }
+ }
+ }
+ //总共产生三种accessor
+ if (valueType === "object" && isFunction(val.get) && Object.keys(val).length <= 2) {
+ //第1种为计算属性, 因变量,通过其他监控属性触发其改变
+ accessor.set = val.set
+ accessor.get = val.get
+ accessor.type = 0
+ initCallbacks.push(function () {
+ var data = {
+ evaluator: function () {
+ data.element = null
+ data.type = new Date - 0
+ $model[name] = accessor.get.call($vmodel)
+ },
+ element: head,
+ type: new Date - 0,
+ handler: noop,
+ args: []
+ }
+ Registry[expose] = data
+ accessor.call($vmodel)
+ delete Registry[expose]
+ })
+ } else if (rcomplexType.test(valueType)) {
+ //第2种为对象属性,产生子VM与监控数组
+ accessor.type = 2
+ accessor.valueType = val.valueType
+ initCallbacks.push(function () {
+ var svmodel = modelFactory(val, 0, $model[name])
+ accessor.svmodel = svmodel
+ svmodel.$events[subscribers] = $events[name]
+ })
+ } else {
+ accessor.type = 1
+ //第3种为监控属性,对应简单的数据类型,自变量
+ }
+ accessor._name = name
+ watchedProperties[name] = accessor
+ })(i, source[i])
+ }
+
+ $$skipArray.forEach(function (name) {
+ delete source[name]
+ delete $model[name] //这些特殊属性不应该在$model中出现
+ })
+
+ $vmodel = defineProperties($vmodel, descriptorFactory(watchedProperties), source) //生成一个空的ViewModel
+ for (var name in source) {
+ if (!watchedProperties[name]) {
+ $vmodel[name] = source[name]
+ }
+ }
+ //添加$id, $model, $events, $watch, $unwatch, $fire
+ $vmodel.$id = generateID()
+ $vmodel.$model = $model
+ $vmodel.$events = $events
+ for (var i in EventBus) {
+ var fn = EventBus[i]
+ if (!W3C) { //在IE6-8下,VB对象的方法里的this并不指向自身,需要用bind处理一下
+ fn = fn.bind($vmodel)
+ }
+ $vmodel[i] = fn
+ }
+
+ if (canHideOwn) {
+ Object.defineProperty($vmodel, "hasOwnProperty", {
+ value: function (name) {
+ return name in this.$model
+ },
+ writable: false,
+ enumerable: false,
+ configurable: true
+ })
+
+ } else {
+ $vmodel.hasOwnProperty = function (name) {
+ return name in $vmodel.$model
+ }
+ }
+ initCallbacks.forEach(function (cb) { //收集依赖
+ cb()
+ })
+ return $vmodel
+ }
+
+//比较两个值是否相等
+ var isEqual = Object.is || function (v1, v2) {
+ if (v1 === 0 && v2 === 0) {
+ return 1 / v1 === 1 / v2
+ } else if (v1 !== v1) {
+ return v2 !== v2
+ } else {
+ return v1 === v2
+ }
+ }
+
+ function safeFire(a, b, c, d) {
+ if (a.$events) {
+ EventBus.$fire.call(a, b, c, d)
+ }
+ }
+
+ var descriptorFactory = W3C ? function (obj) {
+ var descriptors = {}
+ for (var i in obj) {
+ descriptors[i] = {
+ get: obj[i],
+ set: obj[i],
+ enumerable: true,
+ configurable: true
+ }
+ }
+ return descriptors
+ } : function (a) {
+ return a
+ }
+
+
+//应用于第2种accessor
+ function objectFactory(parent, name, value, valueType) {
+ //a为原来的VM, b为新数组或新对象
+ var son = parent[name]
+ if (valueType === "array") {
+ if (!Array.isArray(value) || son === value) {
+ return son //fix https://github.com/RubyLouvre/avalon/issues/261
+ }
+ son.clear()
+ son.pushArray(value.concat())
+ return son
+ } else {
+ var iterators = parent.$events[name]
+ var pool = son.$events.$withProxyPool
+ if (pool) {
+ recycleProxies(pool, "with")
+ son.$events.$withProxyPool = null
+ }
+ var ret = modelFactory(value)
+ ret.$events[subscribers] = iterators
+ midway[ret.$id] = function (data) {
+ while (data = iterators.shift()) {
+ (function (el) {
+ avalon.nextTick(function () {
+ if (el.type) { //重新绑定
+ el.rollback && el.rollback() //还原 ms-with ms-on
+ bindingHandlers[el.type](el, el.vmodels)
+ }
+ })
+ })(data)
+ }
+ delete midway[ret.$id]
+ }
+ return ret
+ }
+ }
+
+ /*********************************************************************
+ * 监控数组(与ms-each, ms-repeat配合使用) *
+ **********************************************************************/
+
+ function Collection(model) {
+ var array = []
+ array.$id = generateID()
+ array.$model = model //数据模型
+ array.$events = {}
+ array.$events[subscribers] = []
+ array._ = modelFactory({
+ length: model.length
+ })
+ array._.$watch("length", function (a, b) {
+ array.$fire("length", a, b)
+ })
+ for (var i in EventBus) {
+ array[i] = EventBus[i]
+ }
+ avalon.mix(array, CollectionPrototype)
+ return array
+ }
+
+ function mutateArray(method, pos, n, index, method2, pos2, n2) {
+ var oldLen = this.length, loop = 2
+ while (--loop) {
+ switch (method) {
+ case "add":
+ var array = this.$model.slice(pos, pos + n).map(function (el) {
+ if (rcomplexType.test(avalon.type(el))) {
+ return el.$id ? el : modelFactory(el, 0, el)
+ } else {
+ return el
+ }
+ })
+ _splice.apply(this, [pos, 0].concat(array))
+ this._fire("add", pos, n)
+ break
+ case "del":
+ var ret = this._splice(pos, n)
+ this._fire("del", pos, n)
+ break
+ }
+ if (method2) {
+ method = method2
+ pos = pos2
+ n = n2
+ loop = 2
+ method2 = 0
+ }
+ }
+ this._fire("index", index)
+ if (this.length !== oldLen) {
+ this._.length = this.length
+ }
+ return ret
+ }
+
+ var _splice = ap.splice
+ var CollectionPrototype = {
+ _splice: _splice,
+ _fire: function (method, a, b) {
+ var list = this.$events[subscribers]
+ for (var i = 0, fn; fn = list[i++];) {
+ if (fn.$repeat) {
+ fn.handler.call(fn, method, a, b) //处理监控数组的方法
+ }
+ }
+ },
+ size: function () { //取得数组长度,这个函数可以同步视图,length不能
+ return this._.length
+ },
+ pushArray: function (array) {
+ var m = array.length, n = this.length
+ if (m) {
+ ap.push.apply(this.$model, array)
+ mutateArray.call(this, "add", n, m, n)
+ }
+ return m + n
+ },
+ push: function () {
+ //http://jsperf.com/closure-with-arguments
+ var array = []
+ var i, n = arguments.length
+ for (i = 0; i < n; i++) {
+ array[i] = arguments[i]
+ }
+ return this.pushArray(arguments)
+ },
+ unshift: function () {
+ var m = arguments.length, n = this.length
+ if (m) {
+ ap.unshift.apply(this.$model, arguments)
+ mutateArray.call(this, "add", 0, m, 0)
+ }
+ return m + n //IE67的unshift不会返回长度
+ },
+ shift: function () {
+ if (this.length) {
+ var el = this.$model.shift()
+ mutateArray.call(this, "del", 0, 1, 0)
+ return el //返回被移除的元素
+ }
+ },
+ pop: function () {
+ var m = this.length
+ if (m) {
+ var el = this.$model.pop()
+ mutateArray.call(this, "del", m - 1, 1, Math.max(0, m - 2))
+ return el //返回被移除的元素
+ }
+ },
+ splice: function (start) {
+ var m = arguments.length, args = [], change
+ var removed = _splice.apply(this.$model, arguments)
+ if (removed.length) { //如果用户删掉了元素
+ args.push("del", start, removed.length, 0)
+ change = true
+ }
+ if (m > 2) { //如果用户添加了元素
+ args.splice(3, 1, 0, "add", start, m - 2)
+ change = true
+ }
+ if (change) { //返回被移除的元素
+ return mutateArray.apply(this, args)
+ } else {
+ return []
+ }
+ },
+ contains: function (el) { //判定是否包含
+ return this.indexOf(el) !== -1
+ },
+ remove: function (el) { //移除第一个等于给定值的元素
+ return this.removeAt(this.indexOf(el))
+ },
+ removeAt: function (index) { //移除指定索引上的元素
+ if (index >= 0) {
+ this.$model.splice(index, 1)
+ return mutateArray.call(this, "del", index, 1, 0)
+ }
+ return []
+ },
+ clear: function () {
+ this.$model.length = this.length = this._.length = 0 //清空数组
+ this._fire("clear", 0)
+ return this
+ },
+ removeAll: function (all) { //移除N个元素
+ if (Array.isArray(all)) {
+ all.forEach(function (el) {
+ this.remove(el)
+ }, this)
+ } else if (typeof all === "function") {
+ for (var i = this.length - 1; i >= 0; i--) {
+ var el = this[i]
+ if (all(el, i)) {
+ this.removeAt(i)
+ }
+ }
+ } else {
+ this.clear()
+ }
+ },
+ ensure: function (el) {
+ if (!this.contains(el)) { //只有不存在才push
+ this.push(el)
+ }
+ return this
+ },
+ set: function (index, val) {
+ if (index >= 0) {
+ var valueType = avalon.type(val)
+ if (val && val.$model) {
+ val = val.$model
+ }
+ var target = this[index]
+ if (valueType === "object") {
+ for (var i in val) {
+ if (target.hasOwnProperty(i)) {
+ target[i] = val[i]
+ }
+ }
+ } else if (valueType === "array") {
+ target.clear().push.apply(target, val)
+ } else if (target !== val) {
+ this[index] = val
+ this.$model[index] = val
+ this._fire("set", index, val)
+ }
+ }
+ return this
+ }
+ }
+
+ function sortByIndex(array, indexes) {
+ var map = {};
+ for (var i = 0, n = indexes.length; i < n; i++) {
+ map[i] = array[i] // preserve
+ var j = indexes[i]
+ if (j in map) {
+ array[i] = map[j]
+ delete map[j]
+ } else {
+ array[i] = array[j]
+ }
+ }
+ }
+
+ "sort,reverse".replace(rword, function (method) {
+ CollectionPrototype[method] = function () {
+ var newArray = this.$model//这是要排序的新数组
+ var oldArray = newArray.concat() //保持原来状态的旧数组
+ var mask = Math.random()
+ var indexes = []
+ var hasSort
+ ap[method].apply(newArray, arguments) //排序
+ for (var i = 0, n = oldArray.length; i < n; i++) {
+ var neo = newArray[i]
+ var old = oldArray[i]
+ if (isEqual(neo, old)) {
+ indexes.push(i)
+ } else {
+ var index = oldArray.indexOf(neo)
+ indexes.push(index)//得到新数组的每个元素在旧数组对应的位置
+ oldArray[index] = mask //屏蔽已经找过的元素
+ hasSort = true
+ }
+ }
+ if (hasSort) {
+ sortByIndex(this, indexes)
+ this._fire("move", indexes)
+ this._fire("index", 0)
+ }
+ return this
+ }
+ })
+
+ /*********************************************************************
+ * 依赖调度系统 *
+ **********************************************************************/
+ var ronduplex = /^(duplex|on)$/
+
+ function registerSubscriber(data) {
+ Registry[expose] = data //暴光此函数,方便collectSubscribers收集
+ avalon.openComputedCollect = true
+ var fn = data.evaluator
+ if (fn) { //如果是求值函数
+ try {
+ var c = ronduplex.test(data.type) ? data : fn.apply(0, data.args)
+ data.handler(c, data.element, data)
+ } catch (e) {
+ //log("warning:exception throwed in [registerSubscriber] " + e)
+ delete data.evaluator
+ var node = data.element
+ if (node.nodeType === 3) {
+ var parent = node.parentNode
+ if (kernel.commentInterpolate) {
+ parent.replaceChild(DOC.createComment(data.value), node)
+ } else {
+ node.data = openTag + data.value + closeTag
+ }
+ }
+ }
+ }
+ avalon.openComputedCollect = false
+ delete Registry[expose]
+ }
+
+ function collectSubscribers(list) { //收集依赖于这个访问器的订阅者
+ var data = Registry[expose]
+ if (list && data && avalon.Array.ensure(list, data) && data.element) { //只有数组不存在此元素才push进去
+ addSubscribers(data, list)
+ }
+ }
+
+
+ function addSubscribers(data, list) {
+ data.$uuid = data.$uuid || generateID()
+ list.$uuid = list.$uuid || generateID()
+ var obj = {
+ data: data,
+ list: list,
+ $$uuid: data.$uuid + list.$uuid
+ }
+ if (!$$subscribers[obj.$$uuid]) {
+ $$subscribers[obj.$$uuid] = 1
+ $$subscribers.push(obj)
+ }
+ }
+
+ function disposeData(data) {
+ data.element = null
+ data.rollback && data.rollback()
+ for (var key in data) {
+ data[key] = null
+ }
+ }
+
+ function isRemove(el) {
+ try {//IE下,如果文本节点脱离DOM树,访问parentNode会报错
+ if (!el.parentNode) {
+ return true
+ }
+ } catch (e) {
+ return true
+ }
+ return el.msRetain ? 0 : (el.nodeType === 1 ? typeof el.sourceIndex === "number" ?
+ el.sourceIndex === 0 : !root.contains(el) : !avalon.contains(root, el))
+ }
+
+ var $$subscribers = avalon.$$subscribers = []
+ var beginTime = new Date()
+ var oldInfo = {}
+
+ function removeSubscribers() {
+ var i = $$subscribers.length
+ var n = i
+ var k = 0
+ var obj
+ var types = []
+ var newInfo = {}
+ var needTest = {}
+ while (obj = $$subscribers[--i]) {
+ var data = obj.data
+ var type = data.type
+ if (newInfo[type]) {
+ newInfo[type]++
+ } else {
+ newInfo[type] = 1
+ types.push(type)
+ }
+ }
+ var diff = false
+ types.forEach(function (type) {
+ if (oldInfo[type] !== newInfo[type]) {
+ needTest[type] = 1
+ diff = true
+ }
+ })
+ i = n
+ //avalon.log("需要检测的个数 " + i)
+ if (diff) {
+ //avalon.log("有需要移除的元素")
+ while (obj = $$subscribers[--i]) {
+ var data = obj.data
+ if (data.element === void 0)
+ continue
+ if (needTest[data.type] && isRemove(data.element)) { //如果它没有在DOM树
+ k++
+ $$subscribers.splice(i, 1)
+ delete $$subscribers[obj.$$uuid]
+ avalon.Array.remove(obj.list, data)
+ //log("debug: remove " + data.type)
+ disposeData(data)
+ obj.data = obj.list = null
+ }
+ }
+ }
+ oldInfo = newInfo
+ // avalon.log("已经移除的个数 " + k)
+ beginTime = new Date()
+ }
+
+ function notifySubscribers(list) { //通知依赖于这个访问器的订阅者更新自身
+ if (list && list.length) {
+ if (new Date() - beginTime > 444 && typeof list[0] === "object") {
+ removeSubscribers()
+ }
+ var args = aslice.call(arguments, 1)
+ for (var i = list.length, fn; fn = list[--i];) {
+ var el = fn.element
+ if (el && el.parentNode) {
+ if (fn.$repeat) {
+ fn.handler.apply(fn, args) //处理监控数组的方法
+ } else if (fn.type !== "on") { //事件绑定只能由用户触发,不能由程序触发
+ var fun = fn.evaluator || noop
+ fn.handler(fun.apply(0, fn.args || []), el, fn)
+ }
+ }
+ }
+ }
+ }
+
+ /************************************************************************
+ * HTML处理(parseHTML, innerHTML, clearHTML) *
+ **************************************************************************/
+//parseHTML的辅助变量
+ var tagHooks = new function () {
+ avalon.mix(this, {
+ option: DOC.createElement("select"),
+ thead: DOC.createElement("table"),
+ td: DOC.createElement("tr"),
+ area: DOC.createElement("map"),
+ tr: DOC.createElement("tbody"),
+ col: DOC.createElement("colgroup"),
+ legend: DOC.createElement("fieldset"),
+ _default: DOC.createElement("div"),
+ "g": DOC.createElementNS("http://www.w3.org/2000/svg", "svg")
+ })
+ this.optgroup = this.option
+ this.tbody = this.tfoot = this.colgroup = this.caption = this.thead
+ this.th = this.td
+ }
+
+ tagHooks.optgroup = tagHooks.option
+ tagHooks.tbody = tagHooks.tfoot = tagHooks.colgroup = tagHooks.caption = tagHooks.thead
+ tagHooks.th = tagHooks.td
+
+ String("circle,defs,ellipse,image,line,path,polygon,polyline,rect,symbol,text,use").replace(rword, function (tag) {
+ tagHooks[tag] = tagHooks.g //处理SVG
+ })
+ var rtagName = /<([\w:]+)/
+ var rxhtml = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig
+ var scriptTypes = oneObject(["", "text/javascript", "text/ecmascript", "application/ecmascript", "application/javascript"])
+ var script = DOC.createElement("script")
+
+ avalon.parseHTML = function (html) {
+ if (typeof html !== "string") {
+ html = html + ""
+ }
+ html = html.replace(rxhtml, "<$1></$2>").trim()
+ var tag = (rtagName.exec(html) || ["", ""])[1].toLowerCase(),
+ //取得其标签名
+ wrapper = tagHooks[tag] || tagHooks._default,
+ fragment = hyperspace.cloneNode(false),
+ firstChild
+ wrapper.innerHTML = html
+ var els = wrapper.getElementsByTagName("script")
+ if (els.length) { //使用innerHTML生成的script节点不会发出请求与执行text属性
+ for (var i = 0, el; el = els[i++];) {
+ if (scriptTypes[el.type]) {
+ var neo = script.cloneNode(false) //FF不能省略参数
+ ap.forEach.call(el.attributes, function (attr) {
+ neo.setAttribute(attr.name, attr.value)
+ })
+ neo.text = el.text
+ el.parentNode.replaceChild(neo, el)
+ }
+ }
+ }
+
+ while (firstChild = wrapper.firstChild) { // 将wrapper上的节点转移到文档碎片上!
+ fragment.appendChild(firstChild)
+ }
+ return fragment
+ }
+
+ avalon.innerHTML = function (node, html) {
+ var a = this.parseHTML(html)
+ this.clearHTML(node).appendChild(a)
+ }
+
+ avalon.clearHTML = function (node) {
+ node.textContent = ""
+ while (node.firstChild) {
+ node.removeChild(node.firstChild)
+ }
+ return node
+ }
+ /*********************************************************************
+ * 扫描系统 *
+ **********************************************************************/
+
+ avalon.scan = function (elem, vmodel, group) {
+ elem = elem || root
+ var vmodels = vmodel ? [].concat(vmodel) : []
+ scanTag(elem, vmodels)
+ }
+
+//http://www.w3.org/TR/html5/syntax.html#void-elements
+ var stopScan = oneObject("area,base,basefont,br,col,command,embed,hr,img,input,link,meta,param,source,track,wbr,noscript,script,style,textarea".toUpperCase())
+
+ function checkScan(elem, callback, innerHTML) {
+ var id = setTimeout(function () {
+ var currHTML = elem.innerHTML
+ clearTimeout(id)
+ if (currHTML === innerHTML) {
+ callback()
+ } else {
+ checkScan(elem, callback, currHTML)
+ }
+ })
+ }
+
+
+ function createSignalTower(elem, vmodel) {
+ var id = elem.getAttribute("avalonctrl") || vmodel.$id
+ elem.setAttribute("avalonctrl", id)
+ vmodel.$events.expr = elem.tagName + '[avalonctrl="' + id + '"]'
+ }
+
+ var getBindingCallback = function (elem, name, vmodels) {
+ var callback = elem.getAttribute(name)
+ if (callback) {
+ for (var i = 0, vm; vm = vmodels[i++];) {
+ if (vm.hasOwnProperty(callback) && typeof vm[callback] === "function") {
+ return vm[callback]
+ }
+ }
+ }
+ }
+
+ function executeBindings(bindings, vmodels) {
+ for (var i = 0, data; data = bindings[i++];) {
+ data.vmodels = vmodels
+ bindingHandlers[data.type](data, vmodels)
+ if (data.evaluator && data.element && data.element.nodeType === 1) { //移除数据绑定,防止被二次解析
+ //chrome使用removeAttributeNode移除不存在的特性节点时会报错 https://github.com/RubyLouvre/avalon/issues/99
+ data.element.removeAttribute(data.name)
+ }
+ }
+ bindings.length = 0
+ }
+
+//https://github.com/RubyLouvre/avalon/issues/636
+ var mergeTextNodes = IEVersion && window.MutationObserver ? function (elem) {
+ var node = elem.firstChild, text
+ while (node) {
+ var aaa = node.nextSibling
+ if (node.nodeType === 3) {
+ if (text) {
+ text.nodeValue += node.nodeValue
+ elem.removeChild(node)
+ } else {
+ text = node
+ }
+ } else {
+ text = null
+ }
+ node = aaa
+ }
+ } : 0
+
+ var rmsAttr = /ms-(\w+)-?(.*)/
+ var priorityMap = {
+ "if": 10,
+ "repeat": 90,
+ "data": 100,
+ "widget": 110,
+ "each": 1400,
+ "with": 1500,
+ "duplex": 2000,
+ "on": 3000
+ }
+
+ var events = oneObject("animationend,blur,change,input,click,dblclick,focus,keydown,keypress,keyup,mousedown,mouseenter,mouseleave,mousemove,mouseout,mouseover,mouseup,scan,scroll,submit")
+ var obsoleteAttrs = oneObject("value,title,alt,checked,selected,disabled,readonly,enabled")
+
+ function bindingSorter(a, b) {
+ return a.priority - b.priority
+ }
+
+ function scanTag(elem, vmodels, node) {
+ //扫描顺序 ms-skip(0) --> ms-important(1) --> ms-controller(2) --> ms-if(10) --> ms-repeat(100)
+ //--> ms-if-loop(110) --> ms-attr(970) ...--> ms-each(1400)-->ms-with(1500)--〉ms-duplex(2000)垫后
+ var a = elem.getAttribute("ms-skip")
+ var b = elem.getAttributeNode("ms-important")
+ var c = elem.getAttributeNode("ms-controller")
+ if (typeof a === "string") {
+ return
+ } else if (node = b || c) {
+ var newVmodel = avalon.vmodels[node.value]
+ if (!newVmodel) {
+ return
+ }
+ //ms-important不包含父VM,ms-controller相反
+ vmodels = node === b ? [newVmodel] : [newVmodel].concat(vmodels)
+ elem.removeAttribute(node.name) //removeAttributeNode不会刷新[ms-controller]样式规则
+ elem.classList.remove(node.name)
+ createSignalTower(elem, newVmodel)
+ }
+ scanAttr(elem, vmodels) //扫描特性节点
+ }
+
+ function scanNodeList(parent, vmodels) {
+ var node = parent.firstChild
+ while (node) {
+ var nextNode = node.nextSibling
+ scanNode(node, node.nodeType, vmodels)
+ node = nextNode
+ }
+ }
+
+ function scanNodeArray(nodes, vmodels) {
+ for (var i = 0, node; node = nodes[i++];) {
+ scanNode(node, node.nodeType, vmodels)
+ }
+ }
+
+ function scanNode(node, nodeType, vmodels) {
+ if (nodeType === 1) {
+ scanTag(node, vmodels) //扫描元素节点
+ } else if (nodeType === 3 && rexpr.test(node.data)) {
+ scanText(node, vmodels) //扫描文本节点
+ } else if (kernel.commentInterpolate && nodeType === 8 && !rexpr.test(node.nodeValue)) {
+ scanText(node, vmodels) //扫描注释节点
+ }
+ }
+
+ function scanAttr(elem, vmodels) {
+ //防止setAttribute, removeAttribute时 attributes自动被同步,导致for循环出错
+ var attributes = elem.hasAttributes() ? avalon.slice(elem.attributes) : []
+ var bindings = [],
+ msData = {},
+ match
+ for (var i = 0, attr; attr = attributes[i++];) {
+ if (attr.specified) {
+ if (match = attr.name.match(rmsAttr)) {
+ //如果是以指定前缀命名的
+ var type = match[1]
+ var param = match[2] || ""
+ var value = attr.value
+ var name = attr.name
+ msData[name] = value
+ if (events[type]) {
+ param = type
+ type = "on"
+ } else if (obsoleteAttrs[type]) {
+ log("ms-" + type + "已经被废弃,请使用ms-attr-*代替")
+ if (type === "enabled") {//吃掉ms-enabled绑定,用ms-disabled代替
+ type = "disabled"
+ value = "!(" + value + ")"
+ }
+ param = type
+ type = "attr"
+ elem.removeAttribute(name)
+ name = "ms-attr-" + param
+ elem.setAttribute(name, value)
+ match = [name]
+ msData[name] = value
+ }
+ if (typeof bindingHandlers[type] === "function") {
+ var binding = {
+ type: type,
+ param: param,
+ element: elem,
+ name: match[0],
+ value: value,
+ priority: type in priorityMap ? priorityMap[type] : type.charCodeAt(0) * 10 + (Number(param) || 0)
+ }
+ if (type === "html" || type === "text") {
+ var token = getToken(value)
+ avalon.mix(binding, token)
+ binding.filters = binding.filters.replace(rhasHtml, function () {
+ binding.type = "html"
+ binding.group = 1
+ return ""
+ })
+ }
+ if (name === "ms-if-loop") {
+ binding.priority += 100
+ }
+ if (vmodels.length) {
+ bindings.push(binding)
+ if (type === "widget") {
+ elem.msData = elem.msData || msData
+ }
+ }
+ }
+ }
+ }
+ }
+ if (msData["ms-attr-checked"] && msData["ms-duplex"]) {
+ log("warning!一个元素上不能同时定义ms-attr-checked与ms-duplex")
+ }
+ bindings.sort(bindingSorter)
+ var scanNode = true
+ for (var i = 0, binding; binding = bindings[i]; i++) {
+ var type = binding.type
+ if (rnoscanAttrBinding.test(type)) {
+ return executeBindings(bindings.slice(0, i + 1), vmodels)
+ } else if (scanNode) {
+ scanNode = !rnoscanNodeBinding.test(type)
+ }
+ }
+ executeBindings(bindings, vmodels)
+ if (scanNode && !stopScan[elem.tagName] && rbind.test(elem.innerHTML + elem.textContent)) {
+ mergeTextNodes && mergeTextNodes(elem)
+ scanNodeList(elem, vmodels) //扫描子孙元素
+ }
+ }
+
+ var rnoscanAttrBinding = /^if|widget|repeat$/
+ var rnoscanNodeBinding = /^each|with|html|include$/
+ var rhasHtml = /\|\s*html\s*/,
+ r11a = /\|\|/g,
+ rlt = /&lt;/g,
+ rgt = /&gt;/g
+
+ function getToken(value) {
+ if (value.indexOf("|") > 0) {
+ var index = value.replace(r11a, "\u1122\u3344").indexOf("|") //干掉所有短路或
+ if (index > -1) {
+ return {
+ filters: value.slice(index),
+ value: value.slice(0, index),
+ expr: true
+ }
+ }
+ }
+ return {
+ value: value,
+ filters: "",
+ expr: true
+ }
+ }
+
+ function scanExpr(str) {
+ var tokens = [],
+ value, start = 0,
+ stop
+ do {
+ stop = str.indexOf(openTag, start)
+ if (stop === -1) {
+ break
+ }
+ value = str.slice(start, stop)
+ if (value) { // {{ 左边的文本
+ tokens.push({
+ value: value,
+ filters: "",
+ expr: false
+ })
+ }
+ start = stop + openTag.length
+ stop = str.indexOf(closeTag, start)
+ if (stop === -1) {
+ break
+ }
+ value = str.slice(start, stop)
+ if (value) { //处理{{ }}插值表达式
+ tokens.push(getToken(value))
+ }
+ start = stop + closeTag.length
+ } while (1)
+ value = str.slice(start)
+ if (value) { //}} 右边的文本
+ tokens.push({
+ value: value,
+ expr: false,
+ filters: ""
+ })
+ }
+ return tokens
+ }
+
+ function scanText(textNode, vmodels) {
+ var bindings = []
+ if (textNode.nodeType === 8) {
+ var token = getToken(textNode.nodeValue)
+ var tokens = [token]
+ } else {
+ tokens = scanExpr(textNode.data)
+ }
+ if (tokens.length) {
+ for (var i = 0, token; token = tokens[i++];) {
+ var node = DOC.createTextNode(token.value) //将文本转换为文本节点,并替换原来的文本节点
+ if (token.expr) {
+ token.type = "text"
+ token.element = node
+ token.filters = token.filters.replace(rhasHtml, function () {
+ token.type = "html"
+ token.group = 1
+ return ""
+ })
+ bindings.push(token) //收集带有插值表达式的文本
+ }
+ hyperspace.appendChild(node)
+ }
+ textNode.parentNode.replaceChild(hyperspace, textNode)
+ if (bindings.length)
+ executeBindings(bindings, vmodels)
+ }
+ }
+
+
+ /*********************************************************************
+ * avalon的原型方法定义区 *
+ **********************************************************************/
+ function hyphen(target) {
+ //转换为连字符线风格
+ return target.replace(/([a-z\d])([A-Z]+)/g, "$1-$2").toLowerCase()
+ }
+
+ function camelize(target) {
+ //转换为驼峰风格
+ if (target.indexOf("-") < 0 && target.indexOf("_") < 0) {
+ return target //提前判断,提高getStyle等的效率
+ }
+ return target.replace(/[-_][^-_]/g, function (match) {
+ return match.charAt(1).toUpperCase()
+ })
+ }
+
+ "add,remove".replace(rword, function (method) {
+ avalon.fn[method + "Class"] = function (cls) {
+ var el = this[0]
+ //https://developer.mozilla.org/zh-CN/docs/Mozilla/Firefox/Releases/26
+ if (cls && typeof cls === "string" && el && el.nodeType === 1) {
+ cls.replace(/\S+/g, function (c) {
+ el.classList[method](c)
+ })
+ }
+ return this
+ }
+ })
+
+ avalon.fn.mix({
+ hasClass: function (cls) {
+ var el = this[0] || {} //IE10+, chrome8+, firefox3.6+, safari5.1+,opera11.5+支持classList,chrome24+,firefox26+支持classList2.0
+ return el.nodeType === 1 && el.classList.contains(cls)
+ },
+ toggleClass: function (value, stateVal) {
+ var className, i = 0
+ var classNames = value.split(/\s+/)
+ var isBool = typeof stateVal === "boolean"
+ while ((className = classNames[i++])) {
+ var state = isBool ? stateVal : !this.hasClass(className)
+ this[state ? "addClass" : "removeClass"](className)
+ }
+ return this
+ },
+ attr: function (name, value) {
+ if (arguments.length === 2) {
+ this[0].setAttribute(name, value)
+ return this
+ } else {
+ return this[0].getAttribute(name)
+ }
+ },
+ data: function (name, value) {
+ name = "data-" + hyphen(name || "")
+ switch (arguments.length) {
+ case 2:
+ this.attr(name, value)
+ return this
+ case 1:
+ var val = this.attr(name)
+ return parseData(val)
+ case 0:
+ var ret = {}
+ ap.forEach.call(this[0].attributes, function (attr) {
+ if (attr) {
+ name = attr.name
+ if (!name.indexOf("data-")) {
+ name = camelize(name.slice(5))
+ ret[name] = parseData(attr.value)
+ }
+ }
+ })
+ return ret
+ }
+ },
+ removeData: function (name) {
+ name = "data-" + hyphen(name)
+ this[0].removeAttribute(name)
+ return this
+ },
+ css: function (name, value) {
+ if (avalon.isPlainObject(name)) {
+ for (var i in name) {
+ avalon.css(this, i, name[i])
+ }
+ } else {
+ var ret = avalon.css(this, name, value)
+ }
+ return ret !== void 0 ? ret : this
+ },
+ position: function () {
+ var offsetParent, offset,
+ elem = this[0],
+ parentOffset = {
+ top: 0,
+ left: 0
+ };
+ if (!elem) {
+ return
+ }
+ if (this.css("position") === "fixed") {
+ offset = elem.getBoundingClientRect()
+ } else {
+ offsetParent = this.offsetParent() //得到真正的offsetParent
+ offset = this.offset() // 得到正确的offsetParent
+ if (offsetParent[0].tagName !== "HTML") {
+ parentOffset = offsetParent.offset()
+ }
+ parentOffset.top += avalon.css(offsetParent[0], "borderTopWidth", true)
+ parentOffset.left += avalon.css(offsetParent[0], "borderLeftWidth", true)
+ }
+ return {
+ top: offset.top - parentOffset.top - avalon.css(elem, "marginTop", true),
+ left: offset.left - parentOffset.left - avalon.css(elem, "marginLeft", true)
+ }
+ },
+ offsetParent: function () {
+ var offsetParent = this[0].offsetParent
+ while (offsetParent && avalon.css(offsetParent, "position") === "static") {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return avalon(offsetParent)
+ },
+ bind: function (type, fn, phase) {
+ if (this[0]) { //此方法不会链
+ return avalon.bind(this[0], type, fn, phase)
+ }
+ },
+ unbind: function (type, fn, phase) {
+ if (this[0]) {
+ avalon.unbind(this[0], type, fn, phase)
+ }
+ return this
+ },
+ val: function (value) {
+ var node = this[0]
+ if (node && node.nodeType === 1) {
+ var get = arguments.length === 0
+ var access = get ? ":get" : ":set"
+ var fn = valHooks[getValType(node) + access]
+ if (fn) {
+ var val = fn(node, value)
+ } else if (get) {
+ return (node.value || "").replace(/\r/g, "")
+ } else {
+ node.value = value
+ }
+ }
+ return get ? val : this
+ }
+ })
+
+ if (root.dataset) {
+ avalon.fn.data = function (name, val) {
+ var dataset = this[0].dataset
+ switch (arguments.length) {
+ case 2:
+ dataset[name] = val
+ return this
+ case 1:
+ val = dataset[name]
+ return parseData(val)
+ case 0:
+ var ret = {}
+ for (var name in dataset) {
+ ret[name] = parseData(dataset[name])
+ }
+ return ret
+ }
+ }
+ }
+ var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/
+ avalon.parseJSON = JSON.parse
+
+ function parseData(data) {
+ try {
+ if (typeof data === "object")
+ return data
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null : +data + "" === data ? +data : rbrace.test(data) ? JSON.parse(data) : data
+ } catch (e) {
+ }
+ return data
+ }
+
+ avalon.each({
+ scrollLeft: "pageXOffset",
+ scrollTop: "pageYOffset"
+ }, function (method, prop) {
+ avalon.fn[method] = function (val) {
+ var node = this[0] || {}, win = getWindow(node),
+ top = method === "scrollTop"
+ if (!arguments.length) {
+ return win ? win[prop] : node[method]
+ } else {
+ if (win) {
+ win.scrollTo(!top ? val : avalon(win).scrollLeft(), top ? val : avalon(win).scrollTop())
+ } else {
+ node[method] = val
+ }
+ }
+ }
+ })
+
+ function getWindow(node) {
+ return node.window && node.document ? node : node.nodeType === 9 ? node.defaultView : false
+ }
+
+//=============================css相关==================================
+ var cssHooks = avalon.cssHooks = {}
+ var prefixes = ["", "-webkit-", "-moz-", "-ms-"]//去掉opera-15的支持
+ var cssMap = {
+ "float": "cssFloat"
+ }
+ avalon.cssNumber = oneObject("columnCount,order,fillOpacity,fontWeight,lineHeight,opacity,orphans,widows,zIndex,zoom")
+
+ avalon.cssName = function (name, host, camelCase) {
+ if (cssMap[name]) {
+ return cssMap[name]
+ }
+ host = host || root.style
+ for (var i = 0, n = prefixes.length; i < n; i++) {
+ camelCase = camelize(prefixes[i] + name)
+ if (camelCase in host) {
+ return (cssMap[name] = camelCase)
+ }
+ }
+ return null
+ }
+ cssHooks["@:set"] = function (node, name, value) {
+ node.style[name] = value
+ }
+
+ cssHooks["@:get"] = function (node, name) {
+ if (!node || !node.style) {
+ throw new Error("getComputedStyle要求传入一个节点 " + node)
+ }
+ var ret, computed = getComputedStyle(node, null)
+ if (computed) {
+ ret = name === "filter" ? computed.getPropertyValue(name) : computed[name]
+ if (ret === "") {
+ ret = node.style[name] //其他浏览器需要我们手动取内联样式
+ }
+ }
+ return ret
+ }
+ cssHooks["opacity:get"] = function (node) {
+ var ret = cssHooks["@:get"](node, "opacity")
+ return ret === "" ? "1" : ret
+ }
+
+ "top,left".replace(rword, function (name) {
+ cssHooks[name + ":get"] = function (node) {
+ var computed = cssHooks["@:get"](node, name)
+ return /px$/.test(computed) ? computed :
+ avalon(node).position()[name] + "px"
+ }
+ })
+ var cssShow = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }
+ var rdisplayswap = /^(none|table(?!-c[ea]).+)/
+
+ function showHidden(node, array) {
+ //http://www.cnblogs.com/rubylouvre/archive/2012/10/27/2742529.html
+ if (node.offsetWidth <= 0) { //opera.offsetWidth可能小于0
+ var styles = getComputedStyle(node, null)
+ if (rdisplayswap.test(styles["display"])) {
+ var obj = {
+ node: node
+ }
+ for (var name in cssShow) {
+ obj[name] = styles[name]
+ node.style[name] = cssShow[name]
+ }
+ array.push(obj)
+ }
+ var parent = node.parentNode
+ if (parent && parent.nodeType === 1) {
+ showHidden(parent, array)
+ }
+ }
+ }
+
+ "Width,Height".replace(rword, function (name) {//fix 481
+ var method = name.toLowerCase(),
+ clientProp = "client" + name,
+ scrollProp = "scroll" + name,
+ offsetProp = "offset" + name
+ cssHooks[method + ":get"] = function (node, which, override) {
+ var boxSizing = -4
+ if (typeof override === "number") {
+ boxSizing = override
+ }
+ which = name === "Width" ? ["Left", "Right"] : ["Top", "Bottom"]
+ var ret = node[offsetProp] // border-box 0
+ if (boxSizing === 2) { // margin-box 2
+ return ret
+ + avalon.css(node, "margin" + which[0], true)
+ + avalon.css(node, "margin" + which[1], true)
+ }
+ if (boxSizing < 0) { // padding-box -2
+ ret = ret
+ - avalon.css(node, "border" + which[0] + "Width", true)
+ - avalon.css(node, "border" + which[1] + "Width", true)
+ }
+ if (boxSizing === -4) { // content-box -4
+ ret = ret
+ - avalon.css(node, "padding" + which[0], true)
+ - avalon.css(node, "padding" + which[1], true)
+ }
+ return ret
+ }
+ cssHooks[method + "&get"] = function (node) {
+ var hidden = [];
+ showHidden(node, hidden);
+ var val = cssHooks[method + ":get"](node)
+ for (var i = 0, obj; obj = hidden[i++];) {
+ node = obj.node
+ for (var n in obj) {
+ if (typeof obj[n] === "string") {
+ node.style[n] = obj[n]
+ }
+ }
+ }
+ return val;
+ }
+ avalon.fn[method] = function (value) { //会忽视其display
+ var node = this[0]
+ if (arguments.length === 0) {
+ if (node.setTimeout) { //取得窗口尺寸,IE9后可以用node.innerWidth /innerHeight代替
+ return node["inner" + name] || node.document.documentElement[clientProp]
+ }
+ if (node.nodeType === 9) { //取得页面尺寸
+ var doc = node.documentElement
+ //FF chrome html.scrollHeight< body.scrollHeight
+ //IE 标准模式 : html.scrollHeight> body.scrollHeight
+ //IE 怪异模式 : html.scrollHeight 最大等于可视窗口多一点?
+ return Math.max(node.body[scrollProp], doc[scrollProp], node.body[offsetProp], doc[offsetProp], doc[clientProp])
+ }
+ return cssHooks[method + "&get"](node)
+ } else {
+ return this.css(method, value)
+ }
+ }
+ avalon.fn["inner" + name] = function () {
+ return cssHooks[method + ":get"](this[0], void 0, -2)
+ }
+ avalon.fn["outer" + name] = function (includeMargin) {
+ return cssHooks[method + ":get"](this[0], void 0, includeMargin === true ? 2 : 0)
+ }
+ })
+ avalon.fn.offset = function () { //取得距离页面左右角的坐标
+ var node = this[0], box = {
+ left: 0,
+ top: 0
+ }
+ if (!node || !node.tagName || !node.ownerDocument) {
+ return box
+ }
+ var doc = node.ownerDocument,
+ root = doc.documentElement,
+ win = doc.defaultView
+ if (!root.contains(node)) {
+ return box
+ }
+ if (node.getBoundingClientRect !== void 0) {
+ box = node.getBoundingClientRect()
+ }
+ return {
+ top: box.top + win.pageYOffset - root.clientTop,
+ left: box.left + win.pageXOffset - root.clientLeft
+ }
+ }
+//=============================val相关=======================
+
+ function getValType(el) {
+ var ret = el.tagName.toLowerCase()
+ return ret === "input" && /checkbox|radio/.test(el.type) ? "checked" : ret
+ }
+
+ var valHooks = {
+ "select:get": function (node, value) {
+ var option, options = node.options,
+ index = node.selectedIndex,
+ one = node.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ? max : one ? index : 0
+ for (; i < max; i++) {
+ option = options[i]
+ //旧式IE在reset后不会改变selected,需要改用i === index判定
+ //我们过滤所有disabled的option元素,但在safari5下,如果设置select为disable,那么其所有孩子都disable
+ //因此当一个元素为disable,需要检测其是否显式设置了disable及其父节点的disable情况
+ if ((option.selected || i === index) && !option.disabled) {
+ value = option.value
+ if (one) {
+ return value
+ }
+ //收集所有selected值组成数组返回
+ values.push(value)
+ }
+ }
+ return values
+ },
+ "select:set": function (node, values, optionSet) {
+ values = [].concat(values) //强制转换为数组
+ for (var i = 0, el; el = node.options[i++];) {
+ if ((el.selected = values.indexOf(el.value) > -1)) {
+ optionSet = true
+ }
+ }
+ if (!optionSet) {
+ node.selectedIndex = -1
+ }
+ }
+ }
+
+ /*********************************************************************
+ * 编译系统 *
+ **********************************************************************/
+ var quote = JSON.stringify
+
+ var keywords =
+ // 关键字
+ "break,case,catch,continue,debugger,default,delete,do,else,false" +
+ ",finally,for,function,if,in,instanceof,new,null,return,switch,this" +
+ ",throw,true,try,typeof,var,void,while,with"
+ // 保留字
+ + ",abstract,boolean,byte,char,class,const,double,enum,export,extends" +
+ ",final,float,goto,implements,import,int,interface,long,native" +
+ ",package,private,protected,public,short,static,super,synchronized" +
+ ",throws,transient,volatile"
+ // ECMA 5 - use strict
+ + ",arguments,let,yield" + ",undefined"
+ var rrexpstr = /\/\*[\w\W]*?\*\/|\/\/[^\n]*\n|\/\/[^\n]*$|"(?:[^"\\]|\\[\w\W])*"|'(?:[^'\\]|\\[\w\W])*'|[\s\t\n]*\.[\s\t\n]*[$\w\.]+/g
+ var rsplit = /[^\w$]+/g
+ var rkeywords = new RegExp(["\\b" + keywords.replace(/,/g, '\\b|\\b') + "\\b"].join('|'), 'g')
+ var rnumber = /\b\d[^,]*/g
+ var rcomma = /^,+|,+$/g
+ var cacheVars = createCache(512)
+ var getVariables = function (code) {
+ var key = "," + code.trim()
+ if (cacheVars[key]) {
+ return cacheVars[key]
+ }
+ var match = code
+ .replace(rrexpstr, "")
+ .replace(rsplit, ",")
+ .replace(rkeywords, "")
+ .replace(rnumber, "")
+ .replace(rcomma, "")
+ .split(/^$|,+/)
+ return cacheVars(key, uniqSet(match))
+ }
+ /*添加赋值语句*/
+
+ function addAssign(vars, scope, name, data) {
+ var ret = [],
+ prefix = " = " + name + "."
+ for (var i = vars.length, prop; prop = vars[--i];) {
+ if (scope.hasOwnProperty(prop)) {
+ ret.push(prop + prefix + prop)
+ data.vars.push(prop)
+ if (data.type === "duplex") {
+ vars.get = name + "." + prop
+ }
+ vars.splice(i, 1)
+ }
+ }
+ return ret
+ }
+
+ function uniqSet(array) {
+ var ret = [],
+ unique = {}
+ for (var i = 0; i < array.length; i++) {
+ var el = array[i]
+ var id = el && typeof el.$id === "string" ? el.$id : el
+ if (!unique[id]) {
+ unique[id] = ret.push(el)
+ }
+ }
+ return ret
+ }
+
+//缓存求值函数,以便多次利用
+ var cacheExprs = createCache(128)
+//取得求值函数及其传参
+ var rduplex = /\w\[.*\]|\w\.\w/
+ var rproxy = /(\$proxy\$[a-z]+)\d+$/
+ var rthimRightParentheses = /\)\s*$/
+ var rthimOtherParentheses = /\)\s*\|/g
+ var rquoteFilterName = /\|\s*([$\w]+)/g
+ var rpatchBracket = /"\s*\["/g
+ var rthimLeftParentheses = /"\s*\(/g
+
+ function parseFilter(val, filters) {
+ filters = filters
+ .replace(rthimRightParentheses, "")//处理最后的小括号
+ .replace(rthimOtherParentheses, function () {//处理其他小括号
+ return "],|"
+ })
+ .replace(rquoteFilterName, function (a, b) { //处理|及它后面的过滤器的名字
+ return "[" + quote(b)
+ })
+ .replace(rpatchBracket, function () {
+ return '"],["'
+ })
+ .replace(rthimLeftParentheses, function () {
+ return '",'
+ }) + "]"
+ return "return avalon.filters.$filter(" + val + ", " + filters + ")"
+ }
+
+ function parseExpr(code, scopes, data) {
+ var dataType = data.type
+ var filters = data.filters || ""
+ var exprId = scopes.map(function (el) {
+ return String(el.$id).replace(rproxy, "$1")
+ }) + code + dataType + filters
+ var vars = getVariables(code).concat(),
+ assigns = [],
+ names = [],
+ args = [],
+ prefix = ""
+ //args 是一个对象数组, names 是将要生成的求值函数的参数
+ scopes = uniqSet(scopes)
+ data.vars = []
+ for (var i = 0, sn = scopes.length; i < sn; i++) {
+ if (vars.length) {
+ var name = "vm" + expose + "_" + i
+ names.push(name)
+ args.push(scopes[i])
+ assigns.push.apply(assigns, addAssign(vars, scopes[i], name, data))
+ }
+ }
+ if (!assigns.length && dataType === "duplex") {
+ return
+ }
+ if (dataType !== "duplex" && (code.indexOf("||") > -1 || code.indexOf("&&") > -1)) {
+ //https://github.com/RubyLouvre/avalon/issues/583
+ data.vars.forEach(function (v) {
+ var reg = new RegExp("\\b" + v + "(?:\\.\\w+|\\[\\w+\\])+", "ig")
+ code = code.replace(reg, function (_) {
+ var c = _.charAt(v.length)
+ var r = IEVersion ? code.slice(arguments[1] + _.length) : RegExp.rightContext
+ var method = /^\s*\(/.test(r)
+ if (c === "." || c === "[" || method) {//比如v为aa,我们只匹配aa.bb,aa[cc],不匹配aaa.xxx
+ var name = "var" + String(Math.random()).replace(/^0\./, "")
+ if (method) {//array.size()
+ var array = _.split(".")
+ if (array.length > 2) {
+ var last = array.pop()
+ assigns.push(name + " = " + array.join("."))
+ return name + "." + last
+ } else {
+ return _
+ }
+ }
+ assigns.push(name + " = " + _)
+ return name
+ } else {
+ return _
+ }
+ })
+ })
+ }
+ //---------------args----------------
+ data.args = args
+ //---------------cache----------------
+ var fn = cacheExprs[exprId] //直接从缓存,免得重复生成
+ if (fn) {
+ data.evaluator = fn
+ return
+ }
+ var prefix = assigns.join(", ")
+ if (prefix) {
+ prefix = "var " + prefix
+ }
+ if (/\S/.test(filters)) { //文本绑定,双工绑定才有过滤器
+ if (!/text|html/.test(data.type)) {
+ throw Error("ms-" + data.type + "不支持过滤器")
+ }
+ code = "\nvar ret" + expose + " = " + code + ";\r\n"
+ code += parseFilter("ret" + expose, filters)
+ } else if (dataType === "duplex") { //双工绑定
+ var _body = "'use strict';\nreturn function(vvv){\n\t" +
+ prefix +
+ ";\n\tif(!arguments.length){\n\t\treturn " +
+ code +
+ "\n\t}\n\t" + (!rduplex.test(code) ? vars.get : code) +
+ "= vvv;\n} "
+ try {
+ fn = Function.apply(noop, names.concat(_body))
+ data.evaluator = cacheExprs(exprId, fn)
+ } catch (e) {
+ log("debug: parse error," + e.message)
+ }
+ return
+ } else if (dataType === "on") { //事件绑定
+ if (code.indexOf("(") === -1) {
+ code += ".call(this, $event)"
+ } else {
+ code = code.replace("(", ".call(this,")
+ }
+ names.push("$event")
+ code = "\nreturn " + code + ";" //IE全家 Function("return ")出错,需要Function("return ;")
+ var lastIndex = code.lastIndexOf("\nreturn")
+ var header = code.slice(0, lastIndex)
+ var footer = code.slice(lastIndex)
+ code = header + "\n" + footer
+ } else { //其他绑定
+ code = "\nreturn " + code + ";" //IE全家 Function("return ")出错,需要Function("return ;")
+ }
+ try {
+ fn = Function.apply(noop, names.concat("'use strict';\n" + prefix + code))
+ data.evaluator = cacheExprs(exprId, fn)
+ } catch (e) {
+ log("debug: parse error," + e.message)
+ } finally {
+ vars = textBuffer = names = null //释放内存
+ }
+ }
+
+
+//parseExpr的智能引用代理
+
+ function parseExprProxy(code, scopes, data, tokens, noregister) {
+ if (Array.isArray(tokens)) {
+ code = tokens.map(function (el) {
+ return el.expr ? "(" + el.value + ")" : quote(el.value)
+ }).join(" + ")
+ }
+ parseExpr(code, scopes, data)
+ if (data.evaluator && !noregister) {
+ data.handler = bindingExecutors[data.handlerName || data.type]
+ //方便调试
+ //这里非常重要,我们通过判定视图刷新函数的element是否在DOM树决定
+ //将它移出订阅者列表
+ registerSubscriber(data)
+ }
+ }
+
+ avalon.parseExprProxy = parseExprProxy
+ /*********************************************************************
+ * 各种指令 *
+ **********************************************************************/
+//ms-skip绑定已经在scanTag 方法中实现
+//ms-controller绑定已经在scanTag 方法中实现
+//ms-important绑定已经在scanTag 方法中实现
+ var bools = "autofocus,autoplay,async,allowTransparency,checked,controls,declare,disabled,defer,defaultChecked,defaultSelected" +
+ "contentEditable,isMap,loop,multiple,noHref,noResize,noShade,open,readOnly,selected"
+ var boolMap = {}
+ bools.replace(rword, function (name) {
+ boolMap[name.toLowerCase()] = name
+ })
+
+ var propMap = {//属性名映射
+ "accept-charset": "acceptCharset",
+ "char": "ch",
+ "charoff": "chOff",
+ "class": "className",
+ "for": "htmlFor",
+ "http-equiv": "httpEquiv"
+ }
+
+ var anomaly = "accessKey,bgColor,cellPadding,cellSpacing,codeBase,codeType,colSpan," + "dateTime,defaultValue,frameBorder,longDesc,maxLength,marginWidth,marginHeight," + "rowSpan,tabIndex,useMap,vSpace,valueType,vAlign"
+ anomaly.replace(rword, function (name) {
+ propMap[name.toLowerCase()] = name
+ })
+
+ var rnoscripts = /<noscript.*?>(?:[\s\S]+?)<\/noscript>/img
+ var rnoscriptText = /<noscript.*?>([\s\S]+?)<\/noscript>/im
+
+ var getXHR = function () {
+ return new (window.XMLHttpRequest || ActiveXObject)("Microsoft.XMLHTTP")
+ }
+
+ var cacheTmpls = avalon.templateCache = {}
+
+ bindingHandlers.attr = function (data, vmodels) {
+ var text = data.value.trim(),
+ simple = true
+ if (text.indexOf(openTag) > -1 && text.indexOf(closeTag) > 2) {
+ simple = false
+ if (rexpr.test(text) && RegExp.rightContext === "" && RegExp.leftContext === "") {
+ simple = true
+ text = RegExp.$1
+ }
+ }
+ if (data.type === "include") {
+ var elem = data.element
+ data.includeRendered = getBindingCallback(elem, "data-include-rendered", vmodels)
+ data.includeLoaded = getBindingCallback(elem, "data-include-loaded", vmodels)
+ var outer = data.includeReplaced = !!avalon(elem).data("includeReplace")
+ data.startInclude = DOC.createComment("ms-include")
+ data.endInclude = DOC.createComment("ms-include-end")
+ if (outer) {
+ data.element = data.startInclude
+ elem.parentNode.insertBefore(data.startInclude, elem)
+ elem.parentNode.insertBefore(data.endInclude, elem.nextSibling)
+ } else {
+ elem.insertBefore(data.startInclude, elem.firstChild)
+ elem.appendChild(data.endInclude)
+ }
+ }
+ data.handlerName = "attr" //handleName用于处理多种绑定共用同一种bindingExecutor的情况
+ parseExprProxy(text, vmodels, data, (simple ? 0 : scanExpr(data.value)))
+ }
+
+ bindingExecutors.attr = function (val, elem, data) {
+ var method = data.type,
+ attrName = data.param
+ if (method === "css") {
+ avalon(elem).css(attrName, val)
+ } else if (method === "attr") {
+ // ms-attr-class="xxx" vm.xxx="aaa bbb ccc"将元素的className设置为aaa bbb ccc
+ // ms-attr-class="xxx" vm.xxx=false 清空元素的所有类名
+ // ms-attr-name="yyy" vm.yyy="ooo" 为元素设置name属性
+ if (boolMap[attrName]) {
+ var bool = boolMap[attrName]
+ if (typeof elem[bool] === "boolean") {
+ // IE6-11不支持动态设置fieldset的disabled属性,IE11下样式是生效了,但无法阻止用户对其底下的input元素进行设值……
+ return elem[bool] = !!val
+ }
+ }
+ var toRemove = (val === false) || (val === null) || (val === void 0)
+
+ if (!W3C && propMap[attrName]) { //旧式IE下需要进行名字映射
+ attrName = propMap[attrName]
+ }
+ if (toRemove) {
+ return elem.removeAttribute(attrName)
+ }
+ //SVG只能使用setAttribute(xxx, yyy), VML只能使用elem.xxx = yyy ,HTML的固有属性必须elem.xxx = yyy
+ var isInnate = rsvg.test(elem) ? false : (DOC.namespaces && isVML(elem)) ? true : attrName in elem.cloneNode(false)
+ if (isInnate) {
+ elem[attrName] = val
+ } else {
+ elem.setAttribute(attrName, val)
+ }
+ } else if (method === "include" && val) {
+ var vmodels = data.vmodels
+ var rendered = data.includeRendered
+ var loaded = data.includeLoaded
+ var replace = data.includeReplaced
+ var target = replace ? elem.parentNode : elem
+
+ function scanTemplate(text) {
+ if (loaded) {
+ text = loaded.apply(target, [text].concat(vmodels))
+ }
+ if (rendered) {
+ checkScan(target, function () {
+ rendered.call(target)
+ }, NaN)
+ }
+ while (true) {
+ var node = data.startInclude.nextSibling
+ if (node && node !== data.endInclude) {
+ target.removeChild(node)
+ } else {
+ break
+ }
+ }
+ var dom = avalon.parseHTML(text)
+ var nodes = avalon.slice(dom.childNodes)
+ target.insertBefore(dom, data.endInclude)
+ scanNodeArray(nodes, vmodels)
+ }
+
+ if (data.param === "src") {
+ if (cacheTmpls[val]) {
+ avalon.nextTick(function () {
+ scanTemplate(cacheTmpls[val])
+ })
+ } else {
+ var xhr = getXHR()
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ var s = xhr.status
+ if (s >= 200 && s < 300 || s === 304 || s === 1223) {
+ scanTemplate(cacheTmpls[val] = xhr.responseText)
+ }
+ }
+ }
+ xhr.open("GET", val, true)
+ if ("withCredentials" in xhr) {
+ xhr.withCredentials = true
+ }
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
+ xhr.send(null)
+ }
+ } else {
+ //IE系列与够新的标准浏览器支持通过ID取得元素(firefox14+)
+ //http://tjvantoll.com/2012/07/19/dom-element-references-as-global-variables/
+ var el = val && val.nodeType === 1 ? val : DOC.getElementById(val)
+ if (el) {
+ if (el.tagName === "NOSCRIPT" && !(el.innerHTML || el.fixIE78)) { //IE7-8 innerText,innerHTML都无法取得其内容,IE6能取得其innerHTML
+ var xhr = getXHR() //IE9-11与chrome的innerHTML会得到转义的内容,它们的innerText可以
+ xhr.open("GET", location, false) //谢谢Nodejs 乱炖群 深圳-纯属虚构
+ xhr.send(null)
+ //http://bbs.csdn.net/topics/390349046?page=1#post-393492653
+ var noscripts = DOC.getElementsByTagName("noscript")
+ var array = (xhr.responseText || "").match(rnoscripts) || []
+ var n = array.length
+ for (var i = 0; i < n; i++) {
+ var tag = noscripts[i]
+ if (tag) { //IE6-8中noscript标签的innerHTML,innerText是只读的
+ tag.style.display = "none" //http://haslayout.net/css/noscript-Ghost-Bug
+ tag.fixIE78 = (array[i].match(rnoscriptText) || ["", "&nbsp;"])[1]
+ }
+ }
+ }
+ avalon.nextTick(function () {
+ scanTemplate(el.fixIE78 || el.value || el.innerText || el.innerHTML)
+ })
+ }
+ }
+ } else {
+ if (!root.hasAttribute && typeof val === "string" && (method === "src" || method === "href")) {
+ val = val.replace(/&amp;/g, "&") //处理IE67自动转义的问题
+ }
+ elem[method] = val
+ if (window.chrome && elem.tagName === "EMBED") {
+ var parent = elem.parentNode //#525 chrome1-37下embed标签动态设置src不能发生请求
+ var comment = document.createComment("ms-src")
+ parent.replaceChild(comment, elem)
+ parent.replaceChild(elem, comment)
+ }
+ }
+ }
+
+//这几个指令都可以使用插值表达式,如ms-src="aaa/{{b}}/{{c}}.html"
+ "title,alt,src,value,css,include,href".replace(rword, function (name) {
+ bindingHandlers[name] = bindingHandlers.attr
+ })
+//ms-include绑定已由ms-attr绑定实现
+
+//根据VM的属性值或表达式的值切换类名,ms-class="xxx yyy zzz:flag"
+//http://www.cnblogs.com/rubylouvre/archive/2012/12/17/2818540.html
+ bindingHandlers["class"] = function (data, vmodels) {
+ var oldStyle = data.param,
+ text = data.value,
+ rightExpr
+ data.handlerName = "class"
+ if (!oldStyle || isFinite(oldStyle)) {
+ data.param = "" //去掉数字
+ var noExpr = text.replace(rexprg, function (a) {
+ return a.replace(/./g, "0")
+ //return Math.pow(10, a.length - 1) //将插值表达式插入10的N-1次方来占位
+ })
+ var colonIndex = noExpr.indexOf(":") //取得第一个冒号的位置
+ if (colonIndex === -1) { // 比如 ms-class="aaa bbb ccc" 的情况
+ var className = text
+ } else { // 比如 ms-class-1="ui-state-active:checked" 的情况
+ className = text.slice(0, colonIndex)
+ rightExpr = text.slice(colonIndex + 1)
+ parseExpr(rightExpr, vmodels, data) //决定是添加还是删除
+ if (!data.evaluator) {
+ log("debug: ms-class '" + (rightExpr || "").trim() + "' 不存在于VM中")
+ return false
+ } else {
+ data._evaluator = data.evaluator
+ data._args = data.args
+ }
+ }
+ var hasExpr = rexpr.test(className) //比如ms-class="width{{w}}"的情况
+ if (!hasExpr) {
+ data.immobileClass = className
+ }
+ parseExprProxy("", vmodels, data, (hasExpr ? scanExpr(className) : 0))
+ } else {
+ data.immobileClass = data.oldStyle = data.param
+ parseExprProxy(text, vmodels, data)
+ }
+ }
+
+ bindingExecutors ["class"] = function (val, elem, data) {
+ var $elem = avalon(elem),
+ method = data.type
+ if (method === "class" && data.oldStyle) { //如果是旧风格
+ $elem.toggleClass(data.oldStyle, !!val)
+ } else {
+ //如果存在冒号就有求值函数
+ data.toggleClass = data._evaluator ? !!data._evaluator.apply(elem, data._args) : true
+ data.newClass = data.immobileClass || val
+ if (data.oldClass && data.newClass !== data.oldClass) {
+ $elem.removeClass(data.oldClass)
+ }
+ data.oldClass = data.newClass
+ switch (method) {
+ case "class":
+ $elem.toggleClass(data.newClass, data.toggleClass)
+ break
+ case "hover":
+ case "active":
+ if (!data.hasBindEvent) { //确保只绑定一次
+ var activate = "mouseenter" //在移出移入时切换类名
+ var abandon = "mouseleave"
+ if (method === "active") { //在聚焦失焦中切换类名
+ elem.tabIndex = elem.tabIndex || -1
+ activate = "mousedown"
+ abandon = "mouseup"
+ var fn0 = $elem.bind("mouseleave", function () {
+ data.toggleClass && $elem.removeClass(data.newClass)
+ })
+ }
+ var fn1 = $elem.bind(activate, function () {
+ data.toggleClass && $elem.addClass(data.newClass)
+ })
+ var fn2 = $elem.bind(abandon, function () {
+ data.toggleClass && $elem.removeClass(data.newClass)
+ })
+ data.rollback = function () {
+ $elem.unbind("mouseleave", fn0)
+ $elem.unbind(activate, fn1)
+ $elem.unbind(abandon, fn2)
+ }
+ data.hasBindEvent = true
+ }
+ break;
+ }
+ }
+ }
+
+ "hover,active".replace(rword, function (method) {
+ bindingHandlers[method] = bindingHandlers["class"]
+ })
+// bindingHandlers.data 定义在if.js
+ bindingExecutors.data = function (val, elem, data) {
+ var key = "data-" + data.param
+ if (val && typeof val === "object") {
+ elem[key] = val
+ } else {
+ elem.setAttribute(key, String(val))
+ }
+ }
+
+// bindingHandlers.text 定义在if.js
+ bindingExecutors.text = function (val, elem) {
+ val = val == null ? "" : val //不在页面上显示undefined null
+ if (elem.nodeType === 3) { //绑定在文本节点上
+ try { //IE对游离于DOM树外的节点赋值会报错
+ elem.data = val
+ } catch (e) {
+ }
+ } else { //绑定在特性节点上
+ elem.textContent = val
+ }
+ }
+
+// bindingHandlers.html 定义在if.js
+ bindingExecutors.html = function (val, elem, data) {
+ val = val == null ? "" : val
+ var isHtmlFilter = "group" in data
+ var parent = isHtmlFilter ? elem.parentNode : elem
+ if (!parent)
+ return
+ if (val.nodeType === 11) { //将val转换为文档碎片
+ var fragment = val
+ } else if (val.nodeType === 1 || val.item) {
+ var nodes = val.nodeType === 1 ? val.childNodes : val.item ? val : []
+ fragment = hyperspace.cloneNode(true)
+ while (nodes[0]) {
+ fragment.appendChild(nodes[0])
+ }
+ } else {
+ fragment = avalon.parseHTML(val)
+ }
+ //插入占位符, 如果是过滤器,需要有节制地移除指定的数量,如果是html指令,直接清空
+ var comment = DOC.createComment("ms-html")
+ if (isHtmlFilter) {
+ parent.insertBefore(comment, elem)
+ var n = data.group, i = 1
+ while (i < n) {
+ var node = elem.nextSibling
+ if (node) {
+ parent.removeChild(node)
+ i++
+ }
+ }
+ parent.removeChild(elem)
+ data.element = comment //防止被CG
+ } else {
+ avalon.clearHTML(parent).appendChild(comment)
+ }
+ if (isHtmlFilter) {
+ data.group = fragment.childNodes.length || 1
+ }
+ var nodes = avalon.slice(fragment.childNodes)
+ if (nodes[0]) {
+ if (comment.parentNode)
+ comment.parentNode.replaceChild(fragment, comment)
+ if (isHtmlFilter) {
+ data.element = nodes[0]
+ }
+ }
+ scanNodeArray(nodes, data.vmodels)
+ }
+
+ bindingHandlers["if"] =
+ bindingHandlers.data =
+ bindingHandlers.text =
+ bindingHandlers.html =
+ function (data, vmodels) {
+ parseExprProxy(data.value, vmodels, data)
+ }
+
+ bindingExecutors["if"] = function (val, elem, data) {
+ if (val) { //插回DOM树
+ if (elem.nodeType === 8) {
+ elem.parentNode.replaceChild(data.template, elem)
+ elem = data.element = data.template //这时可能为null
+ }
+ if (elem.getAttribute(data.name)) {
+ elem.removeAttribute(data.name)
+ scanAttr(elem, data.vmodels)
+ }
+ data.rollback = null
+ } else { //移出DOM树,并用注释节点占据原位置
+ if (elem.nodeType === 1) {
+ var node = data.element = DOC.createComment("ms-if")
+ elem.parentNode.replaceChild(node, elem)
+ data.template = elem //元素节点
+ ifGroup.appendChild(elem)
+ data.rollback = function () {
+ if (elem.parentNode === ifGroup) {
+ ifGroup.removeChild(elem)
+ }
+ }
+ }
+ }
+ }
+
+
+ function parseDisplay(nodeName, val) {
+ //用于取得此类标签的默认display值
+ var key = "_" + nodeName
+ if (!parseDisplay[key]) {
+ var node = DOC.createElement(nodeName)
+ root.appendChild(node)
+ if (W3C) {
+ val = getComputedStyle(node, null).display
+ } else {
+ val = node.currentStyle.display
+ }
+ root.removeChild(node)
+ parseDisplay[key] = val
+ }
+ return parseDisplay[key]
+ }
+
+ avalon.parseDisplay = parseDisplay
+
+ bindingHandlers.visible = function (data, vmodels) {
+ var elem = avalon(data.element)
+ var display = elem.css("display")
+ if (display === "none") {
+ var style = elem[0].style
+ var has = /visibility/i.test(style.cssText)
+ var visible = elem.css("visibility")
+ style.display = ""
+ style.visibility = "hidden"
+ display = elem.css("display")
+ if (display === "none") {
+ display = parseDisplay(elem[0].nodeName)
+ }
+ style.visibility = has ? visible : ""
+ }
+ data.display = display
+ parseExprProxy(data.value, vmodels, data)
+ }
+
+ bindingExecutors.visible = function (val, elem, data) {
+ elem.style.display = val ? data.display : "none"
+ }
+
+ var rdash = /\(([^)]*)\)/
+ bindingHandlers.on = function (data, vmodels) {
+ var value = data.value
+ var eventType = data.param.replace(/-\d+$/, "") // ms-on-mousemove-10
+ if (typeof bindingHandlers.on[eventType + "Hook"] === "function") {
+ bindingHandlers.on[eventType + "Hook"](data)
+ }
+ if (value.indexOf("(") > 0 && value.indexOf(")") > -1) {
+ var matched = (value.match(rdash) || ["", ""])[1].trim()
+ if (matched === "" || matched === "$event") { // aaa() aaa($event)当成aaa处理
+ value = value.replace(rdash, "")
+ }
+ }
+ parseExprProxy(value, vmodels, data)
+ }
+
+ bindingExecutors.on = function (callback, elem, data) {
+ data.type = "on"
+ callback = function (e) {
+ var fn = data.evaluator || noop
+ return fn.apply(this, data.args.concat(e))
+ }
+ var eventType = data.param.replace(/-\d+$/, "") // ms-on-mousemove-10
+ if (eventType === "scan") {
+ callback.call(elem, {
+ type: eventType
+ })
+ } else if (typeof data.specialBind === "function") {
+ data.specialBind(elem, callback)
+ } else {
+ var removeFn = avalon.bind(elem, eventType, callback)
+ }
+ data.rollback = function () {
+ if (typeof data.specialUnbind === "function") {
+ data.specialUnbind()
+ } else {
+ avalon.unbind(elem, eventType, removeFn)
+ }
+ }
+ }
+
+
+ bindingHandlers.widget = function (data, vmodels) {
+ var args = data.value.match(rword)
+ var elem = data.element
+ var widget = args[0]
+ var id = args[1]
+ if (!id || id === "$") {//没有定义或为$时,取组件名+随机数
+ id = generateID(widget)
+ }
+ var optName = args[2] || widget//没有定义,取组件名
+ var constructor = avalon.ui[widget]
+ if (typeof constructor === "function") { //ms-widget="tabs,tabsAAA,optname"
+ vmodels = elem.vmodels || vmodels
+ for (var i = 0, v; v = vmodels[i++];) {
+ if (v.hasOwnProperty(optName) && typeof v[optName] === "object") {
+ var vmOptions = v[optName]
+ vmOptions = vmOptions.$model || vmOptions
+ break
+ }
+ }
+ if (vmOptions) {
+ var wid = vmOptions[widget + "Id"]
+ if (typeof wid === "string") {
+ id = wid
+ }
+ }
+ //抽取data-tooltip-text、data-tooltip-attr属性,组成一个配置对象
+ var widgetData = avalon.getWidgetData(elem, widget)
+ data.value = [widget, id, optName].join(",")
+ data[widget + "Id"] = id
+ data.evaluator = noop
+ elem.msData["ms-widget-id"] = id
+ var options = data[widget + "Options"] = avalon.mix({}, constructor.defaults, vmOptions || {}, widgetData)
+ elem.removeAttribute("ms-widget")
+ var vmodel = constructor(elem, data, vmodels) || {} //防止组件不返回VM
+ if (vmodel.$id) {
+ avalon.vmodels[id] = vmodel
+ createSignalTower(elem, vmodel)
+ if (vmodel.hasOwnProperty("$init")) {
+ vmodel.$init(function () {
+ avalon.scan(elem, [vmodel].concat(vmodels))
+ if (typeof options.onInit === "function") {
+ options.onInit.call(elem, vmodel, options, vmodels)
+ }
+ })
+ }
+ data.rollback = function () {
+ try {
+ vmodel.widgetElement = null
+ vmodel.$remove()
+ } catch (e) {
+ }
+ elem.msData = {}
+ delete avalon.vmodels[vmodel.$id]
+ }
+ addSubscribers(data, widgetList)
+ if (window.chrome) {
+ elem.addEventListener("DOMNodeRemovedFromDocument", function () {
+ setTimeout(removeSubscribers)
+ })
+ }
+ } else {
+ avalon.scan(elem, vmodels)
+ }
+ } else if (vmodels.length) { //如果该组件还没有加载,那么保存当前的vmodels
+ elem.vmodels = vmodels
+ }
+ }
+ var widgetList = []
+//不存在 bindingExecutors.widget
+//双工绑定
+ var duplexBinding = bindingHandlers.duplex = function (data, vmodels) {
+ var elem = data.element,
+ hasCast
+ parseExprProxy(data.value, vmodels, data, 0, 1)
+
+ data.changed = getBindingCallback(elem, "data-duplex-changed", vmodels) || noop
+ if (data.evaluator && data.args) {
+ var params = []
+ var casting = oneObject("string,number,boolean,checked")
+ if (elem.type === "radio" && data.param === "") {
+ data.param = "checked"
+ }
+ if (elem.msData) {
+ elem.msData["ms-duplex"] = data.value
+ }
+ data.param.replace(/\w+/g, function (name) {
+ if (/^(checkbox|radio)$/.test(elem.type) && /^(radio|checked)$/.test(name)) {
+ if (name === "radio")
+ log("ms-duplex-radio已经更名为ms-duplex-checked")
+ name = "checked"
+ data.isChecked = true
+ }
+ if (name === "bool") {
+ name = "boolean"
+ log("ms-duplex-bool已经更名为ms-duplex-boolean")
+ } else if (name === "text") {
+ name = "string"
+ log("ms-duplex-text已经更名为ms-duplex-string")
+ }
+ if (casting[name]) {
+ hasCast = true
+ }
+ avalon.Array.ensure(params, name)
+ })
+ if (!hasCast) {
+ params.push("string")
+ }
+ data.param = params.join("-")
+ data.bound = function (type, callback) {
+ if (elem.addEventListener) {
+ elem.addEventListener(type, callback, false)
+ } else {
+ elem.attachEvent("on" + type, callback)
+ }
+ var old = data.rollback
+ data.rollback = function () {
+ elem.avalonSetter = null
+ avalon.unbind(elem, type, callback)
+ old && old()
+ }
+ }
+ for (var i in avalon.vmodels) {
+ var v = avalon.vmodels[i]
+ v.$fire("avalon-ms-duplex-init", data)
+ }
+ var cpipe = data.pipe || (data.pipe = pipe)
+ cpipe(null, data, "init")
+ var tagName = elem.tagName
+ duplexBinding[tagName] && duplexBinding[tagName](elem, data.evaluator.apply(null, data.args), data)
+ }
+ }
+//不存在 bindingExecutors.duplex
+ function fixNull(val) {
+ return val == null ? "" : val
+ }
+
+ avalon.duplexHooks = {
+ checked: {
+ get: function (val, data) {
+ return !data.element.oldValue
+ }
+ },
+ string: {
+ get: function (val) { //同步到VM
+ return val
+ },
+ set: fixNull
+ },
+ "boolean": {
+ get: function (val) {
+ return val === "true"
+ },
+ set: fixNull
+ },
+ number: {
+ get: function (val) {
+ return isFinite(val) ? parseFloat(val) || 0 : val
+ },
+ set: fixNull
+ }
+ }
+
+ function pipe(val, data, action, e) {
+ data.param.replace(/\w+/g, function (name) {
+ var hook = avalon.duplexHooks[name]
+ if (hook && typeof hook[action] === "function") {
+ val = hook[action](val, data)
+ }
+ })
+ return val
+ }
+
+ var TimerID, ribbon = []
+
+ function W3CFire(el, name, detail) {
+ var event = DOC.createEvent("Events")
+ event.initEvent(name, true, true)
+ event.fireByAvalon = true//签名,标记事件是由avalon触发
+ //event.isTrusted = false 设置这个opera会报错
+ if (detail)
+ event.detail = detail
+ el.dispatchEvent(event)
+ }
+
+
+ avalon.tick = function (fn) {
+ if (ribbon.push(fn) === 1) {
+ TimerID = setInterval(ticker, 60)
+ }
+ }
+
+ function ticker() {
+ for (var n = ribbon.length - 1; n >= 0; n--) {
+ var el = ribbon[n]
+ if (el() === false) {
+ ribbon.splice(n, 1)
+ }
+ }
+ if (!ribbon.length) {
+ clearInterval(TimerID)
+ }
+ }
+
+ var watchValueInTimer = noop
+ new function () {
+ try {//#272 IE9-IE11, firefox
+ var setters = {}
+ var aproto = HTMLInputElement.prototype
+ var bproto = HTMLTextAreaElement.prototype
+
+ function newSetter(value) {
+ if (avalon.contains(root, this)) {
+ setters[this.tagName].call(this, value)
+ if (this.avalonSetter) {
+ this.avalonSetter()
+ }
+ }
+ }
+
+ var inputProto = HTMLInputElement.prototype
+ Object.getOwnPropertyNames(inputProto) //故意引发IE6-8等浏览器报错
+ setters["INPUT"] = Object.getOwnPropertyDescriptor(aproto, "value").set
+ Object.defineProperty(aproto, "value", {
+ set: newSetter
+ })
+ setters["TEXTAREA"] = Object.getOwnPropertyDescriptor(bproto, "value").set
+ Object.defineProperty(bproto, "value", {
+ set: newSetter
+ })
+ } catch (e) {
+ watchValueInTimer = avalon.tick
+ }
+ }
+
+
+//处理radio, checkbox, text, textarea, password
+ duplexBinding.INPUT = function (element, evaluator, data) {
+ var type = element.type,
+ bound = data.bound,
+ $elem = avalon(element),
+ composing = false
+
+ function callback(value) {
+ data.changed.call(this, value, data)
+ }
+
+ function compositionStart() {
+ composing = true
+ }
+
+ function compositionEnd() {
+ composing = false
+ }
+
+ //当value变化时改变model的值
+ function updateVModel() {
+ if (composing)//处理中文输入法在minlengh下引发的BUG
+ return
+ var val = element.oldValue = element.value //防止递归调用形成死循环
+ var lastValue = data.pipe(val, data, "get")
+ if ($elem.data("duplex-observe") !== false) {
+ evaluator(lastValue)
+ callback.call(element, lastValue)
+ if ($elem.data("duplex-focus")) {
+ avalon.nextTick(function () {
+ element.focus()
+ })
+ }
+ }
+ }
+
+ //当model变化时,它就会改变value的值
+ data.handler = function () {
+ var val = data.pipe(evaluator(), data, "set")
+ if (val !== element.oldValue) {
+ element.value = val
+ }
+ }
+ if (data.isChecked || element.type === "radio") {
+ updateVModel = function () {
+ if ($elem.data("duplex-observe") !== false) {
+ var lastValue = data.pipe(element.value, data, "get")
+ evaluator(lastValue)
+ callback.call(element, lastValue)
+ }
+ }
+ data.handler = function () {
+ var val = evaluator()
+ var checked = data.isChecked ? !!val : val + "" === element.value
+ element.checked = element.oldValue = checked
+ }
+ bound("click", updateVModel)
+ } else if (type === "checkbox") {
+ updateVModel = function () {
+ if ($elem.data("duplex-observe") !== false) {
+ var method = element.checked ? "ensure" : "remove"
+ var array = evaluator()
+ if (!Array.isArray(array)) {
+ log("ms-duplex应用于checkbox上要对应一个数组")
+ array = [array]
+ }
+ avalon.Array[method](array, data.pipe(element.value, data, "get"))
+ callback.call(element, array)
+ }
+ }
+ data.handler = function () {
+ var array = [].concat(evaluator()) //强制转换为数组
+ element.checked = array.indexOf(data.pipe(element.value, data, "get")) > -1
+ }
+ bound("change", updateVModel)
+ } else {
+ var events = element.getAttribute("data-duplex-event") || element.getAttribute("data-event") || "input"
+ if (element.attributes["data-event"]) {
+ log("data-event指令已经废弃,请改用data-duplex-event")
+ }
+ events.replace(rword, function (name) {
+ switch (name) {
+ case "input":
+ bound("input", updateVModel)
+ bound("DOMAutoComplete", updateVModel)
+ if (!IEVersion) {
+ bound("compositionstart", compositionStart)
+ bound("compositionend", compositionEnd)
+ }
+ break
+ default:
+ bound(name, updateVModel)
+ break
+ }
+ })
+ }
+
+ if (/text|password/.test(element.type)) {
+ watchValueInTimer(function () {
+ if (root.contains(element)) {
+ if (element.value !== element.oldValue) {
+ updateVModel()
+ }
+ } else if (!element.msRetain) {
+ return false
+ }
+ })
+ }
+
+ element.avalonSetter = updateVModel
+ element.oldValue = element.value
+ registerSubscriber(data)
+ callback.call(element, element.value)
+ }
+ duplexBinding.TEXTAREA = duplexBinding.INPUT
+ duplexBinding.SELECT = function (element, evaluator, data) {
+ var $elem = avalon(element)
+
+ function updateVModel() {
+ if ($elem.data("duplex-observe") !== false) {
+ var val = $elem.val() //字符串或字符串数组
+ if (Array.isArray(val)) {
+ val = val.map(function (v) {
+ return data.pipe(v, data, "get")
+ })
+ } else {
+ val = data.pipe(val, data, "get")
+ }
+ if (val + "" !== element.oldValue) {
+ evaluator(val)
+ }
+ data.changed.call(element, val, data)
+ }
+ }
+
+ data.handler = function () {
+ var val = evaluator()
+ val = val && val.$model || val
+ if (Array.isArray(val)) {
+ if (!element.multiple) {
+ log("ms-duplex在<select multiple=true>上要求对应一个数组")
+ }
+ } else {
+ if (element.multiple) {
+ log("ms-duplex在<select multiple=false>不能对应一个数组")
+ }
+ }
+ //必须变成字符串后才能比较
+ val = Array.isArray(val) ? val.map(String) : val + ""
+ if (val + "" !== element.oldValue) {
+ $elem.val(val)
+ element.oldValue = val + ""
+ }
+ }
+ data.bound("change", updateVModel)
+ checkScan(element, function () {
+ registerSubscriber(data)
+ data.changed.call(element, evaluator(), data)
+ }, NaN)
+ }
+
+
+ bindingHandlers.repeat = function (data, vmodels) {
+ var type = data.type
+ parseExprProxy(data.value, vmodels, data, 0, 1)
+ data.proxies = []
+ var freturn = false
+ try {
+ var $repeat = data.$repeat = data.evaluator.apply(0, data.args || [])
+ var xtype = avalon.type($repeat)
+ if (xtype !== "object" && xtype !== "array") {
+ freturn = true
+ avalon.log("warning:" + data.value + "对应类型不正确")
+ }
+ } catch (e) {
+ freturn = true
+ avalon.log("warning:" + data.value + "编译出错")
+ }
+
+ var arr = data.value.split(".") || []
+ if (arr.length > 1) {
+ arr.pop()
+ var n = arr[0]
+ for (var i = 0, v; v = vmodels[i++];) {
+ if (v && v.hasOwnProperty(n)) {
+ var events = v[n].$events || {}
+ events[subscribers] = events[subscribers] || []
+ events[subscribers].push(data)
+ break
+ }
+ }
+ }
+ var elem = data.element
+ elem.removeAttribute(data.name)
+
+ data.sortedCallback = getBindingCallback(elem, "data-with-sorted", vmodels)
+ data.renderedCallback = getBindingCallback(elem, "data-" + type + "-rendered", vmodels)
+ var signature = generateID(type)
+ var comment = data.element = DOC.createComment(signature + ":end")
+ data.clone = DOC.createComment(signature)
+ hyperspace.appendChild(comment)
+
+ if (type === "each" || type === "with") {
+ data.template = elem.innerHTML.trim()
+ avalon.clearHTML(elem).appendChild(comment)
+ } else {
+ data.template = elem.outerHTML.trim()
+ elem.parentNode.replaceChild(comment, elem)
+ }
+ data.template = avalon.parseHTML(data.template)
+ data.rollback = function () {
+ var elem = data.element
+ if (!elem)
+ return
+ bindingExecutors.repeat.call(data, "clear")
+ var parentNode = elem.parentNode
+ var content = data.template
+ var target = content.firstChild
+ parentNode.replaceChild(content, elem)
+ var start = data.$stamp
+ start && start.parentNode && start.parentNode.removeChild(start)
+ target = data.element = data.type === "repeat" ? target : parentNode
+ }
+ if (freturn) {
+ return
+ }
+ data.handler = bindingExecutors.repeat
+ data.$outer = {}
+ var check0 = "$key"
+ var check1 = "$val"
+ if (Array.isArray($repeat)) {
+ check0 = "$first"
+ check1 = "$last"
+ }
+ for (var i = 0, p; p = vmodels[i++];) {
+ if (p.hasOwnProperty(check0) && p.hasOwnProperty(check1)) {
+ data.$outer = p
+ break
+ }
+ }
+ var $events = $repeat.$events
+ var $list = ($events || {})[subscribers]
+ if ($list && avalon.Array.ensure($list, data)) {
+ addSubscribers(data, $list)
+ }
+ if (xtype === "object") {
+ data.$with = true
+ var pool = !$events ? {} : $events.$withProxyPool || ($events.$withProxyPool = {})
+ data.handler("append", $repeat, pool)
+ } else if ($repeat.length) {
+ data.handler("add", 0, $repeat.length)
+ }
+ }
+
+ bindingExecutors.repeat = function (method, pos, el) {
+ if (method) {
+ var data = this
+ var end = data.element
+ var parent = end.parentNode
+ var proxies = data.proxies
+ var transation = hyperspace.cloneNode(false)
+ switch (method) {
+ case "add": //在pos位置后添加el数组(pos为数字,el为数组)
+ var n = pos + el
+ var array = data.$repeat
+ var last = array.length - 1
+ var fragments = []
+ var start = locateNode(data, pos)
+ for (var i = pos; i < n; i++) {
+ var proxy = eachProxyAgent(i, data)
+ proxies.splice(i, 0, proxy)
+ shimController(data, transation, proxy, fragments)
+ }
+ parent.insertBefore(transation, start)
+ for (var i = 0, fragment; fragment = fragments[i++];) {
+ scanNodeArray(fragment.nodes, fragment.vmodels)
+ fragment.nodes = fragment.vmodels = null
+ }
+ break
+ case "del": //将pos后的el个元素删掉(pos, el都是数字)
+ start = proxies[pos].$stamp
+ end = locateNode(data, pos + el)
+ sweepNodes(start, end)
+ var removed = proxies.splice(pos, el)
+ recycleProxies(removed, "each")
+ break
+ case "clear":
+ var check = data.$stamp || proxies[0]
+ if (check) {
+ start = check.$stamp || check
+ sweepNodes(start, end)
+ }
+ recycleProxies(proxies, "each")
+ break
+ case "move":
+ start = proxies[0].$stamp
+ var signature = start.nodeValue
+ var rooms = []
+ var room = [], node
+ sweepNodes(start, end, function () {
+ room.unshift(this)
+ if (this.nodeValue === signature) {
+ rooms.unshift(room)
+ room = []
+ }
+ })
+ sortByIndex(proxies, pos)
+ sortByIndex(rooms, pos)
+ while (room = rooms.shift()) {
+ while (node = room.shift()) {
+ transation.appendChild(node)
+ }
+ }
+ parent.insertBefore(transation, end)
+ break
+ case "index": //将proxies中的第pos个起的所有元素重新索引
+ var last = proxies.length - 1
+ for (; el = proxies[pos]; pos++) {
+ el.$index = pos
+ el.$first = pos === 0
+ el.$last = pos === last
+ }
+ return
+ case "set": //将proxies中的第pos个元素的VM设置为el(pos为数字,el任意)
+ var proxy = proxies[pos]
+ if (proxy) {
+ notifySubscribers(proxy.$events.$index)
+ }
+ return
+ case "append": //将pos的键值对从el中取出(pos为一个普通对象,el为预先生成好的代理VM对象池)
+ var pool = el
+ var keys = []
+ var fragments = []
+ for (var key in pos) { //得到所有键名
+ if (pos.hasOwnProperty(key) && key !== "hasOwnProperty") {
+ keys.push(key)
+ }
+ }
+ if (data.sortedCallback) { //如果有回调,则让它们排序
+ var keys2 = data.sortedCallback.call(parent, keys)
+ if (keys2 && Array.isArray(keys2) && keys2.length) {
+ keys = keys2
+ }
+ }
+ for (var i = 0, key; key = keys[i++];) {
+ if (key !== "hasOwnProperty") {
+ if (!pool[key]) {
+ pool[key] = withProxyAgent(key, data)
+ }
+ shimController(data, transation, pool[key], fragments)
+ }
+ }
+ var comment = data.$stamp = data.clone
+ parent.insertBefore(comment, end)
+ parent.insertBefore(transation, end)
+ for (var i = 0, fragment; fragment = fragments[i++];) {
+ scanNodeArray(fragment.nodes, fragment.vmodels)
+ fragment.nodes = fragment.vmodels = null
+ }
+ break
+ }
+ if (method === "clear")
+ method = "del"
+ var callback = data.renderedCallback || noop,
+ args = arguments
+ checkScan(parent, function () {
+ callback.apply(parent, args)
+ if (parent.oldValue && parent.tagName === "SELECT") { //fix #503
+ avalon(parent).val(parent.oldValue.split(","))
+ }
+ }, NaN)
+ }
+ }
+
+ "with,each".replace(rword, function (name) {
+ bindingHandlers[name] = bindingHandlers.repeat
+ })
+
+ function shimController(data, transation, proxy, fragments) {
+ var content = data.template.cloneNode(true)
+ var nodes = avalon.slice(content.childNodes)
+ if (proxy.$stamp) {
+ content.insertBefore(proxy.$stamp, content.firstChild)
+ }
+ transation.appendChild(content)
+ var nv = [proxy].concat(data.vmodels)
+ var fragment = {
+ nodes: nodes,
+ vmodels: nv
+ }
+ fragments.push(fragment)
+ }
+
+ function locateNode(data, pos) {
+ var proxy = data.proxies[pos]
+ return proxy ? proxy.$stamp : data.element
+ }
+
+ function sweepNodes(start, end, callback) {
+ while (true) {
+ var node = end.previousSibling
+ if (!node)
+ break
+ node.parentNode.removeChild(node)
+ callback && callback.call(node)
+ if (node === start) {
+ break
+ }
+ }
+ }
+
+// 为ms-each,ms-with, ms-repeat会创建一个代理VM,
+// 通过它们保持一个下上文,让用户能调用$index,$first,$last,$remove,$key,$val,$outer等属性与方法
+// 所有代理VM的产生,消费,收集,存放通过xxxProxyFactory,xxxProxyAgent, recycleProxies,xxxProxyPool实现
+ var eachProxyPool = []
+ var withProxyPool = []
+
+ function eachProxyFactory(name) {
+ var source = {
+ $host: [],
+ $outer: {},
+ $stamp: 1,
+ $index: 0,
+ $first: false,
+ $last: false,
+ $remove: avalon.noop
+ }
+ source[name] = {
+ get: function () {
+ return this.$host[this.$index]
+ },
+ set: function (val) {
+ this.$host.set(this.$index, val)
+ }
+ }
+ var second = {
+ $last: 1,
+ $first: 1,
+ $index: 1
+ }
+ var proxy = modelFactory(source, second)
+ var e = proxy.$events
+ e[name] = e.$first = e.$last = e.$index
+ proxy.$id = generateID("$proxy$each")
+ return proxy
+ }
+
+ function eachProxyAgent(index, data) {
+ var param = data.param || "el", proxy
+ for (var i = 0, n = eachProxyPool.length; i < n; i++) {
+ var candidate = eachProxyPool[i]
+ if (candidate && candidate.hasOwnProperty(param)) {
+ proxy = candidate
+ eachProxyPool.splice(i, 1)
+ }
+ }
+ if (!proxy) {
+ proxy = eachProxyFactory(param)
+ }
+ var host = data.$repeat
+ var last = host.length - 1
+ proxy.$index = index
+ proxy.$first = index === 0
+ proxy.$last = index === last
+ proxy.$host = host
+ proxy.$outer = data.$outer
+ proxy.$stamp = data.clone.cloneNode(false)
+ proxy.$remove = function () {
+ return host.removeAt(proxy.$index)
+ }
+ return proxy
+ }
+
+ function withProxyFactory() {
+ var proxy = modelFactory({
+ $key: "",
+ $outer: {},
+ $host: {},
+ $val: {
+ get: function () {
+ return this.$host[this.$key]
+ },
+ set: function (val) {
+ this.$host[this.$key] = val
+ }
+ }
+ }, {
+ $val: 1
+ })
+ proxy.$id = generateID("$proxy$with")
+ return proxy
+ }
+
+ function withProxyAgent(key, data) {
+ var proxy = withProxyPool.pop()
+ if (!proxy) {
+ proxy = withProxyFactory()
+ }
+ var host = data.$repeat
+ proxy.$key = key
+ proxy.$host = host
+ proxy.$outer = data.$outer
+ if (host.$events) {
+ proxy.$events.$val = host.$events[key]
+ } else {
+ proxy.$events = {}
+ }
+ return proxy
+ }
+
+ function recycleProxies(proxies, type) {
+ var proxyPool = type === "each" ? eachProxyPool : withProxyPool
+ avalon.each(proxies, function (key, proxy) {
+ if (proxy.$events) {
+ for (var i in proxy.$events) {
+ if (Array.isArray(proxy.$events[i])) {
+ proxy.$events[i].forEach(function (data) {
+ if (typeof data === "object")
+ disposeData(data)
+ })
+ proxy.$events[i].length = 0
+ }
+ }
+ proxy.$host = proxy.$outer = {}
+ if (proxyPool.unshift(proxy) > kernel.maxRepeatSize) {
+ proxyPool.pop()
+ }
+ }
+ })
+ if (type === "each")
+ proxies.length = 0
+ }
+
+
+ /*********************************************************************
+ * 自带过滤器 *
+ **********************************************************************/
+ var rscripts = /<script[^>]*>([\S\s]*?)<\/script\s*>/gim
+ var ron = /\s+(on[^=\s]+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g
+ var ropen = /<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/ig
+ var rsanitize = {
+ a: /\b(href)\=("javascript[^"]*"|'javascript[^']*')/ig,
+ img: /\b(src)\=("javascript[^"]*"|'javascript[^']*')/ig,
+ form: /\b(action)\=("javascript[^"]*"|'javascript[^']*')/ig
+ }
+ var rsurrogate = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g
+ var rnoalphanumeric = /([^\#-~| |!])/g;
+
+ function numberFormat(number, decimals, dec_point, thousands_sep) {
+ //form http://phpjs.org/functions/number_format/
+ //number 必需,要格式化的数字
+ //decimals 可选,规定多少个小数位。
+ //dec_point 可选,规定用作小数点的字符串(默认为 . )。
+ //thousands_sep 可选,规定用作千位分隔符的字符串(默认为 , ),如果设置了该参数,那么所有其他参数都是必需的。
+ number = (number + '')
+ .replace(/[^0-9+\-Ee.]/g, '')
+ var n = !isFinite(+number) ? 0 : +number,
+ prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
+ sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
+ dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
+ s = '',
+ toFixedFix = function (n, prec) {
+ var k = Math.pow(10, prec)
+ return '' + (Math.round(n * k) / k)
+ .toFixed(prec)
+ }
+ // Fix for IE parseFloat(0.55).toFixed(0) = 0;
+ s = (prec ? toFixedFix(n, prec) : '' + Math.round(n))
+ .split('.')
+ if (s[0].length > 3) {
+ s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep)
+ }
+ if ((s[1] || '')
+ .length < prec) {
+ s[1] = s[1] || ''
+ s[1] += new Array(prec - s[1].length + 1)
+ .join('0')
+ }
+ return s.join(dec)
+ }
+
+
+ var filters = avalon.filters = {
+ uppercase: function (str) {
+ return str.toUpperCase()
+ },
+ lowercase: function (str) {
+ return str.toLowerCase()
+ },
+ truncate: function (str, length, truncation) {
+ //length,新字符串长度,truncation,新字符串的结尾的字段,返回新字符串
+ length = length || 30
+ truncation = truncation === void(0) ? "..." : truncation
+ return str.length > length ? str.slice(0, length - truncation.length) + truncation : String(str)
+ },
+ $filter: function (val) {
+ for (var i = 1, n = arguments.length; i < n; i++) {
+ var array = arguments[i]
+ var fn = avalon.filters[array.shift()]
+ if (typeof fn === "function") {
+ var arr = [val].concat(array)
+ val = fn.apply(null, arr)
+ }
+ }
+ return val
+ },
+ camelize: camelize,
+ //https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
+ // <a href="javasc&NewLine;ript&colon;alert('XSS')">chrome</a>
+ // <a href="data:text/html;base64, PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KDEpPg==">chrome</a>
+ // <a href="jav ascript:alert('XSS');">IE67chrome</a>
+ // <a href="jav&#x09;ascript:alert('XSS');">IE67chrome</a>
+ // <a href="jav&#x0A;ascript:alert('XSS');">IE67chrome</a>
+ sanitize: function (str) {
+ return str.replace(rscripts, "").replace(ropen, function (a, b) {
+ var match = a.toLowerCase().match(/<(\w+)\s/)
+ if (match) { //处理a标签的href属性,img标签的src属性,form标签的action属性
+ var reg = rsanitize[match[1]]
+ if (reg) {
+ a = a.replace(reg, function (s, name, value) {
+ var quote = value.charAt(0)
+ return name + "=" + quote + "javascript:void(0)" + quote
+ })
+ }
+ }
+ return a.replace(ron, " ").replace(/\s+/g, " ") //移除onXXX事件
+ })
+ },
+ escape: function (str) {
+ //将字符串经过 str 转义得到适合在页面中显示的内容, 例如替换 < 为 &lt
+ return String(str).
+ replace(/&/g, '&amp;').
+ replace(rsurrogate, function (value) {
+ var hi = value.charCodeAt(0)
+ var low = value.charCodeAt(1)
+ return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';'
+ }).
+ replace(rnoalphanumeric, function (value) {
+ return '&#' + value.charCodeAt(0) + ';'
+ }).
+ replace(/</g, '&lt;').
+ replace(/>/g, '&gt;')
+ },
+ currency: function (amount, symbol, fractionSize) {
+ return (symbol || "\uFFE5") + numberFormat(amount, isFinite(fractionSize) ? fractionSize : 2)
+ },
+ number: function (number, fractionSize) {
+ return numberFormat(number, isFinite(fractionSize) ? fractionSize : 3)
+ }
+ }
+ /*
+ 'yyyy': 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
+ 'yy': 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
+ 'y': 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
+ 'MMMM': Month in year (January-December)
+ 'MMM': Month in year (Jan-Dec)
+ 'MM': Month in year, padded (01-12)
+ 'M': Month in year (1-12)
+ 'dd': Day in month, padded (01-31)
+ 'd': Day in month (1-31)
+ 'EEEE': Day in Week,(Sunday-Saturday)
+ 'EEE': Day in Week, (Sun-Sat)
+ 'HH': Hour in day, padded (00-23)
+ 'H': Hour in day (0-23)
+ 'hh': Hour in am/pm, padded (01-12)
+ 'h': Hour in am/pm, (1-12)
+ 'mm': Minute in hour, padded (00-59)
+ 'm': Minute in hour (0-59)
+ 'ss': Second in minute, padded (00-59)
+ 's': Second in minute (0-59)
+ 'a': am/pm marker
+ 'Z': 4 digit (+sign) representation of the timezone offset (-1200-+1200)
+ format string can also be one of the following predefined localizable formats:
+
+ 'medium': equivalent to 'MMM d, y h:mm:ss a' for en_US locale (e.g. Sep 3, 2010 12:05:08 pm)
+ 'short': equivalent to 'M/d/yy h:mm a' for en_US locale (e.g. 9/3/10 12:05 pm)
+ 'fullDate': equivalent to 'EEEE, MMMM d,y' for en_US locale (e.g. Friday, September 3, 2010)
+ 'longDate': equivalent to 'MMMM d, y' for en_US locale (e.g. September 3, 2010
+ 'mediumDate': equivalent to 'MMM d, y' for en_US locale (e.g. Sep 3, 2010)
+ 'shortDate': equivalent to 'M/d/yy' for en_US locale (e.g. 9/3/10)
+ 'mediumTime': equivalent to 'h:mm:ss a' for en_US locale (e.g. 12:05:08 pm)
+ 'shortTime': equivalent to 'h:mm a' for en_US locale (e.g. 12:05 pm)
+ */
+ new function () {
+ function toInt(str) {
+ return parseInt(str, 10)
+ }
+
+ function padNumber(num, digits, trim) {
+ var neg = ""
+ if (num < 0) {
+ neg = '-'
+ num = -num
+ }
+ num = "" + num
+ while (num.length < digits)
+ num = "0" + num
+ if (trim)
+ num = num.substr(num.length - digits)
+ return neg + num
+ }
+
+ function dateGetter(name, size, offset, trim) {
+ return function (date) {
+ var value = date["get" + name]()
+ if (offset > 0 || value > -offset)
+ value += offset
+ if (value === 0 && offset === -12) {
+ value = 12
+ }
+ return padNumber(value, size, trim)
+ }
+ }
+
+ function dateStrGetter(name, shortForm) {
+ return function (date, formats) {
+ var value = date["get" + name]()
+ var get = (shortForm ? ("SHORT" + name) : name).toUpperCase()
+ return formats[get][value]
+ }
+ }
+
+ function timeZoneGetter(date) {
+ var zone = -1 * date.getTimezoneOffset()
+ var paddedZone = (zone >= 0) ? "+" : ""
+ paddedZone += padNumber(Math[zone > 0 ? "floor" : "ceil"](zone / 60), 2) + padNumber(Math.abs(zone % 60), 2)
+ return paddedZone
+ }
+
+ //取得上午下午
+
+ function ampmGetter(date, formats) {
+ return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]
+ }
+
+ var DATE_FORMATS = {
+ yyyy: dateGetter("FullYear", 4),
+ yy: dateGetter("FullYear", 2, 0, true),
+ y: dateGetter("FullYear", 1),
+ MMMM: dateStrGetter("Month"),
+ MMM: dateStrGetter("Month", true),
+ MM: dateGetter("Month", 2, 1),
+ M: dateGetter("Month", 1, 1),
+ dd: dateGetter("Date", 2),
+ d: dateGetter("Date", 1),
+ HH: dateGetter("Hours", 2),
+ H: dateGetter("Hours", 1),
+ hh: dateGetter("Hours", 2, -12),
+ h: dateGetter("Hours", 1, -12),
+ mm: dateGetter("Minutes", 2),
+ m: dateGetter("Minutes", 1),
+ ss: dateGetter("Seconds", 2),
+ s: dateGetter("Seconds", 1),
+ sss: dateGetter("Milliseconds", 3),
+ EEEE: dateStrGetter("Day"),
+ EEE: dateStrGetter("Day", true),
+ a: ampmGetter,
+ Z: timeZoneGetter
+ }
+ var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/,
+ NUMBER_STRING = /^\d+$/
+ var riso8601 = /^(\d{4})-?(\d+)-?(\d+)(?:T(\d+)(?::?(\d+)(?::?(\d+)(?:\.(\d+))?)?)?(Z|([+-])(\d+):?(\d+))?)?$/
+ // 1 2 3 4 5 6 7 8 9 10 11
+
+ function jsonStringToDate(string) {
+ var match
+ if (match = string.match(riso8601)) {
+ var date = new Date(0),
+ tzHour = 0,
+ tzMin = 0,
+ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+ timeSetter = match[8] ? date.setUTCHours : date.setHours
+ if (match[9]) {
+ tzHour = toInt(match[9] + match[10])
+ tzMin = toInt(match[9] + match[11])
+ }
+ dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]))
+ var h = toInt(match[4] || 0) - tzHour
+ var m = toInt(match[5] || 0) - tzMin
+ var s = toInt(match[6] || 0)
+ var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000)
+ timeSetter.call(date, h, m, s, ms)
+ return date
+ }
+ return string
+ }
+
+ var rfixYMD = /^(\d+)\D(\d+)\D(\d+)/
+ filters.date = function (date, format) {
+ var locate = filters.date.locate,
+ text = "",
+ parts = [],
+ fn, match
+ format = format || "mediumDate"
+ format = locate[format] || format
+ if (typeof date === "string") {
+ if (NUMBER_STRING.test(date)) {
+ date = toInt(date)
+ } else {
+ var trimDate = date.trim()
+ date = trimDate.replace(rfixYMD, function (a, b, c, d) {
+ var array = d.length === 4 ? [d, b, c] : [b, c, d]
+ return array.join("-")
+ })
+ date = jsonStringToDate(date)
+ }
+ date = new Date(date)
+ }
+ if (typeof date === "number") {
+ date = new Date(date)
+ }
+ if (avalon.type(date) !== "date") {
+ return
+ }
+ while (format) {
+ match = DATE_FORMATS_SPLIT.exec(format)
+ if (match) {
+ parts = parts.concat(match.slice(1))
+ format = parts.pop()
+ } else {
+ parts.push(format)
+ format = null
+ }
+ }
+ parts.forEach(function (value) {
+ fn = DATE_FORMATS[value]
+ text += fn ? fn(date, locate) : value.replace(/(^'|'$)/g, "").replace(/''/g, "'")
+ })
+ return text
+ }
+ var locate = {
+ AMPMS: {
+ 0: "上午",
+ 1: "下午"
+ },
+ DAY: {
+ 0: "星期日",
+ 1: "星期一",
+ 2: "星期二",
+ 3: "星期三",
+ 4: "星期四",
+ 5: "星期五",
+ 6: "星期六"
+ },
+ MONTH: {
+ 0: "1月",
+ 1: "2月",
+ 2: "3月",
+ 3: "4月",
+ 4: "5月",
+ 5: "6月",
+ 6: "7月",
+ 7: "8月",
+ 8: "9月",
+ 9: "10月",
+ 10: "11月",
+ 11: "12月"
+ },
+ SHORTDAY: {
+ "0": "周日",
+ "1": "周一",
+ "2": "周二",
+ "3": "周三",
+ "4": "周四",
+ "5": "周五",
+ "6": "周六"
+ },
+ fullDate: "y年M月d日EEEE",
+ longDate: "y年M月d日",
+ medium: "yyyy-M-d H:mm:ss",
+ mediumDate: "yyyy-M-d",
+ mediumTime: "H:mm:ss",
+ "short": "yy-M-d ah:mm",
+ shortDate: "yy-M-d",
+ shortTime: "ah:mm"
+ }
+ locate.SHORTMONTH = locate.MONTH
+ filters.date.locate = locate
+ }
+ /*********************************************************************
+ * AMD加载器 *
+ **********************************************************************/
+ var modules = avalon.modules = {
+ "ready!": {
+ exports: avalon
+ },
+ "avalon": {
+ exports: avalon,
+ state: 2
+ }
+ }
+
+ new function () {
+ var loadings = [] //正在加载中的模块列表
+ var factorys = [] //储存需要绑定ID与factory对应关系的模块(标准浏览器下,先parse的script节点会先onload)
+ var basepath
+
+ function trimHashAndQuery(url) {
+ return (url || "").replace(/[?#].*/, "")
+ }
+
+ var cur = getCurrentScript(true) //求得当前avalon.js 所在的JS文件的路径
+ if (!cur) { //处理window safari的Error没有stack的问题
+ cur = avalon.slice(DOC.scripts).pop().src
+ }
+ var url = trimHashAndQuery(cur)
+ basepath = kernel.base = url.slice(0, url.lastIndexOf("/") + 1)
+
+ function getCurrentScript(base) {
+ // 参考 https://github.com/samyk/jiagra/blob/master/jiagra.js
+ var stack
+ try {
+ a.b.c() //强制报错,以便捕获e.stack
+ } catch (e) { //safari的错误对象只有line,sourceId,sourceURL
+ stack = e.stack
+ if (!stack && window.opera) {
+ //opera 9没有e.stack,但有e.Backtrace,但不能直接取得,需要对e对象转字符串进行抽取
+ stack = (String(e).match(/of linked script \S+/g) || []).join(" ")
+ }
+ }
+ if (stack) {
+ /**e.stack最后一行在所有支持的浏览器大致如下:
+ *chrome23:
+ * at http://113.93.50.63/data.js:4:1
+ *firefox17:
+ *@http://113.93.50.63/query.js:4
+ *opera12:http://www.oldapps.com/opera.php?system=Windows_XP
+ *@http://113.93.50.63/data.js:4
+ *IE10:
+ * at Global code (http://113.93.50.63/data.js:4:1)
+ * //firefox4+ 可以用document.currentScript
+ */
+ stack = stack.split(/[@ ]/g).pop() //取得最后一行,最后一个空格或@之后的部分
+ stack = stack[0] === "(" ? stack.slice(1, -1) : stack.replace(/\s/, "") //去掉换行符
+ return stack.replace(/(:\d+)?:\d+$/i, "") //去掉行号与或许存在的出错字符起始位置
+ }
+ var nodes = (base ? DOC : head).getElementsByTagName("script") //只在head标签中寻找
+ for (var i = nodes.length, node; node = nodes[--i];) {
+ if ((base || node.className === subscribers) && node.readyState === "interactive") {
+ return node.className = node.src
+ }
+ }
+ }
+
+ innerRequire = avalon.require = function (array, factory, parent) {
+ if (!Array.isArray(array)) {
+ avalon.error("require的第一个参数必须是依赖列数,类型为数组 " + array)
+ }
+ var args = [] // 放置所有依赖项的完整路径
+ var deps = {} // args的另一种表现形式,为的是方便去重
+ var dn = 0 //需要安装的模块数
+ var cn = 0 // 已安装完的模块数
+ var id = parent || "callback" + setTimeout("1")
+ parent = parent || basepath
+
+ array.forEach(function (el) {
+ var url = loadResources(el, parent) //加载资源,并返回能加载资源的完整路径
+ if (url) {
+ dn++
+ if (modules[url] && modules[url].state === 2) {
+ cn++
+ }
+ if (!deps[url]) {
+ args.push(url)
+ deps[url] = "司徒正美" //去重
+ }
+ }
+ })
+ modules[id] = {//保存此模块的相关信息
+ id: id,
+ factory: factory,
+ deps: deps,
+ args: args,
+ state: 1
+ }
+ if (dn === cn) { //如果需要安装的等于已安装好的
+ fireFactory(id, args, factory) //安装到框架中
+ } else {
+ //放到检测列队中,等待checkDeps处理
+ loadings.unshift(id)
+ }
+ checkDeps()
+ }
+
+ innerRequire.define = function (urlOrId, deps, factory) { //模块名,依赖列表,模块本身
+ var args = aslice.call(arguments)
+ if (typeof urlOrId === "string") {
+ var id = args.shift()
+ }
+ if (typeof args[0] === "function") {
+ args.unshift([])
+ }
+ //上线合并后能直接得到模块ID,否则寻找当前正在解析中的script节点的src作为模块ID
+ //现在除了safari5,1-外,我们都能直接通过getCurrentScript一步到位得到当前执行的script节点,
+ //safari可通过onload+delay闭包组合解决
+ var url = modules[id] && modules[id].state >= 1 ? id : trimHashAndQuery(getCurrentScript())
+ if (!modules[url] && id) {
+ modules[url] = {
+ id: url,
+ factory: factory,
+ state: 1
+ }
+ }
+ factory = args[1]
+ factory.id = id //用于调试
+ factory.delay = function (d) {
+ args.push(d)
+ var isCycle = true
+ try {
+ isCycle = checkCycle(modules[d].deps, d)
+ } catch (e) {
+ }
+ if (isCycle) {
+ avalon.error(d + "模块与之前的模块存在循环依赖,请不要直接用script标签引入" + d + "模块")
+ }
+ delete factory.delay //释放内存
+ innerRequire.apply(null, args) //0,1,2 --> 1,2,0
+ }
+ if (url) {
+ factory.delay(url)
+ } else { //先进先出
+ factorys.push(factory)
+ }
+ }
+ innerRequire.define.amd = modules
+
+ function checkCycle(deps, nick) {
+ //检测是否存在循环依赖
+ for (var id in deps) {
+ if (deps[id] === "司徒正美" && modules[id].state !== 2 && (id === nick || checkCycle(modules[id].deps, nick))) {
+ return true
+ }
+ }
+ }
+
+ function checkDeps() {
+ //检测此JS模块的依赖是否都已安装完毕,是则安装自身
+ loop: for (var i = loadings.length, id; id = loadings[--i];) {
+
+ var obj = modules[id],
+ deps = obj.deps
+ for (var key in deps) {
+ if (ohasOwn.call(deps, key) && modules[key].state !== 2) {
+ continue loop
+ }
+ }
+ //如果deps是空对象或者其依赖的模块的状态都是2
+ if (obj.state !== 2) {
+ loadings.splice(i, 1) //必须先移除再安装,防止在IE下DOM树建完后手动刷新页面,会多次执行它
+ fireFactory(obj.id, obj.args, obj.factory)
+ checkDeps() //如果成功,则再执行一次,以防有些模块就差本模块没有安装好
+ }
+ }
+ }
+
+ function checkFail(node, onError, fuckIE) {
+ var id = trimHashAndQuery(node.src) //检测是否死链
+ node.onload = node.onreadystatechange = node.onerror = null
+ if (onError || (fuckIE && !modules[id].state)) {
+ setTimeout(function () {
+ head.removeChild(node)
+ node = null // 处理旧式IE下的循环引用问题
+ })
+ log("debug: 加载 " + id + " 失败" + onError + " " + (!modules[id].state))
+ } else {
+ return true
+ }
+ }
+
+ var rdeuce = /\/\w+\/\.\./
+
+ function loadResources(url, parent, ret, shim) {
+ //1. 特别处理mass|ready标识符
+ if (url === "ready!" || (modules[url] && modules[url].state === 2)) {
+ return url
+ }
+ //2. 处理text! css! 等资源
+ var plugin
+ url = url.replace(/^\w+!/, function (a) {
+ plugin = a.slice(0, -1)
+ return ""
+ })
+ plugin = plugin || "js"
+ plugin = plugins[plugin] || noop
+ //3. 转化为完整路径
+ if (typeof kernel.shim[url] === "object") {
+ shim = kernel.shim[url]
+ }
+ url = url.split('/');
+ //For each module name segment, see if there is a path
+ //registered for it. Start with most specific name
+ //and work up from it.
+ for (var i = url.length, parentModule, parentPath; i > 0; i -= 1) {
+ parentModule = url.slice(0, i).join('/');
+
+ parentPath = kernel.paths[parentModule];
+ if (parentPath) {
+ //If an array, it means there are a few choices,
+ //Choose the one that is desired
+ if (Array.isArray(parentPath)) {
+ parentPath = parentPath[0];
+ }
+ url.splice(0, i, parentPath);
+ break;
+ }
+ }
+ //Join the path parts together, then figure out if baseUrl is needed.
+ url = url.join('/');
+
+ //4. 补全路径
+ if (/^(\w+)(\d)?:.*/.test(url)) {
+ ret = url
+ } else {
+ parent = parent.substr(0, parent.lastIndexOf("/"))
+ var tmp = url.charAt(0)
+ if (tmp !== "." && tmp !== "/") { //相对于根路径
+ ret = basepath + url
+ } else if (url.slice(0, 2) === "./") { //相对于兄弟路径
+ ret = parent + url.slice(1)
+ } else if (url.slice(0, 2) === "..") { //相对于父路径
+ ret = parent + "/" + url
+ while (rdeuce.test(ret)) {
+ ret = ret.replace(rdeuce, "")
+ }
+ } else if (tmp === "/") {
+ ret = url //相对于根路径
+ } else {
+ avalon.error("不符合模块标识规则: " + url)
+ }
+ }
+ //5. 补全扩展名
+ url = trimHashAndQuery(ret)
+ var ext = plugin.ext
+ if (ext) {
+ if (url.slice(0 - ext.length) !== ext) {
+ ret += ext
+ }
+ }
+ //6. 缓存处理
+ if (kernel.nocache) {
+ ret += (ret.indexOf("?") === -1 ? "?" : "&") + (new Date - 0)
+ }
+ return plugin(ret, shim)
+ }
+
+ function loadJS(url, id, callback) {
+ //通过script节点加载目标模块
+ var node = DOC.createElement("script")
+ node.className = subscribers //让getCurrentScript只处理类名为subscribers的script节点
+ node[W3C ? "onload" : "onreadystatechange"] = function () {
+ if (W3C || /loaded|complete/i.test(node.readyState)) {
+ //mass Framework会在_checkFail把它上面的回调清掉,尽可能释放回存,尽管DOM0事件写法在IE6下GC无望
+ var factory = factorys.pop()
+ factory && factory.delay(id)
+ if (callback) {
+ callback()
+ }
+ if (checkFail(node, false, !W3C)) {
+ log("debug: 已成功加载 " + url)
+ }
+ }
+ }
+ node.onerror = function () {
+ checkFail(node, true)
+ }
+ node.src = url //插入到head的第一个节点前,防止IE6下head标签没闭合前使用appendChild抛错
+ head.insertBefore(node, head.firstChild) //chrome下第二个参数不能为null
+ log("debug: 正准备加载 " + url) //更重要的是IE6下可以收窄getCurrentScript的寻找范围
+ }
+
+ function fireFactory(id, deps, factory) {
+ for (var i = 0, array = [], d; d = deps[i++];) {
+ array.push(modules[d].exports)
+ }
+ var module = Object(modules[id]),
+ ret = factory.apply(window, array)
+ module.state = 2
+ if (ret !== void 0) {
+ modules[id].exports = ret
+ }
+ return ret
+ }
+
+ plugins.js = function (url, shim) {
+ var id = trimHashAndQuery(url)
+ if (!modules[id]) { //如果之前没有加载过
+ modules[id] = {
+ id: id,
+ exports: {}
+ }
+ if (shim) { //shim机制
+ innerRequire(shim.deps || "", function () {
+ loadJS(url, id, function () {
+ modules[id].state = 2
+ var s = shim.exports
+ if (s && modules[id].exports === void 0) {
+ modules[id].exports = typeof s === "function" ?
+ s() : window[s]
+ }
+ innerRequire.checkDeps()
+ })
+ })
+ } else {
+ loadJS(url, id)
+ }
+ }
+ return id
+ }
+ plugins.css = function (url) {
+ var id = trimHashAndQuery(url).replace(/\W/g, "_") ////用于处理掉href中的hash与所有特殊符号
+ if (!DOC.getElementById(id)) {
+ var node = DOC.createElement("link")
+ node.rel = "stylesheet"
+ node.href = url
+ node.id = id
+ head.insertBefore(node, head.firstChild)
+ }
+ }
+ plugins.css.ext = ".css"
+ plugins.js.ext = ".js"
+
+ plugins.text = function (url) {
+ var xhr = getXHR()
+ var id = trimHashAndQuery(url)
+ modules[id] = {}
+ xhr.onreadystatechange = function () {
+ if (xhr.readyState === 4) {
+ var status = xhr.status;
+ if (status > 399 && status < 600) {
+ avalon.error(url + " 对应资源不存在或没有开启 CORS")
+ } else {
+ modules[id].state = 2
+ modules[id].exports = xhr.responseText
+ innerRequire.checkDeps()
+ }
+ }
+ }
+ xhr.open("GET", url, true)
+ if ("withCredentials" in xhr) {
+ xhr.withCredentials = true
+ }
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
+ xhr.send()
+ return id
+ }
+
+ innerRequire.config = kernel
+ innerRequire.checkDeps = checkDeps
+ }
+
+ /*********************************************************************
+ * DOMReady *
+ **********************************************************************/
+ var readyList = []
+
+ function fireReady() {
+ if (innerRequire) {
+ modules["ready!"].state = 2
+ innerRequire.checkDeps()//隋性函数,防止IE9二次调用_checkDeps
+ } else {
+ readyList.forEach(function (a) {
+ a(avalon)
+ })
+ }
+ fireReady = noop //隋性函数,防止IE9二次调用_checkDeps
+ }
+
+ if (DOC.readyState === "complete") {
+ setTimeout(fireReady) //如果在domReady之外加载
+ } else {
+ DOC.addEventListener("DOMContentLoaded", fireReady)
+ window.addEventListener("load", fireReady)
+ }
+ avalon.ready = function (fn) {
+ if (innerRequire) {
+ innerRequire(["ready!"], fn)
+ } else if (fireReady === noop) {
+ fn(avalon)
+ } else {
+ readyList.push(fn)
+ }
+ }
+ avalon.config({
+ loader: true
+ })
+ avalon.ready(function () {
+ avalon.scan(DOC.body)
+ })
+
+// Register as a named AMD module, since avalon can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase avalon is used because AMD module names are
+// derived from file names, and Avalon is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of avalon, it will work.
+
+// Note that for maximum portability, libraries that are not avalon should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. avalon is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+ if (typeof define === "function" && define.amd) {
+ define("avalon", [], function () {
+ return avalon
+ })
+ }
+// Map over avalon in case of overwrite
+ var _avalon = window.avalon
+ avalon.noConflict = function (deep) {
+ if (deep && window.avalon === avalon) {
+ window.avalon = avalon
+ }
+ return avalon
+ }
+// Expose avalon and $ identifiers, even in AMD
+// and CommonJS for browser emulators
+ if (noGlobal === void 0) {
+ window.avalon = avalon
+ }
+ return avalon
+
+}));
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/jquery-1.10.2.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/jquery-1.10.2.min.js
new file mode 100644
index 00000000..a78dbea9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/jquery-1.10.2.min.js
@@ -0,0 +1,2640 @@
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function (a, b) {
+ "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) {
+ if (!a.document)throw new Error("jQuery requires a window with a document");
+ return b(a)
+ } : b(a)
+}("undefined" != typeof window ? window : this, function (a, b) {
+ var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = "".trim, l = {}, m = "1.11.0", n = function (a, b) {
+ return new n.fn.init(a, b)
+ }, o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, p = /^-ms-/, q = /-([\da-z])/gi, r = function (a, b) {
+ return b.toUpperCase()
+ };
+ n.fn = n.prototype = {
+ jquery: m, constructor: n, selector: "", length: 0, toArray: function () {
+ return d.call(this)
+ }, get: function (a) {
+ return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this)
+ }, pushStack: function (a) {
+ var b = n.merge(this.constructor(), a);
+ return b.prevObject = this, b.context = this.context, b
+ }, each: function (a, b) {
+ return n.each(this, a, b)
+ }, map: function (a) {
+ return this.pushStack(n.map(this, function (b, c) {
+ return a.call(b, c, b)
+ }))
+ }, slice: function () {
+ return this.pushStack(d.apply(this, arguments))
+ }, first: function () {
+ return this.eq(0)
+ }, last: function () {
+ return this.eq(-1)
+ }, eq: function (a) {
+ var b = this.length, c = +a + (0 > a ? b : 0);
+ return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
+ }, end: function () {
+ return this.prevObject || this.constructor(null)
+ }, push: f, sort: c.sort, splice: c.splice
+ }, n.extend = n.fn.extend = function () {
+ var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1;
+ for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)if (null != (e = arguments[h]))for (d in e)a = g[d], c = e[d], g !== c && (j && c && (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a && n.isArray(a) ? a : []) : f = a && n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c && (g[d] = c));
+ return g
+ }, n.extend({
+ expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (a) {
+ throw new Error(a)
+ }, noop: function () {
+ }, isFunction: function (a) {
+ return "function" === n.type(a)
+ }, isArray: Array.isArray || function (a) {
+ return "array" === n.type(a)
+ }, isWindow: function (a) {
+ return null != a && a == a.window
+ }, isNumeric: function (a) {
+ return a - parseFloat(a) >= 0
+ }, isEmptyObject: function (a) {
+ var b;
+ for (b in a)return !1;
+ return !0
+ }, isPlainObject: function (a) {
+ var b;
+ if (!a || "object" !== n.type(a) || a.nodeType || n.isWindow(a))return !1;
+ try {
+ if (a.constructor && !j.call(a, "constructor") && !j.call(a.constructor.prototype, "isPrototypeOf"))return !1
+ } catch (c) {
+ return !1
+ }
+ if (l.ownLast)for (b in a)return j.call(a, b);
+ for (b in a);
+ return void 0 === b || j.call(a, b)
+ }, type: function (a) {
+ return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
+ }, globalEval: function (b) {
+ b && n.trim(b) && (a.execScript || function (b) {
+ a.eval.call(a, b)
+ })(b)
+ }, camelCase: function (a) {
+ return a.replace(p, "ms-").replace(q, r)
+ }, nodeName: function (a, b) {
+ return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
+ }, each: function (a, b, c) {
+ var d, e = 0, f = a.length, g = s(a);
+ if (c) {
+ if (g) {
+ for (; f > e; e++)if (d = b.apply(a[e], c), d === !1)break
+ } else for (e in a)if (d = b.apply(a[e], c), d === !1)break
+ } else if (g) {
+ for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1)break
+ } else for (e in a)if (d = b.call(a[e], e, a[e]), d === !1)break;
+ return a
+ }, trim: k && !k.call("\ufeff\xa0") ? function (a) {
+ return null == a ? "" : k.call(a)
+ } : function (a) {
+ return null == a ? "" : (a + "").replace(o, "")
+ }, makeArray: function (a, b) {
+ var c = b || [];
+ return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c
+ }, inArray: function (a, b, c) {
+ var d;
+ if (b) {
+ if (g)return g.call(b, a, c);
+ for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)if (c in b && b[c] === a)return c
+ }
+ return -1
+ }, merge: function (a, b) {
+ var c = +b.length, d = 0, e = a.length;
+ while (c > d)a[e++] = b[d++];
+ if (c !== c)while (void 0 !== b[d])a[e++] = b[d++];
+ return a.length = e, a
+ }, grep: function (a, b, c) {
+ for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++)d = !b(a[f], f), d !== h && e.push(a[f]);
+ return e
+ }, map: function (a, b, c) {
+ var d, f = 0, g = a.length, h = s(a), i = [];
+ if (h)for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a)d = b(a[f], f, c), null != d && i.push(d);
+ return e.apply([], i)
+ }, guid: 1, proxy: function (a, b) {
+ var c, e, f;
+ return "string" == typeof b && (f = a[b], b = a, a = f), n.isFunction(a) ? (c = d.call(arguments, 2), e = function () {
+ return a.apply(b || this, c.concat(d.call(arguments)))
+ }, e.guid = a.guid = a.guid || n.guid++, e) : void 0
+ }, now: function () {
+ return +new Date
+ }, support: l
+ }), n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) {
+ h["[object " + b + "]"] = b.toLowerCase()
+ });
+ function s(a) {
+ var b = a.length, c = n.type(a);
+ return "function" === c || n.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
+ }
+
+ var t = function (a) {
+ var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = "sizzle" + -new Date, t = a.document, u = 0, v = 0, w = eb(), x = eb(), y = eb(), z = function (a, b) {
+ return a === b && (j = !0), 0
+ }, A = "undefined", B = 1 << 31, C = {}.hasOwnProperty, D = [], E = D.pop, F = D.push, G = D.push, H = D.slice, I = D.indexOf || function (a) {
+ for (var b = 0, c = this.length; c > b; b++)if (this[b] === a)return b;
+ return -1
+ }, J = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", K = "[\\x20\\t\\r\\n\\f]", L = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", M = L.replace("w", "w#"), N = "\\[" + K + "*(" + L + ")" + K + "*(?:([*^$|!~]?=)" + K + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + M + ")|)|)" + K + "*\\]", O = ":(" + L + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + N.replace(3, 8) + ")*)|.*)\\)|)", P = new RegExp("^" + K + "+|((?:^|[^\\\\])(?:\\\\.)*)" + K + "+$", "g"), Q = new RegExp("^" + K + "*," + K + "*"), R = new RegExp("^" + K + "*([>+~]|" + K + ")" + K + "*"), S = new RegExp("=" + K + "*([^\\]'\"]*?)" + K + "*\\]", "g"), T = new RegExp(O), U = new RegExp("^" + M + "$"), V = {
+ ID: new RegExp("^#(" + L + ")"),
+ CLASS: new RegExp("^\\.(" + L + ")"),
+ TAG: new RegExp("^(" + L.replace("w", "w*") + ")"),
+ ATTR: new RegExp("^" + N),
+ PSEUDO: new RegExp("^" + O),
+ CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + K + "*(even|odd|(([+-]|)(\\d*)n|)" + K + "*(?:([+-]|)" + K + "*(\\d+)|))" + K + "*\\)|)", "i"),
+ bool: new RegExp("^(?:" + J + ")$", "i"),
+ needsContext: new RegExp("^" + K + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + K + "*((?:-\\d)?\\d*)" + K + "*\\)|)(?=[^-]|$)", "i")
+ }, W = /^(?:input|select|textarea|button)$/i, X = /^h\d$/i, Y = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, $ = /[+~]/, _ = /'|\\/g, ab = new RegExp("\\\\([\\da-f]{1,6}" + K + "?|(" + K + ")|.)", "ig"), bb = function (a, b, c) {
+ var d = "0x" + b - 65536;
+ return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
+ };
+ try {
+ G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType
+ } catch (cb) {
+ G = {
+ apply: D.length ? function (a, b) {
+ F.apply(a, H.call(b))
+ } : function (a, b) {
+ var c = a.length, d = 0;
+ while (a[c++] = b[d++]);
+ a.length = c - 1
+ }
+ }
+ }
+ function db(a, b, d, e) {
+ var f, g, h, i, j, m, p, q, u, v;
+ if ((b ? b.ownerDocument || b : t) !== l && k(b), b = b || l, d = d || [], !a || "string" != typeof a)return d;
+ if (1 !== (i = b.nodeType) && 9 !== i)return [];
+ if (n && !e) {
+ if (f = Z.exec(a))if (h = f[1]) {
+ if (9 === i) {
+ if (g = b.getElementById(h), !g || !g.parentNode)return d;
+ if (g.id === h)return d.push(g), d
+ } else if (b.ownerDocument && (g = b.ownerDocument.getElementById(h)) && r(b, g) && g.id === h)return d.push(g), d
+ } else {
+ if (f[2])return G.apply(d, b.getElementsByTagName(a)), d;
+ if ((h = f[3]) && c.getElementsByClassName && b.getElementsByClassName)return G.apply(d, b.getElementsByClassName(h)), d
+ }
+ if (c.qsa && (!o || !o.test(a))) {
+ if (q = p = s, u = b, v = 9 === i && a, 1 === i && "object" !== b.nodeName.toLowerCase()) {
+ m = ob(a), (p = b.getAttribute("id")) ? q = p.replace(_, "\\$&") : b.setAttribute("id", q), q = "[id='" + q + "'] ", j = m.length;
+ while (j--)m[j] = q + pb(m[j]);
+ u = $.test(a) && mb(b.parentNode) || b, v = m.join(",")
+ }
+ if (v)try {
+ return G.apply(d, u.querySelectorAll(v)), d
+ } catch (w) {
+ } finally {
+ p || b.removeAttribute("id")
+ }
+ }
+ }
+ return xb(a.replace(P, "$1"), b, d, e)
+ }
+
+ function eb() {
+ var a = [];
+
+ function b(c, e) {
+ return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
+ }
+
+ return b
+ }
+
+ function fb(a) {
+ return a[s] = !0, a
+ }
+
+ function gb(a) {
+ var b = l.createElement("div");
+ try {
+ return !!a(b)
+ } catch (c) {
+ return !1
+ } finally {
+ b.parentNode && b.parentNode.removeChild(b), b = null
+ }
+ }
+
+ function hb(a, b) {
+ var c = a.split("|"), e = a.length;
+ while (e--)d.attrHandle[c[e]] = b
+ }
+
+ function ib(a, b) {
+ var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || B) - (~a.sourceIndex || B);
+ if (d)return d;
+ if (c)while (c = c.nextSibling)if (c === b)return -1;
+ return a ? 1 : -1
+ }
+
+ function jb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return "input" === c && b.type === a
+ }
+ }
+
+ function kb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return ("input" === c || "button" === c) && b.type === a
+ }
+ }
+
+ function lb(a) {
+ return fb(function (b) {
+ return b = +b, fb(function (c, d) {
+ var e, f = a([], c.length, b), g = f.length;
+ while (g--)c[e = f[g]] && (c[e] = !(d[e] = c[e]))
+ })
+ })
+ }
+
+ function mb(a) {
+ return a && typeof a.getElementsByTagName !== A && a
+ }
+
+ c = db.support = {}, f = db.isXML = function (a) {
+ var b = a && (a.ownerDocument || a).documentElement;
+ return b ? "HTML" !== b.nodeName : !1
+ }, k = db.setDocument = function (a) {
+ var b, e = a ? a.ownerDocument || a : t, g = e.defaultView;
+ return e !== l && 9 === e.nodeType && e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener("unload", function () {
+ k()
+ }, !1) : g.attachEvent && g.attachEvent("onunload", function () {
+ k()
+ })), c.attributes = gb(function (a) {
+ return a.className = "i", !a.getAttribute("className")
+ }), c.getElementsByTagName = gb(function (a) {
+ return a.appendChild(e.createComment("")), !a.getElementsByTagName("*").length
+ }), c.getElementsByClassName = Y.test(e.getElementsByClassName) && gb(function (a) {
+ return a.innerHTML = "<div class='a'></div><div class='a i'></div>", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length
+ }), c.getById = gb(function (a) {
+ return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length
+ }), c.getById ? (d.find.ID = function (a, b) {
+ if (typeof b.getElementById !== A && n) {
+ var c = b.getElementById(a);
+ return c && c.parentNode ? [c] : []
+ }
+ }, d.filter.ID = function (a) {
+ var b = a.replace(ab, bb);
+ return function (a) {
+ return a.getAttribute("id") === b
+ }
+ }) : (delete d.find.ID, d.filter.ID = function (a) {
+ var b = a.replace(ab, bb);
+ return function (a) {
+ var c = typeof a.getAttributeNode !== A && a.getAttributeNode("id");
+ return c && c.value === b
+ }
+ }), d.find.TAG = c.getElementsByTagName ? function (a, b) {
+ return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0
+ } : function (a, b) {
+ var c, d = [], e = 0, f = b.getElementsByTagName(a);
+ if ("*" === a) {
+ while (c = f[e++])1 === c.nodeType && d.push(c);
+ return d
+ }
+ return f
+ }, d.find.CLASS = c.getElementsByClassName && function (a, b) {
+ return typeof b.getElementsByClassName !== A && n ? b.getElementsByClassName(a) : void 0
+ }, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) && (gb(function (a) {
+ a.innerHTML = "<select t=''><option selected=''></option></select>", a.querySelectorAll("[t^='']").length && o.push("[*^$]=" + K + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || o.push("\\[" + K + "*(?:value|" + J + ")"), a.querySelectorAll(":checked").length || o.push(":checked")
+ }), gb(function (a) {
+ var b = e.createElement("input");
+ b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && o.push("name" + K + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), o.push(",.*:")
+ })), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) && gb(function (a) {
+ c.disconnectedMatch = q.call(a, "div"), q.call(a, "[s!='']:x"), p.push("!=", O)
+ }), o = o.length && new RegExp(o.join("|")), p = p.length && new RegExp(p.join("|")), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function (a, b) {
+ var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode;
+ return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
+ } : function (a, b) {
+ if (b)while (b = b.parentNode)if (b === a)return !0;
+ return !1
+ }, z = b ? function (a, b) {
+ if (a === b)return j = !0, 0;
+ var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t && r(t, a) ? -1 : b === e || b.ownerDocument === t && r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 & d ? -1 : 1)
+ } : function (a, b) {
+ if (a === b)return j = !0, 0;
+ var c, d = 0, f = a.parentNode, g = b.parentNode, h = [a], k = [b];
+ if (!f || !g)return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0;
+ if (f === g)return ib(a, b);
+ c = a;
+ while (c = c.parentNode)h.unshift(c);
+ c = b;
+ while (c = c.parentNode)k.unshift(c);
+ while (h[d] === k[d])d++;
+ return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0
+ }, e) : l
+ }, db.matches = function (a, b) {
+ return db(a, null, null, b)
+ }, db.matchesSelector = function (a, b) {
+ if ((a.ownerDocument || a) !== l && k(a), b = b.replace(S, "='$1']"), !(!c.matchesSelector || !n || p && p.test(b) || o && o.test(b)))try {
+ var d = q.call(a, b);
+ if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d
+ } catch (e) {
+ }
+ return db(b, l, null, [a]).length > 0
+ }, db.contains = function (a, b) {
+ return (a.ownerDocument || a) !== l && k(a), r(a, b)
+ }, db.attr = function (a, b) {
+ (a.ownerDocument || a) !== l && k(a);
+ var e = d.attrHandle[b.toLowerCase()], f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0;
+ return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
+ }, db.error = function (a) {
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ }, db.uniqueSort = function (a) {
+ var b, d = [], e = 0, f = 0;
+ if (j = !c.detectDuplicates, i = !c.sortStable && a.slice(0), a.sort(z), j) {
+ while (b = a[f++])b === a[f] && (e = d.push(f));
+ while (e--)a.splice(d[e], 1)
+ }
+ return i = null, a
+ }, e = db.getText = function (a) {
+ var b, c = "", d = 0, f = a.nodeType;
+ if (f) {
+ if (1 === f || 9 === f || 11 === f) {
+ if ("string" == typeof a.textContent)return a.textContent;
+ for (a = a.firstChild; a; a = a.nextSibling)c += e(a)
+ } else if (3 === f || 4 === f)return a.nodeValue
+ } else while (b = a[d++])c += e(b);
+ return c
+ }, d = db.selectors = {
+ cacheLength: 50,
+ createPseudo: fb,
+ match: V,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": {dir: "parentNode", first: !0},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: !0},
+ "~": {dir: "previousSibling"}
+ },
+ preFilter: {
+ ATTR: function (a) {
+ return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || "").replace(ab, bb), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
+ }, CHILD: function (a) {
+ return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && db.error(a[0]), a
+ }, PSEUDO: function (a) {
+ var b, c = !a[5] && a[2];
+ return V.CHILD.test(a[0]) ? null : (a[3] && void 0 !== a[4] ? a[2] = a[4] : c && T.test(c) && (b = ob(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
+ }
+ },
+ filter: {
+ TAG: function (a) {
+ var b = a.replace(ab, bb).toLowerCase();
+ return "*" === a ? function () {
+ return !0
+ } : function (a) {
+ return a.nodeName && a.nodeName.toLowerCase() === b
+ }
+ }, CLASS: function (a) {
+ var b = w[a + " "];
+ return b || (b = new RegExp("(^|" + K + ")" + a + "(" + K + "|$)")) && w(a, function (a) {
+ return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== A && a.getAttribute("class") || "")
+ })
+ }, ATTR: function (a, b, c) {
+ return function (d) {
+ var e = db.attr(d, a);
+ return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
+ }
+ }, CHILD: function (a, b, c, d, e) {
+ var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
+ return 1 === d && 0 === e ? function (a) {
+ return !!a.parentNode
+ } : function (b, c, i) {
+ var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), t = !i && !h;
+ if (q) {
+ if (f) {
+ while (p) {
+ l = b;
+ while (l = l[p])if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return !1;
+ o = p = "only" === a && !o && "nextSibling"
+ }
+ return !0
+ }
+ if (o = [g ? q.firstChild : q.lastChild], g && t) {
+ k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u && j[1], m = j[0] === u && j[2], l = n && q.childNodes[n];
+ while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if (1 === l.nodeType && ++m && l === b) {
+ k[a] = [u, n, m];
+ break
+ }
+ } else if (t && (j = (b[s] || (b[s] = {}))[a]) && j[0] === u)m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (t && ((l[s] || (l[s] = {}))[a] = [u, m]), l === b))break;
+ return m -= e, m === d || m % d === 0 && m / d >= 0
+ }
+ }
+ }, PSEUDO: function (a, b) {
+ var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error("unsupported pseudo: " + a);
+ return e[s] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? fb(function (a, c) {
+ var d, f = e(a, b), g = f.length;
+ while (g--)d = I.call(a, f[g]), a[d] = !(c[d] = f[g])
+ }) : function (a) {
+ return e(a, 0, c)
+ }) : e
+ }
+ },
+ pseudos: {
+ not: fb(function (a) {
+ var b = [], c = [], d = g(a.replace(P, "$1"));
+ return d[s] ? fb(function (a, b, c, e) {
+ var f, g = d(a, null, e, []), h = a.length;
+ while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
+ }) : function (a, e, f) {
+ return b[0] = a, d(b, null, f, c), !c.pop()
+ }
+ }), has: fb(function (a) {
+ return function (b) {
+ return db(a, b).length > 0
+ }
+ }), contains: fb(function (a) {
+ return function (b) {
+ return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
+ }
+ }), lang: fb(function (a) {
+ return U.test(a || "") || db.error("unsupported lang: " + a), a = a.replace(ab, bb).toLowerCase(), function (b) {
+ var c;
+ do if (c = n ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
+ return !1
+ }
+ }), target: function (b) {
+ var c = a.location && a.location.hash;
+ return c && c.slice(1) === b.id
+ }, root: function (a) {
+ return a === m
+ }, focus: function (a) {
+ return a === l.activeElement && (!l.hasFocus || l.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
+ }, enabled: function (a) {
+ return a.disabled === !1
+ }, disabled: function (a) {
+ return a.disabled === !0
+ }, checked: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && !!a.checked || "option" === b && !!a.selected
+ }, selected: function (a) {
+ return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ }, empty: function (a) {
+ for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6)return !1;
+ return !0
+ }, parent: function (a) {
+ return !d.pseudos.empty(a)
+ }, header: function (a) {
+ return X.test(a.nodeName)
+ }, input: function (a) {
+ return W.test(a.nodeName)
+ }, button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && "button" === a.type || "button" === b
+ }, text: function (a) {
+ var b;
+ return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
+ }, first: lb(function () {
+ return [0]
+ }), last: lb(function (a, b) {
+ return [b - 1]
+ }), eq: lb(function (a, b, c) {
+ return [0 > c ? c + b : c]
+ }), even: lb(function (a, b) {
+ for (var c = 0; b > c; c += 2)a.push(c);
+ return a
+ }), odd: lb(function (a, b) {
+ for (var c = 1; b > c; c += 2)a.push(c);
+ return a
+ }), lt: lb(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
+ return a
+ }), gt: lb(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d);
+ return a
+ })
+ }
+ }, d.pseudos.nth = d.pseudos.eq;
+ for (b in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})d.pseudos[b] = jb(b);
+ for (b in{submit: !0, reset: !0})d.pseudos[b] = kb(b);
+ function nb() {
+ }
+
+ nb.prototype = d.filters = d.pseudos, d.setFilters = new nb;
+ function ob(a, b) {
+ var c, e, f, g, h, i, j, k = x[a + " "];
+ if (k)return b ? 0 : k.slice(0);
+ h = a, i = [], j = d.preFilter;
+ while (h) {
+ (!c || (e = Q.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({
+ value: c,
+ type: e[0].replace(P, " ")
+ }), h = h.slice(c.length));
+ for (g in d.filter)!(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
+ value: c,
+ type: g,
+ matches: e
+ }), h = h.slice(c.length));
+ if (!c)break
+ }
+ return b ? h.length : h ? db.error(a) : x(a, i).slice(0)
+ }
+
+ function pb(a) {
+ for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
+ return d
+ }
+
+ function qb(a, b, c) {
+ var d = b.dir, e = c && "parentNode" === d, f = v++;
+ return b.first ? function (b, c, f) {
+ while (b = b[d])if (1 === b.nodeType || e)return a(b, c, f)
+ } : function (b, c, g) {
+ var h, i, j = [u, f];
+ if (g) {
+ while (b = b[d])if ((1 === b.nodeType || e) && a(b, c, g))return !0
+ } else while (b = b[d])if (1 === b.nodeType || e) {
+ if (i = b[s] || (b[s] = {}), (h = i[d]) && h[0] === u && h[1] === f)return j[2] = h[2];
+ if (i[d] = j, j[2] = a(b, c, g))return !0
+ }
+ }
+ }
+
+ function rb(a) {
+ return a.length > 1 ? function (b, c, d) {
+ var e = a.length;
+ while (e--)if (!a[e](b, c, d))return !1;
+ return !0
+ } : a[0]
+ }
+
+ function sb(a, b, c, d, e) {
+ for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
+ return g
+ }
+
+ function tb(a, b, c, d, e, f) {
+ return d && !d[s] && (d = tb(d)), e && !e[s] && (e = tb(e, f)), fb(function (f, g, h, i) {
+ var j, k, l, m = [], n = [], o = g.length, p = f || wb(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : sb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q;
+ if (c && c(q, r, h, i), d) {
+ j = sb(r, n), d(j, [], h, i), k = j.length;
+ while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l))
+ }
+ if (f) {
+ if (e || a) {
+ if (e) {
+ j = [], k = r.length;
+ while (k--)(l = r[k]) && j.push(q[k] = l);
+ e(null, r = [], j, i)
+ }
+ k = r.length;
+ while (k--)(l = r[k]) && (j = e ? I.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
+ }
+ } else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r)
+ })
+ }
+
+ function ub(a) {
+ for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[" "], j = g ? 1 : 0, k = qb(function (a) {
+ return a === b
+ }, i, !0), l = qb(function (a) {
+ return I.call(b, a) > -1
+ }, i, !0), m = [function (a, c, d) {
+ return !g && (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d))
+ }]; f > j; j++)if (c = d.relative[a[j].type])m = [qb(rb(m), c)]; else {
+ if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) {
+ for (e = ++j; f > e; e++)if (d.relative[a[e].type])break;
+ return tb(j > 1 && rb(m), j > 1 && pb(a.slice(0, j - 1).concat({value: " " === a[j - 2].type ? "*" : ""})).replace(P, "$1"), c, e > j && ub(a.slice(j, e)), f > e && ub(a = a.slice(e)), f > e && pb(a))
+ }
+ m.push(c)
+ }
+ return rb(m)
+ }
+
+ function vb(a, b) {
+ var c = b.length > 0, e = a.length > 0, f = function (f, g, i, j, k) {
+ var m, n, o, p = 0, q = "0", r = f && [], s = [], t = h, v = f || e && d.find.TAG("*", k), w = u += null == t ? 1 : Math.random() || .1, x = v.length;
+ for (k && (h = g !== l && g); q !== x && null != (m = v[q]); q++) {
+ if (e && m) {
+ n = 0;
+ while (o = a[n++])if (o(m, g, i)) {
+ j.push(m);
+ break
+ }
+ k && (u = w)
+ }
+ c && ((m = !o && m) && p--, f && r.push(m))
+ }
+ if (p += q, c && q !== p) {
+ n = 0;
+ while (o = b[n++])o(r, s, g, i);
+ if (f) {
+ if (p > 0)while (q--)r[q] || s[q] || (s[q] = E.call(j));
+ s = sb(s)
+ }
+ G.apply(j, s), k && !f && s.length > 0 && p + b.length > 1 && db.uniqueSort(j)
+ }
+ return k && (u = w, h = t), r
+ };
+ return c ? fb(f) : f
+ }
+
+ g = db.compile = function (a, b) {
+ var c, d = [], e = [], f = y[a + " "];
+ if (!f) {
+ b || (b = ob(a)), c = b.length;
+ while (c--)f = ub(b[c]), f[s] ? d.push(f) : e.push(f);
+ f = y(a, vb(e, d))
+ }
+ return f
+ };
+ function wb(a, b, c) {
+ for (var d = 0, e = b.length; e > d; d++)db(a, b[d], c);
+ return c
+ }
+
+ function xb(a, b, e, f) {
+ var h, i, j, k, l, m = ob(a);
+ if (!f && 1 === m.length) {
+ if (i = m[0] = m[0].slice(0), i.length > 2 && "ID" === (j = i[0]).type && c.getById && 9 === b.nodeType && n && d.relative[i[1].type]) {
+ if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b)return e;
+ a = a.slice(i.shift().value.length)
+ }
+ h = V.needsContext.test(a) ? 0 : i.length;
+ while (h--) {
+ if (j = i[h], d.relative[k = j.type])break;
+ if ((l = d.find[k]) && (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) && mb(b.parentNode) || b))) {
+ if (i.splice(h, 1), a = f.length && pb(i), !a)return G.apply(e, f), e;
+ break
+ }
+ }
+ }
+ return g(a, m)(f, b, !n, e, $.test(a) && mb(b.parentNode) || b), e
+ }
+
+ return c.sortStable = s.split("").sort(z).join("") === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function (a) {
+ return 1 & a.compareDocumentPosition(l.createElement("div"))
+ }), gb(function (a) {
+ return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
+ }) || hb("type|href|height|width", function (a, b, c) {
+ return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
+ }), c.attributes && gb(function (a) {
+ return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
+ }) || hb("value", function (a, b, c) {
+ return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
+ }), gb(function (a) {
+ return null == a.getAttribute("disabled")
+ }) || hb(J, function (a, b, c) {
+ var d;
+ return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
+ }), db
+ }(a);
+ n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
+ var u = n.expr.match.needsContext, v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, w = /^.[^:#\[\.,]*$/;
+
+ function x(a, b, c) {
+ if (n.isFunction(b))return n.grep(a, function (a, d) {
+ return !!b.call(a, d, a) !== c
+ });
+ if (b.nodeType)return n.grep(a, function (a) {
+ return a === b !== c
+ });
+ if ("string" == typeof b) {
+ if (w.test(b))return n.filter(b, a, c);
+ b = n.filter(b, a)
+ }
+ return n.grep(a, function (a) {
+ return n.inArray(a, b) >= 0 !== c
+ })
+ }
+
+ n.filter = function (a, b, c) {
+ var d = b[0];
+ return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function (a) {
+ return 1 === a.nodeType
+ }))
+ }, n.fn.extend({
+ find: function (a) {
+ var b, c = [], d = this, e = d.length;
+ if ("string" != typeof a)return this.pushStack(n(a).filter(function () {
+ for (b = 0; e > b; b++)if (n.contains(d[b], this))return !0
+ }));
+ for (b = 0; e > b; b++)n.find(a, d[b], c);
+ return c = this.pushStack(e > 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c
+ }, filter: function (a) {
+ return this.pushStack(x(this, a || [], !1))
+ }, not: function (a) {
+ return this.pushStack(x(this, a || [], !0))
+ }, is: function (a) {
+ return !!x(this, "string" == typeof a && u.test(a) ? n(a) : a || [], !1).length
+ }
+ });
+ var y, z = a.document, A = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, B = n.fn.init = function (a, b) {
+ var c, d;
+ if (!a)return this;
+ if ("string" == typeof a) {
+ if (c = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : A.exec(a), !c || !c[1] && b)return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a);
+ if (c[1]) {
+ if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : z, !0)), v.test(c[1]) && n.isPlainObject(b))for (c in b)n.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
+ return this
+ }
+ if (d = z.getElementById(c[2]), d && d.parentNode) {
+ if (d.id !== c[2])return y.find(a);
+ this.length = 1, this[0] = d
+ }
+ return this.context = z, this.selector = a, this
+ }
+ return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof y.ready ? y.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this))
+ };
+ B.prototype = n.fn, y = n(z);
+ var C = /^(?:parents|prev(?:Until|All))/, D = {children: !0, contents: !0, next: !0, prev: !0};
+ n.extend({
+ dir: function (a, b, c) {
+ var d = [], e = a[b];
+ while (e && 9 !== e.nodeType && (void 0 === c || 1 !== e.nodeType || !n(e).is(c)))1 === e.nodeType && d.push(e), e = e[b];
+ return d
+ }, sibling: function (a, b) {
+ for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a);
+ return c
+ }
+ }), n.fn.extend({
+ has: function (a) {
+ var b, c = n(a, this), d = c.length;
+ return this.filter(function () {
+ for (b = 0; d > b; b++)if (n.contains(this, c[b]))return !0
+ })
+ }, closest: function (a, b) {
+ for (var c, d = 0, e = this.length, f = [], g = u.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) {
+ f.push(c);
+ break
+ }
+ return this.pushStack(f.length > 1 ? n.unique(f) : f)
+ }, index: function (a) {
+ return a ? "string" == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+ }, add: function (a, b) {
+ return this.pushStack(n.unique(n.merge(this.get(), n(a, b))))
+ }, addBack: function (a) {
+ return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
+ }
+ });
+ function E(a, b) {
+ do a = a[b]; while (a && 1 !== a.nodeType);
+ return a
+ }
+
+ n.each({
+ parent: function (a) {
+ var b = a.parentNode;
+ return b && 11 !== b.nodeType ? b : null
+ }, parents: function (a) {
+ return n.dir(a, "parentNode")
+ }, parentsUntil: function (a, b, c) {
+ return n.dir(a, "parentNode", c)
+ }, next: function (a) {
+ return E(a, "nextSibling")
+ }, prev: function (a) {
+ return E(a, "previousSibling")
+ }, nextAll: function (a) {
+ return n.dir(a, "nextSibling")
+ }, prevAll: function (a) {
+ return n.dir(a, "previousSibling")
+ }, nextUntil: function (a, b, c) {
+ return n.dir(a, "nextSibling", c)
+ }, prevUntil: function (a, b, c) {
+ return n.dir(a, "previousSibling", c)
+ }, siblings: function (a) {
+ return n.sibling((a.parentNode || {}).firstChild, a)
+ }, children: function (a) {
+ return n.sibling(a.firstChild)
+ }, contents: function (a) {
+ return n.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes)
+ }
+ }, function (a, b) {
+ n.fn[a] = function (c, d) {
+ var e = n.map(this, b, c);
+ return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (D[a] || (e = n.unique(e)), C.test(a) && (e = e.reverse())), this.pushStack(e)
+ }
+ });
+ var F = /\S+/g, G = {};
+
+ function H(a) {
+ var b = G[a] = {};
+ return n.each(a.match(F) || [], function (a, c) {
+ b[c] = !0
+ }), b
+ }
+
+ n.Callbacks = function (a) {
+ a = "string" == typeof a ? G[a] || H(a) : n.extend({}, a);
+ var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) {
+ for (c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h && e > f; f++)if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) {
+ c = !1;
+ break
+ }
+ b = !1, h && (i ? i.length && j(i.shift()) : c ? h = [] : k.disable())
+ }, k = {
+ add: function () {
+ if (h) {
+ var d = h.length;
+ !function f(b) {
+ n.each(b, function (b, c) {
+ var d = n.type(c);
+ "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && f(c)
+ })
+ }(arguments), b ? e = h.length : c && (g = d, j(c))
+ }
+ return this
+ }, remove: function () {
+ return h && n.each(arguments, function (a, c) {
+ var d;
+ while ((d = n.inArray(c, h, d)) > -1)h.splice(d, 1), b && (e >= d && e--, f >= d && f--)
+ }), this
+ }, has: function (a) {
+ return a ? n.inArray(a, h) > -1 : !(!h || !h.length)
+ }, empty: function () {
+ return h = [], e = 0, this
+ }, disable: function () {
+ return h = i = c = void 0, this
+ }, disabled: function () {
+ return !h
+ }, lock: function () {
+ return i = void 0, c || k.disable(), this
+ }, locked: function () {
+ return !i
+ }, fireWith: function (a, c) {
+ return !h || d && !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this
+ }, fire: function () {
+ return k.fireWith(this, arguments), this
+ }, fired: function () {
+ return !!d
+ }
+ };
+ return k
+ }, n.extend({
+ Deferred: function (a) {
+ var b = [["resolve", "done", n.Callbacks("once memory"), "resolved"], ["reject", "fail", n.Callbacks("once memory"), "rejected"], ["notify", "progress", n.Callbacks("memory")]], c = "pending", d = {
+ state: function () {
+ return c
+ }, always: function () {
+ return e.done(arguments).fail(arguments), this
+ }, then: function () {
+ var a = arguments;
+ return n.Deferred(function (c) {
+ n.each(b, function (b, f) {
+ var g = n.isFunction(a[b]) && a[b];
+ e[f[1]](function () {
+ var a = g && g.apply(this, arguments);
+ a && n.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
+ })
+ }), a = null
+ }).promise()
+ }, promise: function (a) {
+ return null != a ? n.extend(a, d) : d
+ }
+ }, e = {};
+ return d.pipe = d.then, n.each(b, function (a, f) {
+ var g = f[2], h = f[3];
+ d[f[1]] = g.add, h && g.add(function () {
+ c = h
+ }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
+ return e[f[0] + "With"](this === e ? d : this, arguments), this
+ }, e[f[0] + "With"] = g.fireWith
+ }), d.promise(e), a && a.call(e, e), e
+ }, when: function (a) {
+ var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && n.isFunction(a.promise) ? e : 0, g = 1 === f ? a : n.Deferred(), h = function (a, b, c) {
+ return function (e) {
+ b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
+ }
+ }, i, j, k;
+ if (e > 1)for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && n.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
+ return f || g.resolveWith(k, c), g.promise()
+ }
+ });
+ var I;
+ n.fn.ready = function (a) {
+ return n.ready.promise().done(a), this
+ }, n.extend({
+ isReady: !1, readyWait: 1, holdReady: function (a) {
+ a ? n.readyWait++ : n.ready(!0)
+ }, ready: function (a) {
+ if (a === !0 ? !--n.readyWait : !n.isReady) {
+ if (!z.body)return setTimeout(n.ready);
+ n.isReady = !0, a !== !0 && --n.readyWait > 0 || (I.resolveWith(z, [n]), n.fn.trigger && n(z).trigger("ready").off("ready"))
+ }
+ }
+ });
+ function J() {
+ z.addEventListener ? (z.removeEventListener("DOMContentLoaded", K, !1), a.removeEventListener("load", K, !1)) : (z.detachEvent("onreadystatechange", K), a.detachEvent("onload", K))
+ }
+
+ function K() {
+ (z.addEventListener || "load" === event.type || "complete" === z.readyState) && (J(), n.ready())
+ }
+
+ n.ready.promise = function (b) {
+ if (!I)if (I = n.Deferred(), "complete" === z.readyState)setTimeout(n.ready); else if (z.addEventListener)z.addEventListener("DOMContentLoaded", K, !1), a.addEventListener("load", K, !1); else {
+ z.attachEvent("onreadystatechange", K), a.attachEvent("onload", K);
+ var c = !1;
+ try {
+ c = null == a.frameElement && z.documentElement
+ } catch (d) {
+ }
+ c && c.doScroll && !function e() {
+ if (!n.isReady) {
+ try {
+ c.doScroll("left")
+ } catch (a) {
+ return setTimeout(e, 50)
+ }
+ J(), n.ready()
+ }
+ }()
+ }
+ return I.promise(b)
+ };
+ var L = "undefined", M;
+ for (M in n(l))break;
+ l.ownLast = "0" !== M, l.inlineBlockNeedsLayout = !1, n(function () {
+ var a, b, c = z.getElementsByTagName("body")[0];
+ c && (a = z.createElement("div"), a.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", b = z.createElement("div"), c.appendChild(a).appendChild(b), typeof b.style.zoom !== L && (b.style.cssText = "border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1", (l.inlineBlockNeedsLayout = 3 === b.offsetWidth) && (c.style.zoom = 1)), c.removeChild(a), a = b = null)
+ }), function () {
+ var a = z.createElement("div");
+ if (null == l.deleteExpando) {
+ l.deleteExpando = !0;
+ try {
+ delete a.test
+ } catch (b) {
+ l.deleteExpando = !1
+ }
+ }
+ a = null
+ }(), n.acceptData = function (a) {
+ var b = n.noData[(a.nodeName + " ").toLowerCase()], c = +a.nodeType || 1;
+ return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b
+ };
+ var N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, O = /([A-Z])/g;
+
+ function P(a, b, c) {
+ if (void 0 === c && 1 === a.nodeType) {
+ var d = "data-" + b.replace(O, "-$1").toLowerCase();
+ if (c = a.getAttribute(d), "string" == typeof c) {
+ try {
+ c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c
+ } catch (e) {
+ }
+ n.data(a, b, c)
+ } else c = void 0
+ }
+ return c
+ }
+
+ function Q(a) {
+ var b;
+ for (b in a)if (("data" !== b || !n.isEmptyObject(a[b])) && "toJSON" !== b)return !1;
+ return !0
+ }
+
+ function R(a, b, d, e) {
+ if (n.acceptData(a)) {
+ var f, g, h = n.expando, i = a.nodeType, j = i ? n.cache : a, k = i ? a[h] : a[h] && h;
+ if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b)return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : {toJSON: n.noop}), ("object" == typeof b || "function" == typeof b) && (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[n.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[n.camelCase(b)])) : f = g, f
+ }
+ }
+
+ function S(a, b, c) {
+ if (n.acceptData(a)) {
+ var d, e, f = a.nodeType, g = f ? n.cache : a, h = f ? a[n.expando] : n.expando;
+ if (g[h]) {
+ if (b && (d = c ? g[h] : g[h].data)) {
+ n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
+ while (e--)delete d[b[e]];
+ if (c ? !Q(d) : !n.isEmptyObject(d))return
+ }
+ (c || (delete g[h].data, Q(g[h]))) && (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = null)
+ }
+ }
+ }
+
+ n.extend({
+ cache: {},
+ noData: {"applet ": !0, "embed ": !0, "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},
+ hasData: function (a) {
+ return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a && !Q(a)
+ },
+ data: function (a, b, c) {
+ return R(a, b, c)
+ },
+ removeData: function (a, b) {
+ return S(a, b)
+ },
+ _data: function (a, b, c) {
+ return R(a, b, c, !0)
+ },
+ _removeData: function (a, b) {
+ return S(a, b, !0)
+ }
+ }), n.fn.extend({
+ data: function (a, b) {
+ var c, d, e, f = this[0], g = f && f.attributes;
+ if (void 0 === a) {
+ if (this.length && (e = n.data(f), 1 === f.nodeType && !n._data(f, "parsedAttrs"))) {
+ c = g.length;
+ while (c--)d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d]));
+ n._data(f, "parsedAttrs", !0)
+ }
+ return e
+ }
+ return "object" == typeof a ? this.each(function () {
+ n.data(this, a)
+ }) : arguments.length > 1 ? this.each(function () {
+ n.data(this, a, b)
+ }) : f ? P(f, a, n.data(f, a)) : void 0
+ }, removeData: function (a) {
+ return this.each(function () {
+ n.removeData(this, a)
+ })
+ }
+ }), n.extend({
+ queue: function (a, b, c) {
+ var d;
+ return a ? (b = (b || "fx") + "queue", d = n._data(a, b), c && (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0
+ }, dequeue: function (a, b) {
+ b = b || "fx";
+ var c = n.queue(a, b), d = c.length, e = c.shift(), f = n._queueHooks(a, b), g = function () {
+ n.dequeue(a, b)
+ };
+ "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
+ }, _queueHooks: function (a, b) {
+ var c = b + "queueHooks";
+ return n._data(a, c) || n._data(a, c, {
+ empty: n.Callbacks("once memory").add(function () {
+ n._removeData(a, b + "queue"), n._removeData(a, c)
+ })
+ })
+ }
+ }), n.fn.extend({
+ queue: function (a, b) {
+ var c = 2;
+ return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function () {
+ var c = n.queue(this, a, b);
+ n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a)
+ })
+ }, dequeue: function (a) {
+ return this.each(function () {
+ n.dequeue(this, a)
+ })
+ }, clearQueue: function (a) {
+ return this.queue(a || "fx", [])
+ }, promise: function (a, b) {
+ var c, d = 1, e = n.Deferred(), f = this, g = this.length, h = function () {
+ --d || e.resolveWith(f, [f])
+ };
+ "string" != typeof a && (b = a, a = void 0), a = a || "fx";
+ while (g--)c = n._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
+ return h(), e.promise(b)
+ }
+ });
+ var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, U = ["Top", "Right", "Bottom", "Left"], V = function (a, b) {
+ return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a)
+ }, W = n.access = function (a, b, c, d, e, f, g) {
+ var h = 0, i = a.length, j = null == c;
+ if ("object" === n.type(c)) {
+ e = !0;
+ for (h in c)n.access(a, b, h, c[h], !0, f, g)
+ } else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) {
+ return j.call(n(a), c)
+ })), b))for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
+ return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
+ }, X = /^(?:checkbox|radio)$/i;
+ !function () {
+ var a = z.createDocumentFragment(), b = z.createElement("div"), c = z.createElement("input");
+ if (b.setAttribute("className", "t"), b.innerHTML = " <link/><table></table><a href='/a'>a</a>", l.leadingWhitespace = 3 === b.firstChild.nodeType, l.tbody = !b.getElementsByTagName("tbody").length, l.htmlSerialize = !!b.getElementsByTagName("link").length, l.html5Clone = "<:nav></:nav>" !== z.createElement("nav").cloneNode(!0).outerHTML, c.type = "checkbox", c.checked = !0, a.appendChild(c), l.appendChecked = c.checked, b.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, a.appendChild(b), b.innerHTML = "<input type='radio' checked='checked' name='t'/>", l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !0, b.attachEvent && (b.attachEvent("onclick", function () {
+ l.noCloneEvent = !1
+ }), b.cloneNode(!0).click()), null == l.deleteExpando) {
+ l.deleteExpando = !0;
+ try {
+ delete b.test
+ } catch (d) {
+ l.deleteExpando = !1
+ }
+ }
+ a = b = c = null
+ }(), function () {
+ var b, c, d = z.createElement("div");
+ for (b in{
+ submit: !0,
+ change: !0,
+ focusin: !0
+ })c = "on" + b, (l[b + "Bubbles"] = c in a) || (d.setAttribute(c, "t"), l[b + "Bubbles"] = d.attributes[c].expando === !1);
+ d = null
+ }();
+ var Y = /^(?:input|select|textarea)$/i, Z = /^key/, $ = /^(?:mouse|contextmenu)|click/, _ = /^(?:focusinfocus|focusoutblur)$/, ab = /^([^.]*)(?:\.(.+)|)$/;
+
+ function bb() {
+ return !0
+ }
+
+ function cb() {
+ return !1
+ }
+
+ function db() {
+ try {
+ return z.activeElement
+ } catch (a) {
+ }
+ }
+
+ n.event = {
+ global: {},
+ add: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = n._data(a);
+ if (r) {
+ c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) {
+ return typeof n === L || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
+ }, k.elem = a), b = (b || "").match(F) || [""], h = b.length;
+ while (h--)f = ab.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({
+ type: o,
+ origType: q,
+ data: d,
+ handler: c,
+ guid: c.guid,
+ selector: e,
+ needsContext: e && n.expr.match.needsContext.test(e),
+ namespace: p.join(".")
+ }, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0);
+ a = null
+ }
+ },
+ remove: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = n.hasData(a) && n._data(a);
+ if (r && (k = r.events)) {
+ b = (b || "").match(F) || [""], j = b.length;
+ while (j--)if (h = ab.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
+ l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length;
+ while (f--)g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
+ i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o])
+ } else for (o in k)n.event.remove(a, o + b[j], c, d, !0);
+ n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events"))
+ }
+ },
+ trigger: function (b, c, d, e) {
+ var f, g, h, i, k, l, m, o = [d || z], p = j.call(b, "type") ? b.type : b, q = j.call(b, "namespace") ? b.namespace.split(".") : [];
+ if (h = l = d = d || z, 3 !== d.nodeType && 8 !== d.nodeType && !_.test(p + n.event.triggered) && (p.indexOf(".") >= 0 && (q = p.split("."), p = q.shift(), q.sort()), g = p.indexOf(":") < 0 && "on" + p, b = b[n.expando] ? b : new n.Event(p, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = q.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + q.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : n.makeArray(c, [b]), k = n.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) {
+ if (!e && !k.noBubble && !n.isWindow(d)) {
+ for (i = k.delegateType || p, _.test(i + p) || (h = h.parentNode); h; h = h.parentNode)o.push(h), l = h;
+ l === (d.ownerDocument || z) && o.push(l.defaultView || l.parentWindow || a)
+ }
+ m = 0;
+ while ((h = o[m++]) && !b.isPropagationStopped())b.type = m > 1 ? i : k.bindType || p, f = (n._data(h, "events") || {})[b.type] && n._data(h, "handle"), f && f.apply(h, c), f = g && h[g], f && f.apply && n.acceptData(h) && (b.result = f.apply(h, c), b.result === !1 && b.preventDefault());
+ if (b.type = p, !e && !b.isDefaultPrevented() && (!k._default || k._default.apply(o.pop(), c) === !1) && n.acceptData(d) && g && d[p] && !n.isWindow(d)) {
+ l = d[g], l && (d[g] = null), n.event.triggered = p;
+ try {
+ d[p]()
+ } catch (r) {
+ }
+ n.event.triggered = void 0, l && (d[g] = l)
+ }
+ return b.result
+ }
+ },
+ dispatch: function (a) {
+ a = n.event.fix(a);
+ var b, c, e, f, g, h = [], i = d.call(arguments), j = (n._data(this, "events") || {})[a.type] || [], k = n.event.special[a.type] || {};
+ if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
+ h = n.event.handlers.call(this, a, j), b = 0;
+ while ((f = h[b++]) && !a.isPropagationStopped()) {
+ a.currentTarget = f.elem, g = 0;
+ while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, c = ((n.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c && (a.result = c) === !1 && (a.preventDefault(), a.stopPropagation()))
+ }
+ return k.postDispatch && k.postDispatch.call(this, a), a.result
+ }
+ },
+ handlers: function (a, b) {
+ var c, d, e, f, g = [], h = b.delegateCount, i = a.target;
+ if (h && i.nodeType && (!a.button || "click" !== a.type))for (; i != this; i = i.parentNode || this)if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) {
+ for (e = [], f = 0; h > f; f++)d = b[f], c = d.selector + " ", void 0 === e[c] && (e[c] = d.needsContext ? n(c, this).index(i) >= 0 : n.find(c, this, null, [i]).length), e[c] && e.push(d);
+ e.length && g.push({elem: i, handlers: e})
+ }
+ return h < b.length && g.push({elem: this, handlers: b.slice(h)}), g
+ },
+ fix: function (a) {
+ if (a[n.expando])return a;
+ var b, c, d, e = a.type, f = a, g = this.fixHooks[e];
+ g || (this.fixHooks[e] = g = $.test(e) ? this.mouseHooks : Z.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new n.Event(f), b = d.length;
+ while (b--)c = d[b], a[c] = f[c];
+ return a.target || (a.target = f.srcElement || z), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
+ },
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+ fixHooks: {},
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "), filter: function (a, b) {
+ return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
+ }
+ },
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (a, b) {
+ var c, d, e, f = b.button, g = b.fromElement;
+ return null == a.pageX && null != b.clientX && (d = a.target.ownerDocument || z, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e && e.scrollLeft || c && c.scrollLeft || 0) - (e && e.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (e && e.scrollTop || c && c.scrollTop || 0) - (e && e.clientTop || c && c.clientTop || 0)), !a.relatedTarget && g && (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
+ }
+ },
+ special: {
+ load: {noBubble: !0}, focus: {
+ trigger: function () {
+ if (this !== db() && this.focus)try {
+ return this.focus(), !1
+ } catch (a) {
+ }
+ }, delegateType: "focusin"
+ }, blur: {
+ trigger: function () {
+ return this === db() && this.blur ? (this.blur(), !1) : void 0
+ }, delegateType: "focusout"
+ }, click: {
+ trigger: function () {
+ return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
+ }, _default: function (a) {
+ return n.nodeName(a.target, "a")
+ }
+ }, beforeunload: {
+ postDispatch: function (a) {
+ void 0 !== a.result && (a.originalEvent.returnValue = a.result)
+ }
+ }
+ },
+ simulate: function (a, b, c, d) {
+ var e = n.extend(new n.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
+ d ? n.event.trigger(e, null, b) : n.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
+ }
+ }, n.removeEvent = z.removeEventListener ? function (a, b, c) {
+ a.removeEventListener && a.removeEventListener(b, c, !1)
+ } : function (a, b, c) {
+ var d = "on" + b;
+ a.detachEvent && (typeof a[d] === L && (a[d] = null), a.detachEvent(d, c))
+ }, n.Event = function (a, b) {
+ return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && (a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault()) ? bb : cb) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b)
+ }, n.Event.prototype = {
+ isDefaultPrevented: cb,
+ isPropagationStopped: cb,
+ isImmediatePropagationStopped: cb,
+ preventDefault: function () {
+ var a = this.originalEvent;
+ this.isDefaultPrevented = bb, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
+ },
+ stopPropagation: function () {
+ var a = this.originalEvent;
+ this.isPropagationStopped = bb, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
+ },
+ stopImmediatePropagation: function () {
+ this.isImmediatePropagationStopped = bb, this.stopPropagation()
+ }
+ }, n.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) {
+ n.event.special[a] = {
+ delegateType: b, bindType: b, handle: function (a) {
+ var c, d = this, e = a.relatedTarget, f = a.handleObj;
+ return (!e || e !== d && !n.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
+ }
+ }
+ }), l.submitBubbles || (n.event.special.submit = {
+ setup: function () {
+ return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function (a) {
+ var b = a.target, c = n.nodeName(b, "input") || n.nodeName(b, "button") ? b.form : void 0;
+ c && !n._data(c, "submitBubbles") && (n.event.add(c, "submit._submit", function (a) {
+ a._submit_bubble = !0
+ }), n._data(c, "submitBubbles", !0))
+ })
+ }, postDispatch: function (a) {
+ a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a, !0))
+ }, teardown: function () {
+ return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit")
+ }
+ }), l.changeBubbles || (n.event.special.change = {
+ setup: function () {
+ return Y.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (n.event.add(this, "propertychange._change", function (a) {
+ "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
+ }), n.event.add(this, "click._change", function (a) {
+ this._just_changed && !a.isTrigger && (this._just_changed = !1), n.event.simulate("change", this, a, !0)
+ })), !1) : void n.event.add(this, "beforeactivate._change", function (a) {
+ var b = a.target;
+ Y.test(b.nodeName) && !n._data(b, "changeBubbles") && (n.event.add(b, "change._change", function (a) {
+ !this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a, !0)
+ }), n._data(b, "changeBubbles", !0))
+ })
+ }, handle: function (a) {
+ var b = a.target;
+ return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
+ }, teardown: function () {
+ return n.event.remove(this, "._change"), !Y.test(this.nodeName)
+ }
+ }), l.focusinBubbles || n.each({focus: "focusin", blur: "focusout"}, function (a, b) {
+ var c = function (a) {
+ n.event.simulate(b, a.target, n.event.fix(a), !0)
+ };
+ n.event.special[b] = {
+ setup: function () {
+ var d = this.ownerDocument || this, e = n._data(d, b);
+ e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1)
+ }, teardown: function () {
+ var d = this.ownerDocument || this, e = n._data(d, b) - 1;
+ e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b))
+ }
+ }
+ }), n.fn.extend({
+ on: function (a, b, c, d, e) {
+ var f, g;
+ if ("object" == typeof a) {
+ "string" != typeof b && (c = c || b, b = void 0);
+ for (f in a)this.on(f, b, c, a[f], e);
+ return this
+ }
+ if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1)d = cb; else if (!d)return this;
+ return 1 === e && (g = d, d = function (a) {
+ return n().off(a), g.apply(this, arguments)
+ }, d.guid = g.guid || (g.guid = n.guid++)), this.each(function () {
+ n.event.add(this, a, d, c, b)
+ })
+ }, one: function (a, b, c, d) {
+ return this.on(a, b, c, d, 1)
+ }, off: function (a, b, c) {
+ var d, e;
+ if (a && a.preventDefault && a.handleObj)return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
+ if ("object" == typeof a) {
+ for (e in a)this.off(e, b, a[e]);
+ return this
+ }
+ return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = cb), this.each(function () {
+ n.event.remove(this, a, c, b)
+ })
+ }, trigger: function (a, b) {
+ return this.each(function () {
+ n.event.trigger(a, b, this)
+ })
+ }, triggerHandler: function (a, b) {
+ var c = this[0];
+ return c ? n.event.trigger(a, b, c, !0) : void 0
+ }
+ });
+ function eb(a) {
+ var b = fb.split("|"), c = a.createDocumentFragment();
+ if (c.createElement)while (b.length)c.createElement(b.pop());
+ return c
+ }
+
+ var fb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", gb = / jQuery\d+="(?:null|\d+)"/g, hb = new RegExp("<(?:" + fb + ")[\\s/>]", "i"), ib = /^\s+/, jb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, kb = /<([\w:]+)/, lb = /<tbody/i, mb = /<|&#?\w+;/, nb = /<(?:script|style|link)/i, ob = /checked\s*(?:[^=]|=\s*.checked.)/i, pb = /^$|\/(?:java|ecma)script/i, qb = /^true\/(.*)/, rb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, sb = {
+ option: [1, "<select multiple='multiple'>", "</select>"],
+ legend: [1, "<fieldset>", "</fieldset>"],
+ area: [1, "<map>", "</map>"],
+ param: [1, "<object>", "</object>"],
+ thead: [1, "<table>", "</table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+ _default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
+ }, tb = eb(z), ub = tb.appendChild(z.createElement("div"));
+ sb.optgroup = sb.option, sb.tbody = sb.tfoot = sb.colgroup = sb.caption = sb.thead, sb.th = sb.td;
+ function vb(a, b) {
+ var c, d, e = 0, f = typeof a.getElementsByTagName !== L ? a.getElementsByTagName(b || "*") : typeof a.querySelectorAll !== L ? a.querySelectorAll(b || "*") : void 0;
+ if (!f)for (f = [], c = a.childNodes || a; null != (d = c[e]); e++)!b || n.nodeName(d, b) ? f.push(d) : n.merge(f, vb(d, b));
+ return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f
+ }
+
+ function wb(a) {
+ X.test(a.type) && (a.defaultChecked = a.checked)
+ }
+
+ function xb(a, b) {
+ return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
+ }
+
+ function yb(a) {
+ return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a
+ }
+
+ function zb(a) {
+ var b = qb.exec(a.type);
+ return b ? a.type = b[1] : a.removeAttribute("type"), a
+ }
+
+ function Ab(a, b) {
+ for (var c, d = 0; null != (c = a[d]); d++)n._data(c, "globalEval", !b || n._data(b[d], "globalEval"))
+ }
+
+ function Bb(a, b) {
+ if (1 === b.nodeType && n.hasData(a)) {
+ var c, d, e, f = n._data(a), g = n._data(b, f), h = f.events;
+ if (h) {
+ delete g.handle, g.events = {};
+ for (c in h)for (d = 0, e = h[c].length; e > d; d++)n.event.add(b, c, h[c][d])
+ }
+ g.data && (g.data = n.extend({}, g.data))
+ }
+ }
+
+ function Cb(a, b) {
+ var c, d, e;
+ if (1 === b.nodeType) {
+ if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) {
+ e = n._data(b);
+ for (d in e.events)n.removeEvent(b, d, e.handle);
+ b.removeAttribute(n.expando)
+ }
+ "script" === c && b.text !== a.text ? (yb(b).text = a.text, zb(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && X.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
+ }
+ }
+
+ n.extend({
+ clone: function (a, b, c) {
+ var d, e, f, g, h, i = n.contains(a.ownerDocument, a);
+ if (l.html5Clone || n.isXMLDoc(a) || !hb.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (ub.innerHTML = a.outerHTML, ub.removeChild(f = ub.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a)))for (d = vb(f), h = vb(a), g = 0; null != (e = h[g]); ++g)d[g] && Cb(e, d[g]);
+ if (b)if (c)for (h = h || vb(a), d = d || vb(f), g = 0; null != (e = h[g]); g++)Bb(e, d[g]); else Bb(a, f);
+ return d = vb(f, "script"), d.length > 0 && Ab(d, !i && vb(a, "script")), d = h = e = null, f
+ }, buildFragment: function (a, b, c, d) {
+ for (var e, f, g, h, i, j, k, m = a.length, o = eb(b), p = [], q = 0; m > q; q++)if (f = a[q], f || 0 === f)if ("object" === n.type(f))n.merge(p, f.nodeType ? [f] : f); else if (mb.test(f)) {
+ h = h || o.appendChild(b.createElement("div")), i = (kb.exec(f) || ["", ""])[1].toLowerCase(), k = sb[i] || sb._default, h.innerHTML = k[1] + f.replace(jb, "<$1></$2>") + k[2], e = k[0];
+ while (e--)h = h.lastChild;
+ if (!l.leadingWhitespace && ib.test(f) && p.push(b.createTextNode(ib.exec(f)[0])), !l.tbody) {
+ f = "table" !== i || lb.test(f) ? "<table>" !== k[1] || lb.test(f) ? 0 : h : h.firstChild, e = f && f.childNodes.length;
+ while (e--)n.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j)
+ }
+ n.merge(p, h.childNodes), h.textContent = "";
+ while (h.firstChild)h.removeChild(h.firstChild);
+ h = o.lastChild
+ } else p.push(b.createTextNode(f));
+ h && o.removeChild(h), l.appendChecked || n.grep(vb(p, "input"), wb), q = 0;
+ while (f = p[q++])if ((!d || -1 === n.inArray(f, d)) && (g = n.contains(f.ownerDocument, f), h = vb(o.appendChild(f), "script"), g && Ab(h), c)) {
+ e = 0;
+ while (f = h[e++])pb.test(f.type || "") && c.push(f)
+ }
+ return h = null, o
+ }, cleanData: function (a, b) {
+ for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.deleteExpando, m = n.event.special; null != (d = a[h]); h++)if ((b || n.acceptData(d)) && (f = d[i], g = f && j[f])) {
+ if (g.events)for (e in g.events)m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle);
+ j[f] && (delete j[f], k ? delete d[i] : typeof d.removeAttribute !== L ? d.removeAttribute(i) : d[i] = null, c.push(f))
+ }
+ }
+ }), n.fn.extend({
+ text: function (a) {
+ return W(this, function (a) {
+ return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || z).createTextNode(a))
+ }, null, a, arguments.length)
+ }, append: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = xb(this, a);
+ b.appendChild(a)
+ }
+ })
+ }, prepend: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = xb(this, a);
+ b.insertBefore(a, b.firstChild)
+ }
+ })
+ }, before: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this)
+ })
+ }, after: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
+ })
+ }, remove: function (a, b) {
+ for (var c, d = a ? n.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || n.cleanData(vb(c)), c.parentNode && (b && n.contains(c.ownerDocument, c) && Ab(vb(c, "script")), c.parentNode.removeChild(c));
+ return this
+ }, empty: function () {
+ for (var a, b = 0; null != (a = this[b]); b++) {
+ 1 === a.nodeType && n.cleanData(vb(a, !1));
+ while (a.firstChild)a.removeChild(a.firstChild);
+ a.options && n.nodeName(a, "select") && (a.options.length = 0)
+ }
+ return this
+ }, clone: function (a, b) {
+ return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
+ return n.clone(this, a, b)
+ })
+ }, html: function (a) {
+ return W(this, function (a) {
+ var b = this[0] || {}, c = 0, d = this.length;
+ if (void 0 === a)return 1 === b.nodeType ? b.innerHTML.replace(gb, "") : void 0;
+ if (!("string" != typeof a || nb.test(a) || !l.htmlSerialize && hb.test(a) || !l.leadingWhitespace && ib.test(a) || sb[(kb.exec(a) || ["", ""])[1].toLowerCase()])) {
+ a = a.replace(jb, "<$1></$2>");
+ try {
+ for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (n.cleanData(vb(b, !1)), b.innerHTML = a);
+ b = 0
+ } catch (e) {
+ }
+ }
+ b && this.empty().append(a)
+ }, null, a, arguments.length)
+ }, replaceWith: function () {
+ var a = arguments[0];
+ return this.domManip(arguments, function (b) {
+ a = this.parentNode, n.cleanData(vb(this)), a && a.replaceChild(b, this)
+ }), a && (a.length || a.nodeType) ? this : this.remove()
+ }, detach: function (a) {
+ return this.remove(a, !0)
+ }, domManip: function (a, b) {
+ a = e.apply([], a);
+ var c, d, f, g, h, i, j = 0, k = this.length, m = this, o = k - 1, p = a[0], q = n.isFunction(p);
+ if (q || k > 1 && "string" == typeof p && !l.checkClone && ob.test(p))return this.each(function (c) {
+ var d = m.eq(c);
+ q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
+ });
+ if (k && (i = n.buildFragment(a, this[0].ownerDocument, !1, this), c = i.firstChild, 1 === i.childNodes.length && (i = c), c)) {
+ for (g = n.map(vb(i, "script"), yb), f = g.length; k > j; j++)d = i, j !== o && (d = n.clone(d, !0, !0), f && n.merge(g, vb(d, "script"))), b.call(this[j], d, j);
+ if (f)for (h = g[g.length - 1].ownerDocument, n.map(g, zb), j = 0; f > j; j++)d = g[j], pb.test(d.type || "") && !n._data(d, "globalEval") && n.contains(h, d) && (d.src ? n._evalUrl && n._evalUrl(d.src) : n.globalEval((d.text || d.textContent || d.innerHTML || "").replace(rb, "")));
+ i = c = null
+ }
+ return this
+ }
+ }), n.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (a, b) {
+ n.fn[a] = function (a) {
+ for (var c, d = 0, e = [], g = n(a), h = g.length - 1; h >= d; d++)c = d === h ? this : this.clone(!0), n(g[d])[b](c), f.apply(e, c.get());
+ return this.pushStack(e)
+ }
+ });
+ var Db, Eb = {};
+
+ function Fb(b, c) {
+ var d = n(c.createElement(b)).appendTo(c.body), e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : n.css(d[0], "display");
+ return d.detach(), e
+ }
+
+ function Gb(a) {
+ var b = z, c = Eb[a];
+ return c || (c = Fb(a, b), "none" !== c && c || (Db = (Db || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Db[0].contentWindow || Db[0].contentDocument).document, b.write(), b.close(), c = Fb(a, b), Db.detach()), Eb[a] = c), c
+ }
+
+ !function () {
+ var a, b, c = z.createElement("div"), d = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
+ c.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = c.getElementsByTagName("a")[0], a.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(a.style.opacity), l.cssFloat = !!a.style.cssFloat, c.style.backgroundClip = "content-box", c.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === c.style.backgroundClip, a = c = null, l.shrinkWrapBlocks = function () {
+ var a, c, e, f;
+ if (null == b) {
+ if (a = z.getElementsByTagName("body")[0], !a)return;
+ f = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px", c = z.createElement("div"), e = z.createElement("div"), a.appendChild(c).appendChild(e), b = !1, typeof e.style.zoom !== L && (e.style.cssText = d + ";width:1px;padding:1px;zoom:1", e.innerHTML = "<div></div>", e.firstChild.style.width = "5px", b = 3 !== e.offsetWidth), a.removeChild(c), a = c = e = null
+ }
+ return b
+ }
+ }();
+ var Hb = /^margin/, Ib = new RegExp("^(" + T + ")(?!px)[a-z%]+$", "i"), Jb, Kb, Lb = /^(top|right|bottom|left)$/;
+ a.getComputedStyle ? (Jb = function (a) {
+ return a.ownerDocument.defaultView.getComputedStyle(a, null)
+ }, Kb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Jb(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, c && ("" !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), Ib.test(g) && Hb.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 === g ? g : g + ""
+ }) : z.documentElement.currentStyle && (Jb = function (a) {
+ return a.currentStyle
+ }, Kb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Jb(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Ib.test(g) && !Lb.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto"
+ });
+ function Mb(a, b) {
+ return {
+ get: function () {
+ var c = a();
+ if (null != c)return c ? void delete this.get : (this.get = b).apply(this, arguments)
+ }
+ }
+ }
+
+ !function () {
+ var b, c, d, e, f, g, h = z.createElement("div"), i = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px", j = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
+ h.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", b = h.getElementsByTagName("a")[0], b.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(b.style.opacity), l.cssFloat = !!b.style.cssFloat, h.style.backgroundClip = "content-box", h.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === h.style.backgroundClip, b = h = null, n.extend(l, {
+ reliableHiddenOffsets: function () {
+ if (null != c)return c;
+ var a, b, d, e = z.createElement("div"), f = z.getElementsByTagName("body")[0];
+ if (f)return e.setAttribute("className", "t"), e.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = z.createElement("div"), a.style.cssText = i, f.appendChild(a).appendChild(e), e.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", b = e.getElementsByTagName("td"), b[0].style.cssText = "padding:0;margin:0;border:0;display:none", d = 0 === b[0].offsetHeight, b[0].style.display = "", b[1].style.display = "none", c = d && 0 === b[0].offsetHeight, f.removeChild(a), e = f = null, c
+ }, boxSizing: function () {
+ return null == d && k(), d
+ }, boxSizingReliable: function () {
+ return null == e && k(), e
+ }, pixelPosition: function () {
+ return null == f && k(), f
+ }, reliableMarginRight: function () {
+ var b, c, d, e;
+ if (null == g && a.getComputedStyle) {
+ if (b = z.getElementsByTagName("body")[0], !b)return;
+ c = z.createElement("div"), d = z.createElement("div"), c.style.cssText = i, b.appendChild(c).appendChild(d), e = d.appendChild(z.createElement("div")), e.style.cssText = d.style.cssText = j, e.style.marginRight = e.style.width = "0", d.style.width = "1px", g = !parseFloat((a.getComputedStyle(e, null) || {}).marginRight), b.removeChild(c)
+ }
+ return g
+ }
+ });
+ function k() {
+ var b, c, h = z.getElementsByTagName("body")[0];
+ h && (b = z.createElement("div"), c = z.createElement("div"), b.style.cssText = i, h.appendChild(b).appendChild(c), c.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%", n.swap(h, null != h.style.zoom ? {zoom: 1} : {}, function () {
+ d = 4 === c.offsetWidth
+ }), e = !0, f = !1, g = !0, a.getComputedStyle && (f = "1%" !== (a.getComputedStyle(c, null) || {}).top, e = "4px" === (a.getComputedStyle(c, null) || {width: "4px"}).width), h.removeChild(b), c = h = null)
+ }
+ }(), n.swap = function (a, b, c, d) {
+ var e, f, g = {};
+ for (f in b)g[f] = a.style[f], a.style[f] = b[f];
+ e = c.apply(a, d || []);
+ for (f in b)a.style[f] = g[f];
+ return e
+ };
+ var Nb = /alpha\([^)]*\)/i, Ob = /opacity\s*=\s*([^)]*)/, Pb = /^(none|table(?!-c[ea]).+)/, Qb = new RegExp("^(" + T + ")(.*)$", "i"), Rb = new RegExp("^([+-])=(" + T + ")", "i"), Sb = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }, Tb = {letterSpacing: 0, fontWeight: 400}, Ub = ["Webkit", "O", "Moz", "ms"];
+
+ function Vb(a, b) {
+ if (b in a)return b;
+ var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = Ub.length;
+ while (e--)if (b = Ub[e] + c, b in a)return b;
+ return d
+ }
+
+ function Wb(a, b) {
+ for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++)d = a[g], d.style && (f[g] = n._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && V(d) && (f[g] = n._data(d, "olddisplay", Gb(d.nodeName)))) : f[g] || (e = V(d), (c && "none" !== c || !e) && n._data(d, "olddisplay", e ? c : n.css(d, "display"))));
+ for (g = 0; h > g; g++)d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
+ return a
+ }
+
+ function Xb(a, b, c) {
+ var d = Qb.exec(b);
+ return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
+ }
+
+ function Yb(a, b, c, d, e) {
+ for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += n.css(a, c + U[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + U[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + U[f] + "Width", !0, e))) : (g += n.css(a, "padding" + U[f], !0, e), "padding" !== c && (g += n.css(a, "border" + U[f] + "Width", !0, e)));
+ return g
+ }
+
+ function Zb(a, b, c) {
+ var d = !0, e = "width" === b ? a.offsetWidth : a.offsetHeight, f = Jb(a), g = l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, f);
+ if (0 >= e || null == e) {
+ if (e = Kb(a, b, f), (0 > e || null == e) && (e = a.style[b]), Ib.test(e))return e;
+ d = g && (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
+ }
+ return e + Yb(a, b, c || (g ? "border" : "content"), d, f) + "px"
+ }
+
+ n.extend({
+ cssHooks: {
+ opacity: {
+ get: function (a, b) {
+ if (b) {
+ var c = Kb(a, "opacity");
+ return "" === c ? "1" : c
+ }
+ }
+ }
+ },
+ cssNumber: {
+ columnCount: !0,
+ fillOpacity: !0,
+ fontWeight: !0,
+ lineHeight: !0,
+ opacity: !0,
+ order: !0,
+ orphans: !0,
+ widows: !0,
+ zIndex: !0,
+ zoom: !0
+ },
+ cssProps: {"float": l.cssFloat ? "cssFloat" : "styleFloat"},
+ style: function (a, b, c, d) {
+ if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
+ var e, f, g, h = n.camelCase(b), i = a.style;
+ if (b = n.cssProps[h] || (n.cssProps[h] = Vb(i, h)), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c)return g && "get"in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
+ if (f = typeof c, "string" === f && (e = Rb.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(n.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || n.cssNumber[h] || (c += "px"), l.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set"in g && void 0 === (c = g.set(a, c, d)))))try {
+ i[b] = "", i[b] = c
+ } catch (j) {
+ }
+ }
+ },
+ css: function (a, b, c, d) {
+ var e, f, g, h = n.camelCase(b);
+ return b = n.cssProps[h] || (n.cssProps[h] = Vb(a.style, h)), g = n.cssHooks[b] || n.cssHooks[h], g && "get"in g && (f = g.get(a, !0, c)), void 0 === f && (f = Kb(a, b, d)), "normal" === f && b in Tb && (f = Tb[b]), "" === c || c ? (e = parseFloat(f), c === !0 || n.isNumeric(e) ? e || 0 : f) : f
+ }
+ }), n.each(["height", "width"], function (a, b) {
+ n.cssHooks[b] = {
+ get: function (a, c, d) {
+ return c ? 0 === a.offsetWidth && Pb.test(n.css(a, "display")) ? n.swap(a, Sb, function () {
+ return Zb(a, b, d)
+ }) : Zb(a, b, d) : void 0
+ }, set: function (a, c, d) {
+ var e = d && Jb(a);
+ return Xb(a, c, d ? Yb(a, b, d, l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, e), e) : 0)
+ }
+ }
+ }), l.opacity || (n.cssHooks.opacity = {
+ get: function (a, b) {
+ return Ob.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
+ }, set: function (a, b) {
+ var c = a.style, d = a.currentStyle, e = n.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "", f = d && d.filter || c.filter || "";
+ c.zoom = 1, (b >= 1 || "" === b) && "" === n.trim(f.replace(Nb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Nb.test(f) ? f.replace(Nb, e) : f + " " + e)
+ }
+ }), n.cssHooks.marginRight = Mb(l.reliableMarginRight, function (a, b) {
+ return b ? n.swap(a, {display: "inline-block"}, Kb, [a, "marginRight"]) : void 0
+ }), n.each({margin: "", padding: "", border: "Width"}, function (a, b) {
+ n.cssHooks[a + b] = {
+ expand: function (c) {
+ for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++)e[a + U[d] + b] = f[d] || f[d - 2] || f[0];
+ return e
+ }
+ }, Hb.test(a) || (n.cssHooks[a + b].set = Xb)
+ }), n.fn.extend({
+ css: function (a, b) {
+ return W(this, function (a, b, c) {
+ var d, e, f = {}, g = 0;
+ if (n.isArray(b)) {
+ for (d = Jb(a), e = b.length; e > g; g++)f[b[g]] = n.css(a, b[g], !1, d);
+ return f
+ }
+ return void 0 !== c ? n.style(a, b, c) : n.css(a, b)
+ }, a, b, arguments.length > 1)
+ }, show: function () {
+ return Wb(this, !0)
+ }, hide: function () {
+ return Wb(this)
+ }, toggle: function (a) {
+ return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
+ V(this) ? n(this).show() : n(this).hide()
+ })
+ }
+ });
+ function $b(a, b, c, d, e) {
+ return new $b.prototype.init(a, b, c, d, e)
+ }
+
+ n.Tween = $b, $b.prototype = {
+ constructor: $b, init: function (a, b, c, d, e, f) {
+ this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px")
+ }, cur: function () {
+ var a = $b.propHooks[this.prop];
+ return a && a.get ? a.get(this) : $b.propHooks._default.get(this)
+ }, run: function (a) {
+ var b, c = $b.propHooks[this.prop];
+ return this.pos = b = this.options.duration ? n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : $b.propHooks._default.set(this), this
+ }
+ }, $b.prototype.init.prototype = $b.prototype, $b.propHooks = {
+ _default: {
+ get: function (a) {
+ var b;
+ return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
+ }, set: function (a) {
+ n.fx.step[a.prop] ? n.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[n.cssProps[a.prop]] || n.cssHooks[a.prop]) ? n.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
+ }
+ }
+ }, $b.propHooks.scrollTop = $b.propHooks.scrollLeft = {
+ set: function (a) {
+ a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
+ }
+ }, n.easing = {
+ linear: function (a) {
+ return a
+ }, swing: function (a) {
+ return .5 - Math.cos(a * Math.PI) / 2
+ }
+ }, n.fx = $b.prototype.init, n.fx.step = {};
+ var _b, ac, bc = /^(?:toggle|show|hide)$/, cc = new RegExp("^(?:([+-])=|)(" + T + ")([a-z%]*)$", "i"), dc = /queueHooks$/, ec = [jc], fc = {
+ "*": [function (a, b) {
+ var c = this.createTween(a, b), d = c.cur(), e = cc.exec(b), f = e && e[3] || (n.cssNumber[a] ? "" : "px"), g = (n.cssNumber[a] || "px" !== f && +d) && cc.exec(n.css(c.elem, a)), h = 1, i = 20;
+ if (g && g[3] !== f) {
+ f = f || g[3], e = e || [], g = +d || 1;
+ do h = h || ".5", g /= h, n.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
+ }
+ return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
+ }]
+ };
+
+ function gc() {
+ return setTimeout(function () {
+ _b = void 0
+ }), _b = n.now()
+ }
+
+ function hc(a, b) {
+ var c, d = {height: a}, e = 0;
+ for (b = b ? 1 : 0; 4 > e; e += 2 - b)c = U[e], d["margin" + c] = d["padding" + c] = a;
+ return b && (d.opacity = d.width = a), d
+ }
+
+ function ic(a, b, c) {
+ for (var d, e = (fc[b] || []).concat(fc["*"]), f = 0, g = e.length; g > f; f++)if (d = e[f].call(c, b, a))return d
+ }
+
+ function jc(a, b, c) {
+ var d, e, f, g, h, i, j, k, m = this, o = {}, p = a.style, q = a.nodeType && V(a), r = n._data(a, "fxshow");
+ c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
+ h.unqueued || i()
+ }), h.unqueued++, m.always(function () {
+ m.always(function () {
+ h.unqueued--, n.queue(a, "fx").length || h.empty.fire()
+ })
+ })), 1 === a.nodeType && ("height"in b || "width"in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, "display"), k = Gb(a.nodeName), "none" === j && (j = k), "inline" === j && "none" === n.css(a, "float") && (l.inlineBlockNeedsLayout && "inline" !== k ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", l.shrinkWrapBlocks() || m.always(function () {
+ p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]
+ }));
+ for (d in b)if (e = b[d], bc.exec(e)) {
+ if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) {
+ if ("show" !== e || !r || void 0 === r[d])continue;
+ q = !0
+ }
+ o[d] = r && r[d] || n.style(a, d)
+ }
+ if (!n.isEmptyObject(o)) {
+ r ? "hidden"in r && (q = r.hidden) : r = n._data(a, "fxshow", {}), f && (r.hidden = !q), q ? n(a).show() : m.done(function () {
+ n(a).hide()
+ }), m.done(function () {
+ var b;
+ n._removeData(a, "fxshow");
+ for (b in o)n.style(a, b, o[b])
+ });
+ for (d in o)g = ic(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
+ }
+ }
+
+ function kc(a, b) {
+ var c, d, e, f, g;
+ for (c in a)if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand"in g) {
+ f = g.expand(f), delete a[d];
+ for (c in f)c in a || (a[c] = f[c], b[c] = e)
+ } else b[d] = e
+ }
+
+ function lc(a, b, c) {
+ var d, e, f = 0, g = ec.length, h = n.Deferred().always(function () {
+ delete i.elem
+ }), i = function () {
+ if (e)return !1;
+ for (var b = _b || gc(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++)j.tweens[g].run(f);
+ return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
+ }, j = h.promise({
+ elem: a,
+ props: n.extend({}, b),
+ opts: n.extend(!0, {specialEasing: {}}, c),
+ originalProperties: b,
+ originalOptions: c,
+ startTime: _b || gc(),
+ duration: c.duration,
+ tweens: [],
+ createTween: function (b, c) {
+ var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
+ return j.tweens.push(d), d
+ },
+ stop: function (b) {
+ var c = 0, d = b ? j.tweens.length : 0;
+ if (e)return this;
+ for (e = !0; d > c; c++)j.tweens[c].run(1);
+ return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
+ }
+ }), k = j.props;
+ for (kc(k, j.opts.specialEasing); g > f; f++)if (d = ec[f].call(j, a, k, j.opts))return d;
+ return n.map(k, ic, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
+ elem: a,
+ anim: j,
+ queue: j.opts.queue
+ })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
+ }
+
+ n.Animation = n.extend(lc, {
+ tweener: function (a, b) {
+ n.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
+ for (var c, d = 0, e = a.length; e > d; d++)c = a[d], fc[c] = fc[c] || [], fc[c].unshift(b)
+ }, prefilter: function (a, b) {
+ b ? ec.unshift(a) : ec.push(a)
+ }
+ }), n.speed = function (a, b, c) {
+ var d = a && "object" == typeof a ? n.extend({}, a) : {
+ complete: c || !c && b || n.isFunction(a) && a,
+ duration: a,
+ easing: c && b || b && !n.isFunction(b) && b
+ };
+ return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function () {
+ n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue)
+ }, d
+ }, n.fn.extend({
+ fadeTo: function (a, b, c, d) {
+ return this.filter(V).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
+ }, animate: function (a, b, c, d) {
+ var e = n.isEmptyObject(a), f = n.speed(b, c, d), g = function () {
+ var b = lc(this, n.extend({}, a), f);
+ (e || n._data(this, "finish")) && b.stop(!0)
+ };
+ return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
+ }, stop: function (a, b, c) {
+ var d = function (a) {
+ var b = a.stop;
+ delete a.stop, b(c)
+ };
+ return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () {
+ var b = !0, e = null != a && a + "queueHooks", f = n.timers, g = n._data(this);
+ if (e)g[e] && g[e].stop && d(g[e]); else for (e in g)g[e] && g[e].stop && dc.test(e) && d(g[e]);
+ for (e = f.length; e--;)f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
+ (b || !c) && n.dequeue(this, a)
+ })
+ }, finish: function (a) {
+ return a !== !1 && (a = a || "fx"), this.each(function () {
+ var b, c = n._data(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = n.timers, g = d ? d.length : 0;
+ for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;)f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
+ for (b = 0; g > b; b++)d[b] && d[b].finish && d[b].finish.call(this);
+ delete c.finish
+ })
+ }
+ }), n.each(["toggle", "show", "hide"], function (a, b) {
+ var c = n.fn[b];
+ n.fn[b] = function (a, d, e) {
+ return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(hc(b, !0), a, d, e)
+ }
+ }), n.each({
+ slideDown: hc("show"),
+ slideUp: hc("hide"),
+ slideToggle: hc("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (a, b) {
+ n.fn[a] = function (a, c, d) {
+ return this.animate(b, a, c, d)
+ }
+ }), n.timers = [], n.fx.tick = function () {
+ var a, b = n.timers, c = 0;
+ for (_b = n.now(); c < b.length; c++)a = b[c], a() || b[c] !== a || b.splice(c--, 1);
+ b.length || n.fx.stop(), _b = void 0
+ }, n.fx.timer = function (a) {
+ n.timers.push(a), a() ? n.fx.start() : n.timers.pop()
+ }, n.fx.interval = 13, n.fx.start = function () {
+ ac || (ac = setInterval(n.fx.tick, n.fx.interval))
+ }, n.fx.stop = function () {
+ clearInterval(ac), ac = null
+ }, n.fx.speeds = {slow: 600, fast: 200, _default: 400}, n.fn.delay = function (a, b) {
+ return a = n.fx ? n.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
+ var d = setTimeout(b, a);
+ c.stop = function () {
+ clearTimeout(d)
+ }
+ })
+ }, function () {
+ var a, b, c, d, e = z.createElement("div");
+ e.setAttribute("className", "t"), e.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = e.getElementsByTagName("a")[0], c = z.createElement("select"), d = c.appendChild(z.createElement("option")), b = e.getElementsByTagName("input")[0], a.style.cssText = "top:1px", l.getSetAttribute = "t" !== e.className, l.style = /top/.test(a.getAttribute("style")), l.hrefNormalized = "/a" === a.getAttribute("href"), l.checkOn = !!b.value, l.optSelected = d.selected, l.enctype = !!z.createElement("form").enctype, c.disabled = !0, l.optDisabled = !d.disabled, b = z.createElement("input"), b.setAttribute("value", ""), l.input = "" === b.getAttribute("value"), b.value = "t", b.setAttribute("type", "radio"), l.radioValue = "t" === b.value, a = b = c = d = e = null
+ }();
+ var mc = /\r/g;
+ n.fn.extend({
+ val: function (a) {
+ var b, c, d, e = this[0];
+ {
+ if (arguments.length)return d = n.isFunction(a), this.each(function (c) {
+ var e;
+ 1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function (a) {
+ return null == a ? "" : a + ""
+ })), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set"in b && void 0 !== b.set(this, e, "value") || (this.value = e))
+ });
+ if (e)return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get"in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(mc, "") : null == c ? "" : c)
+ }
+ }
+ }), n.extend({
+ valHooks: {
+ option: {
+ get: function (a) {
+ var b = n.find.attr(a, "value");
+ return null != b ? b : n.text(a)
+ }
+ }, select: {
+ get: function (a) {
+ for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)if (c = d[i], !(!c.selected && i !== e || (l.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && n.nodeName(c.parentNode, "optgroup"))) {
+ if (b = n(c).val(), f)return b;
+ g.push(b)
+ }
+ return g
+ }, set: function (a, b) {
+ var c, d, e = a.options, f = n.makeArray(b), g = e.length;
+ while (g--)if (d = e[g], n.inArray(n.valHooks.option.get(d), f) >= 0)try {
+ d.selected = c = !0
+ } catch (h) {
+ d.scrollHeight
+ } else d.selected = !1;
+ return c || (a.selectedIndex = -1), e
+ }
+ }
+ }
+ }), n.each(["radio", "checkbox"], function () {
+ n.valHooks[this] = {
+ set: function (a, b) {
+ return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) >= 0 : void 0
+ }
+ }, l.checkOn || (n.valHooks[this].get = function (a) {
+ return null === a.getAttribute("value") ? "on" : a.value
+ })
+ });
+ var nc, oc, pc = n.expr.attrHandle, qc = /^(?:checked|selected)$/i, rc = l.getSetAttribute, sc = l.input;
+ n.fn.extend({
+ attr: function (a, b) {
+ return W(this, n.attr, a, b, arguments.length > 1)
+ }, removeAttr: function (a) {
+ return this.each(function () {
+ n.removeAttr(this, a)
+ })
+ }
+ }), n.extend({
+ attr: function (a, b, c) {
+ var d, e, f = a.nodeType;
+ if (a && 3 !== f && 8 !== f && 2 !== f)return typeof a.getAttribute === L ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), d = n.attrHooks[b] || (n.expr.match.bool.test(b) ? oc : nc)), void 0 === c ? d && "get"in d && null !== (e = d.get(a, b)) ? e : (e = n.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set"in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void n.removeAttr(a, b))
+ }, removeAttr: function (a, b) {
+ var c, d, e = 0, f = b && b.match(F);
+ if (f && 1 === a.nodeType)while (c = f[e++])d = n.propFix[c] || c, n.expr.match.bool.test(c) ? sc && rc || !qc.test(c) ? a[d] = !1 : a[n.camelCase("default-" + c)] = a[d] = !1 : n.attr(a, c, ""), a.removeAttribute(rc ? c : d)
+ }, attrHooks: {
+ type: {
+ set: function (a, b) {
+ if (!l.radioValue && "radio" === b && n.nodeName(a, "input")) {
+ var c = a.value;
+ return a.setAttribute("type", b), c && (a.value = c), b
+ }
+ }
+ }
+ }
+ }), oc = {
+ set: function (a, b, c) {
+ return b === !1 ? n.removeAttr(a, c) : sc && rc || !qc.test(c) ? a.setAttribute(!rc && n.propFix[c] || c, c) : a[n.camelCase("default-" + c)] = a[c] = !0, c
+ }
+ }, n.each(n.expr.match.bool.source.match(/\w+/g), function (a, b) {
+ var c = pc[b] || n.find.attr;
+ pc[b] = sc && rc || !qc.test(b) ? function (a, b, d) {
+ var e, f;
+ return d || (f = pc[b], pc[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, pc[b] = f), e
+ } : function (a, b, c) {
+ return c ? void 0 : a[n.camelCase("default-" + b)] ? b.toLowerCase() : null
+ }
+ }), sc && rc || (n.attrHooks.value = {
+ set: function (a, b, c) {
+ return n.nodeName(a, "input") ? void(a.defaultValue = b) : nc && nc.set(a, b, c)
+ }
+ }), rc || (nc = {
+ set: function (a, b, c) {
+ var d = a.getAttributeNode(c);
+ return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0
+ }
+ }, pc.id = pc.name = pc.coords = function (a, b, c) {
+ var d;
+ return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null
+ }, n.valHooks.button = {
+ get: function (a, b) {
+ var c = a.getAttributeNode(b);
+ return c && c.specified ? c.value : void 0
+ }, set: nc.set
+ }, n.attrHooks.contenteditable = {
+ set: function (a, b, c) {
+ nc.set(a, "" === b ? !1 : b, c)
+ }
+ }, n.each(["width", "height"], function (a, b) {
+ n.attrHooks[b] = {
+ set: function (a, c) {
+ return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
+ }
+ }
+ })), l.style || (n.attrHooks.style = {
+ get: function (a) {
+ return a.style.cssText || void 0
+ }, set: function (a, b) {
+ return a.style.cssText = b + ""
+ }
+ });
+ var tc = /^(?:input|select|textarea|button|object)$/i, uc = /^(?:a|area)$/i;
+ n.fn.extend({
+ prop: function (a, b) {
+ return W(this, n.prop, a, b, arguments.length > 1)
+ }, removeProp: function (a) {
+ return a = n.propFix[a] || a, this.each(function () {
+ try {
+ this[a] = void 0, delete this[a]
+ } catch (b) {
+ }
+ })
+ }
+ }), n.extend({
+ propFix: {"for": "htmlFor", "class": "className"}, prop: function (a, b, c) {
+ var d, e, f, g = a.nodeType;
+ if (a && 3 !== g && 8 !== g && 2 !== g)return f = 1 !== g || !n.isXMLDoc(a), f && (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set"in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get"in e && null !== (d = e.get(a, b)) ? d : a[b]
+ }, propHooks: {
+ tabIndex: {
+ get: function (a) {
+ var b = n.find.attr(a, "tabindex");
+ return b ? parseInt(b, 10) : tc.test(a.nodeName) || uc.test(a.nodeName) && a.href ? 0 : -1
+ }
+ }
+ }
+ }), l.hrefNormalized || n.each(["href", "src"], function (a, b) {
+ n.propHooks[b] = {
+ get: function (a) {
+ return a.getAttribute(b, 4)
+ }
+ }
+ }), l.optSelected || (n.propHooks.selected = {
+ get: function (a) {
+ var b = a.parentNode;
+ return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
+ }
+ }), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
+ n.propFix[this.toLowerCase()] = this
+ }), l.enctype || (n.propFix.enctype = "encoding");
+ var vc = /[\t\r\n\f]/g;
+ n.fn.extend({
+ addClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = "string" == typeof a && a;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).addClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(F) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : " ")) {
+ f = 0;
+ while (e = b[f++])d.indexOf(" " + e + " ") < 0 && (d += e + " ");
+ g = n.trim(d), c.className !== g && (c.className = g)
+ }
+ return this
+ }, removeClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = 0 === arguments.length || "string" == typeof a && a;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).removeClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(F) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : "")) {
+ f = 0;
+ while (e = b[f++])while (d.indexOf(" " + e + " ") >= 0)d = d.replace(" " + e + " ", " ");
+ g = a ? n.trim(d) : "", c.className !== g && (c.className = g)
+ }
+ return this
+ }, toggleClass: function (a, b) {
+ var c = typeof a;
+ return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(n.isFunction(a) ? function (c) {
+ n(this).toggleClass(a.call(this, c, this.className, b), b)
+ } : function () {
+ if ("string" === c) {
+ var b, d = 0, e = n(this), f = a.match(F) || [];
+ while (b = f[d++])e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
+ } else(c === L || "boolean" === c) && (this.className && n._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : n._data(this, "__className__") || "")
+ })
+ }, hasClass: function (a) {
+ for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(vc, " ").indexOf(b) >= 0)return !0;
+ return !1
+ }
+ }), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
+ n.fn[b] = function (a, c) {
+ return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
+ }
+ }), n.fn.extend({
+ hover: function (a, b) {
+ return this.mouseenter(a).mouseleave(b || a)
+ }, bind: function (a, b, c) {
+ return this.on(a, null, b, c)
+ }, unbind: function (a, b) {
+ return this.off(a, null, b)
+ }, delegate: function (a, b, c, d) {
+ return this.on(b, a, c, d)
+ }, undelegate: function (a, b, c) {
+ return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
+ }
+ });
+ var wc = n.now(), xc = /\?/, yc = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+ n.parseJSON = function (b) {
+ if (a.JSON && a.JSON.parse)return a.JSON.parse(b + "");
+ var c, d = null, e = n.trim(b + "");
+ return e && !n.trim(e.replace(yc, function (a, b, e, f) {
+ return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, "")
+ })) ? Function("return " + e)() : n.error("Invalid JSON: " + b)
+ }, n.parseXML = function (b) {
+ var c, d;
+ if (!b || "string" != typeof b)return null;
+ try {
+ a.DOMParser ? (d = new DOMParser, c = d.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b))
+ } catch (e) {
+ c = void 0
+ }
+ return c && c.documentElement && !c.getElementsByTagName("parsererror").length || n.error("Invalid XML: " + b), c
+ };
+ var zc, Ac, Bc = /#.*$/, Cc = /([?&])_=[^&]*/, Dc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Ec = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Fc = /^(?:GET|HEAD)$/, Gc = /^\/\//, Hc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, Ic = {}, Jc = {}, Kc = "*/".concat("*");
+ try {
+ Ac = location.href
+ } catch (Lc) {
+ Ac = z.createElement("a"), Ac.href = "", Ac = Ac.href
+ }
+ zc = Hc.exec(Ac.toLowerCase()) || [];
+ function Mc(a) {
+ return function (b, c) {
+ "string" != typeof b && (c = b, b = "*");
+ var d, e = 0, f = b.toLowerCase().match(F) || [];
+ if (n.isFunction(c))while (d = f[e++])"+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
+ }
+ }
+
+ function Nc(a, b, c, d) {
+ var e = {}, f = a === Jc;
+
+ function g(h) {
+ var i;
+ return e[h] = !0, n.each(a[h] || [], function (a, h) {
+ var j = h(b, c, d);
+ return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
+ }), i
+ }
+
+ return g(b.dataTypes[0]) || !e["*"] && g("*")
+ }
+
+ function Oc(a, b) {
+ var c, d, e = n.ajaxSettings.flatOptions || {};
+ for (d in b)void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]);
+ return c && n.extend(!0, a, c), a
+ }
+
+ function Pc(a, b, c) {
+ var d, e, f, g, h = a.contents, i = a.dataTypes;
+ while ("*" === i[0])i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type"));
+ if (e)for (g in h)if (h[g] && h[g].test(e)) {
+ i.unshift(g);
+ break
+ }
+ if (i[0]in c)f = i[0]; else {
+ for (g in c) {
+ if (!i[0] || a.converters[g + " " + i[0]]) {
+ f = g;
+ break
+ }
+ d || (d = g)
+ }
+ f = f || d
+ }
+ return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
+ }
+
+ function Qc(a, b, c, d) {
+ var e, f, g, h, i, j = {}, k = a.dataTypes.slice();
+ if (k[1])for (g in a.converters)j[g.toLowerCase()] = a.converters[g];
+ f = k.shift();
+ while (f)if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())if ("*" === f)f = i; else if ("*" !== i && i !== f) {
+ if (g = j[i + " " + f] || j["* " + f], !g)for (e in j)if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
+ g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
+ break
+ }
+ if (g !== !0)if (g && a["throws"])b = g(b); else try {
+ b = g(b)
+ } catch (l) {
+ return {state: "parsererror", error: g ? l : "No conversion from " + i + " to " + f}
+ }
+ }
+ return {state: "success", data: b}
+ }
+
+ n.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: Ac,
+ type: "GET",
+ isLocal: Ec.test(zc[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": Kc,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {xml: /xml/, html: /html/, json: /json/},
+ responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"},
+ converters: {"* text": String, "text html": !0, "text json": n.parseJSON, "text xml": n.parseXML},
+ flatOptions: {url: !0, context: !0}
+ },
+ ajaxSetup: function (a, b) {
+ return b ? Oc(Oc(a, n.ajaxSettings), b) : Oc(n.ajaxSettings, a)
+ },
+ ajaxPrefilter: Mc(Ic),
+ ajaxTransport: Mc(Jc),
+ ajax: function (a, b) {
+ "object" == typeof a && (b = a, a = void 0), b = b || {};
+ var c, d, e, f, g, h, i, j, k = n.ajaxSetup({}, b), l = k.context || k, m = k.context && (l.nodeType || l.jquery) ? n(l) : n.event, o = n.Deferred(), p = n.Callbacks("once memory"), q = k.statusCode || {}, r = {}, s = {}, t = 0, u = "canceled", v = {
+ readyState: 0,
+ getResponseHeader: function (a) {
+ var b;
+ if (2 === t) {
+ if (!j) {
+ j = {};
+ while (b = Dc.exec(f))j[b[1].toLowerCase()] = b[2]
+ }
+ b = j[a.toLowerCase()]
+ }
+ return null == b ? null : b
+ },
+ getAllResponseHeaders: function () {
+ return 2 === t ? f : null
+ },
+ setRequestHeader: function (a, b) {
+ var c = a.toLowerCase();
+ return t || (a = s[c] = s[c] || a, r[a] = b), this
+ },
+ overrideMimeType: function (a) {
+ return t || (k.mimeType = a), this
+ },
+ statusCode: function (a) {
+ var b;
+ if (a)if (2 > t)for (b in a)q[b] = [q[b], a[b]]; else v.always(a[v.status]);
+ return this
+ },
+ abort: function (a) {
+ var b = a || u;
+ return i && i.abort(b), x(0, b), this
+ }
+ };
+ if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || Ac) + "").replace(Bc, "").replace(Gc, zc[1] + "//"), k.type = b.method || b.type || k.method || k.type, k.dataTypes = n.trim(k.dataType || "*").toLowerCase().match(F) || [""], null == k.crossDomain && (c = Hc.exec(k.url.toLowerCase()), k.crossDomain = !(!c || c[1] === zc[1] && c[2] === zc[2] && (c[3] || ("http:" === c[1] ? "80" : "443")) === (zc[3] || ("http:" === zc[1] ? "80" : "443")))), k.data && k.processData && "string" != typeof k.data && (k.data = n.param(k.data, k.traditional)), Nc(Ic, k, b, v), 2 === t)return v;
+ h = k.global, h && 0 === n.active++ && n.event.trigger("ajaxStart"), k.type = k.type.toUpperCase(), k.hasContent = !Fc.test(k.type), e = k.url, k.hasContent || (k.data && (e = k.url += (xc.test(e) ? "&" : "?") + k.data, delete k.data), k.cache === !1 && (k.url = Cc.test(e) ? e.replace(Cc, "$1_=" + wc++) : e + (xc.test(e) ? "&" : "?") + "_=" + wc++)), k.ifModified && (n.lastModified[e] && v.setRequestHeader("If-Modified-Since", n.lastModified[e]), n.etag[e] && v.setRequestHeader("If-None-Match", n.etag[e])), (k.data && k.hasContent && k.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", k.contentType), v.setRequestHeader("Accept", k.dataTypes[0] && k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + ("*" !== k.dataTypes[0] ? ", " + Kc + "; q=0.01" : "") : k.accepts["*"]);
+ for (d in k.headers)v.setRequestHeader(d, k.headers[d]);
+ if (k.beforeSend && (k.beforeSend.call(l, v, k) === !1 || 2 === t))return v.abort();
+ u = "abort";
+ for (d in{success: 1, error: 1, complete: 1})v[d](k[d]);
+ if (i = Nc(Jc, k, b, v)) {
+ v.readyState = 1, h && m.trigger("ajaxSend", [v, k]), k.async && k.timeout > 0 && (g = setTimeout(function () {
+ v.abort("timeout")
+ }, k.timeout));
+ try {
+ t = 1, i.send(r, x)
+ } catch (w) {
+ if (!(2 > t))throw w;
+ x(-1, w)
+ }
+ } else x(-1, "No Transport");
+ function x(a, b, c, d) {
+ var j, r, s, u, w, x = b;
+ 2 !== t && (t = 2, g && clearTimeout(g), i = void 0, f = d || "", v.readyState = a > 0 ? 4 : 0, j = a >= 200 && 300 > a || 304 === a, c && (u = Pc(k, v, c)), u = Qc(k, u, v, j), j ? (k.ifModified && (w = v.getResponseHeader("Last-Modified"), w && (n.lastModified[e] = w), w = v.getResponseHeader("etag"), w && (n.etag[e] = w)), 204 === a || "HEAD" === k.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || x) + "", j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, h && m.trigger(j ? "ajaxSuccess" : "ajaxError", [v, k, j ? r : s]), p.fireWith(l, [v, x]), h && (m.trigger("ajaxComplete", [v, k]), --n.active || n.event.trigger("ajaxStop")))
+ }
+
+ return v
+ },
+ getJSON: function (a, b, c) {
+ return n.get(a, b, c, "json")
+ },
+ getScript: function (a, b) {
+ return n.get(a, void 0, b, "script")
+ }
+ }), n.each(["get", "post"], function (a, b) {
+ n[b] = function (a, c, d, e) {
+ return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax({
+ url: a,
+ type: b,
+ dataType: e,
+ data: c,
+ success: d
+ })
+ }
+ }), n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
+ n.fn[b] = function (a) {
+ return this.on(b, a)
+ }
+ }), n._evalUrl = function (a) {
+ return n.ajax({url: a, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0})
+ }, n.fn.extend({
+ wrapAll: function (a) {
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).wrapAll(a.call(this, b))
+ });
+ if (this[0]) {
+ var b = n(a, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
+ var a = this;
+ while (a.firstChild && 1 === a.firstChild.nodeType)a = a.firstChild;
+ return a
+ }).append(this)
+ }
+ return this
+ }, wrapInner: function (a) {
+ return this.each(n.isFunction(a) ? function (b) {
+ n(this).wrapInner(a.call(this, b))
+ } : function () {
+ var b = n(this), c = b.contents();
+ c.length ? c.wrapAll(a) : b.append(a)
+ })
+ }, wrap: function (a) {
+ var b = n.isFunction(a);
+ return this.each(function (c) {
+ n(this).wrapAll(b ? a.call(this, c) : a)
+ })
+ }, unwrap: function () {
+ return this.parent().each(function () {
+ n.nodeName(this, "body") || n(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), n.expr.filters.hidden = function (a) {
+ return a.offsetWidth <= 0 && a.offsetHeight <= 0 || !l.reliableHiddenOffsets() && "none" === (a.style && a.style.display || n.css(a, "display"))
+ }, n.expr.filters.visible = function (a) {
+ return !n.expr.filters.hidden(a)
+ };
+ var Rc = /%20/g, Sc = /\[\]$/, Tc = /\r?\n/g, Uc = /^(?:submit|button|image|reset|file)$/i, Vc = /^(?:input|select|textarea|keygen)/i;
+
+ function Wc(a, b, c, d) {
+ var e;
+ if (n.isArray(b))n.each(b, function (b, e) {
+ c || Sc.test(a) ? d(a, e) : Wc(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
+ }); else if (c || "object" !== n.type(b))d(a, b); else for (e in b)Wc(a + "[" + e + "]", b[e], c, d)
+ }
+
+ n.param = function (a, b) {
+ var c, d = [], e = function (a, b) {
+ b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
+ };
+ if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a))n.each(a, function () {
+ e(this.name, this.value)
+ }); else for (c in a)Wc(c, a[c], b, e);
+ return d.join("&").replace(Rc, "+")
+ }, n.fn.extend({
+ serialize: function () {
+ return n.param(this.serializeArray())
+ }, serializeArray: function () {
+ return this.map(function () {
+ var a = n.prop(this, "elements");
+ return a ? n.makeArray(a) : this
+ }).filter(function () {
+ var a = this.type;
+ return this.name && !n(this).is(":disabled") && Vc.test(this.nodeName) && !Uc.test(a) && (this.checked || !X.test(a))
+ }).map(function (a, b) {
+ var c = n(this).val();
+ return null == c ? null : n.isArray(c) ? n.map(c, function (a) {
+ return {name: b.name, value: a.replace(Tc, "\r\n")}
+ }) : {name: b.name, value: c.replace(Tc, "\r\n")}
+ }).get()
+ }
+ }), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function () {
+ return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && $c() || _c()
+ } : $c;
+ var Xc = 0, Yc = {}, Zc = n.ajaxSettings.xhr();
+ a.ActiveXObject && n(a).on("unload", function () {
+ for (var a in Yc)Yc[a](void 0, !0)
+ }), l.cors = !!Zc && "withCredentials"in Zc, Zc = l.ajax = !!Zc, Zc && n.ajaxTransport(function (a) {
+ if (!a.crossDomain || l.cors) {
+ var b;
+ return {
+ send: function (c, d) {
+ var e, f = a.xhr(), g = ++Xc;
+ if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)for (e in a.xhrFields)f[e] = a.xhrFields[e];
+ a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
+ for (e in c)void 0 !== c[e] && f.setRequestHeader(e, c[e] + "");
+ f.send(a.hasContent && a.data || null), b = function (c, e) {
+ var h, i, j;
+ if (b && (e || 4 === f.readyState))if (delete Yc[g], b = void 0, f.onreadystatechange = n.noop, e)4 !== f.readyState && f.abort(); else {
+ j = {}, h = f.status, "string" == typeof f.responseText && (j.text = f.responseText);
+ try {
+ i = f.statusText
+ } catch (k) {
+ i = ""
+ }
+ h || !a.isLocal || a.crossDomain ? 1223 === h && (h = 204) : h = j.text ? 200 : 404
+ }
+ j && d(h, i, j, f.getAllResponseHeaders())
+ }, a.async ? 4 === f.readyState ? setTimeout(b) : f.onreadystatechange = Yc[g] = b : b()
+ }, abort: function () {
+ b && b(void 0, !0)
+ }
+ }
+ }
+ });
+ function $c() {
+ try {
+ return new a.XMLHttpRequest
+ } catch (b) {
+ }
+ }
+
+ function _c() {
+ try {
+ return new a.ActiveXObject("Microsoft.XMLHTTP")
+ } catch (b) {
+ }
+ }
+
+ n.ajaxSetup({
+ accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
+ contents: {script: /(?:java|ecma)script/},
+ converters: {
+ "text script": function (a) {
+ return n.globalEval(a), a
+ }
+ }
+ }), n.ajaxPrefilter("script", function (a) {
+ void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
+ }), n.ajaxTransport("script", function (a) {
+ if (a.crossDomain) {
+ var b, c = z.head || n("head")[0] || z.documentElement;
+ return {
+ send: function (d, e) {
+ b = z.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function (a, c) {
+ (c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || e(200, "success"))
+ }, c.insertBefore(b, c.firstChild)
+ }, abort: function () {
+ b && b.onload(void 0, !0)
+ }
+ }
+ }
+ });
+ var ad = [], bd = /(=)\?(?=&|$)|\?\?/;
+ n.ajaxSetup({
+ jsonp: "callback", jsonpCallback: function () {
+ var a = ad.pop() || n.expando + "_" + wc++;
+ return this[a] = !0, a
+ }
+ }), n.ajaxPrefilter("json jsonp", function (b, c, d) {
+ var e, f, g, h = b.jsonp !== !1 && (bd.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && bd.test(b.data) && "data");
+ return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(bd, "$1" + e) : b.jsonp !== !1 && (b.url += (xc.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () {
+ return g || n.error(e + " was not called"), g[0]
+ }, b.dataTypes[0] = "json", f = a[e], a[e] = function () {
+ g = arguments
+ }, d.always(function () {
+ a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, ad.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0
+ }), "script") : void 0
+ }), n.parseHTML = function (a, b, c) {
+ if (!a || "string" != typeof a)return null;
+ "boolean" == typeof b && (c = b, b = !1), b = b || z;
+ var d = v.exec(a), e = !c && [];
+ return d ? [b.createElement(d[1])] : (d = n.buildFragment([a], b, e), e && e.length && n(e).remove(), n.merge([], d.childNodes))
+ };
+ var cd = n.fn.load;
+ n.fn.load = function (a, b, c) {
+ if ("string" != typeof a && cd)return cd.apply(this, arguments);
+ var d, e, f, g = this, h = a.indexOf(" ");
+ return h >= 0 && (d = a.slice(h, a.length), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (f = "POST"), g.length > 0 && n.ajax({
+ url: a,
+ type: f,
+ dataType: "html",
+ data: b
+ }).done(function (a) {
+ e = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a)
+ }).complete(c && function (a, b) {
+ g.each(c, e || [a.responseText, b, a])
+ }), this
+ }, n.expr.filters.animated = function (a) {
+ return n.grep(n.timers, function (b) {
+ return a === b.elem
+ }).length
+ };
+ var dd = a.document.documentElement;
+
+ function ed(a) {
+ return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
+ }
+
+ n.offset = {
+ setOffset: function (a, b, c) {
+ var d, e, f, g, h, i, j, k = n.css(a, "position"), l = n(a), m = {};
+ "static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && n.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using"in b ? b.using.call(a, m) : l.css(m)
+ }
+ }, n.fn.extend({
+ offset: function (a) {
+ if (arguments.length)return void 0 === a ? this : this.each(function (b) {
+ n.offset.setOffset(this, a, b)
+ });
+ var b, c, d = {top: 0, left: 0}, e = this[0], f = e && e.ownerDocument;
+ if (f)return b = f.documentElement, n.contains(b, e) ? (typeof e.getBoundingClientRect !== L && (d = e.getBoundingClientRect()), c = ed(f), {
+ top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
+ left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
+ }) : d
+ }, position: function () {
+ if (this[0]) {
+ var a, b, c = {top: 0, left: 0}, d = this[0];
+ return "fixed" === n.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (c = a.offset()), c.top += n.css(a[0], "borderTopWidth", !0), c.left += n.css(a[0], "borderLeftWidth", !0)), {
+ top: b.top - c.top - n.css(d, "marginTop", !0),
+ left: b.left - c.left - n.css(d, "marginLeft", !0)
+ }
+ }
+ }, offsetParent: function () {
+ return this.map(function () {
+ var a = this.offsetParent || dd;
+ while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position"))a = a.offsetParent;
+ return a || dd
+ })
+ }
+ }), n.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (a, b) {
+ var c = /Y/.test(b);
+ n.fn[a] = function (d) {
+ return W(this, function (a, d, e) {
+ var f = ed(a);
+ return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void(f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e)
+ }, a, d, arguments.length, null)
+ }
+ }), n.each(["top", "left"], function (a, b) {
+ n.cssHooks[b] = Mb(l.pixelPosition, function (a, c) {
+ return c ? (c = Kb(a, b), Ib.test(c) ? n(a).position()[b] + "px" : c) : void 0
+ })
+ }), n.each({Height: "height", Width: "width"}, function (a, b) {
+ n.each({padding: "inner" + a, content: b, "": "outer" + a}, function (c, d) {
+ n.fn[d] = function (d, e) {
+ var f = arguments.length && (c || "boolean" != typeof d), g = c || (d === !0 || e === !0 ? "margin" : "border");
+ return W(this, function (b, c, d) {
+ var e;
+ return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g)
+ }, b, f ? d : void 0, f, null)
+ }
+ })
+ }), n.fn.size = function () {
+ return this.length
+ }, n.fn.andSelf = n.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function () {
+ return n
+ });
+ var fd = a.jQuery, gd = a.$;
+ return n.noConflict = function (b) {
+ return a.$ === n && (a.$ = gd), b && a.jQuery === n && (a.jQuery = fd), n
+ }, typeof b === L && (a.jQuery = a.$ = n), n
+});
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/multi-handle-slider.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/multi-handle-slider.js
new file mode 100644
index 00000000..1b775ef0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-slider/js/multi-handle-slider.js
@@ -0,0 +1,64 @@
+var vmMultiHandleSlider = function (controller) {
+ return avalon.define({
+ $id: controller,
+ items: [],
+ $setItems: function (items) {
+ this.items = items;
+ for (var i = 0; i < items.length; i++) {
+ this.handleValues.push(items[i].value);
+ this.handleTips.push(items[i].name);
+ }
+ },
+ handleTips: [],
+ $setHandleTips: function (tips) {
+ this.handleTips = tips;
+ },
+ handleValues: [],
+ $setHandleValues: function (values) {
+ this.handleValues = values;
+ },
+ $initSlider: function (sliderDivId, wrapperId) {
+ var that = this;
+
+ if (this.handleValues.length != this.handleTips.length || this.handleValues.length != this.items.length) {
+ alert("handle value and tips dis-match!");
+ return;
+ }
+
+ var tooltip = '<div class="tooltip tooltip-style"><div class="tooltip-inner tooltip-text">$value</div></div>' +
+ '<div class="tooltip tooltip-style-bottom"><div class="tooltip-inner tooltip-label">$type</div></div>';
+
+ var showLabel = function (event, ui) {
+ //防止滑块碰撞
+ for (var i = 0; i < that.handleValues.length; i++) {
+ if (ui.values[i] >= ui.values[i + 1]) {
+ return false;
+ }
+ }
+
+ var curValue = ui.value || $(this).slider("option", "value");
+ var target = ui.handle || $('.ui-slider-handle');
+ var handleId = $(target).attr("handleId");
+ if ($(target).parents(".sliderWrapper").attr("classId") == "count")
+ $(target).html(tooltip.replace("$value", curValue).replace("$type", that.handleTips[handleId]));
+ else
+ $(target).html(tooltip.replace("$value", curValue + "%").replace("$type", that.handleTips[handleId]));
+
+ var handleInt = parseInt(handleId);
+ that.items[handleInt].value = curValue;
+ }
+
+ var sliderAlarm = $("div#" + sliderDivId).slider({
+ min: 0,
+ max: 100,
+ values: this.handleValues,
+ slide: showLabel
+ });
+
+ for (var i = 0; i < this.handleTips.length; i++) {
+ $($('#' + wrapperId + ' .ui-slider-handle')[i]).attr("handleId", i).html(tooltip.replace("$value", 20 * (i + 1) + "%").replace("$type", this.handleTips[i]));
+ }
+
+ }
+ });
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/demo.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/demo.html
new file mode 100644
index 00000000..8e62fee3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/demo.html
@@ -0,0 +1,17 @@
+<head>
+ <link rel="stylesheet" href="skill.css"/>
+ <script src="../../thirdparty/jquery/jquery-1.10.2.min.js"></script>
+ <script src="../../thirdparty/d3/d3.js"></script>
+ <script src="skillsData.js"></script>
+ <script src="sunburst.js"></script>
+</head>
+<body>
+<div id="demo_sunburst"></div>
+<script>
+ var settings = {};
+ settings.width = 500;
+ settings.height = 500;
+ sunburstGraph.refreshGraph(skillsdata, "demo_sunburst", settings);
+
+</script>
+</body> \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skill.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skill.css
new file mode 100644
index 00000000..89444982
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skill.css
@@ -0,0 +1,74 @@
+div.skills-sunburst {
+ font-size: 12px;
+ font-weight: 400;
+ text-align: center;
+/ / margin-top : - 40 px;
+}
+
+#skillmap .skills-wrapper {
+ overflow: auto;
+}
+
+#skillmap .skills-sunburst {
+ float: left;
+ width: 500px;
+ margin-left: -80px;
+}
+
+#skillmap .skills-sunburst svg {
+ font: 11px 'Source Sans Pro', sans-serif;
+ font-weight: 900;
+
+ cursor: pointer;
+}
+
+#skillmap .skills-chart {
+ float: right;
+ font-family: 'Source Sans Pro', sans-serif;
+ font-size: 15px;
+ margin: 80px 20px 0 0;
+}
+
+#skillmap .skills-chart .breadcumb-text {
+ font-size: 13px;
+ font-weight: 700;
+}
+
+#skillmap .skills-chart #skills-chart-line {
+ fill: none;
+ stroke-width: 3.5px;
+}
+
+#skillmap .skills-chart .axis path,
+#skillmap .skills-chart .axis line {
+ fill: none;
+}
+
+#skillmap .skills-chart .x-axis path,
+#skillmap .skills-chart .y-axis path {
+ stroke: #444;
+ stroke-width: 1px;
+ shape-rendering: geometricPrecision;
+}
+
+#explanation {
+ position: absolute;
+ top: 165px;
+ left: 170px;
+ width: 140px;
+ text-align: center;
+ color: #666;
+ margin-top: 30px;
+}
+
+#percentage {
+ font-size: 2em;
+}
+
+#endlabel {
+ font-sizte: 1.5em;
+}
+
+div.skills-sunburst text {
+ text-anchor: middle;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skillsData.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skillsData.js
new file mode 100644
index 00000000..2eb94bc0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/skillsData.js
@@ -0,0 +1,38 @@
+var skillsdata;
+
+
+var initSkillsdata = function () {
+ skillsdata = {
+ staData: {
+ "{\"name\":\"6-普通信息\",\"id\":\"6\",\"parameter\":\"rank\"}": {
+ "{\"name\":\"性能管理\",\"id\":\"性能管理\",\"parameter\":\"source\"}": {
+ "{\"name\":\"性能门限任务管理\",\"id\":\"性能门限任务管理\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179],
+ "{\"name\":\"性能测量任务管理\",\"id\":\"性能测量任务管理\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 179]
+ },
+ "{\"name\":\"控制台\",\"id\":\"控制台\",\"parameter\":\"source\"}": {
+ "{\"name\":\"启动 WEB应用进程1\",\"id\":\"启动 WEB应用进程1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ "{\"name\":\"停止 Nginx服务器1\",\"id\":\"停止 Nginx服务器1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2],
+ "{\"name\":\"启动 ngict1\",\"id\":\"启动 ngict1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ "{\"name\":\"启动 Nginx服务器1\",\"id\":\"启动 Nginx服务器1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3],
+ "{\"name\":\"启动 ITM进程1\",\"id\":\"启动 ITM进程1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
+ },
+ "{\"name\":\"告警管理\",\"id\":\"告警管理\",\"parameter\":\"source\"}": {
+ "{\"name\":\"告警定时同步\",\"id\":\"告警定时同步\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2]
+ },
+ "{\"name\":\"ITM进程1\",\"id\":\"ITM进程1\",\"parameter\":\"source\"}": {
+ "{\"name\":\"启动 网管平台进程1\",\"id\":\"启动 网管平台进程1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ "{\"name\":\"启动 ITM Proxy进程1\",\"id\":\"启动 ITM Proxy进程1\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
+ },
+ "{\"name\":\"日志管理\",\"id\":\"日志管理\",\"parameter\":\"source\"}": {
+ "{\"name\":\"日志临时记录入库\",\"id\":\"日志临时记录入库\",\"parameter\":\"taskname\"}": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
+ }
+ }
+ }
+ };
+ var bb = {bb: 0};
+ var a = {};
+ a[bb] = 10213;
+ //skillsdata = JSON.parse(stringData);
+};
+initSkillsdata();
+
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/sunburst.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/sunburst.js
new file mode 100644
index 00000000..b8e7c4aa
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-sunburst/sunburst.js
@@ -0,0 +1,321 @@
+var sunburstGraph = {};
+sunburstGraph.refreshGraph = function (skillsdata, divId, settings) {
+ //先删除div下面的所有child
+ $('#' + divId).children().remove();
+ skillsdata.count = 0;
+ var suburstContent = '<div class="skills-sunburst">'
+ //+'<div id="explanation" style="visibility: hidden;">'
+ //+'<span id="percentage"></span><br/>'
+ //+'<span id="source"></span>'
+ //+'</div>'
+ + '</div>'
+ + '<div id="skills-chart-breadcrumb"></div>';
+ //$('#' + divId).append('<div id="skills-chart-breadcrumb"></div>');
+ $('#' + divId).append(suburstContent);
+ //$(suburstContent).appendTo($('#' + divId));
+
+ //计算总的日志数量
+ function count(sourceOjb) {
+ for (var childname in sourceOjb) {
+ var child = sourceOjb[childname];
+ if (child && child[0] >= 0) { //判断是否内容为数字
+ for (var num in child) {
+ skillsdata.count = skillsdata.count + child[num];
+ }
+ } else {
+ count(child);
+ }
+ }
+ }
+
+ var statisticCount = count(skillsdata);
+
+ function getOneBurstName(burst) {
+ var key = JSON.parse(burst.key);
+ return key.name;
+ }
+
+ function getDataCount(data) {
+ var dataCount = 0;
+ for (var index in data._proficiency) {
+ dataCount = dataCount + data._proficiency[index];
+ }
+ ;
+ return dataCount;
+ }
+
+ function mouseover(data) {
+
+ //这里修改vm中的数据对象--selectLogStaInfo ,刷新右边的barGraph.
+ if (settings.mouseOverCallback) {
+ settings.mouseOverCallback(data._proficiency);
+ }
+
+ var c = getcrumbpath(data);
+ var dataCount = getDataCount(data);
+ var percentage = (100 * dataCount / skillsdata.count).toPrecision(3);
+ var percentageString = percentage + "%";
+ if (percentage < 0.1) {
+ percentageString = "< 0.1%";
+ }
+ refreshBreadCrum(c, percentageString);
+ d3.select("#percentage")
+ .text(percentageString);
+ d3.select("#source")
+ .text(getOneBurstName(data));
+ d3.select("#explanation")
+ .style("visibility", "");
+ d3
+ .selectAll(".skills-sunburst path")
+ .style("opacity", .3), sunburst
+ .selectAll("path")
+ .filter(function (a) {
+ return c.indexOf(a) >= 0
+ })
+ .style("opacity", 1)
+ }
+
+ function mouseleave() {
+ d3
+ .selectAll("path")
+ .on("mouseover", null);
+ d3
+ .selectAll("path")
+ .transition()
+ .duration(1e3)
+ .style("opacity", 1)
+ .each("end", function () {
+ d3.select(this).on("mouseover", mouseover)
+ })
+ }
+
+ function getcrumbpath(a) {
+ for (var temp = [], c = a; c.parent;) temp.unshift(c), c = c.parent;
+ return temp
+ }
+
+ function initbreadcrumb() {
+ d3
+ .select("#skills-chart-breadcrumb")
+ .append("svg:svg")
+ .attr("width", 800)
+ .attr("height", 30)
+ .attr("class", "trail")
+ .append("svg:text")
+ .attr("id", "endlabel")
+ .style("fill", "#000");
+ }
+
+ function h(a, d3) {
+ var c = [];
+ c.push("0,0");
+ c.push(r.w + ",0");
+ c.push(r.w + r.t + "," + r.h / 2);
+ c.push(r.w + "," + r.h);
+ c.push("0," + r.h);
+ d3 > 0 && c.push(r.t + "," + r.h / 2);
+ return c.join(" ");
+ }
+
+ function refreshBreadCrum(a, percentageString) {
+ a[a.length - 1]._color, a.length;
+ var c = d3
+ .select("#skills-chart-breadcrumb .trail")
+ .selectAll("g")
+ .remove();
+ c = d3
+ .select("#skills-chart-breadcrumb .trail")
+ .selectAll("g")
+ .data(a, function (a) {
+ return a.key + a.depth
+ });
+ var d = c.enter().append("svg:g");
+ d
+ .append("svg:polygon")
+ .attr("points", h)
+ .style("fill", function (a) {
+ return a._color
+ }),
+ d
+ .append("svg:text")
+ .attr("x", r.w / 2 + 2)
+ .attr("y", r.h / 2)
+ .attr("dy", "0.50em")
+ .attr("text-anchor", "middle")
+ .attr("class", "breadcumb-text")
+ .style("fill", function (a) {
+ return getcolor(d3.rgb(a._color)) < 150 ? "#fff" : "#000"
+ })
+ .text(function (a) {
+ return getOneBurstName(a);
+ }),
+ c
+ .attr("transform", function (a, b) {
+ return "translate(" + b * (r.w + r.s) + ", 0)"
+ }),
+ b = {
+ w: 120, h: 30, s: 10, t: 10
+ };
+ //
+ d3
+ .select("#skills-chart-breadcrumb .trail")
+ .select("#endlabel")
+ .attr("x", (a.length + 0.5) * (b.w + b.s))
+ .attr("y", b.h / 2)
+ .attr("dy", "0.35em")
+ .attr("text-anchor", "middle")
+ .text(percentageString);
+ c.exit().remove();
+
+ // Now move and update the percentage at the end.
+ d3.select(".trail").style("visibility", "");
+ }
+
+ function getcolor(color) {
+ return .299 * color.r + .587 * color.g + .114 * color.b
+ }
+
+ function k(a) {
+ var color = ["#3399CC", "#FFC65D", "#CDB99C", "#8B4789", "#FF7F50"],
+ d = [-.1, -.05, 0];
+ if (1 == a.depth) {
+ var e = color[coloralternative % 5];
+ return coloralternative++, e
+ }
+ if (a.depth > 1) {
+ var f = d[a.value % 3];
+ return d3.rgb(a.parent._color).brighter(.15 * a.depth + f * a.depth)
+ }
+ }
+
+ var l;
+
+
+ width = settings.width,
+ height = settings.height,
+ rad = Math.min(width, height) / Math.PI - 25,
+ q = k,
+ r = { //定义每一条面包屑的长、宽、高等
+ w: 140, //宽度
+ h: 30, //面包屑的尖角相关。
+ s: 3,
+ t: 7
+ },
+ sunburst = d3
+ .select(".skills-sunburst")
+ .append("svg:svg")
+ .attr("width", width)
+ .attr("height", height)
+ .append("svg:g")
+ .attr("transform", "translate(" + (width / 2) + "," + height / 2 + ")");
+ sunburst.append("svg:circle").attr("r", rad).style("opacity", 0);
+
+ var mergeAry = function (sourceAry1, sourceAry2) {
+ var rtnAry = [],
+ aryLength = sourceAry1.length;
+ if (sourceAry1.length !== sourceAry2.length) {
+ rtnAry = sourceAry1.length > sourceAry2.length ? sourceAry1 : sourceAry2;
+ } else for (var e = 0; aryLength > e; e++) {
+ //var f = Math.max(sourceAry1[e], sourceAry2[e]) - Math.abs(sourceAry1[e] - sourceAry2[e]) / 8;
+ rtnAry.push(sourceAry1[e] + sourceAry2[e]);
+ }
+ return rtnAry;
+ },
+ recursionFindAry = function (a) {
+ if (a instanceof Array) return a;
+ var b = [];
+ return $.each(a, function (a, c) {
+ b = mergeAry(recursionFindAry(c), b)
+ }), b
+ },
+ countAry = function (data) {
+ var countAry = 0;
+ for (var i = 0; i < data.length; i++) {
+ countAry = countAry + data[i];
+ }
+ return countAry;
+ },
+ proficiencydata = d3
+ .layout
+ .partition()
+ .sort(null)
+ .size([2 * Math.PI, rad])
+ .children(function (a) {
+ return a.value instanceof Array
+ ? (a._proficiency = a.value, d3.entries([countAry(a.value)]))
+ : (a._proficiency = recursionFindAry(a.value), isNaN(a.value) ? d3.entries(a.value) : null)
+ })
+ .value(function (a) {
+ return a.value
+ }),
+ arc = d3.svg
+ .arc()
+ .startAngle(function (a) {//startAngle和endAngle是计算的每个环的每个角的角度,跟大小没有关系。
+ return a.x
+ })
+ .endAngle(function (a) {
+ return a.x + a.dx - .01 / (a.depth + .4)
+ })
+ .innerRadius(function (a) { //里层环线的位置,原来是没有增加20的,这里减少了层次,svg画布和旭日图之间空得太多,因此增加环的大小
+ return rad / Math.PI * a.depth + 20
+ })
+ .outerRadius(function (a) { //外层环线的位置
+ return rad / Math.PI * (a.depth + 1) + 22
+ });
+
+ var coloralternative = 0
+ initbreadcrumb();
+ var path = sunburst
+ .data(d3.entries(skillsdata))
+ .selectAll("g")
+ .data(proficiencydata)
+ .enter()
+ .append("svg:g")
+ .attr("display", function (a) {
+ return a.depth ? null : "none"
+ });
+ path
+ .append("svg:path")
+ .attr("d", arc)
+ .attr("stroke", "#fff")
+ .attr("fill", function (a) {
+ return a._color = q(a), a._color
+ })
+ .attr("fill-rule", "evenodd").attr("display", function (a) {
+ return a.children ? null : "none"
+ })
+ .on("mouseover", mouseover);
+
+ d3
+ .select(".skills-sunburst")
+ .on("mouseleave", mouseleave);
+ //l = path.node().__data__.value;
+ sunburst
+ .append("circle")
+ .attr("r", rad / Math.PI)
+ .attr("opacity", 0);
+
+ sunburst.append("text").transition().duration(1000)
+ .attr("dx", function (d) {
+ return 0;
+ })
+ .attr("dy", function (d) {
+ return -10;
+ })
+ .attr("id", "percentage")
+ .text(function (d) {
+ return '';
+ });
+ sunburst.append("text").transition().duration(1000)
+ .attr("dx", function (d) {
+ return 0;
+ })
+ .attr("dy", function (d) {
+ return 20;
+ })
+ .attr("id", "source")
+ .text(function (d) {
+ return '';
+ });
+
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap-wizard/jquery.bootstrap.wizard.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap-wizard/jquery.bootstrap.wizard.min.js
new file mode 100644
index 00000000..baeb2540
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap-wizard/jquery.bootstrap.wizard.min.js
@@ -0,0 +1,152 @@
+/*!
+ * jQuery twitter bootstrap wizard plugin
+ * Examples and documentation at: http://github.com/VinceG/twitter-bootstrap-wizard
+ * version 1.0
+ * Requires jQuery v1.3.2 or later
+ * Supports Bootstrap 2.2.x, 2.3.x, 3.0
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ * Authors: Vadim Vincent Gabriel (http://vadimg.com), Jason Gill (www.gilluminate.com)
+ */
+(function (e) {
+ var k = function (d, g) {
+ d = e(d);
+ var a = this, b = e.extend({}, e.fn.bootstrapWizard.defaults, g), f = null, c = null;
+ this.rebindClick = function (b, a) {
+ b.unbind("click", a).bind("click", a)
+ };
+ this.fixNavigationButtons = function () {
+ f.length || (c.find("a:first").tab("show"), f = c.find('li:has([data-toggle="tab"]):first'));
+ e(b.previousSelector, d).toggleClass("disabled", a.firstIndex() >= a.currentIndex());
+ e(b.nextSelector, d).toggleClass("disabled", a.currentIndex() >= a.navigationLength());
+ a.rebindClick(e(b.nextSelector, d),
+ a.next);
+ a.rebindClick(e(b.previousSelector, d), a.previous);
+ a.rebindClick(e(b.lastSelector, d), a.last);
+ a.rebindClick(e(b.firstSelector, d), a.first);
+ if (b.onTabShow && "function" === typeof b.onTabShow && !1 === b.onTabShow(f, c, a.currentIndex()))return !1
+ };
+ this.next = function (h) {
+ if (d.hasClass("last") || b.onNext && "function" === typeof b.onNext && !1 === b.onNext(f, c, a.nextIndex()))return !1;
+ $index = a.nextIndex();
+ $index > a.navigationLength() || c.find('li:has([data-toggle="tab"]):eq(' + $index + ") a").tab("show")
+ };
+ this.previous =
+ function (h) {
+ if (d.hasClass("first") || b.onPrevious && "function" === typeof b.onPrevious && !1 === b.onPrevious(f, c, a.previousIndex()))return !1;
+ $index = a.previousIndex();
+ 0 > $index || c.find('li:has([data-toggle="tab"]):eq(' + $index + ") a").tab("show")
+ };
+ this.first = function (h) {
+ if (b.onFirst && "function" === typeof b.onFirst && !1 === b.onFirst(f, c, a.firstIndex()) || d.hasClass("disabled"))return !1;
+ c.find('li:has([data-toggle="tab"]):eq(0) a').tab("show")
+ };
+ this.last = function (h) {
+ if (b.onLast && "function" === typeof b.onLast && !1 ===
+ b.onLast(f, c, a.lastIndex()) || d.hasClass("disabled"))return !1;
+ c.find('li:has([data-toggle="tab"]):eq(' + a.navigationLength() + ") a").tab("show")
+ };
+ this.currentIndex = function () {
+ return c.find('li:has([data-toggle="tab"])').index(f)
+ };
+ this.firstIndex = function () {
+ return 0
+ };
+ this.lastIndex = function () {
+ return a.navigationLength()
+ };
+ this.getIndex = function (a) {
+ return c.find('li:has([data-toggle="tab"])').index(a)
+ };
+ this.nextIndex = function () {
+ return c.find('li:has([data-toggle="tab"])').index(f) + 1
+ };
+ this.previousIndex =
+ function () {
+ return c.find('li:has([data-toggle="tab"])').index(f) - 1
+ };
+ this.navigationLength = function () {
+ return c.find('li:has([data-toggle="tab"])').length - 1
+ };
+ this.activeTab = function () {
+ return f
+ };
+ this.nextTab = function () {
+ return c.find('li:has([data-toggle="tab"]):eq(' + (a.currentIndex() + 1) + ")").length ? c.find('li:has([data-toggle="tab"]):eq(' + (a.currentIndex() + 1) + ")") : null
+ };
+ this.previousTab = function () {
+ return 0 >= a.currentIndex() ? null : c.find('li:has([data-toggle="tab"]):eq(' + parseInt(a.currentIndex() - 1) + ")")
+ };
+ this.show = function (a) {
+ return d.find('li:has([data-toggle="tab"]):eq(' + a + ") a").tab("show")
+ };
+ this.disable = function (a) {
+ c.find('li:has([data-toggle="tab"]):eq(' + a + ")").addClass("disabled")
+ };
+ this.enable = function (a) {
+ c.find('li:has([data-toggle="tab"]):eq(' + a + ")").removeClass("disabled")
+ };
+ this.hide = function (a) {
+ c.find('li:has([data-toggle="tab"]):eq(' + a + ")").hide()
+ };
+ this.display = function (a) {
+ c.find('li:has([data-toggle="tab"]):eq(' + a + ")").show()
+ };
+ this.remove = function (a) {
+ var b = "undefined" != typeof a[1] ? a[1] :
+ !1;
+ a = c.find('li:has([data-toggle="tab"]):eq(' + a[0] + ")");
+ b && (b = a.find("a").attr("href"), e(b).remove());
+ a.remove()
+ };
+ c = d.find("ul:first", d);
+ f = c.find('li:has([data-toggle="tab"]).active', d);
+ c.hasClass(b.tabClass) || c.addClass(b.tabClass);
+ if (b.onInit && "function" === typeof b.onInit)b.onInit(f, c, 0);
+ if (b.onShow && "function" === typeof b.onShow)b.onShow(f, c, a.nextIndex());
+ a.fixNavigationButtons();
+ e('a[data-toggle="tab"]', c).on("click", function (d) {
+ d = c.find('li:has([data-toggle="tab"])').index(e(d.currentTarget).parent('li:has([data-toggle="tab"])'));
+ if (b.onTabClick && "function" === typeof b.onTabClick && !1 === b.onTabClick(f, c, a.currentIndex(), d))return !1
+ });
+ e('a[data-toggle="tab"]', c).on("shown shown.bs.tab", function (d) {
+ $element = e(d.target).parent();
+ d = c.find('li:has([data-toggle="tab"])').index($element);
+ if ($element.hasClass("disabled") || b.onTabChange && "function" === typeof b.onTabChange && !1 === b.onTabChange(f, c, a.currentIndex(), d))return !1;
+ f = $element;
+ a.fixNavigationButtons()
+ })
+ };
+ e.fn.bootstrapWizard = function (d) {
+ if ("string" == typeof d) {
+ var g = Array.prototype.slice.call(arguments,
+ 1);
+ 1 === g.length && g.toString();
+ return this.data("bootstrapWizard")[d](g)
+ }
+ return this.each(function (a) {
+ a = e(this);
+ if (!a.data("bootstrapWizard")) {
+ var b = new k(a, d);
+ a.data("bootstrapWizard", b)
+ }
+ })
+ };
+ e.fn.bootstrapWizard.defaults = {
+ tabClass: "nav nav-pills",
+ nextSelector: ".wizard li.next",
+ previousSelector: ".wizard li.previous",
+ firstSelector: ".wizard li.first",
+ lastSelector: ".wizard li.last",
+ onShow: null,
+ onInit: null,
+ onNext: null,
+ onPrevious: null,
+ onLast: null,
+ onFirst: null,
+ onTabChange: null,
+ onTabClick: null,
+ onTabShow: null
+ }
+})(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap-dt.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap-dt.css
new file mode 100644
index 00000000..1be9eb88
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap-dt.css
@@ -0,0 +1,7067 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+[hidden],
+template {
+ display: none;
+}
+
+a {
+ background: transparent;
+}
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+b,
+strong {
+ font-weight: bold;
+}
+
+dfn {
+ font-style: italic;
+}
+
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+
+mark {
+ color: #000;
+ background: #ff0;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -.5em;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+img {
+ border: 0;
+}
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+figure {
+ margin: 1em 40px;
+}
+
+hr {
+ height: 0;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+pre {
+ overflow: auto;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+
+button {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+
+input {
+ line-height: normal;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+
+legend {
+ padding: 0;
+ border: 0;
+}
+
+textarea {
+ overflow: auto;
+}
+
+optgroup {
+ font-weight: bold;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+td,
+th {
+}
+
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+
+ thead {
+ display: table-header-group;
+ }
+
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+
+ img {
+ max-width: 100% !important;
+ }
+
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+
+ select {
+ background: #fff !important;
+ }
+
+ .navbar {
+ display: none;
+ }
+
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+
+ .label {
+ border: 1px solid #000;
+ }
+
+ .table {
+ border-collapse: collapse !important;
+ }
+
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+
+.dataTableWrapperDiv div {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html {
+ font-size: 62.5%;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+figure {
+ margin: 0;
+}
+
+img {
+ vertical-align: middle;
+}
+
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+
+.img-rounded {
+ border-radius: 6px;
+}
+
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.img-circle {
+ border-radius: 50%;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999;
+}
+
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+
+h1,
+.h1 {
+ font-size: 36px;
+}
+
+h2,
+.h2 {
+ font-size: 30px;
+}
+
+h3,
+.h3 {
+ font-size: 24px;
+}
+
+h4,
+.h4 {
+ font-size: 18px;
+}
+
+h5,
+.h5 {
+ font-size: 14px;
+}
+
+h6,
+.h6 {
+ font-size: 12px;
+}
+
+p {
+ margin: 0 0 10px;
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 200;
+ line-height: 1.4;
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+
+small,
+.small {
+ font-size: 85%;
+}
+
+cite {
+ font-style: normal;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-justify {
+ text-align: justify;
+}
+
+.text-muted {
+ color: #999;
+}
+
+.text-primary {
+ color: #428bca;
+}
+
+a.text-primary:hover {
+ color: #3071a9;
+}
+
+.text-success {
+ color: #3c763d;
+}
+
+a.text-success:hover {
+ color: #2b542c;
+}
+
+.text-info {
+ color: #31708f;
+}
+
+a.text-info:hover {
+ color: #245269;
+}
+
+.text-warning {
+ color: #8a6d3b;
+}
+
+a.text-warning:hover {
+ color: #66512c;
+}
+
+.text-danger {
+ color: #a94442;
+}
+
+a.text-danger:hover {
+ color: #843534;
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #428bca;
+}
+
+a.bg-primary:hover {
+ background-color: #3071a9;
+}
+
+.bg-success {
+ background-color: #dff0d8;
+}
+
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+
+.bg-info {
+ background-color: #d9edf7;
+}
+
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+
+.bg-warning {
+ background-color: #fcf8e3;
+}
+
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+
+.bg-danger {
+ background-color: #f2dede;
+}
+
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+
+dt,
+dd {
+ line-height: 1.42857143;
+}
+
+dt {
+ font-weight: bold;
+}
+
+dd {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999;
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #999;
+}
+
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ white-space: nowrap;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+
+.col-xs-12 {
+ width: 100%;
+}
+
+.col-xs-11 {
+ width: 91.66666667%;
+}
+
+.col-xs-10 {
+ width: 83.33333333%;
+}
+
+.col-xs-9 {
+ width: 75%;
+}
+
+.col-xs-8 {
+ width: 66.66666667%;
+}
+
+.col-xs-7 {
+ width: 58.33333333%;
+}
+
+.col-xs-6 {
+ width: 50%;
+}
+
+.col-xs-5 {
+ width: 41.66666667%;
+}
+
+.col-xs-4 {
+ width: 33.33333333%;
+}
+
+.col-xs-3 {
+ width: 25%;
+}
+
+.col-xs-2 {
+ width: 16.66666667%;
+}
+
+.col-xs-1 {
+ width: 8.33333333%;
+}
+
+.col-xs-pull-12 {
+ right: 100%;
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+
+.col-xs-pull-9 {
+ right: 75%;
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+
+.col-xs-pull-6 {
+ right: 50%;
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+
+.col-xs-pull-3 {
+ right: 25%;
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+
+.col-xs-pull-0 {
+ right: 0;
+}
+
+.col-xs-push-12 {
+ left: 100%;
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+
+.col-xs-push-9 {
+ left: 75%;
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+
+.col-xs-push-6 {
+ left: 50%;
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+
+.col-xs-push-3 {
+ left: 25%;
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+
+.col-xs-push-0 {
+ left: 0;
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+
+ .col-sm-12 {
+ width: 100%;
+ }
+
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+
+ .col-sm-9 {
+ width: 75%;
+ }
+
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+
+ .col-sm-6 {
+ width: 50%;
+ }
+
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+
+ .col-sm-3 {
+ width: 25%;
+ }
+
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-sm-pull-0 {
+ right: 0;
+ }
+
+ .col-sm-push-12 {
+ left: 100%;
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-sm-push-9 {
+ left: 75%;
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-sm-push-6 {
+ left: 50%;
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-sm-push-3 {
+ left: 25%;
+ }
+
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-sm-push-0 {
+ left: 0;
+ }
+
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+
+ .col-md-12 {
+ width: 100%;
+ }
+
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+
+ .col-md-9 {
+ width: 75%;
+ }
+
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+
+ .col-md-6 {
+ width: 50%;
+ }
+
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+
+ .col-md-3 {
+ width: 25%;
+ }
+
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+
+ .col-md-pull-12 {
+ right: 100%;
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-md-pull-9 {
+ right: 75%;
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-md-pull-6 {
+ right: 50%;
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-md-pull-3 {
+ right: 25%;
+ }
+
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-md-pull-0 {
+ right: 0;
+ }
+
+ .col-md-push-12 {
+ left: 100%;
+ }
+
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-md-push-9 {
+ left: 75%;
+ }
+
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-md-push-6 {
+ left: 50%;
+ }
+
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-md-push-3 {
+ left: 25%;
+ }
+
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-md-push-0 {
+ left: 0;
+ }
+
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+
+ .col-lg-12 {
+ width: 100%;
+ }
+
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+
+ .col-lg-9 {
+ width: 75%;
+ }
+
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+
+ .col-lg-6 {
+ width: 50%;
+ }
+
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+
+ .col-lg-3 {
+ width: 25%;
+ }
+
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+
+ .col-lg-pull-0 {
+ right: 0;
+ }
+
+ .col-lg-push-12 {
+ left: 100%;
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+
+ .col-lg-push-9 {
+ left: 75%;
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+
+ .col-lg-push-6 {
+ left: 50%;
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+
+ .col-lg-push-3 {
+ left: 25%;
+ }
+
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+
+ .col-lg-push-0 {
+ left: 0;
+ }
+
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent;
+}
+
+th {
+ text-align: left;
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+
+.table .table {
+ background-color: #fff;
+}
+
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+
+.table-bordered {
+ border: 1px solid #ddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+ /*background-color: #f5f5f5;*/
+ background-color: #dbedff;
+}
+
+.dataTableTdSelected {
+ background-color: #dbedff !important;
+}
+
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+
+@media (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ /* IE8-9 */
+ line-height: normal;
+}
+
+input[type="file"] {
+ display: block;
+}
+
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+
+select[multiple],
+select[size] {
+ height: auto;
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1;
+}
+
+textarea.form-control {
+ height: auto;
+}
+
+input[type="search"] {
+ -webkit-appearance: none;
+}
+
+input[type="date"] {
+ line-height: 34px;
+}
+
+.form-group {
+ margin-bottom: 15px;
+}
+
+.radio,
+.checkbox {
+ display: block;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.radio label,
+.checkbox label {
+ display: inline;
+ font-weight: normal;
+ cursor: pointer;
+}
+
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+.radio[disabled],
+.radio-inline[disabled],
+.checkbox[disabled],
+.checkbox-inline[disabled],
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"],
+fieldset[disabled] .radio,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+
+.has-feedback {
+ position: relative;
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+
+.has-feedback .form-control-feedback {
+ position: absolute;
+ top: 25px;
+ right: 0;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+}
+
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+ color: #3c763d;
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+ color: #8a6d3b;
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+ color: #a94442;
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+
+.form-control-static {
+ margin-bottom: 0;
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+.form-horizontal .control-label,
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+.form-horizontal .form-control-static {
+ padding-top: 7px;
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ top: 0;
+ right: 15px;
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+
+.btn:hover,
+.btn:focus {
+ color: #333;
+ text-decoration: none;
+}
+
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+
+.btn.default {
+ color: #333333;
+ text-shadow: none;
+ background-color: #e5e5e5;
+ height: 12px;
+}
+
+.btn.default:hover,
+.btn.default:focus,
+.btn.default:active,
+.btn.default.active,
+.btn.default[disabled],
+.btn.default.disabled {
+ color: #333333;
+ background-color: #d8d8d8 !important;
+ outline: none !important;
+}
+
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad;
+}
+
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ background-image: none;
+}
+
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439;
+}
+
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ background-image: none;
+}
+
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc;
+}
+
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ background-image: none;
+}
+
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512;
+}
+
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925;
+}
+
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ cursor: pointer;
+ border-radius: 0;
+}
+
+.btn-link,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+
+.btn-link:hover,
+.btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent;
+}
+
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none;
+}
+
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-sm {
+ padding: 2px 10px 8px 10px;
+}
+
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+
+.fade.in {
+ opacity: 1;
+}
+
+.collapse {
+ display: none;
+}
+
+.collapse.in {
+ display: block;
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease;
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+
+.glyphicon-plus:before {
+ content: "\2b";
+}
+
+.glyphicon-euro:before {
+ content: "\20ac";
+}
+
+.glyphicon-minus:before {
+ content: "\2212";
+}
+
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+
+.glyphicon-glass:before {
+ content: "\e001";
+}
+
+.glyphicon-music:before {
+ content: "\e002";
+}
+
+.glyphicon-search:before {
+ content: "\e003";
+}
+
+.glyphicon-heart:before {
+ content: "\e005";
+}
+
+.glyphicon-star:before {
+ content: "\e006";
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+
+.glyphicon-user:before {
+ content: "\e008";
+}
+
+.glyphicon-film:before {
+ content: "\e009";
+}
+
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+
+.glyphicon-th:before {
+ content: "\e011";
+}
+
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+
+.glyphicon-ok:before {
+ content: "\e013";
+}
+
+.glyphicon-remove:before {
+ content: "\e014";
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+
+.glyphicon-off:before {
+ content: "\e017";
+}
+
+.glyphicon-signal:before {
+ content: "\e018";
+}
+
+.glyphicon-cog:before {
+ content: "\e019";
+}
+
+.glyphicon-trash:before {
+ content: "\e020";
+}
+
+.glyphicon-home:before {
+ content: "\e021";
+}
+
+.glyphicon-file:before {
+ content: "\e022";
+}
+
+.glyphicon-time:before {
+ content: "\e023";
+}
+
+.glyphicon-road:before {
+ content: "\e024";
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+
+.glyphicon-download:before {
+ content: "\e026";
+}
+
+.glyphicon-upload:before {
+ content: "\e027";
+}
+
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+
+.glyphicon-lock:before {
+ content: "\e033";
+}
+
+.glyphicon-flag:before {
+ content: "\e034";
+}
+
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+
+.glyphicon-tag:before {
+ content: "\e041";
+}
+
+.glyphicon-tags:before {
+ content: "\e042";
+}
+
+.glyphicon-book:before {
+ content: "\e043";
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+
+.glyphicon-print:before {
+ content: "\e045";
+}
+
+.glyphicon-camera:before {
+ content: "\e046";
+}
+
+.glyphicon-font:before {
+ content: "\e047";
+}
+
+.glyphicon-bold:before {
+ content: "\e048";
+}
+
+.glyphicon-italic:before {
+ content: "\e049";
+}
+
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+
+.glyphicon-list:before {
+ content: "\e056";
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+
+.glyphicon-picture:before {
+ content: "\e060";
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+
+.glyphicon-tint:before {
+ content: "\e064";
+}
+
+.glyphicon-edit:before {
+ content: "\e065";
+}
+
+.glyphicon-share:before {
+ content: "\e066";
+}
+
+.glyphicon-check:before {
+ content: "\e067";
+}
+
+.glyphicon-move:before {
+ content: "\e068";
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+
+.glyphicon-backward:before {
+ content: "\e071";
+}
+
+.glyphicon-play:before {
+ content: "\e072";
+}
+
+.glyphicon-pause:before {
+ content: "\e073";
+}
+
+.glyphicon-stop:before {
+ content: "\e074";
+}
+
+.glyphicon-forward:before {
+ content: "\e075";
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+
+.glyphicon-eject:before {
+ content: "\e078";
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+
+.glyphicon-gift:before {
+ content: "\e102";
+}
+
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+
+.glyphicon-fire:before {
+ content: "\e104";
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+
+.glyphicon-plane:before {
+ content: "\e108";
+}
+
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+
+.glyphicon-random:before {
+ content: "\e110";
+}
+
+.glyphicon-comment:before {
+ content: "\e111";
+}
+
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+
+.glyphicon-bell:before {
+ content: "\e123";
+}
+
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+
+.glyphicon-globe:before {
+ content: "\e135";
+}
+
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+
+.glyphicon-filter:before {
+ content: "\e138";
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+
+.glyphicon-link:before {
+ content: "\e144";
+}
+
+.glyphicon-phone:before {
+ content: "\e145";
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+
+.glyphicon-usd:before {
+ content: "\e148";
+}
+
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+
+.glyphicon-sort:before {
+ content: "\e150";
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+
+.glyphicon-expand:before {
+ content: "\e158";
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+
+.glyphicon-flash:before {
+ content: "\e162";
+}
+
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+
+.glyphicon-record:before {
+ content: "\e165";
+}
+
+.glyphicon-save:before {
+ content: "\e166";
+}
+
+.glyphicon-open:before {
+ content: "\e167";
+}
+
+.glyphicon-saved:before {
+ content: "\e168";
+}
+
+.glyphicon-import:before {
+ content: "\e169";
+}
+
+.glyphicon-export:before {
+ content: "\e170";
+}
+
+.glyphicon-send:before {
+ content: "\e171";
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+
+.glyphicon-header:before {
+ content: "\e180";
+}
+
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+
+.glyphicon-tower:before {
+ content: "\e184";
+}
+
+.glyphicon-stats:before {
+ content: "\e185";
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+
+.dropdown {
+ position: relative;
+}
+
+.dropdown-toggle:focus {
+ outline: 0;
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0;
+}
+
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+}
+
+.open > .dropdown-menu {
+ display: block;
+}
+
+.open > a {
+ outline: 0;
+}
+
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #999;
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus {
+ outline: none;
+}
+
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+
+.btn-toolbar {
+ margin-left: -5px;
+}
+
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group > .btn-group {
+ float: left;
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.btn .caret {
+ margin-left: 0;
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none;
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.input-group-addon:first-child {
+ border-right: 0;
+}
+
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.input-group-addon:last-child {
+ border-left: 0;
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+
+.input-group-btn > .btn {
+ position: relative;
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+
+.nav > li {
+ position: relative;
+ display: block;
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.nav > li.disabled > a {
+ color: #999;
+}
+
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca;
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+
+.nav > li > a > img {
+ max-width: none;
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+
+.nav-pills > li {
+ float: left;
+}
+
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca;
+}
+
+.nav-stacked > li {
+ float: none;
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+
+.nav-justified {
+ width: 100%;
+}
+
+.nav-justified > li {
+ float: none;
+}
+
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+
+.tab-content > .tab-pane {
+ display: none;
+}
+
+.tab-content > .active {
+ display: block;
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.navbar-toggle:focus {
+ outline: none;
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+
+ .navbar-nav > li {
+ float: left;
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+
+ .navbar-right {
+ float: right !important;
+ }
+}
+
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ .navbar-form.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+
+ .navbar-text.navbar-right:last-child {
+ margin-right: 0;
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-brand {
+ color: #777;
+}
+
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-text {
+ color: #777;
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777;
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999;
+}
+
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-text {
+ color: #999;
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999;
+}
+
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999;
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+
+.breadcrumb > li {
+ display: inline-block;
+}
+
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+
+.breadcrumb > .active {
+ color: #999;
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+
+.pagination > li {
+ display: inline;
+}
+
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #428bca;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd;
+}
+
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+
+.pager li {
+ display: inline;
+}
+
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+
+.label[href]:hover,
+.label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.label:empty {
+ display: none;
+}
+
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+
+.label-default {
+ background-color: #999;
+}
+
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #808080;
+}
+
+.label-primary {
+ background-color: #428bca;
+}
+
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #3071a9;
+}
+
+.label-success {
+ background-color: #5cb85c;
+}
+
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+
+.label-info {
+ background-color: #5bc0de;
+}
+
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+
+.label-warning {
+ background-color: #f0ad4e;
+}
+
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
+
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999;
+ border-radius: 10px;
+}
+
+.badge:empty {
+ display: none;
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+
+.container .jumbotron {
+ border-radius: 6px;
+}
+
+.jumbotron .container {
+ max-width: 100%;
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #428bca;
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+
+.alert .alert-link {
+ font-weight: bold;
+}
+
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+
+.alert > p + p {
+ margin-top: 5px;
+}
+
+.alert-dismissable {
+ padding-right: 35px;
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+
+.alert-success .alert-link {
+ color: #2b542c;
+}
+
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+
+.alert-info .alert-link {
+ color: #245269;
+}
+
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+
+.alert-warning .alert-link {
+ color: #66512c;
+}
+
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+
+.alert-danger .alert-link {
+ color: #843534;
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease;
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px;
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+
+.media,
+.media .media {
+ margin-top: 15px;
+}
+
+.media:first-child {
+ margin-top: 0;
+}
+
+.media-object {
+ display: block;
+}
+
+.media-heading {
+ margin: 0 0 5px;
+}
+
+.media > .pull-left {
+ margin-right: 10px;
+}
+
+.media > .pull-right {
+ margin-left: 10px;
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.list-group-item > .badge {
+ float: right;
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+
+a.list-group-item {
+ color: #555;
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+
+a.list-group-item:hover,
+a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+
+a.list-group-item.active,
+a.list-group-item.active:hover,
+a.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+a.list-group-item.active .list-group-item-heading,
+a.list-group-item.active:hover .list-group-item-heading,
+a.list-group-item.active:focus .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item.active .list-group-item-text,
+a.list-group-item.active:hover .list-group-item-text,
+a.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7;
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+
+a.list-group-item-success {
+ color: #3c763d;
+}
+
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+
+a.list-group-item-info {
+ color: #31708f;
+}
+
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+
+a.list-group-item-danger {
+ color: #a94442;
+}
+
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.panel-body {
+ padding: 15px;
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+
+.panel-title > a {
+ color: inherit;
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .list-group {
+ margin-bottom: 0;
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+
+.panel > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+
+.panel > .table,
+.panel > .table-responsive > .table {
+ margin-bottom: 0;
+}
+
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive {
+ border-top: 1px solid #ddd;
+}
+
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+
+.panel-group {
+ margin-bottom: 20px;
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ overflow: hidden;
+ border-radius: 4px;
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd;
+}
+
+.panel-group .panel-footer {
+ border-top: 0;
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+
+.panel-default {
+ border-color: #ddd;
+}
+
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd;
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd;
+}
+
+.panel-primary {
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca;
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca;
+}
+
+.panel-success {
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc;
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1;
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1;
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+
+.modal-open {
+ overflow: hidden;
+}
+
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ /*background-color: #000;*/
+ background-color: #fff;
+}
+
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.modal-header .close {
+ margin-top: -2px;
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px;
+}
+
+.modal-footer {
+ padding: 19px 20px 20px;
+ margin-top: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+
+ .modal-sm {
+ width: 300px;
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ visibility: visible;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+
+.popover.top {
+ margin-top: -10px;
+}
+
+.popover.right {
+ margin-left: 10px;
+}
+
+.popover.bottom {
+ margin-top: 10px;
+}
+
+.popover.left {
+ margin-left: -10px;
+}
+
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+
+.popover-content {
+ padding: 9px 14px;
+}
+
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+
+.popover > .arrow {
+ border-width: 11px;
+}
+
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+
+.carousel {
+ position: relative;
+}
+
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+
+.carousel-inner > .active {
+ left: 0;
+}
+
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.carousel-inner > .next {
+ left: 100%;
+}
+
+.carousel-inner > .prev {
+ left: -100%;
+}
+
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+
+.carousel-inner > .active.left {
+ left: -100%;
+}
+
+.carousel-inner > .active.right {
+ left: 100%;
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: none;
+ opacity: .9;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+}
+
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+}
+
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif;
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+
+.carousel-caption .btn {
+ text-shadow: none;
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px;
+ }
+
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+
+.clearfix:before,
+.clearfix:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+
+.clearfix:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+
+.pull-right {
+ float: right !important;
+}
+
+.pull-left {
+ float: left !important;
+}
+
+.hide {
+ display: none !important;
+}
+
+.show {
+ display: block !important;
+}
+
+.invisible {
+ visibility: hidden;
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+
+.affix {
+ position: fixed;
+}
+
+@-ms-viewport {
+ width: device-width;
+}
+
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+
+ table.visible-xs {
+ display: table;
+ }
+
+ tr.visible-xs {
+ display: table-row !important;
+ }
+
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+
+ table.visible-sm {
+ display: table;
+ }
+
+ tr.visible-sm {
+ display: table-row !important;
+ }
+
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+
+ table.visible-md {
+ display: table;
+ }
+
+ tr.visible-md {
+ display: table-row !important;
+ }
+
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+
+ table.visible-lg {
+ display: table;
+ }
+
+ tr.visible-lg {
+ display: table-row !important;
+ }
+
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+
+.visible-print {
+ display: none !important;
+}
+
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+
+ table.visible-print {
+ display: table;
+ }
+
+ tr.visible-print {
+ display: table-row !important;
+ }
+
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap.min.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap.min.css
new file mode 100644
index 00000000..e2e003a0
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,6246 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%
+}
+
+body {
+ margin: 0
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+ display: block
+}
+
+audio, canvas, progress, video {
+ display: inline-block;
+ vertical-align: baseline
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0
+}
+
+[hidden], template {
+ display: none
+}
+
+a {
+ background: 0 0
+}
+
+a:active, a:hover {
+ outline: 0
+}
+
+abbr[title] {
+ border-bottom: 1px dotted
+}
+
+b, strong {
+ font-weight: 700
+}
+
+dfn {
+ font-style: italic
+}
+
+h1 {
+ font-size: 2em;
+ margin: .67em 0
+}
+
+mark {
+ background: #ff0;
+ color: #000
+}
+
+small {
+ font-size: 80%
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline
+}
+
+sup {
+ top: -.5em
+}
+
+sub {
+ bottom: -.25em
+}
+
+img {
+ border: 0
+}
+
+svg:not(:root) {
+ overflow: hidden
+}
+
+figure {
+ margin: 1em 40px
+}
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0
+}
+
+pre {
+ overflow: auto
+}
+
+code, kbd, pre, samp {
+ font-family: monospace, monospace;
+ font-size: 1em
+}
+
+button, input, optgroup, select, textarea {
+ color: inherit;
+ font: inherit;
+ margin: 0
+}
+
+button {
+ overflow: visible
+}
+
+button, select {
+ text-transform: none
+}
+
+button, html input[type=button], input[type=reset], input[type=submit] {
+ -webkit-appearance: button;
+ cursor: pointer
+}
+
+button[disabled], html input[disabled] {
+ cursor: default
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0
+}
+
+input {
+ line-height: normal
+}
+
+input[type=checkbox], input[type=radio] {
+ box-sizing: border-box;
+ padding: 0
+}
+
+input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button {
+ height: auto
+}
+
+input[type=search] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box
+}
+
+input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+fieldset {
+ border: 1px solid silver;
+ margin: 0 2px;
+ padding: .35em .625em .75em
+}
+
+legend {
+ border: 0;
+ padding: 0
+}
+
+textarea {
+ overflow: auto
+}
+
+optgroup {
+ font-weight: 700
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0
+}
+
+td, th {
+ padding: 0
+}
+
+@media print {
+ * {
+ text-shadow: none !important;
+ color: #000 !important;
+ background: transparent !important;
+ box-shadow: none !important
+ }
+
+ a, a:visited {
+ text-decoration: underline
+ }
+
+ a[href]:after {
+ content: " (" attr(href) ")"
+ }
+
+ abbr[title]:after {
+ content: " (" attr(title) ")"
+ }
+
+ a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: ""
+ }
+
+ pre, blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid
+ }
+
+ thead {
+ display: table-header-group
+ }
+
+ tr, img {
+ page-break-inside: avoid
+ }
+
+ img {
+ max-width: 100% !important
+ }
+
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3
+ }
+
+ h2, h3 {
+ page-break-after: avoid
+ }
+
+ select {
+ background: #fff !important
+ }
+
+ .navbar {
+ display: none
+ }
+
+ .table td, .table th {
+ background-color: #fff !important
+ }
+
+ .btn > .caret, .dropup > .btn > .caret {
+ border-top-color: #000 !important
+ }
+
+ .label {
+ border: 1px solid #000
+ }
+
+ .table {
+ border-collapse: collapse !important
+ }
+
+ .table-bordered th, .table-bordered td {
+ border: 1px solid #ddd !important
+ }
+}
+
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+:before, :after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+html {
+ font-size: 62.5%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0)
+}
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff
+}
+
+input, button, select, textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit
+}
+
+a {
+ color: #428bca;
+ text-decoration: none
+}
+
+a:hover, a:focus {
+ color: #2a6496;
+ text-decoration: underline
+}
+
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+figure {
+ margin: 0
+}
+
+img {
+ vertical-align: middle
+}
+
+.img-responsive, .thumbnail > img, .thumbnail a > img, .carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto
+}
+
+.img-rounded {
+ border-radius: 6px
+}
+
+.img-thumbnail {
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+ display: inline-block;
+ max-width: 100%;
+ height: auto
+}
+
+.img-circle {
+ border-radius: 50%
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ margin: -1px;
+ padding: 0;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0
+}
+
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit
+}
+
+h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small {
+ font-weight: 400;
+ line-height: 1;
+ color: #999
+}
+
+h1, .h1, h2, .h2, h3, .h3 {
+ margin-top: 20px;
+ margin-bottom: 10px
+}
+
+h1 small, .h1 small, h2 small, .h2 small, h3 small, .h3 small, h1 .small, .h1 .small, h2 .small, .h2 .small, h3 .small, .h3 .small {
+ font-size: 65%
+}
+
+h4, .h4, h5, .h5, h6, .h6 {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+h4 small, .h4 small, h5 small, .h5 small, h6 small, .h6 small, h4 .small, .h4 .small, h5 .small, .h5 .small, h6 .small, .h6 .small {
+ font-size: 75%
+}
+
+h1, .h1 {
+ font-size: 36px
+}
+
+h2, .h2 {
+ font-size: 30px
+}
+
+h3, .h3 {
+ font-size: 24px
+}
+
+h4, .h4 {
+ font-size: 18px
+}
+
+h5, .h5 {
+ font-size: 14px
+}
+
+h6, .h6 {
+ font-size: 12px
+}
+
+p {
+ margin: 0 0 10px
+}
+
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 200;
+ line-height: 1.4
+}
+
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px
+ }
+}
+
+small, .small {
+ font-size: 85%
+}
+
+cite {
+ font-style: normal
+}
+
+.text-left {
+ text-align: left
+}
+
+.text-right {
+ text-align: right
+}
+
+.text-center {
+ text-align: center
+}
+
+.text-justify {
+ text-align: justify
+}
+
+.text-muted {
+ color: #999
+}
+
+.text-primary {
+ color: #428bca
+}
+
+a.text-primary:hover {
+ color: #3071a9
+}
+
+.text-success {
+ color: #3c763d
+}
+
+a.text-success:hover {
+ color: #2b542c
+}
+
+.text-info {
+ color: #31708f
+}
+
+a.text-info:hover {
+ color: #245269
+}
+
+.text-warning {
+ color: #8a6d3b
+}
+
+a.text-warning:hover {
+ color: #66512c
+}
+
+.text-danger {
+ color: #a94442
+}
+
+a.text-danger:hover {
+ color: #843534
+}
+
+.bg-primary {
+ color: #fff;
+ background-color: #428bca
+}
+
+a.bg-primary:hover {
+ background-color: #3071a9
+}
+
+.bg-success {
+ background-color: #dff0d8
+}
+
+a.bg-success:hover {
+ background-color: #c1e2b3
+}
+
+.bg-info {
+ background-color: #d9edf7
+}
+
+a.bg-info:hover {
+ background-color: #afd9ee
+}
+
+.bg-warning {
+ background-color: #fcf8e3
+}
+
+a.bg-warning:hover {
+ background-color: #f7ecb5
+}
+
+.bg-danger {
+ background-color: #f2dede
+}
+
+a.bg-danger:hover {
+ background-color: #e4b9b9
+}
+
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee
+}
+
+ul, ol {
+ margin-top: 0;
+ margin-bottom: 10px
+}
+
+ul ul, ol ul, ul ol, ol ol {
+ margin-bottom: 0
+}
+
+.list-unstyled {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-inline {
+ padding-left: 0;
+ list-style: none;
+ margin-left: -5px
+}
+
+.list-inline > li {
+ display: inline-block;
+ padding-left: 5px;
+ padding-right: 5px
+}
+
+dl {
+ margin-top: 0;
+ margin-bottom: 20px
+}
+
+dt, dd {
+ line-height: 1.42857143
+}
+
+dt {
+ font-weight: 700
+}
+
+dd {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ clear: left;
+ text-align: right;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap
+ }
+
+ .dl-horizontal dd {
+ margin-left: 180px
+ }
+}
+
+abbr[title], abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999
+}
+
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase
+}
+
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee
+}
+
+blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child {
+ margin-bottom: 0
+}
+
+blockquote footer, blockquote small, blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #999
+}
+
+blockquote footer:before, blockquote small:before, blockquote .small:before {
+ content: '\2014 \00A0'
+}
+
+.blockquote-reverse, blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ border-right: 5px solid #eee;
+ border-left: 0;
+ text-align: right
+}
+
+.blockquote-reverse footer:before, blockquote.pull-right footer:before, .blockquote-reverse small:before, blockquote.pull-right small:before, .blockquote-reverse .small:before, blockquote.pull-right .small:before {
+ content: ''
+}
+
+.blockquote-reverse footer:after, blockquote.pull-right footer:after, .blockquote-reverse small:after, blockquote.pull-right small:after, .blockquote-reverse .small:after, blockquote.pull-right .small:after {
+ content: '\00A0 \2014'
+}
+
+blockquote:before, blockquote:after {
+ content: ""
+}
+
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143
+}
+
+code, kbd, pre, samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ background-color: #f9f2f4;
+ white-space: nowrap;
+ border-radius: 4px
+}
+
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25)
+}
+
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ word-break: break-all;
+ word-wrap: break-word;
+ color: #333;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0
+}
+
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+@media (min-width: 768px) {
+ .container {
+ width: 750px
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ width: 970px
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px
+ }
+}
+
+.container-fluid {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.row {
+ margin-left: -15px;
+ margin-right: -15px
+}
+
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left
+}
+
+.col-xs-12 {
+ width: 100%
+}
+
+.col-xs-11 {
+ width: 91.66666667%
+}
+
+.col-xs-10 {
+ width: 83.33333333%
+}
+
+.col-xs-9 {
+ width: 75%
+}
+
+.col-xs-8 {
+ width: 66.66666667%
+}
+
+.col-xs-7 {
+ width: 58.33333333%
+}
+
+.col-xs-6 {
+ width: 50%
+}
+
+.col-xs-5 {
+ width: 41.66666667%
+}
+
+.col-xs-4 {
+ width: 33.33333333%
+}
+
+.col-xs-3 {
+ width: 25%
+}
+
+.col-xs-2 {
+ width: 16.66666667%
+}
+
+.col-xs-1 {
+ width: 8.33333333%
+}
+
+.col-xs-pull-12 {
+ right: 100%
+}
+
+.col-xs-pull-11 {
+ right: 91.66666667%
+}
+
+.col-xs-pull-10 {
+ right: 83.33333333%
+}
+
+.col-xs-pull-9 {
+ right: 75%
+}
+
+.col-xs-pull-8 {
+ right: 66.66666667%
+}
+
+.col-xs-pull-7 {
+ right: 58.33333333%
+}
+
+.col-xs-pull-6 {
+ right: 50%
+}
+
+.col-xs-pull-5 {
+ right: 41.66666667%
+}
+
+.col-xs-pull-4 {
+ right: 33.33333333%
+}
+
+.col-xs-pull-3 {
+ right: 25%
+}
+
+.col-xs-pull-2 {
+ right: 16.66666667%
+}
+
+.col-xs-pull-1 {
+ right: 8.33333333%
+}
+
+.col-xs-pull-0 {
+ right: 0
+}
+
+.col-xs-push-12 {
+ left: 100%
+}
+
+.col-xs-push-11 {
+ left: 91.66666667%
+}
+
+.col-xs-push-10 {
+ left: 83.33333333%
+}
+
+.col-xs-push-9 {
+ left: 75%
+}
+
+.col-xs-push-8 {
+ left: 66.66666667%
+}
+
+.col-xs-push-7 {
+ left: 58.33333333%
+}
+
+.col-xs-push-6 {
+ left: 50%
+}
+
+.col-xs-push-5 {
+ left: 41.66666667%
+}
+
+.col-xs-push-4 {
+ left: 33.33333333%
+}
+
+.col-xs-push-3 {
+ left: 25%
+}
+
+.col-xs-push-2 {
+ left: 16.66666667%
+}
+
+.col-xs-push-1 {
+ left: 8.33333333%
+}
+
+.col-xs-push-0 {
+ left: 0
+}
+
+.col-xs-offset-12 {
+ margin-left: 100%
+}
+
+.col-xs-offset-11 {
+ margin-left: 91.66666667%
+}
+
+.col-xs-offset-10 {
+ margin-left: 83.33333333%
+}
+
+.col-xs-offset-9 {
+ margin-left: 75%
+}
+
+.col-xs-offset-8 {
+ margin-left: 66.66666667%
+}
+
+.col-xs-offset-7 {
+ margin-left: 58.33333333%
+}
+
+.col-xs-offset-6 {
+ margin-left: 50%
+}
+
+.col-xs-offset-5 {
+ margin-left: 41.66666667%
+}
+
+.col-xs-offset-4 {
+ margin-left: 33.33333333%
+}
+
+.col-xs-offset-3 {
+ margin-left: 25%
+}
+
+.col-xs-offset-2 {
+ margin-left: 16.66666667%
+}
+
+.col-xs-offset-1 {
+ margin-left: 8.33333333%
+}
+
+.col-xs-offset-0 {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left
+ }
+
+ .col-sm-12 {
+ width: 100%
+ }
+
+ .col-sm-11 {
+ width: 91.66666667%
+ }
+
+ .col-sm-10 {
+ width: 83.33333333%
+ }
+
+ .col-sm-9 {
+ width: 75%
+ }
+
+ .col-sm-8 {
+ width: 66.66666667%
+ }
+
+ .col-sm-7 {
+ width: 58.33333333%
+ }
+
+ .col-sm-6 {
+ width: 50%
+ }
+
+ .col-sm-5 {
+ width: 41.66666667%
+ }
+
+ .col-sm-4 {
+ width: 33.33333333%
+ }
+
+ .col-sm-3 {
+ width: 25%
+ }
+
+ .col-sm-2 {
+ width: 16.66666667%
+ }
+
+ .col-sm-1 {
+ width: 8.33333333%
+ }
+
+ .col-sm-pull-12 {
+ right: 100%
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-sm-pull-9 {
+ right: 75%
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-sm-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-sm-pull-6 {
+ right: 50%
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-sm-pull-3 {
+ right: 25%
+ }
+
+ .col-sm-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-sm-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-sm-pull-0 {
+ right: 0
+ }
+
+ .col-sm-push-12 {
+ left: 100%
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-sm-push-9 {
+ left: 75%
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-sm-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-sm-push-6 {
+ left: 50%
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-sm-push-3 {
+ left: 25%
+ }
+
+ .col-sm-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-sm-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-sm-push-0 {
+ left: 0
+ }
+
+ .col-sm-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-sm-offset-0 {
+ margin-left: 0
+ }
+}
+
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left
+ }
+
+ .col-md-12 {
+ width: 100%
+ }
+
+ .col-md-11 {
+ width: 91.66666667%
+ }
+
+ .col-md-10 {
+ width: 83.33333333%
+ }
+
+ .col-md-9 {
+ width: 75%
+ }
+
+ .col-md-8 {
+ width: 66.66666667%
+ }
+
+ .col-md-7 {
+ width: 58.33333333%
+ }
+
+ .col-md-6 {
+ width: 50%
+ }
+
+ .col-md-5 {
+ width: 41.66666667%
+ }
+
+ .col-md-4 {
+ width: 33.33333333%
+ }
+
+ .col-md-3 {
+ width: 25%
+ }
+
+ .col-md-2 {
+ width: 16.66666667%
+ }
+
+ .col-md-1 {
+ width: 8.33333333%
+ }
+
+ .col-md-pull-12 {
+ right: 100%
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-md-pull-9 {
+ right: 75%
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-md-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-md-pull-6 {
+ right: 50%
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-md-pull-3 {
+ right: 25%
+ }
+
+ .col-md-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-md-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-md-pull-0 {
+ right: 0
+ }
+
+ .col-md-push-12 {
+ left: 100%
+ }
+
+ .col-md-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-md-push-9 {
+ left: 75%
+ }
+
+ .col-md-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-md-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-md-push-6 {
+ left: 50%
+ }
+
+ .col-md-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-md-push-3 {
+ left: 25%
+ }
+
+ .col-md-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-md-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-md-push-0 {
+ left: 0
+ }
+
+ .col-md-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0
+ }
+}
+
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left
+ }
+
+ .col-lg-12 {
+ width: 100%
+ }
+
+ .col-lg-11 {
+ width: 91.66666667%
+ }
+
+ .col-lg-10 {
+ width: 83.33333333%
+ }
+
+ .col-lg-9 {
+ width: 75%
+ }
+
+ .col-lg-8 {
+ width: 66.66666667%
+ }
+
+ .col-lg-7 {
+ width: 58.33333333%
+ }
+
+ .col-lg-6 {
+ width: 50%
+ }
+
+ .col-lg-5 {
+ width: 41.66666667%
+ }
+
+ .col-lg-4 {
+ width: 33.33333333%
+ }
+
+ .col-lg-3 {
+ width: 25%
+ }
+
+ .col-lg-2 {
+ width: 16.66666667%
+ }
+
+ .col-lg-1 {
+ width: 8.33333333%
+ }
+
+ .col-lg-pull-12 {
+ right: 100%
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666667%
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333%
+ }
+
+ .col-lg-pull-9 {
+ right: 75%
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666667%
+ }
+
+ .col-lg-pull-7 {
+ right: 58.33333333%
+ }
+
+ .col-lg-pull-6 {
+ right: 50%
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666667%
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333%
+ }
+
+ .col-lg-pull-3 {
+ right: 25%
+ }
+
+ .col-lg-pull-2 {
+ right: 16.66666667%
+ }
+
+ .col-lg-pull-1 {
+ right: 8.33333333%
+ }
+
+ .col-lg-pull-0 {
+ right: 0
+ }
+
+ .col-lg-push-12 {
+ left: 100%
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666667%
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333%
+ }
+
+ .col-lg-push-9 {
+ left: 75%
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666667%
+ }
+
+ .col-lg-push-7 {
+ left: 58.33333333%
+ }
+
+ .col-lg-push-6 {
+ left: 50%
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666667%
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333%
+ }
+
+ .col-lg-push-3 {
+ left: 25%
+ }
+
+ .col-lg-push-2 {
+ left: 16.66666667%
+ }
+
+ .col-lg-push-1 {
+ left: 8.33333333%
+ }
+
+ .col-lg-push-0 {
+ left: 0
+ }
+
+ .col-lg-offset-12 {
+ margin-left: 100%
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0
+ }
+}
+
+table {
+ max-width: 100%;
+ background-color: transparent
+}
+
+th {
+ text-align: left
+}
+
+.table {
+ width: 100%;
+ margin-bottom: 20px
+}
+
+.table > thead > tr > th, .table > tbody > tr > th, .table > tfoot > tr > th, .table > thead > tr > td, .table > tbody > tr > td, .table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd
+}
+
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd
+}
+
+.table > caption + thead > tr:first-child > th, .table > colgroup + thead > tr:first-child > th, .table > thead:first-child > tr:first-child > th, .table > caption + thead > tr:first-child > td, .table > colgroup + thead > tr:first-child > td, .table > thead:first-child > tr:first-child > td {
+ border-top: 0
+}
+
+.table > tbody + tbody {
+ border-top: 2px solid #ddd
+}
+
+.table .table {
+ background-color: #fff
+}
+
+.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td {
+ padding: 5px
+}
+
+.table-bordered {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > tbody > tr > td, .table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd
+}
+
+.table-bordered > thead > tr > th, .table-bordered > thead > tr > td {
+ border-bottom-width: 2px
+}
+
+.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9
+}
+
+.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
+ background-color: #f5f5f5
+}
+
+table col[class*=col-] {
+ position: static;
+ float: none;
+ display: table-column
+}
+
+table td[class*=col-], table th[class*=col-] {
+ position: static;
+ float: none;
+ display: table-cell
+}
+
+.table > thead > tr > td.active, .table > tbody > tr > td.active, .table > tfoot > tr > td.active, .table > thead > tr > th.active, .table > tbody > tr > th.active, .table > tfoot > tr > th.active, .table > thead > tr.active > td, .table > tbody > tr.active > td, .table > tfoot > tr.active > td, .table > thead > tr.active > th, .table > tbody > tr.active > th, .table > tfoot > tr.active > th {
+ background-color: #f5f5f5
+}
+
+.table-hover > tbody > tr > td.active:hover, .table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8
+}
+
+.table > thead > tr > td.success, .table > tbody > tr > td.success, .table > tfoot > tr > td.success, .table > thead > tr > th.success, .table > tbody > tr > th.success, .table > tfoot > tr > th.success, .table > thead > tr.success > td, .table > tbody > tr.success > td, .table > tfoot > tr.success > td, .table > thead > tr.success > th, .table > tbody > tr.success > th, .table > tfoot > tr.success > th {
+ background-color: #dff0d8
+}
+
+.table-hover > tbody > tr > td.success:hover, .table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6
+}
+
+.table > thead > tr > td.info, .table > tbody > tr > td.info, .table > tfoot > tr > td.info, .table > thead > tr > th.info, .table > tbody > tr > th.info, .table > tfoot > tr > th.info, .table > thead > tr.info > td, .table > tbody > tr.info > td, .table > tfoot > tr.info > td, .table > thead > tr.info > th, .table > tbody > tr.info > th, .table > tfoot > tr.info > th {
+ background-color: #d9edf7
+}
+
+.table-hover > tbody > tr > td.info:hover, .table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3
+}
+
+.table > thead > tr > td.warning, .table > tbody > tr > td.warning, .table > tfoot > tr > td.warning, .table > thead > tr > th.warning, .table > tbody > tr > th.warning, .table > tfoot > tr > th.warning, .table > thead > tr.warning > td, .table > tbody > tr.warning > td, .table > tfoot > tr.warning > td, .table > thead > tr.warning > th, .table > tbody > tr.warning > th, .table > tfoot > tr.warning > th {
+ background-color: #fcf8e3
+}
+
+.table-hover > tbody > tr > td.warning:hover, .table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc
+}
+
+.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th {
+ background-color: #f2dede
+}
+
+.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc
+}
+
+@media (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-y: hidden;
+ overflow-x: scroll;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ -webkit-overflow-scrolling: touch
+ }
+
+ .table-responsive > .table {
+ margin-bottom: 0
+ }
+
+ .table-responsive > .table > thead > tr > th, .table-responsive > .table > tbody > tr > th, .table-responsive > .table > tfoot > tr > th, .table-responsive > .table > thead > tr > td, .table-responsive > .table > tbody > tr > td, .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap
+ }
+
+ .table-responsive > .table-bordered {
+ border: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:first-child, .table-responsive > .table-bordered > tbody > tr > th:first-child, .table-responsive > .table-bordered > tfoot > tr > th:first-child, .table-responsive > .table-bordered > thead > tr > td:first-child, .table-responsive > .table-bordered > tbody > tr > td:first-child, .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0
+ }
+
+ .table-responsive > .table-bordered > thead > tr > th:last-child, .table-responsive > .table-bordered > tbody > tr > th:last-child, .table-responsive > .table-bordered > tfoot > tr > th:last-child, .table-responsive > .table-bordered > thead > tr > td:last-child, .table-responsive > .table-bordered > tbody > tr > td:last-child, .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0
+ }
+
+ .table-responsive > .table-bordered > tbody > tr:last-child > th, .table-responsive > .table-bordered > tfoot > tr:last-child > th, .table-responsive > .table-bordered > tbody > tr:last-child > td, .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0
+ }
+}
+
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ min-width: 0
+}
+
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: 700
+}
+
+input[type=search] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box
+}
+
+input[type=radio], input[type=checkbox] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ line-height: normal
+}
+
+input[type=file] {
+ display: block
+}
+
+input[type=range] {
+ display: block;
+ width: 100%
+}
+
+select[multiple], select[size] {
+ height: auto
+}
+
+input[type=file]:focus, input[type=radio]:focus, input[type=checkbox]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555
+}
+
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
+}
+
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
+}
+
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1
+}
+
+.form-control:-ms-input-placeholder {
+ color: #999
+}
+
+.form-control::-webkit-input-placeholder {
+ color: #999
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1
+}
+
+textarea.form-control {
+ height: auto
+}
+
+input[type=search] {
+ -webkit-appearance: none
+}
+
+input[type=date] {
+ line-height: 34px
+}
+
+.form-group {
+ margin-bottom: 15px
+}
+
+.radio, .checkbox {
+ display: block;
+ min-height: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+ padding-left: 20px
+}
+
+.radio label, .checkbox label {
+ display: inline;
+ font-weight: 400;
+ cursor: pointer
+}
+
+.radio input[type=radio], .radio-inline input[type=radio], .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox] {
+ float: left;
+ margin-left: -20px
+}
+
+.radio + .radio, .checkbox + .checkbox {
+ margin-top: -5px
+}
+
+.radio-inline, .checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ vertical-align: middle;
+ font-weight: 400;
+ cursor: pointer
+}
+
+.radio-inline + .radio-inline, .checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px
+}
+
+input[type=radio][disabled], input[type=checkbox][disabled], .radio[disabled], .radio-inline[disabled], .checkbox[disabled], .checkbox-inline[disabled], fieldset[disabled] input[type=radio], fieldset[disabled] input[type=checkbox], fieldset[disabled] .radio, fieldset[disabled] .radio-inline, fieldset[disabled] .checkbox, fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed
+}
+
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-sm {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-sm, select[multiple].input-sm {
+ height: auto
+}
+
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-lg {
+ height: 46px;
+ line-height: 46px
+}
+
+textarea.input-lg, select[multiple].input-lg {
+ height: auto
+}
+
+.has-feedback {
+ position: relative
+}
+
+.has-feedback .form-control {
+ padding-right: 42.5px
+}
+
+.has-feedback .form-control-feedback {
+ position: absolute;
+ top: 25px;
+ right: 0;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center
+}
+
+.has-success .help-block, .has-success .control-label, .has-success .radio, .has-success .checkbox, .has-success .radio-inline, .has-success .checkbox-inline {
+ color: #3c763d
+}
+
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168
+}
+
+.has-success .input-group-addon {
+ color: #3c763d;
+ border-color: #3c763d;
+ background-color: #dff0d8
+}
+
+.has-success .form-control-feedback {
+ color: #3c763d
+}
+
+.has-warning .help-block, .has-warning .control-label, .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, .has-warning .checkbox-inline {
+ color: #8a6d3b
+}
+
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b
+}
+
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ border-color: #8a6d3b;
+ background-color: #fcf8e3
+}
+
+.has-warning .form-control-feedback {
+ color: #8a6d3b
+}
+
+.has-error .help-block, .has-error .control-label, .has-error .radio, .has-error .checkbox, .has-error .radio-inline, .has-error .checkbox-inline {
+ color: #a94442
+}
+
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075)
+}
+
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483
+}
+
+.has-error .input-group-addon {
+ color: #a94442;
+ border-color: #a94442;
+ background-color: #f2dede
+}
+
+.has-error .form-control-feedback {
+ color: #a94442
+}
+
+.form-control-static {
+ margin-bottom: 0
+}
+
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373
+}
+
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .form-inline .input-group > .form-control {
+ width: 100%
+ }
+
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .radio, .form-inline .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ vertical-align: middle
+ }
+
+ .form-inline .radio input[type=radio], .form-inline .checkbox input[type=checkbox] {
+ float: none;
+ margin-left: 0
+ }
+
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0
+ }
+}
+
+.form-horizontal .control-label, .form-horizontal .radio, .form-horizontal .checkbox, .form-horizontal .radio-inline, .form-horizontal .checkbox-inline {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-top: 7px
+}
+
+.form-horizontal .radio, .form-horizontal .checkbox {
+ min-height: 27px
+}
+
+.form-horizontal .form-group {
+ margin-left: -15px;
+ margin-right: -15px
+}
+
+.form-horizontal .form-control-static {
+ padding-top: 7px
+}
+
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right
+ }
+}
+
+.form-horizontal .has-feedback .form-control-feedback {
+ top: 0;
+ right: 15px
+}
+
+.btn {
+ display: inline-block;
+ margin-bottom: 0;
+ font-weight: 400;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ background-image: none;
+ border: 1px solid transparent;
+ white-space: nowrap;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ border-radius: 4px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none
+}
+
+.btn:focus, .btn:active:focus, .btn.active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+.btn:hover, .btn:focus {
+ color: #333;
+ text-decoration: none
+}
+
+.btn:active, .btn.active {
+ outline: 0;
+ background-image: none;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
+}
+
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+ cursor: not-allowed;
+ pointer-events: none;
+ opacity: .65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad
+}
+
+.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ background-image: none
+}
+
+.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default .badge {
+ color: #fff;
+ background-color: #333
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e
+}
+
+.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ background-image: none
+}
+
+.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439
+}
+
+.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ background-image: none
+}
+
+.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc
+}
+
+.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ background-image: none
+}
+
+.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512
+}
+
+.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ background-image: none
+}
+
+.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925
+}
+
+.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ background-image: none
+}
+
+.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff
+}
+
+.btn-link {
+ color: #428bca;
+ font-weight: 400;
+ cursor: pointer;
+ border-radius: 0
+}
+
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+ border-color: transparent
+}
+
+.btn-link:hover, .btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent
+}
+
+.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none
+}
+
+.btn-lg, .btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-sm, .btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-xs, .btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px
+}
+
+input[type=submit].btn-block, input[type=reset].btn-block, input[type=button].btn-block {
+ width: 100%
+}
+
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear
+}
+
+.fade.in {
+ opacity: 1
+}
+
+.collapse {
+ display: none
+}
+
+.collapse.in {
+ display: block
+}
+
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease
+}
+
+@font-face {
+ font-family: 'Glyphicons Halflings';
+ src: url(../fonts/glyphicons-halflings-regular.eot);
+ src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'), url(../fonts/glyphicons-halflings-regular.woff) format('woff'), url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'), url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')
+}
+
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: 400;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale
+}
+
+.glyphicon-asterisk:before {
+ content: "\2a"
+}
+
+.glyphicon-plus:before {
+ content: "\2b"
+}
+
+.glyphicon-euro:before {
+ content: "\20ac"
+}
+
+.glyphicon-minus:before {
+ content: "\2212"
+}
+
+.glyphicon-cloud:before {
+ content: "\2601"
+}
+
+.glyphicon-envelope:before {
+ content: "\2709"
+}
+
+.glyphicon-pencil:before {
+ content: "\270f"
+}
+
+.glyphicon-glass:before {
+ content: "\e001"
+}
+
+.glyphicon-music:before {
+ content: "\e002"
+}
+
+.glyphicon-search:before {
+ content: "\e003"
+}
+
+.glyphicon-heart:before {
+ content: "\e005"
+}
+
+.glyphicon-star:before {
+ content: "\e006"
+}
+
+.glyphicon-star-empty:before {
+ content: "\e007"
+}
+
+.glyphicon-user:before {
+ content: "\e008"
+}
+
+.glyphicon-film:before {
+ content: "\e009"
+}
+
+.glyphicon-th-large:before {
+ content: "\e010"
+}
+
+.glyphicon-th:before {
+ content: "\e011"
+}
+
+.glyphicon-th-list:before {
+ content: "\e012"
+}
+
+.glyphicon-ok:before {
+ content: "\e013"
+}
+
+.glyphicon-remove:before {
+ content: "\e014"
+}
+
+.glyphicon-zoom-in:before {
+ content: "\e015"
+}
+
+.glyphicon-zoom-out:before {
+ content: "\e016"
+}
+
+.glyphicon-off:before {
+ content: "\e017"
+}
+
+.glyphicon-signal:before {
+ content: "\e018"
+}
+
+.glyphicon-cog:before {
+ content: "\e019"
+}
+
+.glyphicon-trash:before {
+ content: "\e020"
+}
+
+.glyphicon-home:before {
+ content: "\e021"
+}
+
+.glyphicon-file:before {
+ content: "\e022"
+}
+
+.glyphicon-time:before {
+ content: "\e023"
+}
+
+.glyphicon-road:before {
+ content: "\e024"
+}
+
+.glyphicon-download-alt:before {
+ content: "\e025"
+}
+
+.glyphicon-download:before {
+ content: "\e026"
+}
+
+.glyphicon-upload:before {
+ content: "\e027"
+}
+
+.glyphicon-inbox:before {
+ content: "\e028"
+}
+
+.glyphicon-play-circle:before {
+ content: "\e029"
+}
+
+.glyphicon-repeat:before {
+ content: "\e030"
+}
+
+.glyphicon-refresh:before {
+ content: "\e031"
+}
+
+.glyphicon-list-alt:before {
+ content: "\e032"
+}
+
+.glyphicon-lock:before {
+ content: "\e033"
+}
+
+.glyphicon-flag:before {
+ content: "\e034"
+}
+
+.glyphicon-headphones:before {
+ content: "\e035"
+}
+
+.glyphicon-volume-off:before {
+ content: "\e036"
+}
+
+.glyphicon-volume-down:before {
+ content: "\e037"
+}
+
+.glyphicon-volume-up:before {
+ content: "\e038"
+}
+
+.glyphicon-qrcode:before {
+ content: "\e039"
+}
+
+.glyphicon-barcode:before {
+ content: "\e040"
+}
+
+.glyphicon-tag:before {
+ content: "\e041"
+}
+
+.glyphicon-tags:before {
+ content: "\e042"
+}
+
+.glyphicon-book:before {
+ content: "\e043"
+}
+
+.glyphicon-bookmark:before {
+ content: "\e044"
+}
+
+.glyphicon-print:before {
+ content: "\e045"
+}
+
+.glyphicon-camera:before {
+ content: "\e046"
+}
+
+.glyphicon-font:before {
+ content: "\e047"
+}
+
+.glyphicon-bold:before {
+ content: "\e048"
+}
+
+.glyphicon-italic:before {
+ content: "\e049"
+}
+
+.glyphicon-text-height:before {
+ content: "\e050"
+}
+
+.glyphicon-text-width:before {
+ content: "\e051"
+}
+
+.glyphicon-align-left:before {
+ content: "\e052"
+}
+
+.glyphicon-align-center:before {
+ content: "\e053"
+}
+
+.glyphicon-align-right:before {
+ content: "\e054"
+}
+
+.glyphicon-align-justify:before {
+ content: "\e055"
+}
+
+.glyphicon-list:before {
+ content: "\e056"
+}
+
+.glyphicon-indent-left:before {
+ content: "\e057"
+}
+
+.glyphicon-indent-right:before {
+ content: "\e058"
+}
+
+.glyphicon-facetime-video:before {
+ content: "\e059"
+}
+
+.glyphicon-picture:before {
+ content: "\e060"
+}
+
+.glyphicon-map-marker:before {
+ content: "\e062"
+}
+
+.glyphicon-adjust:before {
+ content: "\e063"
+}
+
+.glyphicon-tint:before {
+ content: "\e064"
+}
+
+.glyphicon-edit:before {
+ content: "\e065"
+}
+
+.glyphicon-share:before {
+ content: "\e066"
+}
+
+.glyphicon-check:before {
+ content: "\e067"
+}
+
+.glyphicon-move:before {
+ content: "\e068"
+}
+
+.glyphicon-step-backward:before {
+ content: "\e069"
+}
+
+.glyphicon-fast-backward:before {
+ content: "\e070"
+}
+
+.glyphicon-backward:before {
+ content: "\e071"
+}
+
+.glyphicon-play:before {
+ content: "\e072"
+}
+
+.glyphicon-pause:before {
+ content: "\e073"
+}
+
+.glyphicon-stop:before {
+ content: "\e074"
+}
+
+.glyphicon-forward:before {
+ content: "\e075"
+}
+
+.glyphicon-fast-forward:before {
+ content: "\e076"
+}
+
+.glyphicon-step-forward:before {
+ content: "\e077"
+}
+
+.glyphicon-eject:before {
+ content: "\e078"
+}
+
+.glyphicon-chevron-left:before {
+ content: "\e079"
+}
+
+.glyphicon-chevron-right:before {
+ content: "\e080"
+}
+
+.glyphicon-plus-sign:before {
+ content: "\e081"
+}
+
+.glyphicon-minus-sign:before {
+ content: "\e082"
+}
+
+.glyphicon-remove-sign:before {
+ content: "\e083"
+}
+
+.glyphicon-ok-sign:before {
+ content: "\e084"
+}
+
+.glyphicon-question-sign:before {
+ content: "\e085"
+}
+
+.glyphicon-info-sign:before {
+ content: "\e086"
+}
+
+.glyphicon-screenshot:before {
+ content: "\e087"
+}
+
+.glyphicon-remove-circle:before {
+ content: "\e088"
+}
+
+.glyphicon-ok-circle:before {
+ content: "\e089"
+}
+
+.glyphicon-ban-circle:before {
+ content: "\e090"
+}
+
+.glyphicon-arrow-left:before {
+ content: "\e091"
+}
+
+.glyphicon-arrow-right:before {
+ content: "\e092"
+}
+
+.glyphicon-arrow-up:before {
+ content: "\e093"
+}
+
+.glyphicon-arrow-down:before {
+ content: "\e094"
+}
+
+.glyphicon-share-alt:before {
+ content: "\e095"
+}
+
+.glyphicon-resize-full:before {
+ content: "\e096"
+}
+
+.glyphicon-resize-small:before {
+ content: "\e097"
+}
+
+.glyphicon-exclamation-sign:before {
+ content: "\e101"
+}
+
+.glyphicon-gift:before {
+ content: "\e102"
+}
+
+.glyphicon-leaf:before {
+ content: "\e103"
+}
+
+.glyphicon-fire:before {
+ content: "\e104"
+}
+
+.glyphicon-eye-open:before {
+ content: "\e105"
+}
+
+.glyphicon-eye-close:before {
+ content: "\e106"
+}
+
+.glyphicon-warning-sign:before {
+ content: "\e107"
+}
+
+.glyphicon-plane:before {
+ content: "\e108"
+}
+
+.glyphicon-calendar:before {
+ content: "\e109"
+}
+
+.glyphicon-random:before {
+ content: "\e110"
+}
+
+.glyphicon-comment:before {
+ content: "\e111"
+}
+
+.glyphicon-magnet:before {
+ content: "\e112"
+}
+
+.glyphicon-chevron-up:before {
+ content: "\e113"
+}
+
+.glyphicon-chevron-down:before {
+ content: "\e114"
+}
+
+.glyphicon-retweet:before {
+ content: "\e115"
+}
+
+.glyphicon-shopping-cart:before {
+ content: "\e116"
+}
+
+.glyphicon-folder-close:before {
+ content: "\e117"
+}
+
+.glyphicon-folder-open:before {
+ content: "\e118"
+}
+
+.glyphicon-resize-vertical:before {
+ content: "\e119"
+}
+
+.glyphicon-resize-horizontal:before {
+ content: "\e120"
+}
+
+.glyphicon-hdd:before {
+ content: "\e121"
+}
+
+.glyphicon-bullhorn:before {
+ content: "\e122"
+}
+
+.glyphicon-bell:before {
+ content: "\e123"
+}
+
+.glyphicon-certificate:before {
+ content: "\e124"
+}
+
+.glyphicon-thumbs-up:before {
+ content: "\e125"
+}
+
+.glyphicon-thumbs-down:before {
+ content: "\e126"
+}
+
+.glyphicon-hand-right:before {
+ content: "\e127"
+}
+
+.glyphicon-hand-left:before {
+ content: "\e128"
+}
+
+.glyphicon-hand-up:before {
+ content: "\e129"
+}
+
+.glyphicon-hand-down:before {
+ content: "\e130"
+}
+
+.glyphicon-circle-arrow-right:before {
+ content: "\e131"
+}
+
+.glyphicon-circle-arrow-left:before {
+ content: "\e132"
+}
+
+.glyphicon-circle-arrow-up:before {
+ content: "\e133"
+}
+
+.glyphicon-circle-arrow-down:before {
+ content: "\e134"
+}
+
+.glyphicon-globe:before {
+ content: "\e135"
+}
+
+.glyphicon-wrench:before {
+ content: "\e136"
+}
+
+.glyphicon-tasks:before {
+ content: "\e137"
+}
+
+.glyphicon-filter:before {
+ content: "\e138"
+}
+
+.glyphicon-briefcase:before {
+ content: "\e139"
+}
+
+.glyphicon-fullscreen:before {
+ content: "\e140"
+}
+
+.glyphicon-dashboard:before {
+ content: "\e141"
+}
+
+.glyphicon-paperclip:before {
+ content: "\e142"
+}
+
+.glyphicon-heart-empty:before {
+ content: "\e143"
+}
+
+.glyphicon-link:before {
+ content: "\e144"
+}
+
+.glyphicon-phone:before {
+ content: "\e145"
+}
+
+.glyphicon-pushpin:before {
+ content: "\e146"
+}
+
+.glyphicon-usd:before {
+ content: "\e148"
+}
+
+.glyphicon-gbp:before {
+ content: "\e149"
+}
+
+.glyphicon-sort:before {
+ content: "\e150"
+}
+
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151"
+}
+
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152"
+}
+
+.glyphicon-sort-by-order:before {
+ content: "\e153"
+}
+
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154"
+}
+
+.glyphicon-sort-by-attributes:before {
+ content: "\e155"
+}
+
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156"
+}
+
+.glyphicon-unchecked:before {
+ content: "\e157"
+}
+
+.glyphicon-expand:before {
+ content: "\e158"
+}
+
+.glyphicon-collapse-down:before {
+ content: "\e159"
+}
+
+.glyphicon-collapse-up:before {
+ content: "\e160"
+}
+
+.glyphicon-log-in:before {
+ content: "\e161"
+}
+
+.glyphicon-flash:before {
+ content: "\e162"
+}
+
+.glyphicon-log-out:before {
+ content: "\e163"
+}
+
+.glyphicon-new-window:before {
+ content: "\e164"
+}
+
+.glyphicon-record:before {
+ content: "\e165"
+}
+
+.glyphicon-save:before {
+ content: "\e166"
+}
+
+.glyphicon-open:before {
+ content: "\e167"
+}
+
+.glyphicon-saved:before {
+ content: "\e168"
+}
+
+.glyphicon-import:before {
+ content: "\e169"
+}
+
+.glyphicon-export:before {
+ content: "\e170"
+}
+
+.glyphicon-send:before {
+ content: "\e171"
+}
+
+.glyphicon-floppy-disk:before {
+ content: "\e172"
+}
+
+.glyphicon-floppy-saved:before {
+ content: "\e173"
+}
+
+.glyphicon-floppy-remove:before {
+ content: "\e174"
+}
+
+.glyphicon-floppy-save:before {
+ content: "\e175"
+}
+
+.glyphicon-floppy-open:before {
+ content: "\e176"
+}
+
+.glyphicon-credit-card:before {
+ content: "\e177"
+}
+
+.glyphicon-transfer:before {
+ content: "\e178"
+}
+
+.glyphicon-cutlery:before {
+ content: "\e179"
+}
+
+.glyphicon-header:before {
+ content: "\e180"
+}
+
+.glyphicon-compressed:before {
+ content: "\e181"
+}
+
+.glyphicon-earphone:before {
+ content: "\e182"
+}
+
+.glyphicon-phone-alt:before {
+ content: "\e183"
+}
+
+.glyphicon-tower:before {
+ content: "\e184"
+}
+
+.glyphicon-stats:before {
+ content: "\e185"
+}
+
+.glyphicon-sd-video:before {
+ content: "\e186"
+}
+
+.glyphicon-hd-video:before {
+ content: "\e187"
+}
+
+.glyphicon-subtitles:before {
+ content: "\e188"
+}
+
+.glyphicon-sound-stereo:before {
+ content: "\e189"
+}
+
+.glyphicon-sound-dolby:before {
+ content: "\e190"
+}
+
+.glyphicon-sound-5-1:before {
+ content: "\e191"
+}
+
+.glyphicon-sound-6-1:before {
+ content: "\e192"
+}
+
+.glyphicon-sound-7-1:before {
+ content: "\e193"
+}
+
+.glyphicon-copyright-mark:before {
+ content: "\e194"
+}
+
+.glyphicon-registration-mark:before {
+ content: "\e195"
+}
+
+.glyphicon-cloud-download:before {
+ content: "\e197"
+}
+
+.glyphicon-cloud-upload:before {
+ content: "\e198"
+}
+
+.glyphicon-tree-conifer:before {
+ content: "\e199"
+}
+
+.glyphicon-tree-deciduous:before {
+ content: "\e200"
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent
+}
+
+.dropdown {
+ position: relative
+}
+
+.dropdown-toggle:focus {
+ outline: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ font-size: 14px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ background-clip: padding-box
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: 400;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #262626;
+ background-color: #f5f5f5
+}
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #428bca
+}
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ color: #999
+}
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ cursor: not-allowed
+}
+
+.open > .dropdown-menu {
+ display: block
+}
+
+.open > a {
+ outline: 0
+}
+
+.dropdown-menu-right {
+ left: auto;
+ right: 0
+}
+
+.dropdown-menu-left {
+ left: 0;
+ right: auto
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #999
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: 990
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto
+}
+
+.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+ border-top: 0;
+ border-bottom: 4px solid;
+ content: ""
+}
+
+.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ left: auto;
+ right: 0
+ }
+
+ .navbar-right .dropdown-menu-left {
+ left: 0;
+ right: auto
+ }
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle
+}
+
+.btn-group > .btn, .btn-group-vertical > .btn {
+ position: relative;
+ float: left
+}
+
+.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
+ z-index: 2
+}
+
+.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+ outline: 0
+}
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
+ margin-left: -1px
+}
+
+.btn-toolbar {
+ margin-left: -5px
+}
+
+.btn-toolbar .btn-group, .btn-toolbar .input-group {
+ float: left
+}
+
+.btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group {
+ margin-left: 5px
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group > .btn-group {
+ float: left
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px
+}
+
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125)
+}
+
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn .caret {
+ margin-left: 0
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group, .btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate
+}
+
+.btn-group-justified > .btn, .btn-group-justified > .btn-group {
+ float: none;
+ display: table-cell;
+ width: 1%
+}
+
+.btn-group-justified > .btn-group .btn {
+ width: 100%
+}
+
+[data-toggle=buttons] > .btn > input[type=radio], [data-toggle=buttons] > .btn > input[type=checkbox] {
+ display: none
+}
+
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate
+}
+
+.input-group[class*=col-] {
+ float: none;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0
+}
+
+.input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px
+}
+
+textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn, select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px
+}
+
+textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn, select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto
+}
+
+.input-group-addon, .input-group-btn, .input-group .form-control {
+ display: table-cell
+}
+
+.input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child), .input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.input-group-addon, .input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle
+}
+
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px
+}
+
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px
+}
+
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px
+}
+
+.input-group-addon input[type=radio], .input-group-addon input[type=checkbox] {
+ margin-top: 0
+}
+
+.input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.input-group-addon:first-child {
+ border-right: 0
+}
+
+.input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.input-group-addon:last-child {
+ border-left: 0
+}
+
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap
+}
+
+.input-group-btn > .btn {
+ position: relative
+}
+
+.input-group-btn > .btn + .btn {
+ margin-left: -1px
+}
+
+.input-group-btn > .btn:hover, .input-group-btn > .btn:focus, .input-group-btn > .btn:active {
+ z-index: 2
+}
+
+.input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group {
+ margin-right: -1px
+}
+
+.input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group {
+ margin-left: -1px
+}
+
+.nav {
+ margin-bottom: 0;
+ padding-left: 0;
+ list-style: none
+}
+
+.nav > li {
+ position: relative;
+ display: block
+}
+
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px
+}
+
+.nav > li > a:hover, .nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.nav > li.disabled > a {
+ color: #999
+}
+
+.nav > li.disabled > a:hover, .nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ background-color: transparent;
+ cursor: not-allowed
+}
+
+.nav .open > a, .nav .open > a:hover, .nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca
+}
+
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.nav > li > a > img {
+ max-width: none
+}
+
+.nav-tabs {
+ border-bottom: 1px solid #ddd
+}
+
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px
+}
+
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0
+}
+
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd
+}
+
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+ color: #555;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default
+}
+
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0
+}
+
+.nav-tabs.nav-justified > li {
+ float: none
+}
+
+.nav-tabs.nav-justified > li > a {
+ text-align: center;
+ margin-bottom: 5px
+}
+
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0
+ }
+}
+
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px
+}
+
+.nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd
+}
+
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0
+ }
+
+ .nav-tabs.nav-justified > .active > a, .nav-tabs.nav-justified > .active > a:hover, .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff
+ }
+}
+
+.nav-pills > li {
+ float: left
+}
+
+.nav-pills > li > a {
+ border-radius: 4px
+}
+
+.nav-pills > li + li {
+ margin-left: 2px
+}
+
+.nav-pills > li.active > a, .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca
+}
+
+.nav-stacked > li {
+ float: none
+}
+
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0
+}
+
+.nav-justified {
+ width: 100%
+}
+
+.nav-justified > li {
+ float: none
+}
+
+.nav-justified > li > a {
+ text-align: center;
+ margin-bottom: 5px
+}
+
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto
+}
+
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%
+ }
+
+ .nav-justified > li > a {
+ margin-bottom: 0
+ }
+}
+
+.nav-tabs-justified {
+ border-bottom: 0
+}
+
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px
+}
+
+.nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd
+}
+
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0
+ }
+
+ .nav-tabs-justified > .active > a, .nav-tabs-justified > .active > a:hover, .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff
+ }
+}
+
+.tab-content > .tab-pane {
+ display: none
+}
+
+.tab-content > .active {
+ display: block
+}
+
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent
+}
+
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left
+ }
+}
+
+.navbar-collapse {
+ max-height: 340px;
+ overflow-x: visible;
+ padding-right: 15px;
+ padding-left: 15px;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+ -webkit-overflow-scrolling: touch
+}
+
+.navbar-collapse.in {
+ overflow-y: auto
+}
+
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none
+ }
+
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important
+ }
+
+ .navbar-collapse.in {
+ overflow-y: visible
+ }
+
+ .navbar-fixed-top .navbar-collapse, .navbar-static-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse {
+ padding-left: 0;
+ padding-right: 0
+ }
+}
+
+.container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px
+}
+
+@media (min-width: 768px) {
+ .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0
+ }
+}
+
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top, .navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030
+}
+
+@media (min-width: 768px) {
+ .navbar-fixed-top, .navbar-fixed-bottom {
+ border-radius: 0
+ }
+}
+
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px
+}
+
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0
+}
+
+.navbar-brand {
+ float: left;
+ padding: 15px;
+ font-size: 18px;
+ line-height: 20px;
+ height: 50px
+}
+
+.navbar-brand:hover, .navbar-brand:focus {
+ text-decoration: none
+}
+
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px
+ }
+}
+
+.navbar-toggle {
+ position: relative;
+ float: right;
+ margin-right: 15px;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.navbar-toggle:focus {
+ outline: 0
+}
+
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px
+}
+
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px
+}
+
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none
+ }
+}
+
+.navbar-nav {
+ margin: 7.5px -15px
+}
+
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px
+}
+
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a, .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px
+ }
+
+ .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0
+ }
+
+ .navbar-nav > li {
+ float: left
+ }
+
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px
+ }
+
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -15px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important
+ }
+
+ .navbar-right {
+ float: right !important
+ }
+}
+
+.navbar-form {
+ margin-left: -15px;
+ margin-right: -15px;
+ padding: 10px 15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle
+ }
+
+ .navbar-form .input-group > .form-control {
+ width: 100%
+ }
+
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .radio, .navbar-form .checkbox {
+ display: inline-block;
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 0;
+ vertical-align: middle
+ }
+
+ .navbar-form .radio input[type=radio], .navbar-form .checkbox input[type=checkbox] {
+ float: none;
+ margin-left: 0
+ }
+
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0
+ }
+}
+
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px
+ }
+}
+
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ border: 0;
+ margin-left: 0;
+ margin-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none
+ }
+
+ .navbar-form.navbar-right:last-child {
+ margin-right: -15px
+ }
+}
+
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px
+}
+
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px
+}
+
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px
+}
+
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px
+}
+
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-left: 15px;
+ margin-right: 15px
+ }
+
+ .navbar-text.navbar-right:last-child {
+ margin-right: 0
+ }
+}
+
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7
+}
+
+.navbar-default .navbar-brand {
+ color: #777
+}
+
+.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent
+}
+
+.navbar-default .navbar-text {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a {
+ color: #777
+}
+
+.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent
+}
+
+.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .disabled > a, .navbar-default .navbar-nav > .disabled > a:hover, .navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+}
+
+.navbar-default .navbar-toggle {
+ border-color: #ddd
+}
+
+.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
+ background-color: #ddd
+}
+
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888
+}
+
+.navbar-default .navbar-collapse, .navbar-default .navbar-form {
+ border-color: #e7e7e7
+}
+
+.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {
+ background-color: #e7e7e7;
+ color: #555
+}
+
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7
+ }
+
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent
+ }
+}
+
+.navbar-default .navbar-link {
+ color: #777
+}
+
+.navbar-default .navbar-link:hover {
+ color: #333
+}
+
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808
+}
+
+.navbar-inverse .navbar-brand {
+ color: #999
+}
+
+.navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-text {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a {
+ color: #999
+}
+
+.navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+}
+
+.navbar-inverse .navbar-nav > .disabled > a, .navbar-inverse .navbar-nav > .disabled > a:hover, .navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+}
+
+.navbar-inverse .navbar-toggle {
+ border-color: #333
+}
+
+.navbar-inverse .navbar-toggle:hover, .navbar-inverse .navbar-toggle:focus {
+ background-color: #333
+}
+
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff
+}
+
+.navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
+ border-color: #101010
+}
+
+.navbar-inverse .navbar-nav > .open > a, .navbar-inverse .navbar-nav > .open > a:hover, .navbar-inverse .navbar-nav > .open > a:focus {
+ background-color: #080808;
+ color: #fff
+}
+
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808
+ }
+
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent
+ }
+}
+
+.navbar-inverse .navbar-link {
+ color: #999
+}
+
+.navbar-inverse .navbar-link:hover {
+ color: #fff
+}
+
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px
+}
+
+.breadcrumb > li {
+ display: inline-block
+}
+
+.breadcrumb > li + li:before {
+ content: "/\00a0";
+ padding: 0 5px;
+ color: #ccc
+}
+
+.breadcrumb > .active {
+ color: #999
+}
+
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px
+}
+
+.pagination > li {
+ display: inline
+}
+
+.pagination > li > a, .pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ line-height: 1.42857143;
+ text-decoration: none;
+ color: #428bca;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ margin-left: -1px
+}
+
+.pagination > li:first-child > a, .pagination > li:first-child > span {
+ margin-left: 0;
+ border-bottom-left-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.pagination > li:last-child > a, .pagination > li:last-child > span {
+ border-bottom-right-radius: 4px;
+ border-top-right-radius: 4px
+}
+
+.pagination > li > a:hover, .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd
+}
+
+.pagination > .active > a, .pagination > .active > span, .pagination > .active > a:hover, .pagination > .active > span:hover, .pagination > .active > a:focus, .pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+ cursor: default
+}
+
+.pagination > .disabled > span, .pagination > .disabled > span:hover, .pagination > .disabled > span:focus, .pagination > .disabled > a, .pagination > .disabled > a:hover, .pagination > .disabled > a:focus {
+ color: #999;
+ background-color: #fff;
+ border-color: #ddd;
+ cursor: not-allowed
+}
+
+.pagination-lg > li > a, .pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px
+}
+
+.pagination-lg > li:first-child > a, .pagination-lg > li:first-child > span {
+ border-bottom-left-radius: 6px;
+ border-top-left-radius: 6px
+}
+
+.pagination-lg > li:last-child > a, .pagination-lg > li:last-child > span {
+ border-bottom-right-radius: 6px;
+ border-top-right-radius: 6px
+}
+
+.pagination-sm > li > a, .pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px
+}
+
+.pagination-sm > li:first-child > a, .pagination-sm > li:first-child > span {
+ border-bottom-left-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.pagination-sm > li:last-child > a, .pagination-sm > li:last-child > span {
+ border-bottom-right-radius: 3px;
+ border-top-right-radius: 3px
+}
+
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ list-style: none;
+ text-align: center
+}
+
+.pager li {
+ display: inline
+}
+
+.pager li > a, .pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px
+}
+
+.pager li > a:hover, .pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee
+}
+
+.pager .next > a, .pager .next > span {
+ float: right
+}
+
+.pager .previous > a, .pager .previous > span {
+ float: left
+}
+
+.pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span {
+ color: #999;
+ background-color: #fff;
+ cursor: not-allowed
+}
+
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: 700;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em
+}
+
+.label[href]:hover, .label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+.label:empty {
+ display: none
+}
+
+.btn .label {
+ position: relative;
+ top: -1px
+}
+
+.label-default {
+ background-color: #999
+}
+
+.label-default[href]:hover, .label-default[href]:focus {
+ background-color: gray
+}
+
+.label-primary {
+ background-color: #428bca
+}
+
+.label-primary[href]:hover, .label-primary[href]:focus {
+ background-color: #3071a9
+}
+
+.label-success {
+ background-color: #5cb85c
+}
+
+.label-success[href]:hover, .label-success[href]:focus {
+ background-color: #449d44
+}
+
+.label-info {
+ background-color: #5bc0de
+}
+
+.label-info[href]:hover, .label-info[href]:focus {
+ background-color: #31b0d5
+}
+
+.label-warning {
+ background-color: #f0ad4e
+}
+
+.label-warning[href]:hover, .label-warning[href]:focus {
+ background-color: #ec971f
+}
+
+.label-danger {
+ background-color: #d9534f
+}
+
+.label-danger[href]:hover, .label-danger[href]:focus {
+ background-color: #c9302c
+}
+
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: 700;
+ color: #fff;
+ line-height: 1;
+ vertical-align: baseline;
+ white-space: nowrap;
+ text-align: center;
+ background-color: #999;
+ border-radius: 10px
+}
+
+.badge:empty {
+ display: none
+}
+
+.btn .badge {
+ position: relative;
+ top: -1px
+}
+
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px
+}
+
+a.badge:hover, a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer
+}
+
+a.list-group-item.active > .badge, .nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff
+}
+
+.nav-pills > li > a > .badge {
+ margin-left: 3px
+}
+
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee
+}
+
+.jumbotron h1, .jumbotron .h1 {
+ color: inherit
+}
+
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200
+}
+
+.container .jumbotron {
+ border-radius: 6px
+}
+
+.jumbotron .container {
+ max-width: 100%
+}
+
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px
+ }
+
+ .container .jumbotron {
+ padding-left: 60px;
+ padding-right: 60px
+ }
+
+ .jumbotron h1, .jumbotron .h1 {
+ font-size: 63px
+ }
+}
+
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out
+}
+
+.thumbnail > img, .thumbnail a > img {
+ margin-left: auto;
+ margin-right: auto
+}
+
+a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active {
+ border-color: #428bca
+}
+
+.thumbnail .caption {
+ padding: 9px;
+ color: #333
+}
+
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px
+}
+
+.alert h4 {
+ margin-top: 0;
+ color: inherit
+}
+
+.alert .alert-link {
+ font-weight: 700
+}
+
+.alert > p, .alert > ul {
+ margin-bottom: 0
+}
+
+.alert > p + p {
+ margin-top: 5px
+}
+
+.alert-dismissable {
+ padding-right: 35px
+}
+
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit
+}
+
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+ color: #3c763d
+}
+
+.alert-success hr {
+ border-top-color: #c9e2b3
+}
+
+.alert-success .alert-link {
+ color: #2b542c
+}
+
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+ color: #31708f
+}
+
+.alert-info hr {
+ border-top-color: #a6e1ec
+}
+
+.alert-info .alert-link {
+ color: #245269
+}
+
+.alert-warning {
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+ color: #8a6d3b
+}
+
+.alert-warning hr {
+ border-top-color: #f7e1b5
+}
+
+.alert-warning .alert-link {
+ color: #66512c
+}
+
+.alert-danger {
+ background-color: #f2dede;
+ border-color: #ebccd1;
+ color: #a94442
+}
+
+.alert-danger hr {
+ border-top-color: #e4b9c0
+}
+
+.alert-danger .alert-link {
+ color: #843534
+}
+
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0
+ }
+ to {
+ background-position: 0 0
+ }
+}
+
+.progress {
+ overflow: hidden;
+ height: 20px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1)
+}
+
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease
+}
+
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px
+}
+
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite
+}
+
+.progress-bar-success {
+ background-color: #5cb85c
+}
+
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-info {
+ background-color: #5bc0de
+}
+
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-warning {
+ background-color: #f0ad4e
+}
+
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.progress-bar-danger {
+ background-color: #d9534f
+}
+
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent)
+}
+
+.media, .media-body {
+ overflow: hidden;
+ zoom: 1
+}
+
+.media, .media .media {
+ margin-top: 15px
+}
+
+.media:first-child {
+ margin-top: 0
+}
+
+.media-object {
+ display: block
+}
+
+.media-heading {
+ margin: 0 0 5px
+}
+
+.media > .pull-left {
+ margin-right: 10px
+}
+
+.media > .pull-right {
+ margin-left: 10px
+}
+
+.media-list {
+ padding-left: 0;
+ list-style: none
+}
+
+.list-group {
+ margin-bottom: 20px;
+ padding-left: 0
+}
+
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd
+}
+
+.list-group-item:first-child {
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px
+}
+
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px
+}
+
+.list-group-item > .badge {
+ float: right
+}
+
+.list-group-item > .badge + .badge {
+ margin-right: 5px
+}
+
+a.list-group-item {
+ color: #555
+}
+
+a.list-group-item .list-group-item-heading {
+ color: #333
+}
+
+a.list-group-item:hover, a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5
+}
+
+a.list-group-item.active, a.list-group-item.active:hover, a.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+a.list-group-item.active .list-group-item-heading, a.list-group-item.active:hover .list-group-item-heading, a.list-group-item.active:focus .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item.active .list-group-item-text, a.list-group-item.active:hover .list-group-item-text, a.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7
+}
+
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8
+}
+
+a.list-group-item-success {
+ color: #3c763d
+}
+
+a.list-group-item-success .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-success:hover, a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6
+}
+
+a.list-group-item-success.active, a.list-group-item-success.active:hover, a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d
+}
+
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7
+}
+
+a.list-group-item-info {
+ color: #31708f
+}
+
+a.list-group-item-info .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-info:hover, a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3
+}
+
+a.list-group-item-info.active, a.list-group-item-info.active:hover, a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f
+}
+
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3
+}
+
+a.list-group-item-warning {
+ color: #8a6d3b
+}
+
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-warning:hover, a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc
+}
+
+a.list-group-item-warning.active, a.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b
+}
+
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede
+}
+
+a.list-group-item-danger {
+ color: #a94442
+}
+
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit
+}
+
+a.list-group-item-danger:hover, a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc
+}
+
+a.list-group-item-danger.active, a.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442
+}
+
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px
+}
+
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3
+}
+
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05)
+}
+
+.panel-body {
+ padding: 15px
+}
+
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit
+}
+
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit
+}
+
+.panel-title > a {
+ color: inherit
+}
+
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel > .list-group {
+ margin-bottom: 0
+}
+
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0
+}
+
+.panel > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0
+}
+
+.panel > .table, .panel > .table-responsive > .table {
+ margin-bottom: 0
+}
+
+.panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child {
+ border-top-right-radius: 3px;
+ border-top-left-radius: 3px
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, .panel > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px
+}
+
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, .panel > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px
+}
+
+.panel > .table:last-child, .panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px
+}
+
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px
+}
+
+.panel > .panel-body + .table, .panel > .panel-body + .table-responsive {
+ border-top: 1px solid #ddd
+}
+
+.panel > .table > tbody:first-child > tr:first-child th, .panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0
+}
+
+.panel > .table-bordered, .panel > .table-responsive > .table-bordered {
+ border: 0
+}
+
+.panel > .table-bordered > thead > tr > th:first-child, .panel > .table-responsive > .table-bordered > thead > tr > th:first-child, .panel > .table-bordered > tbody > tr > th:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, .panel > .table-bordered > tfoot > tr > th:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, .panel > .table-bordered > thead > tr > td:first-child, .panel > .table-responsive > .table-bordered > thead > tr > td:first-child, .panel > .table-bordered > tbody > tr > td:first-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, .panel > .table-bordered > tfoot > tr > td:first-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0
+}
+
+.panel > .table-bordered > thead > tr > th:last-child, .panel > .table-responsive > .table-bordered > thead > tr > th:last-child, .panel > .table-bordered > tbody > tr > th:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, .panel > .table-bordered > tfoot > tr > th:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, .panel > .table-bordered > thead > tr > td:last-child, .panel > .table-responsive > .table-bordered > thead > tr > td:last-child, .panel > .table-bordered > tbody > tr > td:last-child, .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, .panel > .table-bordered > tfoot > tr > td:last-child, .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0
+}
+
+.panel > .table-bordered > thead > tr:first-child > td, .panel > .table-responsive > .table-bordered > thead > tr:first-child > td, .panel > .table-bordered > tbody > tr:first-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, .panel > .table-bordered > thead > tr:first-child > th, .panel > .table-responsive > .table-bordered > thead > tr:first-child > th, .panel > .table-bordered > tbody > tr:first-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0
+}
+
+.panel > .table-bordered > tbody > tr:last-child > td, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, .panel > .table-bordered > tfoot > tr:last-child > td, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, .panel > .table-bordered > tbody > tr:last-child > th, .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, .panel > .table-bordered > tfoot > tr:last-child > th, .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0
+}
+
+.panel > .table-responsive {
+ border: 0;
+ margin-bottom: 0
+}
+
+.panel-group {
+ margin-bottom: 20px
+}
+
+.panel-group .panel {
+ margin-bottom: 0;
+ border-radius: 4px;
+ overflow: hidden
+}
+
+.panel-group .panel + .panel {
+ margin-top: 5px
+}
+
+.panel-group .panel-heading {
+ border-bottom: 0
+}
+
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd
+}
+
+.panel-group .panel-footer {
+ border-top: 0
+}
+
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd
+}
+
+.panel-default {
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd
+}
+
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd
+}
+
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd
+}
+
+.panel-primary {
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca
+}
+
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca
+}
+
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca
+}
+
+.panel-success {
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6
+}
+
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6
+}
+
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6
+}
+
+.panel-info {
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1
+}
+
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1
+}
+
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1
+}
+
+.panel-warning {
+ border-color: #faebcc
+}
+
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc
+}
+
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc
+}
+
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc
+}
+
+.panel-danger {
+ border-color: #ebccd1
+}
+
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1
+}
+
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1
+}
+
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1
+}
+
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05)
+}
+
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15)
+}
+
+.well-lg {
+ padding: 24px;
+ border-radius: 6px
+}
+
+.well-sm {
+ padding: 9px;
+ border-radius: 3px
+}
+
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: 700;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ opacity: .2;
+ filter: alpha(opacity=20)
+}
+
+.close:hover, .close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+button.close {
+ padding: 0;
+ cursor: pointer;
+ background: 0 0;
+ border: 0;
+ -webkit-appearance: none
+}
+
+.modal-open {
+ overflow: hidden
+}
+
+.modal {
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ -webkit-overflow-scrolling: touch;
+ outline: 0
+}
+
+.modal.fade .modal-dialog {
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out
+}
+
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0)
+}
+
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px
+}
+
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ background-clip: padding-box;
+ outline: 0
+}
+
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000
+}
+
+.modal-backdrop.fade {
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+.modal-backdrop.in {
+ opacity: .5;
+ filter: alpha(opacity=50)
+}
+
+.modal-header {
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+ min-height: 16.42857143px
+}
+
+.modal-header .close {
+ margin-top: -2px
+}
+
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143
+}
+
+.modal-body {
+ position: relative;
+ padding: 20px
+}
+
+.modal-footer {
+ margin-top: 15px;
+ padding: 19px 20px 20px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5
+}
+
+.modal-footer .btn + .btn {
+ margin-left: 5px;
+ margin-bottom: 0
+}
+
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px
+}
+
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0
+}
+
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto
+ }
+
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5)
+ }
+
+ .modal-sm {
+ width: 300px
+ }
+}
+
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px
+ }
+}
+
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ visibility: visible;
+ font-size: 12px;
+ line-height: 1.4;
+ opacity: 0;
+ filter: alpha(opacity=0)
+}
+
+.tooltip.in {
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.tooltip.top {
+ margin-top: -3px;
+ padding: 5px 0
+}
+
+.tooltip.right {
+ margin-left: 3px;
+ padding: 0 5px
+}
+
+.tooltip.bottom {
+ margin-top: 3px;
+ padding: 5px 0
+}
+
+.tooltip.left {
+ margin-left: -3px;
+ padding: 0 5px
+}
+
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px
+}
+
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.top-right .tooltip-arrow {
+ bottom: 0;
+ right: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000
+}
+
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000
+}
+
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000
+}
+
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000
+}
+
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ white-space: normal
+}
+
+.popover.top {
+ margin-top: -10px
+}
+
+.popover.right {
+ margin-left: 10px
+}
+
+.popover.bottom {
+ margin-top: 10px
+}
+
+.popover.left {
+ margin-left: -10px
+}
+
+.popover-title {
+ margin: 0;
+ padding: 8px 14px;
+ font-size: 14px;
+ font-weight: 400;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0
+}
+
+.popover-content {
+ padding: 9px 14px
+}
+
+.popover > .arrow, .popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid
+}
+
+.popover > .arrow {
+ border-width: 11px
+}
+
+.popover > .arrow:after {
+ border-width: 10px;
+ content: ""
+}
+
+.popover.top > .arrow {
+ left: 50%;
+ margin-left: -11px;
+ border-bottom-width: 0;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ bottom: -11px
+}
+
+.popover.top > .arrow:after {
+ content: " ";
+ bottom: 1px;
+ margin-left: -10px;
+ border-bottom-width: 0;
+ border-top-color: #fff
+}
+
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-left-width: 0;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25)
+}
+
+.popover.right > .arrow:after {
+ content: " ";
+ left: 1px;
+ bottom: -10px;
+ border-left-width: 0;
+ border-right-color: #fff
+}
+
+.popover.bottom > .arrow {
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+ top: -11px
+}
+
+.popover.bottom > .arrow:after {
+ content: " ";
+ top: 1px;
+ margin-left: -10px;
+ border-top-width: 0;
+ border-bottom-color: #fff
+}
+
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25)
+}
+
+.popover.left > .arrow:after {
+ content: " ";
+ right: 1px;
+ border-right-width: 0;
+ border-left-color: #fff;
+ bottom: -10px
+}
+
+.carousel {
+ position: relative
+}
+
+.carousel-inner {
+ position: relative;
+ overflow: hidden;
+ width: 100%
+}
+
+.carousel-inner > .item {
+ display: none;
+ position: relative;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left
+}
+
+.carousel-inner > .item > img, .carousel-inner > .item > a > img {
+ line-height: 1
+}
+
+.carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev {
+ display: block
+}
+
+.carousel-inner > .active {
+ left: 0
+}
+
+.carousel-inner > .next, .carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%
+}
+
+.carousel-inner > .next {
+ left: 100%
+}
+
+.carousel-inner > .prev {
+ left: -100%
+}
+
+.carousel-inner > .next.left, .carousel-inner > .prev.right {
+ left: 0
+}
+
+.carousel-inner > .active.left {
+ left: -100%
+}
+
+.carousel-inner > .active.right {
+ left: 100%
+}
+
+.carousel-control {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ width: 15%;
+ opacity: .5;
+ filter: alpha(opacity=50);
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
+}
+
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0, rgba(0, 0, 0, .0001) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)
+}
+
+.carousel-control.right {
+ left: auto;
+ right: 0;
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0, rgba(0, 0, 0, .5) 100%);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)
+}
+
+.carousel-control:hover, .carousel-control:focus {
+ outline: 0;
+ color: #fff;
+ text-decoration: none;
+ opacity: .9;
+ filter: alpha(opacity=90)
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next, .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block
+}
+
+.carousel-control .icon-prev, .carousel-control .glyphicon-chevron-left {
+ left: 50%
+}
+
+.carousel-control .icon-next, .carousel-control .glyphicon-chevron-right {
+ right: 50%
+}
+
+.carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif
+}
+
+.carousel-control .icon-prev:before {
+ content: '\2039'
+}
+
+.carousel-control .icon-next:before {
+ content: '\203a'
+}
+
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ margin-left: -30%;
+ padding-left: 0;
+ list-style: none;
+ text-align: center
+}
+
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ border: 1px solid #fff;
+ border-radius: 10px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0)
+}
+
+.carousel-indicators .active {
+ margin: 0;
+ width: 12px;
+ height: 12px;
+ background-color: #fff
+}
+
+.carousel-caption {
+ position: absolute;
+ left: 15%;
+ right: 15%;
+ bottom: 20px;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6)
+}
+
+.carousel-caption .btn {
+ text-shadow: none
+}
+
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px
+ }
+
+ .carousel-caption {
+ left: 20%;
+ right: 20%;
+ padding-bottom: 30px
+ }
+
+ .carousel-indicators {
+ bottom: 20px
+ }
+}
+
+.clearfix:before, .clearfix:after, .container:before, .container:after, .container-fluid:before, .container-fluid:after, .row:before, .row:after, .form-horizontal .form-group:before, .form-horizontal .form-group:after, .btn-toolbar:before, .btn-toolbar:after, .btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after, .nav:before, .nav:after, .navbar:before, .navbar:after, .navbar-header:before, .navbar-header:after, .navbar-collapse:before, .navbar-collapse:after, .pager:before, .pager:after, .panel-body:before, .panel-body:after, .modal-footer:before, .modal-footer:after {
+ content: " ";
+ display: table
+}
+
+.clearfix:after, .container:after, .container-fluid:after, .row:after, .form-horizontal .form-group:after, .btn-toolbar:after, .btn-group-vertical > .btn-group:after, .nav:after, .navbar:after, .navbar-header:after, .navbar-collapse:after, .pager:after, .panel-body:after, .modal-footer:after {
+ clear: both
+}
+
+.center-block {
+ display: block;
+ margin-left: auto;
+ margin-right: auto
+}
+
+.pull-right {
+ float: right !important
+}
+
+.pull-left {
+ float: left !important
+}
+
+.hide {
+ display: none !important
+}
+
+.show {
+ display: block !important
+}
+
+.invisible {
+ visibility: hidden
+}
+
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important
+}
+
+.affix {
+ position: fixed
+}
+
+@-ms-viewport {
+ width: device-width
+}
+
+.visible-xs, .visible-sm, .visible-md, .visible-lg {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important
+ }
+
+ table.visible-xs {
+ display: table
+ }
+
+ tr.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-xs, td.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important
+ }
+
+ table.visible-sm {
+ display: table
+ }
+
+ tr.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-sm, td.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important
+ }
+
+ table.visible-md {
+ display: table
+ }
+
+ tr.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-md, td.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important
+ }
+
+ table.visible-lg {
+ display: table
+ }
+
+ tr.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-lg, td.visible-lg {
+ display: table-cell !important
+ }
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important
+ }
+}
+
+.visible-print {
+ display: none !important
+}
+
+@media print {
+ .visible-print {
+ display: block !important
+ }
+
+ table.visible-print {
+ display: table
+ }
+
+ tr.visible-print {
+ display: table-row !important
+ }
+
+ th.visible-print, td.visible-print {
+ display: table-cell !important
+ }
+}
+
+@media print {
+ .hidden-print {
+ display: none !important
+ }
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.eot b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 00000000..b93a4953
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.svg b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 00000000..8376c0f4
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.ttf b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 00000000..1413fc60
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 00000000..9e612858
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 00000000..64539b54
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.js
new file mode 100644
index 00000000..89c5c94f
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.js
@@ -0,0 +1,1972 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+if (typeof jQuery === 'undefined') {
+ throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.1.1
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+ // ============================================================
+
+ function transitionEnd() {
+ var el = document.createElement('bootstrap')
+
+ var transEndEventNames = {
+ 'WebkitTransition': 'webkitTransitionEnd',
+ 'MozTransition': 'transitionend',
+ 'OTransition': 'oTransitionEnd otransitionend',
+ 'transition': 'transitionend'
+ }
+
+ for (var name in transEndEventNames) {
+ if (el.style[name] !== undefined) {
+ return {end: transEndEventNames[name]}
+ }
+ }
+
+ return false // explicit for ie8 ( ._.)
+ }
+
+ // http://blog.alexmaccaw.com/css-transitions
+ $.fn.emulateTransitionEnd = function (duration) {
+ var called = false, $el = this
+ $(this).one($.support.transition.end, function () {
+ called = true
+ })
+ var callback = function () {
+ if (!called) $($el).trigger($.support.transition.end)
+ }
+ setTimeout(callback, duration)
+ return this
+ }
+
+ $(function () {
+ $.support.transition = transitionEnd()
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.1.1
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // ALERT CLASS DEFINITION
+ // ======================
+
+ var dismiss = '[data-dismiss="alert"]'
+ var Alert = function (el) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.prototype.close = function (e) {
+ var $this = $(this)
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+ }
+
+ var $parent = $(selector)
+
+ if (e) e.preventDefault()
+
+ if (!$parent.length) {
+ $parent = $this.hasClass('alert') ? $this : $this.parent()
+ }
+
+ $parent.trigger(e = $.Event('close.bs.alert'))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ $parent.trigger('closed.bs.alert').remove()
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent
+ .one($.support.transition.end, removeElement)
+ .emulateTransitionEnd(150) :
+ removeElement()
+ }
+
+
+ // ALERT PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.alert
+
+ $.fn.alert = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.alert')
+
+ if (!data) $this.data('bs.alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ // ALERT NO CONFLICT
+ // =================
+
+ $.fn.alert.noConflict = function () {
+ $.fn.alert = old
+ return this
+ }
+
+
+ // ALERT DATA-API
+ // ==============
+
+ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.1.1
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // BUTTON PUBLIC CLASS DEFINITION
+ // ==============================
+
+ var Button = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Button.DEFAULTS, options)
+ this.isLoading = false
+ }
+
+ Button.DEFAULTS = {
+ loadingText: 'loading...'
+ }
+
+ Button.prototype.setState = function (state) {
+ var d = 'disabled'
+ var $el = this.$element
+ var val = $el.is('input') ? 'val' : 'html'
+ var data = $el.data()
+
+ state = state + 'Text'
+
+ if (!data.resetText) $el.data('resetText', $el[val]())
+
+ $el[val](data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout($.proxy(function () {
+ if (state == 'loadingText') {
+ this.isLoading = true
+ $el.addClass(d).attr(d, d)
+ } else if (this.isLoading) {
+ this.isLoading = false
+ $el.removeClass(d).removeAttr(d)
+ }
+ }, this), 0)
+ }
+
+ Button.prototype.toggle = function () {
+ var changed = true
+ var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+ if ($parent.length) {
+ var $input = this.$element.find('input')
+ if ($input.prop('type') == 'radio') {
+ if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
+ else $parent.find('.active').removeClass('active')
+ }
+ if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
+ }
+
+ if (changed) this.$element.toggleClass('active')
+ }
+
+
+ // BUTTON PLUGIN DEFINITION
+ // ========================
+
+ var old = $.fn.button
+
+ $.fn.button = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.button')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ // BUTTON NO CONFLICT
+ // ==================
+
+ $.fn.button.noConflict = function () {
+ $.fn.button = old
+ return this
+ }
+
+
+ // BUTTON DATA-API
+ // ===============
+
+ $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) {
+ var $btn = $(e.target)
+ if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+ $btn.button('toggle')
+ e.preventDefault()
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.1.1
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // CAROUSEL CLASS DEFINITION
+ // =========================
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.$indicators = this.$element.find('.carousel-indicators')
+ this.options = options
+ this.paused =
+ this.sliding =
+ this.interval =
+ this.$active =
+ this.$items = null
+
+ this.options.pause == 'hover' && this.$element
+ .on('mouseenter', $.proxy(this.pause, this))
+ .on('mouseleave', $.proxy(this.cycle, this))
+ }
+
+ Carousel.DEFAULTS = {
+ interval: 5000,
+ pause: 'hover',
+ wrap: true
+ }
+
+ Carousel.prototype.cycle = function (e) {
+ e || (this.paused = false)
+
+ this.interval && clearInterval(this.interval)
+
+ this.options.interval
+ && !this.paused
+ && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+ return this
+ }
+
+ Carousel.prototype.getActiveIndex = function () {
+ this.$active = this.$element.find('.item.active')
+ this.$items = this.$active.parent().children()
+
+ return this.$items.index(this.$active)
+ }
+
+ Carousel.prototype.to = function (pos) {
+ var that = this
+ var activeIndex = this.getActiveIndex()
+
+ if (pos > (this.$items.length - 1) || pos < 0) return
+
+ if (this.sliding) return this.$element.one('slid.bs.carousel', function () {
+ that.to(pos)
+ })
+ if (activeIndex == pos) return this.pause().cycle()
+
+ return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos]))
+ }
+
+ Carousel.prototype.pause = function (e) {
+ e || (this.paused = true)
+
+ if (this.$element.find('.next, .prev').length && $.support.transition) {
+ this.$element.trigger($.support.transition.end)
+ this.cycle(true)
+ }
+
+ this.interval = clearInterval(this.interval)
+
+ return this
+ }
+
+ Carousel.prototype.next = function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ Carousel.prototype.prev = function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ Carousel.prototype.slide = function (type, next) {
+ var $active = this.$element.find('.item.active')
+ var $next = next || $active[type]()
+ var isCycling = this.interval
+ var direction = type == 'next' ? 'left' : 'right'
+ var fallback = type == 'next' ? 'first' : 'last'
+ var that = this
+
+ if (!$next.length) {
+ if (!this.options.wrap) return
+ $next = this.$element.find('.item')[fallback]()
+ }
+
+ if ($next.hasClass('active')) return this.sliding = false
+
+ var e = $.Event('slide.bs.carousel', {relatedTarget: $next[0], direction: direction})
+ this.$element.trigger(e)
+ if (e.isDefaultPrevented()) return
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ if (this.$indicators.length) {
+ this.$indicators.find('.active').removeClass('active')
+ this.$element.one('slid.bs.carousel', function () {
+ var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()])
+ $nextIndicator && $nextIndicator.addClass('active')
+ })
+ }
+
+ if ($.support.transition && this.$element.hasClass('slide')) {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ $active
+ .one($.support.transition.end, function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () {
+ that.$element.trigger('slid.bs.carousel')
+ }, 0)
+ })
+ .emulateTransitionEnd($active.css('transition-duration').slice(0, -1) * 1000)
+ } else {
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger('slid.bs.carousel')
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+
+ // CAROUSEL PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.carousel
+
+ $.fn.carousel = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.carousel')
+ var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+ var action = typeof option == 'string' ? option : options.slide
+
+ if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (action) data[action]()
+ else if (options.interval) data.pause().cycle()
+ })
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ // CAROUSEL NO CONFLICT
+ // ====================
+
+ $.fn.carousel.noConflict = function () {
+ $.fn.carousel = old
+ return this
+ }
+
+
+ // CAROUSEL DATA-API
+ // =================
+
+ $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) {
+ var $this = $(this), href
+ var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ var options = $.extend({}, $target.data(), $this.data())
+ var slideIndex = $this.attr('data-slide-to')
+ if (slideIndex) options.interval = false
+
+ $target.carousel(options)
+
+ if (slideIndex = $this.attr('data-slide-to')) {
+ $target.data('bs.carousel').to(slideIndex)
+ }
+
+ e.preventDefault()
+ })
+
+ $(window).on('load', function () {
+ $('[data-ride="carousel"]').each(function () {
+ var $carousel = $(this)
+ $carousel.carousel($carousel.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.1.1
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // COLLAPSE PUBLIC CLASS DEFINITION
+ // ================================
+
+ var Collapse = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, Collapse.DEFAULTS, options)
+ this.transitioning = null
+
+ if (this.options.parent) this.$parent = $(this.options.parent)
+ if (this.options.toggle) this.toggle()
+ }
+
+ Collapse.DEFAULTS = {
+ toggle: true
+ }
+
+ Collapse.prototype.dimension = function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ Collapse.prototype.show = function () {
+ if (this.transitioning || this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('show.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var actives = this.$parent && this.$parent.find('> .panel > .in')
+
+ if (actives && actives.length) {
+ var hasData = actives.data('bs.collapse')
+ if (hasData && hasData.transitioning) return
+ actives.collapse('hide')
+ hasData || actives.data('bs.collapse', null)
+ }
+
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ .addClass('collapsing')
+ [dimension](0)
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.$element
+ .removeClass('collapsing')
+ .addClass('collapse in')
+ [dimension]('auto')
+ this.transitioning = 0
+ this.$element.trigger('shown.bs.collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+ this.$element
+ .one($.support.transition.end, $.proxy(complete, this))
+ .emulateTransitionEnd(350)
+ [dimension](this.$element[0][scrollSize])
+ }
+
+ Collapse.prototype.hide = function () {
+ if (this.transitioning || !this.$element.hasClass('in')) return
+
+ var startEvent = $.Event('hide.bs.collapse')
+ this.$element.trigger(startEvent)
+ if (startEvent.isDefaultPrevented()) return
+
+ var dimension = this.dimension()
+
+ this.$element
+ [dimension](this.$element[dimension]())
+ [0].offsetHeight
+
+ this.$element
+ .addClass('collapsing')
+ .removeClass('collapse')
+ .removeClass('in')
+
+ this.transitioning = 1
+
+ var complete = function () {
+ this.transitioning = 0
+ this.$element
+ .trigger('hidden.bs.collapse')
+ .removeClass('collapsing')
+ .addClass('collapse')
+ }
+
+ if (!$.support.transition) return complete.call(this)
+
+ this.$element
+ [dimension](0)
+ .one($.support.transition.end, $.proxy(complete, this))
+ .emulateTransitionEnd(350)
+ }
+
+ Collapse.prototype.toggle = function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+
+ // COLLAPSE PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.collapse
+
+ $.fn.collapse = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.collapse')
+ var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data && options.toggle && option == 'show') option = !option
+ if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ // COLLAPSE NO CONFLICT
+ // ====================
+
+ $.fn.collapse.noConflict = function () {
+ $.fn.collapse = old
+ return this
+ }
+
+
+ // COLLAPSE DATA-API
+ // =================
+
+ $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) {
+ var $this = $(this), href
+ var target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+ var $target = $(target)
+ var data = $target.data('bs.collapse')
+ var option = data ? 'toggle' : $this.data()
+ var parent = $this.attr('data-parent')
+ var $parent = parent && $(parent)
+
+ if (!data || !data.transitioning) {
+ if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed')
+ $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
+ }
+
+ $target.collapse(option)
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.1.1
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // DROPDOWN CLASS DEFINITION
+ // =========================
+
+ var backdrop = '.dropdown-backdrop'
+ var toggle = '[data-toggle=dropdown]'
+ var Dropdown = function (element) {
+ $(element).on('click.bs.dropdown', this.toggle)
+ }
+
+ Dropdown.prototype.toggle = function (e) {
+ var $this = $(this)
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ clearMenus()
+
+ if (!isActive) {
+ if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+ // if mobile we use a backdrop because click events don't delegate
+ $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
+ }
+
+ var relatedTarget = {relatedTarget: this}
+ $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+ if (e.isDefaultPrevented()) return
+
+ $parent
+ .toggleClass('open')
+ .trigger('shown.bs.dropdown', relatedTarget)
+
+ $this.focus()
+ }
+
+ return false
+ }
+
+ Dropdown.prototype.keydown = function (e) {
+ if (!/(38|40|27)/.test(e.keyCode)) return
+
+ var $this = $(this)
+
+ e.preventDefault()
+ e.stopPropagation()
+
+ if ($this.is('.disabled, :disabled')) return
+
+ var $parent = getParent($this)
+ var isActive = $parent.hasClass('open')
+
+ if (!isActive || (isActive && e.keyCode == 27)) {
+ if (e.which == 27) $parent.find(toggle).focus()
+ return $this.click()
+ }
+
+ var desc = ' li:not(.divider):visible a'
+ var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc)
+
+ if (!$items.length) return
+
+ var index = $items.index($items.filter(':focus'))
+
+ if (e.keyCode == 38 && index > 0) index-- // up
+ if (e.keyCode == 40 && index < $items.length - 1) index++ // down
+ if (!~index) index = 0
+
+ $items.eq(index).focus()
+ }
+
+ function clearMenus(e) {
+ $(backdrop).remove()
+ $(toggle).each(function () {
+ var $parent = getParent($(this))
+ var relatedTarget = {relatedTarget: this}
+ if (!$parent.hasClass('open')) return
+ $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+ if (e.isDefaultPrevented()) return
+ $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+ })
+ }
+
+ function getParent($this) {
+ var selector = $this.attr('data-target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ var $parent = selector && $(selector)
+
+ return $parent && $parent.length ? $parent : $this.parent()
+ }
+
+
+ // DROPDOWN PLUGIN DEFINITION
+ // ==========================
+
+ var old = $.fn.dropdown
+
+ $.fn.dropdown = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.dropdown')
+
+ if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ // DROPDOWN NO CONFLICT
+ // ====================
+
+ $.fn.dropdown.noConflict = function () {
+ $.fn.dropdown = old
+ return this
+ }
+
+
+ // APPLY TO STANDARD DROPDOWN ELEMENTS
+ // ===================================
+
+ $(document)
+ .on('click.bs.dropdown.data-api', clearMenus)
+ .on('click.bs.dropdown.data-api', '.dropdown form', function (e) {
+ e.stopPropagation()
+ })
+ .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.1.1
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // MODAL CLASS DEFINITION
+ // ======================
+
+ var Modal = function (element, options) {
+ this.options = options
+ this.$element = $(element)
+ this.$backdrop =
+ this.isShown = null
+
+ if (this.options.remote) {
+ this.$element
+ .find('.modal-content')
+ .load(this.options.remote, $.proxy(function () {
+ this.$element.trigger('loaded.bs.modal')
+ }, this))
+ }
+ }
+
+ Modal.DEFAULTS = {
+ backdrop: true,
+ keyboard: true,
+ show: true
+ }
+
+ Modal.prototype.toggle = function (_relatedTarget) {
+ return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
+ }
+
+ Modal.prototype.show = function (_relatedTarget) {
+ var that = this
+ var e = $.Event('show.bs.modal', {relatedTarget: _relatedTarget})
+
+ this.$element.trigger(e)
+
+ if (this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = true
+
+ this.escape()
+
+ this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+ this.backdrop(function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ if (!that.$element.parent().length) {
+ that.$element.appendTo(document.body) // don't move modals dom position
+ }
+
+ that.$element
+ .show()
+ .scrollTop(0)
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element
+ .addClass('in')
+ .attr('aria-hidden', false)
+
+ that.enforceFocus()
+
+ var e = $.Event('shown.bs.modal', {relatedTarget: _relatedTarget})
+
+ transition ?
+ that.$element.find('.modal-dialog') // wait for modal to slide in
+ .one($.support.transition.end, function () {
+ that.$element.focus().trigger(e)
+ })
+ .emulateTransitionEnd(300) :
+ that.$element.focus().trigger(e)
+ })
+ }
+
+ Modal.prototype.hide = function (e) {
+ if (e) e.preventDefault()
+
+ e = $.Event('hide.bs.modal')
+
+ this.$element.trigger(e)
+
+ if (!this.isShown || e.isDefaultPrevented()) return
+
+ this.isShown = false
+
+ this.escape()
+
+ $(document).off('focusin.bs.modal')
+
+ this.$element
+ .removeClass('in')
+ .attr('aria-hidden', true)
+ .off('click.dismiss.bs.modal')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$element
+ .one($.support.transition.end, $.proxy(this.hideModal, this))
+ .emulateTransitionEnd(300) :
+ this.hideModal()
+ }
+
+ Modal.prototype.enforceFocus = function () {
+ $(document)
+ .off('focusin.bs.modal') // guard against infinite focus loop
+ .on('focusin.bs.modal', $.proxy(function (e) {
+ if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+ this.$element.focus()
+ }
+ }, this))
+ }
+
+ Modal.prototype.escape = function () {
+ if (this.isShown && this.options.keyboard) {
+ this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) {
+ e.which == 27 && this.hide()
+ }, this))
+ } else if (!this.isShown) {
+ this.$element.off('keyup.dismiss.bs.modal')
+ }
+ }
+
+ Modal.prototype.hideModal = function () {
+ var that = this
+ this.$element.hide()
+ this.backdrop(function () {
+ that.removeBackdrop()
+ that.$element.trigger('hidden.bs.modal')
+ })
+ }
+
+ Modal.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ Modal.prototype.backdrop = function (callback) {
+ var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+ .appendTo(document.body)
+
+ this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+ if (e.target !== e.currentTarget) return
+ this.options.backdrop == 'static'
+ ? this.$element[0].focus.call(this.$element[0])
+ : this.hide.call(this)
+ }, this))
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ if (!callback) return
+
+ doAnimate ?
+ this.$backdrop
+ .one($.support.transition.end, callback)
+ .emulateTransitionEnd(150) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ this.$backdrop
+ .one($.support.transition.end, callback)
+ .emulateTransitionEnd(150) :
+ callback()
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+
+ // MODAL PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.modal
+
+ $.fn.modal = function (option, _relatedTarget) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.modal')
+ var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+ if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option](_relatedTarget)
+ else if (options.show) data.show(_relatedTarget)
+ })
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ // MODAL NO CONFLICT
+ // =================
+
+ $.fn.modal.noConflict = function () {
+ $.fn.modal = old
+ return this
+ }
+
+
+ // MODAL DATA-API
+ // ==============
+
+ $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+ var $this = $(this)
+ var href = $this.attr('href')
+ var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
+ var option = $target.data('bs.modal') ? 'toggle' : $.extend({remote: !/#/.test(href) && href}, $target.data(), $this.data())
+
+ if ($this.is('a')) e.preventDefault()
+
+ $target
+ .modal(option, this)
+ .one('hide', function () {
+ $this.is(':visible') && $this.focus()
+ })
+ })
+
+ $(document)
+ .on('show.bs.modal', '.modal', function () {
+ $(document.body).addClass('modal-open')
+ })
+ .on('hidden.bs.modal', '.modal', function () {
+ $(document.body).removeClass('modal-open')
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.1.1
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TOOLTIP PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Tooltip = function (element, options) {
+ this.type =
+ this.options =
+ this.enabled =
+ this.timeout =
+ this.hoverState =
+ this.$element = null
+
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.DEFAULTS = {
+ animation: true,
+ placement: 'top',
+ selector: false,
+ template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: 'hover focus',
+ title: '',
+ delay: 0,
+ html: false,
+ container: false
+ }
+
+ Tooltip.prototype.init = function (type, element, options) {
+ this.enabled = true
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+
+ var triggers = this.options.trigger.split(' ')
+
+ for (var i = triggers.length; i--;) {
+ var trigger = triggers[i]
+
+ if (trigger == 'click') {
+ this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+ } else if (trigger != 'manual') {
+ var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
+ var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+ this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+ }
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, {trigger: 'manual', selector: ''})) :
+ this.fixTitle()
+ }
+
+ Tooltip.prototype.getDefaults = function () {
+ return Tooltip.DEFAULTS
+ }
+
+ Tooltip.prototype.getOptions = function (options) {
+ options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay,
+ hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ Tooltip.prototype.getDelegateOptions = function () {
+ var options = {}
+ var defaults = this.getDefaults()
+
+ this._options && $.each(this._options, function (key, value) {
+ if (defaults[key] != value) options[key] = value
+ })
+
+ return options
+ }
+
+ Tooltip.prototype.enter = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'in'
+
+ if (!self.options.delay || !self.options.delay.show) return self.show()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'in') self.show()
+ }, self.options.delay.show)
+ }
+
+ Tooltip.prototype.leave = function (obj) {
+ var self = obj instanceof this.constructor ?
+ obj : $(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type)
+
+ clearTimeout(self.timeout)
+
+ self.hoverState = 'out'
+
+ if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+ self.timeout = setTimeout(function () {
+ if (self.hoverState == 'out') self.hide()
+ }, self.options.delay.hide)
+ }
+
+ Tooltip.prototype.show = function () {
+ var e = $.Event('show.bs.' + this.type)
+
+ if (this.hasContent() && this.enabled) {
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+ var that = this;
+
+ var $tip = this.tip()
+
+ this.setContent()
+
+ if (this.options.animation) $tip.addClass('fade')
+
+ var placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ var autoToken = /\s?auto?\s?/i
+ var autoPlace = autoToken.test(placement)
+ if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+ $tip
+ .detach()
+ .css({top: 0, left: 0, display: 'block'})
+ .addClass(placement)
+
+ this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+
+ var pos = this.getPosition()
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (autoPlace) {
+ var $parent = this.$element.parent()
+
+ var orgPlacement = placement
+ var docScroll = document.documentElement.scrollTop || document.body.scrollTop
+ var parentWidth = this.options.container == 'body' ? window.innerWidth : $parent.outerWidth()
+ var parentHeight = this.options.container == 'body' ? window.innerHeight : $parent.outerHeight()
+ var parentLeft = this.options.container == 'body' ? 0 : $parent.offset().left
+
+ placement = placement == 'bottom' && pos.top + pos.height + actualHeight - docScroll > parentHeight ? 'top' :
+ placement == 'top' && pos.top - docScroll - actualHeight < 0 ? 'bottom' :
+ placement == 'right' && pos.right + actualWidth > parentWidth ? 'left' :
+ placement == 'left' && pos.left - actualWidth < parentLeft ? 'right' :
+ placement
+
+ $tip
+ .removeClass(orgPlacement)
+ .addClass(placement)
+ }
+
+ var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+ this.applyPlacement(calculatedOffset, placement)
+ this.hoverState = null
+
+ var complete = function () {
+ that.$element.trigger('shown.bs.' + that.type)
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one($.support.transition.end, complete)
+ .emulateTransitionEnd(150) :
+ complete()
+ }
+ }
+
+ Tooltip.prototype.applyPlacement = function (offset, placement) {
+ var replace
+ var $tip = this.tip()
+ var width = $tip[0].offsetWidth
+ var height = $tip[0].offsetHeight
+
+ // manually read margins because getBoundingClientRect includes difference
+ var marginTop = parseInt($tip.css('margin-top'), 10)
+ var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+ // we must check for NaN for ie 8/9
+ if (isNaN(marginTop)) marginTop = 0
+ if (isNaN(marginLeft)) marginLeft = 0
+
+ offset.top = offset.top + marginTop
+ offset.left = offset.left + marginLeft
+
+ // $.fn.offset doesn't round pixel values
+ // so we use setOffset directly with our own function B-0
+ $.offset.setOffset($tip[0], $.extend({
+ using: function (props) {
+ $tip.css({
+ top: Math.round(props.top),
+ left: Math.round(props.left)
+ })
+ }
+ }, offset), 0)
+
+ $tip.addClass('in')
+
+ // check to see if placing tip in new offset caused the tip to resize itself
+ var actualWidth = $tip[0].offsetWidth
+ var actualHeight = $tip[0].offsetHeight
+
+ if (placement == 'top' && actualHeight != height) {
+ replace = true
+ offset.top = offset.top + height - actualHeight
+ }
+
+ if (/bottom|top/.test(placement)) {
+ var delta = 0
+
+ if (offset.left < 0) {
+ delta = offset.left * -2
+ offset.left = 0
+
+ $tip.offset(offset)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+ }
+
+ this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
+ } else {
+ this.replaceArrow(actualHeight - height, actualHeight, 'top')
+ }
+
+ if (replace) $tip.offset(offset)
+ }
+
+ Tooltip.prototype.replaceArrow = function (delta, dimension, position) {
+ this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + '%') : '')
+ }
+
+ Tooltip.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+
+ $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ Tooltip.prototype.hide = function () {
+ var that = this
+ var $tip = this.tip()
+ var e = $.Event('hide.bs.' + this.type)
+
+ function complete() {
+ if (that.hoverState != 'in') $tip.detach()
+ that.$element.trigger('hidden.bs.' + that.type)
+ }
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ $tip.removeClass('in')
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ $tip
+ .one($.support.transition.end, complete)
+ .emulateTransitionEnd(150) :
+ complete()
+
+ this.hoverState = null
+
+ return this
+ }
+
+ Tooltip.prototype.fixTitle = function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+ }
+ }
+
+ Tooltip.prototype.hasContent = function () {
+ return this.getTitle()
+ }
+
+ Tooltip.prototype.getPosition = function () {
+ var el = this.$element[0]
+ return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
+ width: el.offsetWidth,
+ height: el.offsetHeight
+ }, this.$element.offset())
+ }
+
+ Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+ return placement == 'bottom' ? {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} :
+ placement == 'top' ? {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} :
+ placement == 'left' ? {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} :
+ /* placement == 'right' */ {
+ top: pos.top + pos.height / 2 - actualHeight / 2,
+ left: pos.left + pos.width
+ }
+ }
+
+ Tooltip.prototype.getTitle = function () {
+ var title
+ var $e = this.$element
+ var o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ return title
+ }
+
+ Tooltip.prototype.tip = function () {
+ return this.$tip = this.$tip || $(this.options.template)
+ }
+
+ Tooltip.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')
+ }
+
+ Tooltip.prototype.validate = function () {
+ if (!this.$element[0].parentNode) {
+ this.hide()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ Tooltip.prototype.enable = function () {
+ this.enabled = true
+ }
+
+ Tooltip.prototype.disable = function () {
+ this.enabled = false
+ }
+
+ Tooltip.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }
+
+ Tooltip.prototype.toggle = function (e) {
+ var self = e ? $(e.currentTarget)[this.type](this.getDelegateOptions()).data('bs.' + this.type) : this
+ self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+ }
+
+ Tooltip.prototype.destroy = function () {
+ clearTimeout(this.timeout)
+ this.hide().$element.off('.' + this.type).removeData('bs.' + this.type)
+ }
+
+
+ // TOOLTIP PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.tooltip
+
+ $.fn.tooltip = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tooltip')
+ var options = typeof option == 'object' && option
+
+ if (!data && option == 'destroy') return
+ if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+
+ // TOOLTIP NO CONFLICT
+ // ===================
+
+ $.fn.tooltip.noConflict = function () {
+ $.fn.tooltip = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.1.1
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // POPOVER PUBLIC CLASS DEFINITION
+ // ===============================
+
+ var Popover = function (element, options) {
+ this.init('popover', element, options)
+ }
+
+ if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+ Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+ placement: 'right',
+ trigger: 'click',
+ content: '',
+ template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ })
+
+
+ // NOTE: POPOVER EXTENDS tooltip.js
+ // ================================
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+ Popover.prototype.constructor = Popover
+
+ Popover.prototype.getDefaults = function () {
+ return Popover.DEFAULTS
+ }
+
+ Popover.prototype.setContent = function () {
+ var $tip = this.tip()
+ var title = this.getTitle()
+ var content = this.getContent()
+
+ $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+ $tip.find('.popover-content')[ // we use append for html objects to maintain js events
+ this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+ ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+
+ // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+ // this manually by checking the contents.
+ if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+ }
+
+ Popover.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ Popover.prototype.getContent = function () {
+ var $e = this.$element
+ var o = this.options
+
+ return $e.attr('data-content')
+ || (typeof o.content == 'function' ?
+ o.content.call($e[0]) :
+ o.content)
+ }
+
+ Popover.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find('.arrow')
+ }
+
+ Popover.prototype.tip = function () {
+ if (!this.$tip) this.$tip = $(this.options.template)
+ return this.$tip
+ }
+
+
+ // POPOVER PLUGIN DEFINITION
+ // =========================
+
+ var old = $.fn.popover
+
+ $.fn.popover = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.popover')
+ var options = typeof option == 'object' && option
+
+ if (!data && option == 'destroy') return
+ if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+
+ // POPOVER NO CONFLICT
+ // ===================
+
+ $.fn.popover.noConflict = function () {
+ $.fn.popover = old
+ return this
+ }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.1.1
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // SCROLLSPY CLASS DEFINITION
+ // ==========================
+
+ function ScrollSpy(element, options) {
+ var href
+ var process = $.proxy(this.process, this)
+
+ this.$element = $(element).is('body') ? $(window) : $(element)
+ this.$body = $('body')
+ this.$scrollElement = this.$element.on('scroll.bs.scroll-spy.data-api', process)
+ this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
+ this.selector = (this.options.target
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.offsets = $([])
+ this.targets = $([])
+ this.activeTarget = null
+
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.DEFAULTS = {
+ offset: 10
+ }
+
+ ScrollSpy.prototype.refresh = function () {
+ var offsetMethod = this.$element[0] == window ? 'offset' : 'position'
+
+ this.offsets = $([])
+ this.targets = $([])
+
+ var self = this
+ var $targets = this.$body
+ .find(this.selector)
+ .map(function () {
+ var $el = $(this)
+ var href = $el.data('target') || $el.attr('href')
+ var $href = /^#./.test(href) && $(href)
+
+ return ($href
+ && $href.length
+ && $href.is(':visible')
+ && [[$href[offsetMethod]().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href]]) || null
+ })
+ .sort(function (a, b) {
+ return a[0] - b[0]
+ })
+ .each(function () {
+ self.offsets.push(this[0])
+ self.targets.push(this[1])
+ })
+ }
+
+ ScrollSpy.prototype.process = function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight
+ var maxScroll = scrollHeight - this.$scrollElement.height()
+ var offsets = this.offsets
+ var targets = this.targets
+ var activeTarget = this.activeTarget
+ var i
+
+ if (scrollTop >= maxScroll) {
+ return activeTarget != (i = targets.last()[0]) && this.activate(i)
+ }
+
+ if (activeTarget && scrollTop <= offsets[0]) {
+ return activeTarget != (i = targets[0]) && this.activate(i)
+ }
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate(targets[i])
+ }
+ }
+
+ ScrollSpy.prototype.activate = function (target) {
+ this.activeTarget = target
+
+ $(this.selector)
+ .parentsUntil(this.options.target, '.active')
+ .removeClass('active')
+
+ var selector = this.selector +
+ '[data-target="' + target + '"],' +
+ this.selector + '[href="' + target + '"]'
+
+ var active = $(selector)
+ .parents('li')
+ .addClass('active')
+
+ if (active.parent('.dropdown-menu').length) {
+ active = active
+ .closest('li.dropdown')
+ .addClass('active')
+ }
+
+ active.trigger('activate.bs.scrollspy')
+ }
+
+
+ // SCROLLSPY PLUGIN DEFINITION
+ // ===========================
+
+ var old = $.fn.scrollspy
+
+ $.fn.scrollspy = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.scrollspy')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+
+ // SCROLLSPY NO CONFLICT
+ // =====================
+
+ $.fn.scrollspy.noConflict = function () {
+ $.fn.scrollspy = old
+ return this
+ }
+
+
+ // SCROLLSPY DATA-API
+ // ==================
+
+ $(window).on('load', function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ $spy.scrollspy($spy.data())
+ })
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.1.1
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // TAB CLASS DEFINITION
+ // ====================
+
+ var Tab = function (element) {
+ this.element = $(element)
+ }
+
+ Tab.prototype.show = function () {
+ var $this = this.element
+ var $ul = $this.closest('ul:not(.dropdown-menu)')
+ var selector = $this.data('target')
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ($this.parent('li').hasClass('active')) return
+
+ var previous = $ul.find('.active:last a')[0]
+ var e = $.Event('show.bs.tab', {
+ relatedTarget: previous
+ })
+
+ $this.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ var $target = $(selector)
+
+ this.activate($this.parent('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $this.trigger({
+ type: 'shown.bs.tab',
+ relatedTarget: previous
+ })
+ })
+ }
+
+ Tab.prototype.activate = function (element, container, callback) {
+ var $active = container.find('> .active')
+ var transition = callback
+ && $.support.transition
+ && $active.hasClass('fade')
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+
+ element.addClass('active')
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if (element.parent('.dropdown-menu')) {
+ element.closest('li.dropdown').addClass('active')
+ }
+
+ callback && callback()
+ }
+
+ transition ?
+ $active
+ .one($.support.transition.end, next)
+ .emulateTransitionEnd(150) :
+ next()
+
+ $active.removeClass('in')
+ }
+
+
+ // TAB PLUGIN DEFINITION
+ // =====================
+
+ var old = $.fn.tab
+
+ $.fn.tab = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.tab')
+
+ if (!data) $this.data('bs.tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ // TAB NO CONFLICT
+ // ===============
+
+ $.fn.tab.noConflict = function () {
+ $.fn.tab = old
+ return this
+ }
+
+
+ // TAB DATA-API
+ // ============
+
+ $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.1.1
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+ 'use strict';
+
+ // AFFIX CLASS DEFINITION
+ // ======================
+
+ var Affix = function (element, options) {
+ this.options = $.extend({}, Affix.DEFAULTS, options)
+ this.$window = $(window)
+ .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+ .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
+
+ this.$element = $(element)
+ this.affixed =
+ this.unpin =
+ this.pinnedOffset = null
+
+ this.checkPosition()
+ }
+
+ Affix.RESET = 'affix affix-top affix-bottom'
+
+ Affix.DEFAULTS = {
+ offset: 0
+ }
+
+ Affix.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset) return this.pinnedOffset
+ this.$element.removeClass(Affix.RESET).addClass('affix')
+ var scrollTop = this.$window.scrollTop()
+ var position = this.$element.offset()
+ return (this.pinnedOffset = position.top - scrollTop)
+ }
+
+ Affix.prototype.checkPositionWithEventLoop = function () {
+ setTimeout($.proxy(this.checkPosition, this), 1)
+ }
+
+ Affix.prototype.checkPosition = function () {
+ if (!this.$element.is(':visible')) return
+
+ var scrollHeight = $(document).height()
+ var scrollTop = this.$window.scrollTop()
+ var position = this.$element.offset()
+ var offset = this.options.offset
+ var offsetTop = offset.top
+ var offsetBottom = offset.bottom
+
+ if (this.affixed == 'top') position.top += scrollTop
+
+ if (typeof offset != 'object') offsetBottom = offsetTop = offset
+ if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
+ if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+ var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false :
+ offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' :
+ offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
+
+ if (this.affixed === affix) return
+ if (this.unpin) this.$element.css('top', '')
+
+ var affixType = 'affix' + (affix ? '-' + affix : '')
+ var e = $.Event(affixType + '.bs.affix')
+
+ this.$element.trigger(e)
+
+ if (e.isDefaultPrevented()) return
+
+ this.affixed = affix
+ this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+ this.$element
+ .removeClass(Affix.RESET)
+ .addClass(affixType)
+ .trigger($.Event(affixType.replace('affix', 'affixed')))
+
+ if (affix == 'bottom') {
+ this.$element.offset({top: scrollHeight - offsetBottom - this.$element.height()})
+ }
+ }
+
+
+ // AFFIX PLUGIN DEFINITION
+ // =======================
+
+ var old = $.fn.affix
+
+ $.fn.affix = function (option) {
+ return this.each(function () {
+ var $this = $(this)
+ var data = $this.data('bs.affix')
+ var options = typeof option == 'object' && option
+
+ if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.affix.Constructor = Affix
+
+
+ // AFFIX NO CONFLICT
+ // =================
+
+ $.fn.affix.noConflict = function () {
+ $.fn.affix = old
+ return this
+ }
+
+
+ // AFFIX DATA-API
+ // ==============
+
+ $(window).on('load', function () {
+ $('[data-spy="affix"]').each(function () {
+ var $spy = $(this)
+ var data = $spy.data()
+
+ data.offset = data.offset || {}
+
+ if (data.offsetBottom) data.offset.bottom = data.offsetBottom
+ if (data.offsetTop) data.offset.top = data.offsetTop
+
+ $spy.affix(data)
+ })
+ })
+
+}(jQuery);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.min.js
new file mode 100644
index 00000000..4d171b85
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,619 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+if ("undefined" == typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");
++function (a) {
+ "use strict";
+ function b() {
+ var a = document.createElement("bootstrap"), b = {
+ WebkitTransition: "webkitTransitionEnd",
+ MozTransition: "transitionend",
+ OTransition: "oTransitionEnd otransitionend",
+ transition: "transitionend"
+ };
+ for (var c in b)if (void 0 !== a.style[c])return {end: b[c]};
+ return !1
+ }
+
+ a.fn.emulateTransitionEnd = function (b) {
+ var c = !1, d = this;
+ a(this).one(a.support.transition.end, function () {
+ c = !0
+ });
+ var e = function () {
+ c || a(d).trigger(a.support.transition.end)
+ };
+ return setTimeout(e, b), this
+ }, a(function () {
+ a.support.transition = b()
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = '[data-dismiss="alert"]', c = function (c) {
+ a(c).on("click", b, this.close)
+ };
+ c.prototype.close = function (b) {
+ function c() {
+ f.trigger("closed.bs.alert").remove()
+ }
+
+ var d = a(this), e = d.attr("data-target");
+ e || (e = d.attr("href"), e = e && e.replace(/.*(?=#[^\s]*$)/, ""));
+ var f = a(e);
+ b && b.preventDefault(), f.length || (f = d.hasClass("alert") ? d : d.parent()), f.trigger(b = a.Event("close.bs.alert")), b.isDefaultPrevented() || (f.removeClass("in"), a.support.transition && f.hasClass("fade") ? f.one(a.support.transition.end, c).emulateTransitionEnd(150) : c())
+ };
+ var d = a.fn.alert;
+ a.fn.alert = function (b) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.alert");
+ e || d.data("bs.alert", e = new c(this)), "string" == typeof b && e[b].call(d)
+ })
+ }, a.fn.alert.Constructor = c, a.fn.alert.noConflict = function () {
+ return a.fn.alert = d, this
+ }, a(document).on("click.bs.alert.data-api", b, c.prototype.close)
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.isLoading = !1
+ };
+ b.DEFAULTS = {loadingText: "loading..."}, b.prototype.setState = function (b) {
+ var c = "disabled", d = this.$element, e = d.is("input") ? "val" : "html", f = d.data();
+ b += "Text", f.resetText || d.data("resetText", d[e]()), d[e](f[b] || this.options[b]), setTimeout(a.proxy(function () {
+ "loadingText" == b ? (this.isLoading = !0, d.addClass(c).attr(c, c)) : this.isLoading && (this.isLoading = !1, d.removeClass(c).removeAttr(c))
+ }, this), 0)
+ }, b.prototype.toggle = function () {
+ var a = !0, b = this.$element.closest('[data-toggle="buttons"]');
+ if (b.length) {
+ var c = this.$element.find("input");
+ "radio" == c.prop("type") && (c.prop("checked") && this.$element.hasClass("active") ? a = !1 : b.find(".active").removeClass("active")), a && c.prop("checked", !this.$element.hasClass("active")).trigger("change")
+ }
+ a && this.$element.toggleClass("active")
+ };
+ var c = a.fn.button;
+ a.fn.button = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.button"), f = "object" == typeof c && c;
+ e || d.data("bs.button", e = new b(this, f)), "toggle" == c ? e.toggle() : c && e.setState(c)
+ })
+ }, a.fn.button.Constructor = b, a.fn.button.noConflict = function () {
+ return a.fn.button = c, this
+ }, a(document).on("click.bs.button.data-api", "[data-toggle^=button]", function (b) {
+ var c = a(b.target);
+ c.hasClass("btn") || (c = c.closest(".btn")), c.button("toggle"), b.preventDefault()
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b, c) {
+ this.$element = a(b), this.$indicators = this.$element.find(".carousel-indicators"), this.options = c, this.paused = this.sliding = this.interval = this.$active = this.$items = null, "hover" == this.options.pause && this.$element.on("mouseenter", a.proxy(this.pause, this)).on("mouseleave", a.proxy(this.cycle, this))
+ };
+ b.DEFAULTS = {interval: 5e3, pause: "hover", wrap: !0}, b.prototype.cycle = function (b) {
+ return b || (this.paused = !1), this.interval && clearInterval(this.interval), this.options.interval && !this.paused && (this.interval = setInterval(a.proxy(this.next, this), this.options.interval)), this
+ }, b.prototype.getActiveIndex = function () {
+ return this.$active = this.$element.find(".item.active"), this.$items = this.$active.parent().children(), this.$items.index(this.$active)
+ }, b.prototype.to = function (b) {
+ var c = this, d = this.getActiveIndex();
+ return b > this.$items.length - 1 || 0 > b ? void 0 : this.sliding ? this.$element.one("slid.bs.carousel", function () {
+ c.to(b)
+ }) : d == b ? this.pause().cycle() : this.slide(b > d ? "next" : "prev", a(this.$items[b]))
+ }, b.prototype.pause = function (b) {
+ return b || (this.paused = !0), this.$element.find(".next, .prev").length && a.support.transition && (this.$element.trigger(a.support.transition.end), this.cycle(!0)), this.interval = clearInterval(this.interval), this
+ }, b.prototype.next = function () {
+ return this.sliding ? void 0 : this.slide("next")
+ }, b.prototype.prev = function () {
+ return this.sliding ? void 0 : this.slide("prev")
+ }, b.prototype.slide = function (b, c) {
+ var d = this.$element.find(".item.active"), e = c || d[b](), f = this.interval, g = "next" == b ? "left" : "right", h = "next" == b ? "first" : "last", i = this;
+ if (!e.length) {
+ if (!this.options.wrap)return;
+ e = this.$element.find(".item")[h]()
+ }
+ if (e.hasClass("active"))return this.sliding = !1;
+ var j = a.Event("slide.bs.carousel", {relatedTarget: e[0], direction: g});
+ return this.$element.trigger(j), j.isDefaultPrevented() ? void 0 : (this.sliding = !0, f && this.pause(), this.$indicators.length && (this.$indicators.find(".active").removeClass("active"), this.$element.one("slid.bs.carousel", function () {
+ var b = a(i.$indicators.children()[i.getActiveIndex()]);
+ b && b.addClass("active")
+ })), a.support.transition && this.$element.hasClass("slide") ? (e.addClass(b), e[0].offsetWidth, d.addClass(g), e.addClass(g), d.one(a.support.transition.end, function () {
+ e.removeClass([b, g].join(" ")).addClass("active"), d.removeClass(["active", g].join(" ")), i.sliding = !1, setTimeout(function () {
+ i.$element.trigger("slid.bs.carousel")
+ }, 0)
+ }).emulateTransitionEnd(1e3 * d.css("transition-duration").slice(0, -1))) : (d.removeClass("active"), e.addClass("active"), this.sliding = !1, this.$element.trigger("slid.bs.carousel")), f && this.cycle(), this)
+ };
+ var c = a.fn.carousel;
+ a.fn.carousel = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.carousel"), f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c), g = "string" == typeof c ? c : f.slide;
+ e || d.data("bs.carousel", e = new b(this, f)), "number" == typeof c ? e.to(c) : g ? e[g]() : f.interval && e.pause().cycle()
+ })
+ }, a.fn.carousel.Constructor = b, a.fn.carousel.noConflict = function () {
+ return a.fn.carousel = c, this
+ }, a(document).on("click.bs.carousel.data-api", "[data-slide], [data-slide-to]", function (b) {
+ var c, d = a(this), e = a(d.attr("data-target") || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, "")), f = a.extend({}, e.data(), d.data()), g = d.attr("data-slide-to");
+ g && (f.interval = !1), e.carousel(f), (g = d.attr("data-slide-to")) && e.data("bs.carousel").to(g), b.preventDefault()
+ }), a(window).on("load", function () {
+ a('[data-ride="carousel"]').each(function () {
+ var b = a(this);
+ b.carousel(b.data())
+ })
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.$element = a(c), this.options = a.extend({}, b.DEFAULTS, d), this.transitioning = null, this.options.parent && (this.$parent = a(this.options.parent)), this.options.toggle && this.toggle()
+ };
+ b.DEFAULTS = {toggle: !0}, b.prototype.dimension = function () {
+ var a = this.$element.hasClass("width");
+ return a ? "width" : "height"
+ }, b.prototype.show = function () {
+ if (!this.transitioning && !this.$element.hasClass("in")) {
+ var b = a.Event("show.bs.collapse");
+ if (this.$element.trigger(b), !b.isDefaultPrevented()) {
+ var c = this.$parent && this.$parent.find("> .panel > .in");
+ if (c && c.length) {
+ var d = c.data("bs.collapse");
+ if (d && d.transitioning)return;
+ c.collapse("hide"), d || c.data("bs.collapse", null)
+ }
+ var e = this.dimension();
+ this.$element.removeClass("collapse").addClass("collapsing")[e](0), this.transitioning = 1;
+ var f = function () {
+ this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"), this.transitioning = 0, this.$element.trigger("shown.bs.collapse")
+ };
+ if (!a.support.transition)return f.call(this);
+ var g = a.camelCase(["scroll", e].join("-"));
+ this.$element.one(a.support.transition.end, a.proxy(f, this)).emulateTransitionEnd(350)[e](this.$element[0][g])
+ }
+ }
+ }, b.prototype.hide = function () {
+ if (!this.transitioning && this.$element.hasClass("in")) {
+ var b = a.Event("hide.bs.collapse");
+ if (this.$element.trigger(b), !b.isDefaultPrevented()) {
+ var c = this.dimension();
+ this.$element[c](this.$element[c]())[0].offsetHeight, this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"), this.transitioning = 1;
+ var d = function () {
+ this.transitioning = 0, this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")
+ };
+ return a.support.transition ? void this.$element[c](0).one(a.support.transition.end, a.proxy(d, this)).emulateTransitionEnd(350) : d.call(this)
+ }
+ }
+ }, b.prototype.toggle = function () {
+ this[this.$element.hasClass("in") ? "hide" : "show"]()
+ };
+ var c = a.fn.collapse;
+ a.fn.collapse = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.collapse"), f = a.extend({}, b.DEFAULTS, d.data(), "object" == typeof c && c);
+ !e && f.toggle && "show" == c && (c = !c), e || d.data("bs.collapse", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.collapse.Constructor = b, a.fn.collapse.noConflict = function () {
+ return a.fn.collapse = c, this
+ }, a(document).on("click.bs.collapse.data-api", "[data-toggle=collapse]", function (b) {
+ var c, d = a(this), e = d.attr("data-target") || b.preventDefault() || (c = d.attr("href")) && c.replace(/.*(?=#[^\s]+$)/, ""), f = a(e), g = f.data("bs.collapse"), h = g ? "toggle" : d.data(), i = d.attr("data-parent"), j = i && a(i);
+ g && g.transitioning || (j && j.find('[data-toggle=collapse][data-parent="' + i + '"]').not(d).addClass("collapsed"), d[f.hasClass("in") ? "addClass" : "removeClass"]("collapsed")), f.collapse(h)
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ function b(b) {
+ a(d).remove(), a(e).each(function () {
+ var d = c(a(this)), e = {relatedTarget: this};
+ d.hasClass("open") && (d.trigger(b = a.Event("hide.bs.dropdown", e)), b.isDefaultPrevented() || d.removeClass("open").trigger("hidden.bs.dropdown", e))
+ })
+ }
+
+ function c(b) {
+ var c = b.attr("data-target");
+ c || (c = b.attr("href"), c = c && /#[A-Za-z]/.test(c) && c.replace(/.*(?=#[^\s]*$)/, ""));
+ var d = c && a(c);
+ return d && d.length ? d : b.parent()
+ }
+
+ var d = ".dropdown-backdrop", e = "[data-toggle=dropdown]", f = function (b) {
+ a(b).on("click.bs.dropdown", this.toggle)
+ };
+ f.prototype.toggle = function (d) {
+ var e = a(this);
+ if (!e.is(".disabled, :disabled")) {
+ var f = c(e), g = f.hasClass("open");
+ if (b(), !g) {
+ "ontouchstart"in document.documentElement && !f.closest(".navbar-nav").length && a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click", b);
+ var h = {relatedTarget: this};
+ if (f.trigger(d = a.Event("show.bs.dropdown", h)), d.isDefaultPrevented())return;
+ f.toggleClass("open").trigger("shown.bs.dropdown", h), e.focus()
+ }
+ return !1
+ }
+ }, f.prototype.keydown = function (b) {
+ if (/(38|40|27)/.test(b.keyCode)) {
+ var d = a(this);
+ if (b.preventDefault(), b.stopPropagation(), !d.is(".disabled, :disabled")) {
+ var f = c(d), g = f.hasClass("open");
+ if (!g || g && 27 == b.keyCode)return 27 == b.which && f.find(e).focus(), d.click();
+ var h = " li:not(.divider):visible a", i = f.find("[role=menu]" + h + ", [role=listbox]" + h);
+ if (i.length) {
+ var j = i.index(i.filter(":focus"));
+ 38 == b.keyCode && j > 0 && j--, 40 == b.keyCode && j < i.length - 1 && j++, ~j || (j = 0), i.eq(j).focus()
+ }
+ }
+ }
+ };
+ var g = a.fn.dropdown;
+ a.fn.dropdown = function (b) {
+ return this.each(function () {
+ var c = a(this), d = c.data("bs.dropdown");
+ d || c.data("bs.dropdown", d = new f(this)), "string" == typeof b && d[b].call(c)
+ })
+ }, a.fn.dropdown.Constructor = f, a.fn.dropdown.noConflict = function () {
+ return a.fn.dropdown = g, this
+ }, a(document).on("click.bs.dropdown.data-api", b).on("click.bs.dropdown.data-api", ".dropdown form", function (a) {
+ a.stopPropagation()
+ }).on("click.bs.dropdown.data-api", e, f.prototype.toggle).on("keydown.bs.dropdown.data-api", e + ", [role=menu], [role=listbox]", f.prototype.keydown)
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b, c) {
+ this.options = c, this.$element = a(b), this.$backdrop = this.isShown = null, this.options.remote && this.$element.find(".modal-content").load(this.options.remote, a.proxy(function () {
+ this.$element.trigger("loaded.bs.modal")
+ }, this))
+ };
+ b.DEFAULTS = {backdrop: !0, keyboard: !0, show: !0}, b.prototype.toggle = function (a) {
+ return this[this.isShown ? "hide" : "show"](a)
+ }, b.prototype.show = function (b) {
+ var c = this, d = a.Event("show.bs.modal", {relatedTarget: b});
+ this.$element.trigger(d), this.isShown || d.isDefaultPrevented() || (this.isShown = !0, this.escape(), this.$element.on("click.dismiss.bs.modal", '[data-dismiss="modal"]', a.proxy(this.hide, this)), this.backdrop(function () {
+ var d = a.support.transition && c.$element.hasClass("fade");
+ c.$element.parent().length || c.$element.appendTo(document.body), c.$element.show().scrollTop(0), d && c.$element[0].offsetWidth, c.$element.addClass("in").attr("aria-hidden", !1), c.enforceFocus();
+ var e = a.Event("shown.bs.modal", {relatedTarget: b});
+ d ? c.$element.find(".modal-dialog").one(a.support.transition.end, function () {
+ c.$element.focus().trigger(e)
+ }).emulateTransitionEnd(300) : c.$element.focus().trigger(e)
+ }))
+ }, b.prototype.hide = function (b) {
+ b && b.preventDefault(), b = a.Event("hide.bs.modal"), this.$element.trigger(b), this.isShown && !b.isDefaultPrevented() && (this.isShown = !1, this.escape(), a(document).off("focusin.bs.modal"), this.$element.removeClass("in").attr("aria-hidden", !0).off("click.dismiss.bs.modal"), a.support.transition && this.$element.hasClass("fade") ? this.$element.one(a.support.transition.end, a.proxy(this.hideModal, this)).emulateTransitionEnd(300) : this.hideModal())
+ }, b.prototype.enforceFocus = function () {
+ a(document).off("focusin.bs.modal").on("focusin.bs.modal", a.proxy(function (a) {
+ this.$element[0] === a.target || this.$element.has(a.target).length || this.$element.focus()
+ }, this))
+ }, b.prototype.escape = function () {
+ this.isShown && this.options.keyboard ? this.$element.on("keyup.dismiss.bs.modal", a.proxy(function (a) {
+ 27 == a.which && this.hide()
+ }, this)) : this.isShown || this.$element.off("keyup.dismiss.bs.modal")
+ }, b.prototype.hideModal = function () {
+ var a = this;
+ this.$element.hide(), this.backdrop(function () {
+ a.removeBackdrop(), a.$element.trigger("hidden.bs.modal")
+ })
+ }, b.prototype.removeBackdrop = function () {
+ this.$backdrop && this.$backdrop.remove(), this.$backdrop = null
+ }, b.prototype.backdrop = function (b) {
+ var c = this.$element.hasClass("fade") ? "fade" : "";
+ if (this.isShown && this.options.backdrop) {
+ var d = a.support.transition && c;
+ if (this.$backdrop = a('<div class="modal-backdrop ' + c + '" />').appendTo(document.body), this.$element.on("click.dismiss.bs.modal", a.proxy(function (a) {
+ a.target === a.currentTarget && ("static" == this.options.backdrop ? this.$element[0].focus.call(this.$element[0]) : this.hide.call(this))
+ }, this)), d && this.$backdrop[0].offsetWidth, this.$backdrop.addClass("in"), !b)return;
+ d ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()
+ } else!this.isShown && this.$backdrop ? (this.$backdrop.removeClass("in"), a.support.transition && this.$element.hasClass("fade") ? this.$backdrop.one(a.support.transition.end, b).emulateTransitionEnd(150) : b()) : b && b()
+ };
+ var c = a.fn.modal;
+ a.fn.modal = function (c, d) {
+ return this.each(function () {
+ var e = a(this), f = e.data("bs.modal"), g = a.extend({}, b.DEFAULTS, e.data(), "object" == typeof c && c);
+ f || e.data("bs.modal", f = new b(this, g)), "string" == typeof c ? f[c](d) : g.show && f.show(d)
+ })
+ }, a.fn.modal.Constructor = b, a.fn.modal.noConflict = function () {
+ return a.fn.modal = c, this
+ }, a(document).on("click.bs.modal.data-api", '[data-toggle="modal"]', function (b) {
+ var c = a(this), d = c.attr("href"), e = a(c.attr("data-target") || d && d.replace(/.*(?=#[^\s]+$)/, "")), f = e.data("bs.modal") ? "toggle" : a.extend({remote: !/#/.test(d) && d}, e.data(), c.data());
+ c.is("a") && b.preventDefault(), e.modal(f, this).one("hide", function () {
+ c.is(":visible") && c.focus()
+ })
+ }), a(document).on("show.bs.modal", ".modal", function () {
+ a(document.body).addClass("modal-open")
+ }).on("hidden.bs.modal", ".modal", function () {
+ a(document.body).removeClass("modal-open")
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (a, b) {
+ this.type = this.options = this.enabled = this.timeout = this.hoverState = this.$element = null, this.init("tooltip", a, b)
+ };
+ b.DEFAULTS = {
+ animation: !0,
+ placement: "top",
+ selector: !1,
+ template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+ trigger: "hover focus",
+ title: "",
+ delay: 0,
+ html: !1,
+ container: !1
+ }, b.prototype.init = function (b, c, d) {
+ this.enabled = !0, this.type = b, this.$element = a(c), this.options = this.getOptions(d);
+ for (var e = this.options.trigger.split(" "), f = e.length; f--;) {
+ var g = e[f];
+ if ("click" == g)this.$element.on("click." + this.type, this.options.selector, a.proxy(this.toggle, this)); else if ("manual" != g) {
+ var h = "hover" == g ? "mouseenter" : "focusin", i = "hover" == g ? "mouseleave" : "focusout";
+ this.$element.on(h + "." + this.type, this.options.selector, a.proxy(this.enter, this)), this.$element.on(i + "." + this.type, this.options.selector, a.proxy(this.leave, this))
+ }
+ }
+ this.options.selector ? this._options = a.extend({}, this.options, {
+ trigger: "manual",
+ selector: ""
+ }) : this.fixTitle()
+ }, b.prototype.getDefaults = function () {
+ return b.DEFAULTS
+ }, b.prototype.getOptions = function (b) {
+ return b = a.extend({}, this.getDefaults(), this.$element.data(), b), b.delay && "number" == typeof b.delay && (b.delay = {
+ show: b.delay,
+ hide: b.delay
+ }), b
+ }, b.prototype.getDelegateOptions = function () {
+ var b = {}, c = this.getDefaults();
+ return this._options && a.each(this._options, function (a, d) {
+ c[a] != d && (b[a] = d)
+ }), b
+ }, b.prototype.enter = function (b) {
+ var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
+ return clearTimeout(c.timeout), c.hoverState = "in", c.options.delay && c.options.delay.show ? void(c.timeout = setTimeout(function () {
+ "in" == c.hoverState && c.show()
+ }, c.options.delay.show)) : c.show()
+ }, b.prototype.leave = function (b) {
+ var c = b instanceof this.constructor ? b : a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type);
+ return clearTimeout(c.timeout), c.hoverState = "out", c.options.delay && c.options.delay.hide ? void(c.timeout = setTimeout(function () {
+ "out" == c.hoverState && c.hide()
+ }, c.options.delay.hide)) : c.hide()
+ }, b.prototype.show = function () {
+ var b = a.Event("show.bs." + this.type);
+ if (this.hasContent() && this.enabled) {
+ if (this.$element.trigger(b), b.isDefaultPrevented())return;
+ var c = this, d = this.tip();
+ this.setContent(), this.options.animation && d.addClass("fade");
+ var e = "function" == typeof this.options.placement ? this.options.placement.call(this, d[0], this.$element[0]) : this.options.placement, f = /\s?auto?\s?/i, g = f.test(e);
+ g && (e = e.replace(f, "") || "top"), d.detach().css({
+ top: 0,
+ left: 0,
+ display: "block"
+ }).addClass(e), this.options.container ? d.appendTo(this.options.container) : d.insertAfter(this.$element);
+ var h = this.getPosition(), i = d[0].offsetWidth, j = d[0].offsetHeight;
+ if (g) {
+ var k = this.$element.parent(), l = e, m = document.documentElement.scrollTop || document.body.scrollTop, n = "body" == this.options.container ? window.innerWidth : k.outerWidth(), o = "body" == this.options.container ? window.innerHeight : k.outerHeight(), p = "body" == this.options.container ? 0 : k.offset().left;
+ e = "bottom" == e && h.top + h.height + j - m > o ? "top" : "top" == e && h.top - m - j < 0 ? "bottom" : "right" == e && h.right + i > n ? "left" : "left" == e && h.left - i < p ? "right" : e, d.removeClass(l).addClass(e)
+ }
+ var q = this.getCalculatedOffset(e, h, i, j);
+ this.applyPlacement(q, e), this.hoverState = null;
+ var r = function () {
+ c.$element.trigger("shown.bs." + c.type)
+ };
+ a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, r).emulateTransitionEnd(150) : r()
+ }
+ }, b.prototype.applyPlacement = function (b, c) {
+ var d, e = this.tip(), f = e[0].offsetWidth, g = e[0].offsetHeight, h = parseInt(e.css("margin-top"), 10), i = parseInt(e.css("margin-left"), 10);
+ isNaN(h) && (h = 0), isNaN(i) && (i = 0), b.top = b.top + h, b.left = b.left + i, a.offset.setOffset(e[0], a.extend({
+ using: function (a) {
+ e.css({top: Math.round(a.top), left: Math.round(a.left)})
+ }
+ }, b), 0), e.addClass("in");
+ var j = e[0].offsetWidth, k = e[0].offsetHeight;
+ if ("top" == c && k != g && (d = !0, b.top = b.top + g - k), /bottom|top/.test(c)) {
+ var l = 0;
+ b.left < 0 && (l = -2 * b.left, b.left = 0, e.offset(b), j = e[0].offsetWidth, k = e[0].offsetHeight), this.replaceArrow(l - f + j, j, "left")
+ } else this.replaceArrow(k - g, k, "top");
+ d && e.offset(b)
+ }, b.prototype.replaceArrow = function (a, b, c) {
+ this.arrow().css(c, a ? 50 * (1 - a / b) + "%" : "")
+ }, b.prototype.setContent = function () {
+ var a = this.tip(), b = this.getTitle();
+ a.find(".tooltip-inner")[this.options.html ? "html" : "text"](b), a.removeClass("fade in top bottom left right")
+ }, b.prototype.hide = function () {
+ function b() {
+ "in" != c.hoverState && d.detach(), c.$element.trigger("hidden.bs." + c.type)
+ }
+
+ var c = this, d = this.tip(), e = a.Event("hide.bs." + this.type);
+ return this.$element.trigger(e), e.isDefaultPrevented() ? void 0 : (d.removeClass("in"), a.support.transition && this.$tip.hasClass("fade") ? d.one(a.support.transition.end, b).emulateTransitionEnd(150) : b(), this.hoverState = null, this)
+ }, b.prototype.fixTitle = function () {
+ var a = this.$element;
+ (a.attr("title") || "string" != typeof a.attr("data-original-title")) && a.attr("data-original-title", a.attr("title") || "").attr("title", "")
+ }, b.prototype.hasContent = function () {
+ return this.getTitle()
+ }, b.prototype.getPosition = function () {
+ var b = this.$element[0];
+ return a.extend({}, "function" == typeof b.getBoundingClientRect ? b.getBoundingClientRect() : {
+ width: b.offsetWidth,
+ height: b.offsetHeight
+ }, this.$element.offset())
+ }, b.prototype.getCalculatedOffset = function (a, b, c, d) {
+ return "bottom" == a ? {
+ top: b.top + b.height,
+ left: b.left + b.width / 2 - c / 2
+ } : "top" == a ? {
+ top: b.top - d,
+ left: b.left + b.width / 2 - c / 2
+ } : "left" == a ? {top: b.top + b.height / 2 - d / 2, left: b.left - c} : {
+ top: b.top + b.height / 2 - d / 2,
+ left: b.left + b.width
+ }
+ }, b.prototype.getTitle = function () {
+ var a, b = this.$element, c = this.options;
+ return a = b.attr("data-original-title") || ("function" == typeof c.title ? c.title.call(b[0]) : c.title)
+ }, b.prototype.tip = function () {
+ return this.$tip = this.$tip || a(this.options.template)
+ }, b.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
+ }, b.prototype.validate = function () {
+ this.$element[0].parentNode || (this.hide(), this.$element = null, this.options = null)
+ }, b.prototype.enable = function () {
+ this.enabled = !0
+ }, b.prototype.disable = function () {
+ this.enabled = !1
+ }, b.prototype.toggleEnabled = function () {
+ this.enabled = !this.enabled
+ }, b.prototype.toggle = function (b) {
+ var c = b ? a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs." + this.type) : this;
+ c.tip().hasClass("in") ? c.leave(c) : c.enter(c)
+ }, b.prototype.destroy = function () {
+ clearTimeout(this.timeout), this.hide().$element.off("." + this.type).removeData("bs." + this.type)
+ };
+ var c = a.fn.tooltip;
+ a.fn.tooltip = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.tooltip"), f = "object" == typeof c && c;
+ (e || "destroy" != c) && (e || d.data("bs.tooltip", e = new b(this, f)), "string" == typeof c && e[c]())
+ })
+ }, a.fn.tooltip.Constructor = b, a.fn.tooltip.noConflict = function () {
+ return a.fn.tooltip = c, this
+ }
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (a, b) {
+ this.init("popover", a, b)
+ };
+ if (!a.fn.tooltip)throw new Error("Popover requires tooltip.js");
+ b.DEFAULTS = a.extend({}, a.fn.tooltip.Constructor.DEFAULTS, {
+ placement: "right",
+ trigger: "click",
+ content: "",
+ template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+ }), b.prototype = a.extend({}, a.fn.tooltip.Constructor.prototype), b.prototype.constructor = b, b.prototype.getDefaults = function () {
+ return b.DEFAULTS
+ }, b.prototype.setContent = function () {
+ var a = this.tip(), b = this.getTitle(), c = this.getContent();
+ a.find(".popover-title")[this.options.html ? "html" : "text"](b), a.find(".popover-content")[this.options.html ? "string" == typeof c ? "html" : "append" : "text"](c), a.removeClass("fade top bottom left right in"), a.find(".popover-title").html() || a.find(".popover-title").hide()
+ }, b.prototype.hasContent = function () {
+ return this.getTitle() || this.getContent()
+ }, b.prototype.getContent = function () {
+ var a = this.$element, b = this.options;
+ return a.attr("data-content") || ("function" == typeof b.content ? b.content.call(a[0]) : b.content)
+ }, b.prototype.arrow = function () {
+ return this.$arrow = this.$arrow || this.tip().find(".arrow")
+ }, b.prototype.tip = function () {
+ return this.$tip || (this.$tip = a(this.options.template)), this.$tip
+ };
+ var c = a.fn.popover;
+ a.fn.popover = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.popover"), f = "object" == typeof c && c;
+ (e || "destroy" != c) && (e || d.data("bs.popover", e = new b(this, f)), "string" == typeof c && e[c]())
+ })
+ }, a.fn.popover.Constructor = b, a.fn.popover.noConflict = function () {
+ return a.fn.popover = c, this
+ }
+}(jQuery), +function (a) {
+ "use strict";
+ function b(c, d) {
+ var e, f = a.proxy(this.process, this);
+ this.$element = a(a(c).is("body") ? window : c), this.$body = a("body"), this.$scrollElement = this.$element.on("scroll.bs.scroll-spy.data-api", f), this.options = a.extend({}, b.DEFAULTS, d), this.selector = (this.options.target || (e = a(c).attr("href")) && e.replace(/.*(?=#[^\s]+$)/, "") || "") + " .nav li > a", this.offsets = a([]), this.targets = a([]), this.activeTarget = null, this.refresh(), this.process()
+ }
+
+ b.DEFAULTS = {offset: 10}, b.prototype.refresh = function () {
+ var b = this.$element[0] == window ? "offset" : "position";
+ this.offsets = a([]), this.targets = a([]);
+ {
+ var c = this;
+ this.$body.find(this.selector).map(function () {
+ var d = a(this), e = d.data("target") || d.attr("href"), f = /^#./.test(e) && a(e);
+ return f && f.length && f.is(":visible") && [[f[b]().top + (!a.isWindow(c.$scrollElement.get(0)) && c.$scrollElement.scrollTop()), e]] || null
+ }).sort(function (a, b) {
+ return a[0] - b[0]
+ }).each(function () {
+ c.offsets.push(this[0]), c.targets.push(this[1])
+ })
+ }
+ }, b.prototype.process = function () {
+ var a, b = this.$scrollElement.scrollTop() + this.options.offset, c = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight, d = c - this.$scrollElement.height(), e = this.offsets, f = this.targets, g = this.activeTarget;
+ if (b >= d)return g != (a = f.last()[0]) && this.activate(a);
+ if (g && b <= e[0])return g != (a = f[0]) && this.activate(a);
+ for (a = e.length; a--;)g != f[a] && b >= e[a] && (!e[a + 1] || b <= e[a + 1]) && this.activate(f[a])
+ }, b.prototype.activate = function (b) {
+ this.activeTarget = b, a(this.selector).parentsUntil(this.options.target, ".active").removeClass("active");
+ var c = this.selector + '[data-target="' + b + '"],' + this.selector + '[href="' + b + '"]', d = a(c).parents("li").addClass("active");
+ d.parent(".dropdown-menu").length && (d = d.closest("li.dropdown").addClass("active")), d.trigger("activate.bs.scrollspy")
+ };
+ var c = a.fn.scrollspy;
+ a.fn.scrollspy = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.scrollspy"), f = "object" == typeof c && c;
+ e || d.data("bs.scrollspy", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.scrollspy.Constructor = b, a.fn.scrollspy.noConflict = function () {
+ return a.fn.scrollspy = c, this
+ }, a(window).on("load", function () {
+ a('[data-spy="scroll"]').each(function () {
+ var b = a(this);
+ b.scrollspy(b.data())
+ })
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (b) {
+ this.element = a(b)
+ };
+ b.prototype.show = function () {
+ var b = this.element, c = b.closest("ul:not(.dropdown-menu)"), d = b.data("target");
+ if (d || (d = b.attr("href"), d = d && d.replace(/.*(?=#[^\s]*$)/, "")), !b.parent("li").hasClass("active")) {
+ var e = c.find(".active:last a")[0], f = a.Event("show.bs.tab", {relatedTarget: e});
+ if (b.trigger(f), !f.isDefaultPrevented()) {
+ var g = a(d);
+ this.activate(b.parent("li"), c), this.activate(g, g.parent(), function () {
+ b.trigger({type: "shown.bs.tab", relatedTarget: e})
+ })
+ }
+ }
+ }, b.prototype.activate = function (b, c, d) {
+ function e() {
+ f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"), b.addClass("active"), g ? (b[0].offsetWidth, b.addClass("in")) : b.removeClass("fade"), b.parent(".dropdown-menu") && b.closest("li.dropdown").addClass("active"), d && d()
+ }
+
+ var f = c.find("> .active"), g = d && a.support.transition && f.hasClass("fade");
+ g ? f.one(a.support.transition.end, e).emulateTransitionEnd(150) : e(), f.removeClass("in")
+ };
+ var c = a.fn.tab;
+ a.fn.tab = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.tab");
+ e || d.data("bs.tab", e = new b(this)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.tab.Constructor = b, a.fn.tab.noConflict = function () {
+ return a.fn.tab = c, this
+ }, a(document).on("click.bs.tab.data-api", '[data-toggle="tab"], [data-toggle="pill"]', function (b) {
+ b.preventDefault(), a(this).tab("show")
+ })
+}(jQuery), +function (a) {
+ "use strict";
+ var b = function (c, d) {
+ this.options = a.extend({}, b.DEFAULTS, d), this.$window = a(window).on("scroll.bs.affix.data-api", a.proxy(this.checkPosition, this)).on("click.bs.affix.data-api", a.proxy(this.checkPositionWithEventLoop, this)), this.$element = a(c), this.affixed = this.unpin = this.pinnedOffset = null, this.checkPosition()
+ };
+ b.RESET = "affix affix-top affix-bottom", b.DEFAULTS = {offset: 0}, b.prototype.getPinnedOffset = function () {
+ if (this.pinnedOffset)return this.pinnedOffset;
+ this.$element.removeClass(b.RESET).addClass("affix");
+ var a = this.$window.scrollTop(), c = this.$element.offset();
+ return this.pinnedOffset = c.top - a
+ }, b.prototype.checkPositionWithEventLoop = function () {
+ setTimeout(a.proxy(this.checkPosition, this), 1)
+ }, b.prototype.checkPosition = function () {
+ if (this.$element.is(":visible")) {
+ var c = a(document).height(), d = this.$window.scrollTop(), e = this.$element.offset(), f = this.options.offset, g = f.top, h = f.bottom;
+ "top" == this.affixed && (e.top += d), "object" != typeof f && (h = g = f), "function" == typeof g && (g = f.top(this.$element)), "function" == typeof h && (h = f.bottom(this.$element));
+ var i = null != this.unpin && d + this.unpin <= e.top ? !1 : null != h && e.top + this.$element.height() >= c - h ? "bottom" : null != g && g >= d ? "top" : !1;
+ if (this.affixed !== i) {
+ this.unpin && this.$element.css("top", "");
+ var j = "affix" + (i ? "-" + i : ""), k = a.Event(j + ".bs.affix");
+ this.$element.trigger(k), k.isDefaultPrevented() || (this.affixed = i, this.unpin = "bottom" == i ? this.getPinnedOffset() : null, this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix", "affixed"))), "bottom" == i && this.$element.offset({top: c - h - this.$element.height()}))
+ }
+ }
+ };
+ var c = a.fn.affix;
+ a.fn.affix = function (c) {
+ return this.each(function () {
+ var d = a(this), e = d.data("bs.affix"), f = "object" == typeof c && c;
+ e || d.data("bs.affix", e = new b(this, f)), "string" == typeof c && e[c]()
+ })
+ }, a.fn.affix.Constructor = b, a.fn.affix.noConflict = function () {
+ return a.fn.affix = c, this
+ }, a(window).on("load", function () {
+ a('[data-spy="affix"]').each(function () {
+ var b = a(this), c = b.data();
+ c.offset = c.offset || {}, c.offsetBottom && (c.offset.bottom = c.offsetBottom), c.offsetTop && (c.offset.top = c.offsetTop), b.affix(c)
+ })
+ })
+}(jQuery); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap2-typeahead.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap2-typeahead.min.js
new file mode 100644
index 00000000..a8447c20
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/bootstrap/js/bootstrap2-typeahead.min.js
@@ -0,0 +1,145 @@
+/* =============================================================
+ * bootstrap-typeahead.js v2.3.2
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function (t) {
+ "use strict";
+ var e = function (e, s) {
+ this.$element = t(e), this.options = t.extend({}, t.fn.typeahead.defaults, s), this.matcher = this.options.matcher || this.matcher, this.sorter = this.options.sorter || this.sorter, this.highlighter = this.options.highlighter || this.highlighter, this.updater = this.options.updater || this.updater, this.source = this.options.source, this.$menu = t(this.options.menu), this.shown = !1, this.listen()
+ };
+ e.prototype = {
+ constructor: e, select: function () {
+ var t = this.$menu.find(".active").attr("data-value");
+ return this.$element.val(this.updater(t)).change(), this.hide()
+ }, updater: function (t) {
+ return t
+ }, show: function () {
+ var e = t.extend({}, this.$element.position(), {height: this.$element[0].offsetHeight});
+ return this.$menu.insertAfter(this.$element).css({
+ top: e.top + e.height,
+ left: e.left
+ }).show(), this.shown = !0, this
+ }, hide: function () {
+ return this.$menu.hide(), this.shown = !1, this
+ }, lookup: function () {
+ var e;
+ return this.query = this.$element.val(), !this.query || this.query.length < this.options.minLength ? this.shown ? this.hide() : this : (e = t.isFunction(this.source) ? this.source(this.query, t.proxy(this.process, this)) : this.source, e ? this.process(e) : this)
+ }, process: function (e) {
+ var s = this;
+ return e = t.grep(e, function (t) {
+ return s.matcher(t)
+ }), e = this.sorter(e), e.length ? this.render(e.slice(0, this.options.items)).show() : this.shown ? this.hide() : this
+ }, matcher: function (t) {
+ return ~t.toLowerCase().indexOf(this.query.toLowerCase())
+ }, sorter: function (t) {
+ for (var e, s = [], i = [], n = []; e = t.shift();)e.toLowerCase().indexOf(this.query.toLowerCase()) ? ~e.indexOf(this.query) ? i.push(e) : n.push(e) : s.push(e);
+ return s.concat(i, n)
+ }, highlighter: function (t) {
+ var e = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&");
+ return t.replace(new RegExp("(" + e + ")", "ig"), function (t, e) {
+ return "<strong>" + e + "</strong>"
+ })
+ }, render: function (e) {
+ var s = this;
+ return e = t(e).map(function (e, i) {
+ return e = t(s.options.item).attr("data-value", i), e.find("a").html(s.highlighter(i)), e[0]
+ }), e.first().addClass("active"), this.$menu.html(e), this
+ }, next: function () {
+ var e = this.$menu.find(".active").removeClass("active"), s = e.next();
+ s.length || (s = t(this.$menu.find("li")[0])), s.addClass("active")
+ }, prev: function () {
+ var t = this.$menu.find(".active").removeClass("active"), e = t.prev();
+ e.length || (e = this.$menu.find("li").last()), e.addClass("active")
+ }, listen: function () {
+ this.$element.on("focus", t.proxy(this.focus, this)).on("blur", t.proxy(this.blur, this)).on("keypress", t.proxy(this.keypress, this)).on("keyup", t.proxy(this.keyup, this)), this.eventSupported("keydown") && this.$element.on("keydown", t.proxy(this.keydown, this)), this.$menu.on("click", t.proxy(this.click, this)).on("mouseenter", "li", t.proxy(this.mouseenter, this)).on("mouseleave", "li", t.proxy(this.mouseleave, this))
+ }, eventSupported: function (t) {
+ var e = t in this.$element;
+ return e || (this.$element.setAttribute(t, "return;"), e = "function" == typeof this.$element[t]), e
+ }, move: function (t) {
+ if (this.shown) {
+ switch (t.keyCode) {
+ case 9:
+ case 13:
+ case 27:
+ t.preventDefault();
+ break;
+ case 38:
+ t.preventDefault(), this.prev();
+ break;
+ case 40:
+ t.preventDefault(), this.next()
+ }
+ t.stopPropagation()
+ }
+ }, keydown: function (e) {
+ this.suppressKeyPressRepeat = ~t.inArray(e.keyCode, [40, 38, 9, 13, 27]), this.move(e)
+ }, keypress: function (t) {
+ this.suppressKeyPressRepeat || this.move(t)
+ }, keyup: function (t) {
+ switch (t.keyCode) {
+ case 40:
+ case 38:
+ case 16:
+ case 17:
+ case 18:
+ break;
+ case 9:
+ case 13:
+ if (!this.shown)return;
+ this.select();
+ break;
+ case 27:
+ if (!this.shown)return;
+ this.hide();
+ break;
+ default:
+ this.lookup()
+ }
+ t.stopPropagation(), t.preventDefault()
+ }, focus: function () {
+ this.focused = !0
+ }, blur: function () {
+ this.focused = !1, !this.mousedover && this.shown && this.hide()
+ }, click: function (t) {
+ t.stopPropagation(), t.preventDefault(), this.select(), this.$element.focus()
+ }, mouseenter: function (e) {
+ this.mousedover = !0, this.$menu.find(".active").removeClass("active"), t(e.currentTarget).addClass("active")
+ }, mouseleave: function () {
+ this.mousedover = !1, !this.focused && this.shown && this.hide()
+ }
+ };
+ var s = t.fn.typeahead;
+ t.fn.typeahead = function (s) {
+ return this.each(function () {
+ var i = t(this), n = i.data("typeahead"), h = "object" == typeof s && s;
+ n || i.data("typeahead", n = new e(this, h)), "string" == typeof s && n[s]()
+ })
+ }, t.fn.typeahead.defaults = {
+ source: [],
+ items: 8,
+ menu: '<ul class="typeahead dropdown-menu"></ul>',
+ item: '<li><a href="#"></a></li>',
+ minLength: 1
+ }, t.fn.typeahead.Constructor = e, t.fn.typeahead.noConflict = function () {
+ return t.fn.typeahead = s, this
+ }, t(document).on("focus.typeahead.data-api", '[data-provide="typeahead"]', function () {
+ var e = t(this);
+ e.data("typeahead") || e.typeahead(e.data())
+ })
+}(window.jQuery); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict-wizard.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict-wizard.js
new file mode 100644
index 00000000..acdd63f2
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict-wizard.js
@@ -0,0 +1,129 @@
+var ictWizard = function () {
+
+ var type = "normal";
+
+ if (!jQuery().bootstrapWizard) {
+ return;
+ }
+
+ var isShowTab2 = true;
+ var wizardBody = $('#ict_wizard_body');
+ var form = $('#submit_form');
+
+ var initFormData = function () {
+
+ /* $("#tab1 .form-group").each(function () {
+ $(this).removeClass('has-success');
+ $(this).removeClass('has-error');
+ $(this).find(".help-block[for]").remove();
+ }); */
+ var liSelected = wizardBody.find("li.active");
+ if ($("a", liSelected).attr("href") != "#tab1") {
+ wizardBody.find("a[href*='tab1']").trigger('click');
+ }
+ wizardBody.find('.progress-bar').css({
+ width: 1 / 3 * 100 + '%'
+ });
+ if (type) {
+ wizardBody.find('.button-back').show();
+ } else {
+ wizardBody.find('.button-submit').show();
+ }
+ }
+
+ wizardBody.find('.button-previous').hide();
+
+ var handleTitle = function (tab, navigation, index) {
+ var total = navigation.find('li').length;
+ var current = index + 1;
+
+ // set done steps
+ jQuery('li', wizardBody).removeClass("done");
+ var li_list = navigation.find('li');
+ for (var i = 0; i < index; i++) {
+ jQuery(li_list[i]).addClass("done");
+ }
+
+ if (current == 1) {
+ wizardBody.find('.button-previous,.button-first').hide();
+ } else {
+ if (isShowTab2) {
+ wizardBody.find('.button-previous').show();
+ if (type) {
+ wizardBody.find('.button-back').show();
+ } else {
+ wizardBody.find('.button-submit').show();
+ }
+ } else {
+ wizardBody.find('.button-first').show();
+ }
+ }
+
+ if (current >= total) {
+ wizardBody.find('.button-next').hide();
+ wizardBody.find('.button-last').hide();
+ if (type) {
+ wizardBody.find('.button-back').show();
+ } else {
+ wizardBody.find('.button-submit').show();
+ }
+
+ } else {
+ if (isShowTab2) {
+ wizardBody.find('.button-next').show();
+ if (type) {
+ wizardBody.find('.button-back').show();
+ } else {
+ wizardBody.find('.button-submit').show();
+ }
+ } else {
+ wizardBody.find('.button-last').show();
+ }
+ }
+
+ var $percent = (current / total) * 100;
+ wizardBody.find('.progress-bar').css({
+ width: $percent + '%'
+ });
+ }
+
+ // default form wizard
+ wizardBody.bootstrapWizard({
+ 'nextSelector': '.button-next',
+ 'previousSelector': '.button-previous',
+ 'lastSelector': '.button-last',
+ 'firstSelector': '.button-first',
+ onTabClick: function (tab, navigation, index, clickedIndex) {
+ if (!isShowTab2 && clickedIndex == 1) {
+ return false;
+ }
+ /* if (form.valid() == false) {
+ return false;
+ } */
+ handleTitle(tab, navigation, clickedIndex);
+ },
+ onNext: function (tab, navigation, index) {
+ /* if (form.valid() == false) {
+ return false;
+ } */
+
+ handleTitle(tab, navigation, index);
+ },
+ onPrevious: function (tab, navigation, index) {
+ handleTitle(tab, navigation, index);
+ },
+ onFirst: function (tab, navigation, index) {
+ handleTitle(tab, navigation, index);
+ },
+ onLast: function (tab, navigation, index) {
+ /* if (form.valid() == false) {
+ return false;
+ } */
+
+ handleTitle(tab, navigation, index);
+ }
+ });
+
+ //初始化表单数据
+ initFormData();
+}
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict_wizard_view.html b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict_wizard_view.html
new file mode 100644
index 00000000..bf7e2949
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ict_wizard_view.html
@@ -0,0 +1,141 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title></title>
+ <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
+ <link href="plugins.css" rel="stylesheet" type="text/css">
+ <link href="ngict-component.css" rel="stylesheet" type="text/css">
+</head>
+<body style="overflow: auto;overflow-y: hidden;">
+<div id="ict_wizard_body" style="height:100%;background-color:#FFF;overflow-x:hidden;overflow-y:auto;margin:1%">
+ <form action="#" class="form-horizontal" id="submit_form">
+ <div class="form-wizard">
+ <div class="form-body">
+ <ul class="nav nav-pills nav-justified steps">
+ <li>
+ <a id="test" href="#tab1" data-toggle="tab" class="step step-padding">
+ <span class="number">
+ 1
+ </span>
+ <span class="desc">
+ <i class="fa fa-check"></i>
+ <span id="com_zte_ums_ict_sm_new_user_basic_info" name_i18n="com_zte_ums_ict_sm_new_user">
+ 第一步
+ </span>
+ </span>
+ </a>
+ </li>
+ <li>
+ <a href="#tab2" data-toggle="tab" class="step step-padding">
+ <span class="number">
+ 2
+ </span>
+ <span class="desc">
+ <i class="fa fa-check"></i>
+ <span id="com_zte_ums_ict_sm_new_user_password_account"
+ name_i18n="com_zte_ums_ict_sm_new_user">
+ 第二步
+ </span>
+ </span>
+ </a>
+ </li>
+ <li>
+ <a href="#tab3" data-toggle="tab" class="step step-padding">
+ <span class="number">
+ 3
+ </span>
+ <span class="desc">
+ <i class="fa fa-check"></i>
+ <span id="com_zte_ums_ict_sm_new_user_role_group" name_i18n="com_zte_ums_ict_sm_new_user">
+ 第三步
+ </span>
+ </span>
+ </a>
+ </li>
+ </ul>
+ <div id="bar" class="progress progress-striped" role="progressbar">
+ <div class="progress-bar progress-bar-success">
+ </div>
+ </div>
+ <div class="tab-content">
+ <div class="tab-pane active" id="tab1">
+ <h5 class="form-section">
+ <span id="com_zte_ums_ict_sm_new_user_basic_info_tip" name_i18n="com_zte_ums_ict_sm_new_user"> &nbsp; &nbsp;第一个标签页的内容
+ </span>
+ </h5>
+ </div>
+ <div class="tab-pane" id="tab2">
+ <h5 class="form-section">
+ <span id="com_zte_ums_ict_sm_new_user_password_account_tip"
+ name_i18n="com_zte_ums_ict_sm_new_user"> &nbsp; &nbsp;第二个标签页的内容
+ </span>
+ </h5>
+ </div>
+ <div class="tab-pane" id="tab3">
+ <h5 class="form-section">
+ <span id="com_zte_ums_ict_sm_new_user_role_group_tip" name_i18n="com_zte_ums_ict_sm_new_user"> &nbsp; &nbsp;第三个标签页的内容
+ </span>
+ </h5>
+ </div>
+ </div>
+ </div>
+ <div style="padding-bottom: 10px;">
+ <div class="row">
+ <div class="col-xs-12">
+ <div class="col-xs-offset-3 col-xs-9 btnGroup">
+ <a href="javascript:;" class="btn grey radius_l previous button-previous">
+ <!-- <i class="m-icon-swapleft"></i> -->
+ <span id="com_zte_ums_ict_sm_new_user_back" name_i18n="com_zte_ums_ict_sm_new_user">
+ 上一步
+ </span>
+ </a>
+ <a href="javascript:;" class="btn default button-first" style="display:none">
+ <i class="m-icon-swapleft"></i>
+ <span id="com_zte_ums_ict_sm_new_user_back" name_i18n="com_zte_ums_ict_sm_new_user">
+ </span>
+ </a>
+ <a href="javascript:;" class="btn grey radius_l button-next">
+ <span id="com_zte_ums_ict_sm_new_user_continue" name_i18n="com_zte_ums_ict_sm_new_user">
+ 继续
+ </span>
+ <!-- <i class="m-icon-swapright m-icon-white"></i> -->
+ </a>
+ <a href="javascript:;" class="btn blue button-last" style="display:none">
+ <span id="com_zte_ums_ict_sm_new_user_continue" name_i18n="com_zte_ums_ict_sm_new_user">
+ </span>
+ <i class="m-icon-swapright m-icon-white"></i>
+ </a>
+ <!-- <a href="javascript:;" class="btn blue1 radius_l button-submit" aria-hidden="true">
+ <span id="com_zte_ums_ict_sm_new_user_submit" name_i18n="com_zte_ums_ict_sm_new_user">
+ 提交
+ </span>
+ </a> -->
+ <a href="javascript:;" class="btn blue button-last" style="display:none">
+ <span id="com_zte_ums_ict_sm_new_user_continue" name_i18n="com_zte_ums_ict_sm_new_user">
+ </span>
+ <i class="m-icon-swapright m-icon-white"></i>
+ </a>
+ <!-- <a href="javascript:;" class="btn blue1 radius_l button-back" aria-hidden="true">
+ <span id="com_zte_ums_ict_sm_new_user_submit" name_i18n="com_zte_ums_ict_sm_new_user">
+ 返回
+ </span>
+ </a> -->
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+</div>
+<script src="jquery/jquery-1.10.2.min.js"></script>
+<script src="bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
+<script src="bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>
+<script src="ict-wizard.js"></script>
+<script>
+ $(function () {
+ ictWizard();
+ });
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.10.2.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.10.2.min.js
new file mode 100644
index 00000000..a78dbea9
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.10.2.min.js
@@ -0,0 +1,2640 @@
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function (a, b) {
+ "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) {
+ if (!a.document)throw new Error("jQuery requires a window with a document");
+ return b(a)
+ } : b(a)
+}("undefined" != typeof window ? window : this, function (a, b) {
+ var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = "".trim, l = {}, m = "1.11.0", n = function (a, b) {
+ return new n.fn.init(a, b)
+ }, o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, p = /^-ms-/, q = /-([\da-z])/gi, r = function (a, b) {
+ return b.toUpperCase()
+ };
+ n.fn = n.prototype = {
+ jquery: m, constructor: n, selector: "", length: 0, toArray: function () {
+ return d.call(this)
+ }, get: function (a) {
+ return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this)
+ }, pushStack: function (a) {
+ var b = n.merge(this.constructor(), a);
+ return b.prevObject = this, b.context = this.context, b
+ }, each: function (a, b) {
+ return n.each(this, a, b)
+ }, map: function (a) {
+ return this.pushStack(n.map(this, function (b, c) {
+ return a.call(b, c, b)
+ }))
+ }, slice: function () {
+ return this.pushStack(d.apply(this, arguments))
+ }, first: function () {
+ return this.eq(0)
+ }, last: function () {
+ return this.eq(-1)
+ }, eq: function (a) {
+ var b = this.length, c = +a + (0 > a ? b : 0);
+ return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
+ }, end: function () {
+ return this.prevObject || this.constructor(null)
+ }, push: f, sort: c.sort, splice: c.splice
+ }, n.extend = n.fn.extend = function () {
+ var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1;
+ for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)if (null != (e = arguments[h]))for (d in e)a = g[d], c = e[d], g !== c && (j && c && (n.isPlainObject(c) || (b = n.isArray(c))) ? (b ? (b = !1, f = a && n.isArray(a) ? a : []) : f = a && n.isPlainObject(a) ? a : {}, g[d] = n.extend(j, f, c)) : void 0 !== c && (g[d] = c));
+ return g
+ }, n.extend({
+ expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (a) {
+ throw new Error(a)
+ }, noop: function () {
+ }, isFunction: function (a) {
+ return "function" === n.type(a)
+ }, isArray: Array.isArray || function (a) {
+ return "array" === n.type(a)
+ }, isWindow: function (a) {
+ return null != a && a == a.window
+ }, isNumeric: function (a) {
+ return a - parseFloat(a) >= 0
+ }, isEmptyObject: function (a) {
+ var b;
+ for (b in a)return !1;
+ return !0
+ }, isPlainObject: function (a) {
+ var b;
+ if (!a || "object" !== n.type(a) || a.nodeType || n.isWindow(a))return !1;
+ try {
+ if (a.constructor && !j.call(a, "constructor") && !j.call(a.constructor.prototype, "isPrototypeOf"))return !1
+ } catch (c) {
+ return !1
+ }
+ if (l.ownLast)for (b in a)return j.call(a, b);
+ for (b in a);
+ return void 0 === b || j.call(a, b)
+ }, type: function (a) {
+ return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
+ }, globalEval: function (b) {
+ b && n.trim(b) && (a.execScript || function (b) {
+ a.eval.call(a, b)
+ })(b)
+ }, camelCase: function (a) {
+ return a.replace(p, "ms-").replace(q, r)
+ }, nodeName: function (a, b) {
+ return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
+ }, each: function (a, b, c) {
+ var d, e = 0, f = a.length, g = s(a);
+ if (c) {
+ if (g) {
+ for (; f > e; e++)if (d = b.apply(a[e], c), d === !1)break
+ } else for (e in a)if (d = b.apply(a[e], c), d === !1)break
+ } else if (g) {
+ for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1)break
+ } else for (e in a)if (d = b.call(a[e], e, a[e]), d === !1)break;
+ return a
+ }, trim: k && !k.call("\ufeff\xa0") ? function (a) {
+ return null == a ? "" : k.call(a)
+ } : function (a) {
+ return null == a ? "" : (a + "").replace(o, "")
+ }, makeArray: function (a, b) {
+ var c = b || [];
+ return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c
+ }, inArray: function (a, b, c) {
+ var d;
+ if (b) {
+ if (g)return g.call(b, a, c);
+ for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)if (c in b && b[c] === a)return c
+ }
+ return -1
+ }, merge: function (a, b) {
+ var c = +b.length, d = 0, e = a.length;
+ while (c > d)a[e++] = b[d++];
+ if (c !== c)while (void 0 !== b[d])a[e++] = b[d++];
+ return a.length = e, a
+ }, grep: function (a, b, c) {
+ for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++)d = !b(a[f], f), d !== h && e.push(a[f]);
+ return e
+ }, map: function (a, b, c) {
+ var d, f = 0, g = a.length, h = s(a), i = [];
+ if (h)for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a)d = b(a[f], f, c), null != d && i.push(d);
+ return e.apply([], i)
+ }, guid: 1, proxy: function (a, b) {
+ var c, e, f;
+ return "string" == typeof b && (f = a[b], b = a, a = f), n.isFunction(a) ? (c = d.call(arguments, 2), e = function () {
+ return a.apply(b || this, c.concat(d.call(arguments)))
+ }, e.guid = a.guid = a.guid || n.guid++, e) : void 0
+ }, now: function () {
+ return +new Date
+ }, support: l
+ }), n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) {
+ h["[object " + b + "]"] = b.toLowerCase()
+ });
+ function s(a) {
+ var b = a.length, c = n.type(a);
+ return "function" === c || n.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
+ }
+
+ var t = function (a) {
+ var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s = "sizzle" + -new Date, t = a.document, u = 0, v = 0, w = eb(), x = eb(), y = eb(), z = function (a, b) {
+ return a === b && (j = !0), 0
+ }, A = "undefined", B = 1 << 31, C = {}.hasOwnProperty, D = [], E = D.pop, F = D.push, G = D.push, H = D.slice, I = D.indexOf || function (a) {
+ for (var b = 0, c = this.length; c > b; b++)if (this[b] === a)return b;
+ return -1
+ }, J = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", K = "[\\x20\\t\\r\\n\\f]", L = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", M = L.replace("w", "w#"), N = "\\[" + K + "*(" + L + ")" + K + "*(?:([*^$|!~]?=)" + K + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + M + ")|)|)" + K + "*\\]", O = ":(" + L + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + N.replace(3, 8) + ")*)|.*)\\)|)", P = new RegExp("^" + K + "+|((?:^|[^\\\\])(?:\\\\.)*)" + K + "+$", "g"), Q = new RegExp("^" + K + "*," + K + "*"), R = new RegExp("^" + K + "*([>+~]|" + K + ")" + K + "*"), S = new RegExp("=" + K + "*([^\\]'\"]*?)" + K + "*\\]", "g"), T = new RegExp(O), U = new RegExp("^" + M + "$"), V = {
+ ID: new RegExp("^#(" + L + ")"),
+ CLASS: new RegExp("^\\.(" + L + ")"),
+ TAG: new RegExp("^(" + L.replace("w", "w*") + ")"),
+ ATTR: new RegExp("^" + N),
+ PSEUDO: new RegExp("^" + O),
+ CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + K + "*(even|odd|(([+-]|)(\\d*)n|)" + K + "*(?:([+-]|)" + K + "*(\\d+)|))" + K + "*\\)|)", "i"),
+ bool: new RegExp("^(?:" + J + ")$", "i"),
+ needsContext: new RegExp("^" + K + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + K + "*((?:-\\d)?\\d*)" + K + "*\\)|)(?=[^-]|$)", "i")
+ }, W = /^(?:input|select|textarea|button)$/i, X = /^h\d$/i, Y = /^[^{]+\{\s*\[native \w/, Z = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, $ = /[+~]/, _ = /'|\\/g, ab = new RegExp("\\\\([\\da-f]{1,6}" + K + "?|(" + K + ")|.)", "ig"), bb = function (a, b, c) {
+ var d = "0x" + b - 65536;
+ return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
+ };
+ try {
+ G.apply(D = H.call(t.childNodes), t.childNodes), D[t.childNodes.length].nodeType
+ } catch (cb) {
+ G = {
+ apply: D.length ? function (a, b) {
+ F.apply(a, H.call(b))
+ } : function (a, b) {
+ var c = a.length, d = 0;
+ while (a[c++] = b[d++]);
+ a.length = c - 1
+ }
+ }
+ }
+ function db(a, b, d, e) {
+ var f, g, h, i, j, m, p, q, u, v;
+ if ((b ? b.ownerDocument || b : t) !== l && k(b), b = b || l, d = d || [], !a || "string" != typeof a)return d;
+ if (1 !== (i = b.nodeType) && 9 !== i)return [];
+ if (n && !e) {
+ if (f = Z.exec(a))if (h = f[1]) {
+ if (9 === i) {
+ if (g = b.getElementById(h), !g || !g.parentNode)return d;
+ if (g.id === h)return d.push(g), d
+ } else if (b.ownerDocument && (g = b.ownerDocument.getElementById(h)) && r(b, g) && g.id === h)return d.push(g), d
+ } else {
+ if (f[2])return G.apply(d, b.getElementsByTagName(a)), d;
+ if ((h = f[3]) && c.getElementsByClassName && b.getElementsByClassName)return G.apply(d, b.getElementsByClassName(h)), d
+ }
+ if (c.qsa && (!o || !o.test(a))) {
+ if (q = p = s, u = b, v = 9 === i && a, 1 === i && "object" !== b.nodeName.toLowerCase()) {
+ m = ob(a), (p = b.getAttribute("id")) ? q = p.replace(_, "\\$&") : b.setAttribute("id", q), q = "[id='" + q + "'] ", j = m.length;
+ while (j--)m[j] = q + pb(m[j]);
+ u = $.test(a) && mb(b.parentNode) || b, v = m.join(",")
+ }
+ if (v)try {
+ return G.apply(d, u.querySelectorAll(v)), d
+ } catch (w) {
+ } finally {
+ p || b.removeAttribute("id")
+ }
+ }
+ }
+ return xb(a.replace(P, "$1"), b, d, e)
+ }
+
+ function eb() {
+ var a = [];
+
+ function b(c, e) {
+ return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
+ }
+
+ return b
+ }
+
+ function fb(a) {
+ return a[s] = !0, a
+ }
+
+ function gb(a) {
+ var b = l.createElement("div");
+ try {
+ return !!a(b)
+ } catch (c) {
+ return !1
+ } finally {
+ b.parentNode && b.parentNode.removeChild(b), b = null
+ }
+ }
+
+ function hb(a, b) {
+ var c = a.split("|"), e = a.length;
+ while (e--)d.attrHandle[c[e]] = b
+ }
+
+ function ib(a, b) {
+ var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || B) - (~a.sourceIndex || B);
+ if (d)return d;
+ if (c)while (c = c.nextSibling)if (c === b)return -1;
+ return a ? 1 : -1
+ }
+
+ function jb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return "input" === c && b.type === a
+ }
+ }
+
+ function kb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return ("input" === c || "button" === c) && b.type === a
+ }
+ }
+
+ function lb(a) {
+ return fb(function (b) {
+ return b = +b, fb(function (c, d) {
+ var e, f = a([], c.length, b), g = f.length;
+ while (g--)c[e = f[g]] && (c[e] = !(d[e] = c[e]))
+ })
+ })
+ }
+
+ function mb(a) {
+ return a && typeof a.getElementsByTagName !== A && a
+ }
+
+ c = db.support = {}, f = db.isXML = function (a) {
+ var b = a && (a.ownerDocument || a).documentElement;
+ return b ? "HTML" !== b.nodeName : !1
+ }, k = db.setDocument = function (a) {
+ var b, e = a ? a.ownerDocument || a : t, g = e.defaultView;
+ return e !== l && 9 === e.nodeType && e.documentElement ? (l = e, m = e.documentElement, n = !f(e), g && g !== g.top && (g.addEventListener ? g.addEventListener("unload", function () {
+ k()
+ }, !1) : g.attachEvent && g.attachEvent("onunload", function () {
+ k()
+ })), c.attributes = gb(function (a) {
+ return a.className = "i", !a.getAttribute("className")
+ }), c.getElementsByTagName = gb(function (a) {
+ return a.appendChild(e.createComment("")), !a.getElementsByTagName("*").length
+ }), c.getElementsByClassName = Y.test(e.getElementsByClassName) && gb(function (a) {
+ return a.innerHTML = "<div class='a'></div><div class='a i'></div>", a.firstChild.className = "i", 2 === a.getElementsByClassName("i").length
+ }), c.getById = gb(function (a) {
+ return m.appendChild(a).id = s, !e.getElementsByName || !e.getElementsByName(s).length
+ }), c.getById ? (d.find.ID = function (a, b) {
+ if (typeof b.getElementById !== A && n) {
+ var c = b.getElementById(a);
+ return c && c.parentNode ? [c] : []
+ }
+ }, d.filter.ID = function (a) {
+ var b = a.replace(ab, bb);
+ return function (a) {
+ return a.getAttribute("id") === b
+ }
+ }) : (delete d.find.ID, d.filter.ID = function (a) {
+ var b = a.replace(ab, bb);
+ return function (a) {
+ var c = typeof a.getAttributeNode !== A && a.getAttributeNode("id");
+ return c && c.value === b
+ }
+ }), d.find.TAG = c.getElementsByTagName ? function (a, b) {
+ return typeof b.getElementsByTagName !== A ? b.getElementsByTagName(a) : void 0
+ } : function (a, b) {
+ var c, d = [], e = 0, f = b.getElementsByTagName(a);
+ if ("*" === a) {
+ while (c = f[e++])1 === c.nodeType && d.push(c);
+ return d
+ }
+ return f
+ }, d.find.CLASS = c.getElementsByClassName && function (a, b) {
+ return typeof b.getElementsByClassName !== A && n ? b.getElementsByClassName(a) : void 0
+ }, p = [], o = [], (c.qsa = Y.test(e.querySelectorAll)) && (gb(function (a) {
+ a.innerHTML = "<select t=''><option selected=''></option></select>", a.querySelectorAll("[t^='']").length && o.push("[*^$]=" + K + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || o.push("\\[" + K + "*(?:value|" + J + ")"), a.querySelectorAll(":checked").length || o.push(":checked")
+ }), gb(function (a) {
+ var b = e.createElement("input");
+ b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && o.push("name" + K + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), o.push(",.*:")
+ })), (c.matchesSelector = Y.test(q = m.webkitMatchesSelector || m.mozMatchesSelector || m.oMatchesSelector || m.msMatchesSelector)) && gb(function (a) {
+ c.disconnectedMatch = q.call(a, "div"), q.call(a, "[s!='']:x"), p.push("!=", O)
+ }), o = o.length && new RegExp(o.join("|")), p = p.length && new RegExp(p.join("|")), b = Y.test(m.compareDocumentPosition), r = b || Y.test(m.contains) ? function (a, b) {
+ var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode;
+ return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
+ } : function (a, b) {
+ if (b)while (b = b.parentNode)if (b === a)return !0;
+ return !1
+ }, z = b ? function (a, b) {
+ if (a === b)return j = !0, 0;
+ var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === e || a.ownerDocument === t && r(t, a) ? -1 : b === e || b.ownerDocument === t && r(t, b) ? 1 : i ? I.call(i, a) - I.call(i, b) : 0 : 4 & d ? -1 : 1)
+ } : function (a, b) {
+ if (a === b)return j = !0, 0;
+ var c, d = 0, f = a.parentNode, g = b.parentNode, h = [a], k = [b];
+ if (!f || !g)return a === e ? -1 : b === e ? 1 : f ? -1 : g ? 1 : i ? I.call(i, a) - I.call(i, b) : 0;
+ if (f === g)return ib(a, b);
+ c = a;
+ while (c = c.parentNode)h.unshift(c);
+ c = b;
+ while (c = c.parentNode)k.unshift(c);
+ while (h[d] === k[d])d++;
+ return d ? ib(h[d], k[d]) : h[d] === t ? -1 : k[d] === t ? 1 : 0
+ }, e) : l
+ }, db.matches = function (a, b) {
+ return db(a, null, null, b)
+ }, db.matchesSelector = function (a, b) {
+ if ((a.ownerDocument || a) !== l && k(a), b = b.replace(S, "='$1']"), !(!c.matchesSelector || !n || p && p.test(b) || o && o.test(b)))try {
+ var d = q.call(a, b);
+ if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d
+ } catch (e) {
+ }
+ return db(b, l, null, [a]).length > 0
+ }, db.contains = function (a, b) {
+ return (a.ownerDocument || a) !== l && k(a), r(a, b)
+ }, db.attr = function (a, b) {
+ (a.ownerDocument || a) !== l && k(a);
+ var e = d.attrHandle[b.toLowerCase()], f = e && C.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !n) : void 0;
+ return void 0 !== f ? f : c.attributes || !n ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
+ }, db.error = function (a) {
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ }, db.uniqueSort = function (a) {
+ var b, d = [], e = 0, f = 0;
+ if (j = !c.detectDuplicates, i = !c.sortStable && a.slice(0), a.sort(z), j) {
+ while (b = a[f++])b === a[f] && (e = d.push(f));
+ while (e--)a.splice(d[e], 1)
+ }
+ return i = null, a
+ }, e = db.getText = function (a) {
+ var b, c = "", d = 0, f = a.nodeType;
+ if (f) {
+ if (1 === f || 9 === f || 11 === f) {
+ if ("string" == typeof a.textContent)return a.textContent;
+ for (a = a.firstChild; a; a = a.nextSibling)c += e(a)
+ } else if (3 === f || 4 === f)return a.nodeValue
+ } else while (b = a[d++])c += e(b);
+ return c
+ }, d = db.selectors = {
+ cacheLength: 50,
+ createPseudo: fb,
+ match: V,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": {dir: "parentNode", first: !0},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: !0},
+ "~": {dir: "previousSibling"}
+ },
+ preFilter: {
+ ATTR: function (a) {
+ return a[1] = a[1].replace(ab, bb), a[3] = (a[4] || a[5] || "").replace(ab, bb), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
+ }, CHILD: function (a) {
+ return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || db.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && db.error(a[0]), a
+ }, PSEUDO: function (a) {
+ var b, c = !a[5] && a[2];
+ return V.CHILD.test(a[0]) ? null : (a[3] && void 0 !== a[4] ? a[2] = a[4] : c && T.test(c) && (b = ob(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
+ }
+ },
+ filter: {
+ TAG: function (a) {
+ var b = a.replace(ab, bb).toLowerCase();
+ return "*" === a ? function () {
+ return !0
+ } : function (a) {
+ return a.nodeName && a.nodeName.toLowerCase() === b
+ }
+ }, CLASS: function (a) {
+ var b = w[a + " "];
+ return b || (b = new RegExp("(^|" + K + ")" + a + "(" + K + "|$)")) && w(a, function (a) {
+ return b.test("string" == typeof a.className && a.className || typeof a.getAttribute !== A && a.getAttribute("class") || "")
+ })
+ }, ATTR: function (a, b, c) {
+ return function (d) {
+ var e = db.attr(d, a);
+ return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
+ }
+ }, CHILD: function (a, b, c, d, e) {
+ var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
+ return 1 === d && 0 === e ? function (a) {
+ return !!a.parentNode
+ } : function (b, c, i) {
+ var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), t = !i && !h;
+ if (q) {
+ if (f) {
+ while (p) {
+ l = b;
+ while (l = l[p])if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return !1;
+ o = p = "only" === a && !o && "nextSibling"
+ }
+ return !0
+ }
+ if (o = [g ? q.firstChild : q.lastChild], g && t) {
+ k = q[s] || (q[s] = {}), j = k[a] || [], n = j[0] === u && j[1], m = j[0] === u && j[2], l = n && q.childNodes[n];
+ while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if (1 === l.nodeType && ++m && l === b) {
+ k[a] = [u, n, m];
+ break
+ }
+ } else if (t && (j = (b[s] || (b[s] = {}))[a]) && j[0] === u)m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (t && ((l[s] || (l[s] = {}))[a] = [u, m]), l === b))break;
+ return m -= e, m === d || m % d === 0 && m / d >= 0
+ }
+ }
+ }, PSEUDO: function (a, b) {
+ var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || db.error("unsupported pseudo: " + a);
+ return e[s] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? fb(function (a, c) {
+ var d, f = e(a, b), g = f.length;
+ while (g--)d = I.call(a, f[g]), a[d] = !(c[d] = f[g])
+ }) : function (a) {
+ return e(a, 0, c)
+ }) : e
+ }
+ },
+ pseudos: {
+ not: fb(function (a) {
+ var b = [], c = [], d = g(a.replace(P, "$1"));
+ return d[s] ? fb(function (a, b, c, e) {
+ var f, g = d(a, null, e, []), h = a.length;
+ while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
+ }) : function (a, e, f) {
+ return b[0] = a, d(b, null, f, c), !c.pop()
+ }
+ }), has: fb(function (a) {
+ return function (b) {
+ return db(a, b).length > 0
+ }
+ }), contains: fb(function (a) {
+ return function (b) {
+ return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
+ }
+ }), lang: fb(function (a) {
+ return U.test(a || "") || db.error("unsupported lang: " + a), a = a.replace(ab, bb).toLowerCase(), function (b) {
+ var c;
+ do if (c = n ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
+ return !1
+ }
+ }), target: function (b) {
+ var c = a.location && a.location.hash;
+ return c && c.slice(1) === b.id
+ }, root: function (a) {
+ return a === m
+ }, focus: function (a) {
+ return a === l.activeElement && (!l.hasFocus || l.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
+ }, enabled: function (a) {
+ return a.disabled === !1
+ }, disabled: function (a) {
+ return a.disabled === !0
+ }, checked: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && !!a.checked || "option" === b && !!a.selected
+ }, selected: function (a) {
+ return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ }, empty: function (a) {
+ for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6)return !1;
+ return !0
+ }, parent: function (a) {
+ return !d.pseudos.empty(a)
+ }, header: function (a) {
+ return X.test(a.nodeName)
+ }, input: function (a) {
+ return W.test(a.nodeName)
+ }, button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && "button" === a.type || "button" === b
+ }, text: function (a) {
+ var b;
+ return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
+ }, first: lb(function () {
+ return [0]
+ }), last: lb(function (a, b) {
+ return [b - 1]
+ }), eq: lb(function (a, b, c) {
+ return [0 > c ? c + b : c]
+ }), even: lb(function (a, b) {
+ for (var c = 0; b > c; c += 2)a.push(c);
+ return a
+ }), odd: lb(function (a, b) {
+ for (var c = 1; b > c; c += 2)a.push(c);
+ return a
+ }), lt: lb(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
+ return a
+ }), gt: lb(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d);
+ return a
+ })
+ }
+ }, d.pseudos.nth = d.pseudos.eq;
+ for (b in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})d.pseudos[b] = jb(b);
+ for (b in{submit: !0, reset: !0})d.pseudos[b] = kb(b);
+ function nb() {
+ }
+
+ nb.prototype = d.filters = d.pseudos, d.setFilters = new nb;
+ function ob(a, b) {
+ var c, e, f, g, h, i, j, k = x[a + " "];
+ if (k)return b ? 0 : k.slice(0);
+ h = a, i = [], j = d.preFilter;
+ while (h) {
+ (!c || (e = Q.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = R.exec(h)) && (c = e.shift(), f.push({
+ value: c,
+ type: e[0].replace(P, " ")
+ }), h = h.slice(c.length));
+ for (g in d.filter)!(e = V[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
+ value: c,
+ type: g,
+ matches: e
+ }), h = h.slice(c.length));
+ if (!c)break
+ }
+ return b ? h.length : h ? db.error(a) : x(a, i).slice(0)
+ }
+
+ function pb(a) {
+ for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
+ return d
+ }
+
+ function qb(a, b, c) {
+ var d = b.dir, e = c && "parentNode" === d, f = v++;
+ return b.first ? function (b, c, f) {
+ while (b = b[d])if (1 === b.nodeType || e)return a(b, c, f)
+ } : function (b, c, g) {
+ var h, i, j = [u, f];
+ if (g) {
+ while (b = b[d])if ((1 === b.nodeType || e) && a(b, c, g))return !0
+ } else while (b = b[d])if (1 === b.nodeType || e) {
+ if (i = b[s] || (b[s] = {}), (h = i[d]) && h[0] === u && h[1] === f)return j[2] = h[2];
+ if (i[d] = j, j[2] = a(b, c, g))return !0
+ }
+ }
+ }
+
+ function rb(a) {
+ return a.length > 1 ? function (b, c, d) {
+ var e = a.length;
+ while (e--)if (!a[e](b, c, d))return !1;
+ return !0
+ } : a[0]
+ }
+
+ function sb(a, b, c, d, e) {
+ for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
+ return g
+ }
+
+ function tb(a, b, c, d, e, f) {
+ return d && !d[s] && (d = tb(d)), e && !e[s] && (e = tb(e, f)), fb(function (f, g, h, i) {
+ var j, k, l, m = [], n = [], o = g.length, p = f || wb(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : sb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q;
+ if (c && c(q, r, h, i), d) {
+ j = sb(r, n), d(j, [], h, i), k = j.length;
+ while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l))
+ }
+ if (f) {
+ if (e || a) {
+ if (e) {
+ j = [], k = r.length;
+ while (k--)(l = r[k]) && j.push(q[k] = l);
+ e(null, r = [], j, i)
+ }
+ k = r.length;
+ while (k--)(l = r[k]) && (j = e ? I.call(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
+ }
+ } else r = sb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : G.apply(g, r)
+ })
+ }
+
+ function ub(a) {
+ for (var b, c, e, f = a.length, g = d.relative[a[0].type], i = g || d.relative[" "], j = g ? 1 : 0, k = qb(function (a) {
+ return a === b
+ }, i, !0), l = qb(function (a) {
+ return I.call(b, a) > -1
+ }, i, !0), m = [function (a, c, d) {
+ return !g && (d || c !== h) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d))
+ }]; f > j; j++)if (c = d.relative[a[j].type])m = [qb(rb(m), c)]; else {
+ if (c = d.filter[a[j].type].apply(null, a[j].matches), c[s]) {
+ for (e = ++j; f > e; e++)if (d.relative[a[e].type])break;
+ return tb(j > 1 && rb(m), j > 1 && pb(a.slice(0, j - 1).concat({value: " " === a[j - 2].type ? "*" : ""})).replace(P, "$1"), c, e > j && ub(a.slice(j, e)), f > e && ub(a = a.slice(e)), f > e && pb(a))
+ }
+ m.push(c)
+ }
+ return rb(m)
+ }
+
+ function vb(a, b) {
+ var c = b.length > 0, e = a.length > 0, f = function (f, g, i, j, k) {
+ var m, n, o, p = 0, q = "0", r = f && [], s = [], t = h, v = f || e && d.find.TAG("*", k), w = u += null == t ? 1 : Math.random() || .1, x = v.length;
+ for (k && (h = g !== l && g); q !== x && null != (m = v[q]); q++) {
+ if (e && m) {
+ n = 0;
+ while (o = a[n++])if (o(m, g, i)) {
+ j.push(m);
+ break
+ }
+ k && (u = w)
+ }
+ c && ((m = !o && m) && p--, f && r.push(m))
+ }
+ if (p += q, c && q !== p) {
+ n = 0;
+ while (o = b[n++])o(r, s, g, i);
+ if (f) {
+ if (p > 0)while (q--)r[q] || s[q] || (s[q] = E.call(j));
+ s = sb(s)
+ }
+ G.apply(j, s), k && !f && s.length > 0 && p + b.length > 1 && db.uniqueSort(j)
+ }
+ return k && (u = w, h = t), r
+ };
+ return c ? fb(f) : f
+ }
+
+ g = db.compile = function (a, b) {
+ var c, d = [], e = [], f = y[a + " "];
+ if (!f) {
+ b || (b = ob(a)), c = b.length;
+ while (c--)f = ub(b[c]), f[s] ? d.push(f) : e.push(f);
+ f = y(a, vb(e, d))
+ }
+ return f
+ };
+ function wb(a, b, c) {
+ for (var d = 0, e = b.length; e > d; d++)db(a, b[d], c);
+ return c
+ }
+
+ function xb(a, b, e, f) {
+ var h, i, j, k, l, m = ob(a);
+ if (!f && 1 === m.length) {
+ if (i = m[0] = m[0].slice(0), i.length > 2 && "ID" === (j = i[0]).type && c.getById && 9 === b.nodeType && n && d.relative[i[1].type]) {
+ if (b = (d.find.ID(j.matches[0].replace(ab, bb), b) || [])[0], !b)return e;
+ a = a.slice(i.shift().value.length)
+ }
+ h = V.needsContext.test(a) ? 0 : i.length;
+ while (h--) {
+ if (j = i[h], d.relative[k = j.type])break;
+ if ((l = d.find[k]) && (f = l(j.matches[0].replace(ab, bb), $.test(i[0].type) && mb(b.parentNode) || b))) {
+ if (i.splice(h, 1), a = f.length && pb(i), !a)return G.apply(e, f), e;
+ break
+ }
+ }
+ }
+ return g(a, m)(f, b, !n, e, $.test(a) && mb(b.parentNode) || b), e
+ }
+
+ return c.sortStable = s.split("").sort(z).join("") === s, c.detectDuplicates = !!j, k(), c.sortDetached = gb(function (a) {
+ return 1 & a.compareDocumentPosition(l.createElement("div"))
+ }), gb(function (a) {
+ return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
+ }) || hb("type|href|height|width", function (a, b, c) {
+ return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
+ }), c.attributes && gb(function (a) {
+ return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
+ }) || hb("value", function (a, b, c) {
+ return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
+ }), gb(function (a) {
+ return null == a.getAttribute("disabled")
+ }) || hb(J, function (a, b, c) {
+ var d;
+ return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
+ }), db
+ }(a);
+ n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
+ var u = n.expr.match.needsContext, v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, w = /^.[^:#\[\.,]*$/;
+
+ function x(a, b, c) {
+ if (n.isFunction(b))return n.grep(a, function (a, d) {
+ return !!b.call(a, d, a) !== c
+ });
+ if (b.nodeType)return n.grep(a, function (a) {
+ return a === b !== c
+ });
+ if ("string" == typeof b) {
+ if (w.test(b))return n.filter(b, a, c);
+ b = n.filter(b, a)
+ }
+ return n.grep(a, function (a) {
+ return n.inArray(a, b) >= 0 !== c
+ })
+ }
+
+ n.filter = function (a, b, c) {
+ var d = b[0];
+ return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function (a) {
+ return 1 === a.nodeType
+ }))
+ }, n.fn.extend({
+ find: function (a) {
+ var b, c = [], d = this, e = d.length;
+ if ("string" != typeof a)return this.pushStack(n(a).filter(function () {
+ for (b = 0; e > b; b++)if (n.contains(d[b], this))return !0
+ }));
+ for (b = 0; e > b; b++)n.find(a, d[b], c);
+ return c = this.pushStack(e > 1 ? n.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c
+ }, filter: function (a) {
+ return this.pushStack(x(this, a || [], !1))
+ }, not: function (a) {
+ return this.pushStack(x(this, a || [], !0))
+ }, is: function (a) {
+ return !!x(this, "string" == typeof a && u.test(a) ? n(a) : a || [], !1).length
+ }
+ });
+ var y, z = a.document, A = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, B = n.fn.init = function (a, b) {
+ var c, d;
+ if (!a)return this;
+ if ("string" == typeof a) {
+ if (c = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : A.exec(a), !c || !c[1] && b)return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a);
+ if (c[1]) {
+ if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : z, !0)), v.test(c[1]) && n.isPlainObject(b))for (c in b)n.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
+ return this
+ }
+ if (d = z.getElementById(c[2]), d && d.parentNode) {
+ if (d.id !== c[2])return y.find(a);
+ this.length = 1, this[0] = d
+ }
+ return this.context = z, this.selector = a, this
+ }
+ return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof y.ready ? y.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this))
+ };
+ B.prototype = n.fn, y = n(z);
+ var C = /^(?:parents|prev(?:Until|All))/, D = {children: !0, contents: !0, next: !0, prev: !0};
+ n.extend({
+ dir: function (a, b, c) {
+ var d = [], e = a[b];
+ while (e && 9 !== e.nodeType && (void 0 === c || 1 !== e.nodeType || !n(e).is(c)))1 === e.nodeType && d.push(e), e = e[b];
+ return d
+ }, sibling: function (a, b) {
+ for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a);
+ return c
+ }
+ }), n.fn.extend({
+ has: function (a) {
+ var b, c = n(a, this), d = c.length;
+ return this.filter(function () {
+ for (b = 0; d > b; b++)if (n.contains(this, c[b]))return !0
+ })
+ }, closest: function (a, b) {
+ for (var c, d = 0, e = this.length, f = [], g = u.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) {
+ f.push(c);
+ break
+ }
+ return this.pushStack(f.length > 1 ? n.unique(f) : f)
+ }, index: function (a) {
+ return a ? "string" == typeof a ? n.inArray(this[0], n(a)) : n.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+ }, add: function (a, b) {
+ return this.pushStack(n.unique(n.merge(this.get(), n(a, b))))
+ }, addBack: function (a) {
+ return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
+ }
+ });
+ function E(a, b) {
+ do a = a[b]; while (a && 1 !== a.nodeType);
+ return a
+ }
+
+ n.each({
+ parent: function (a) {
+ var b = a.parentNode;
+ return b && 11 !== b.nodeType ? b : null
+ }, parents: function (a) {
+ return n.dir(a, "parentNode")
+ }, parentsUntil: function (a, b, c) {
+ return n.dir(a, "parentNode", c)
+ }, next: function (a) {
+ return E(a, "nextSibling")
+ }, prev: function (a) {
+ return E(a, "previousSibling")
+ }, nextAll: function (a) {
+ return n.dir(a, "nextSibling")
+ }, prevAll: function (a) {
+ return n.dir(a, "previousSibling")
+ }, nextUntil: function (a, b, c) {
+ return n.dir(a, "nextSibling", c)
+ }, prevUntil: function (a, b, c) {
+ return n.dir(a, "previousSibling", c)
+ }, siblings: function (a) {
+ return n.sibling((a.parentNode || {}).firstChild, a)
+ }, children: function (a) {
+ return n.sibling(a.firstChild)
+ }, contents: function (a) {
+ return n.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : n.merge([], a.childNodes)
+ }
+ }, function (a, b) {
+ n.fn[a] = function (c, d) {
+ var e = n.map(this, b, c);
+ return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (D[a] || (e = n.unique(e)), C.test(a) && (e = e.reverse())), this.pushStack(e)
+ }
+ });
+ var F = /\S+/g, G = {};
+
+ function H(a) {
+ var b = G[a] = {};
+ return n.each(a.match(F) || [], function (a, c) {
+ b[c] = !0
+ }), b
+ }
+
+ n.Callbacks = function (a) {
+ a = "string" == typeof a ? G[a] || H(a) : n.extend({}, a);
+ var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) {
+ for (c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h && e > f; f++)if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) {
+ c = !1;
+ break
+ }
+ b = !1, h && (i ? i.length && j(i.shift()) : c ? h = [] : k.disable())
+ }, k = {
+ add: function () {
+ if (h) {
+ var d = h.length;
+ !function f(b) {
+ n.each(b, function (b, c) {
+ var d = n.type(c);
+ "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && f(c)
+ })
+ }(arguments), b ? e = h.length : c && (g = d, j(c))
+ }
+ return this
+ }, remove: function () {
+ return h && n.each(arguments, function (a, c) {
+ var d;
+ while ((d = n.inArray(c, h, d)) > -1)h.splice(d, 1), b && (e >= d && e--, f >= d && f--)
+ }), this
+ }, has: function (a) {
+ return a ? n.inArray(a, h) > -1 : !(!h || !h.length)
+ }, empty: function () {
+ return h = [], e = 0, this
+ }, disable: function () {
+ return h = i = c = void 0, this
+ }, disabled: function () {
+ return !h
+ }, lock: function () {
+ return i = void 0, c || k.disable(), this
+ }, locked: function () {
+ return !i
+ }, fireWith: function (a, c) {
+ return !h || d && !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this
+ }, fire: function () {
+ return k.fireWith(this, arguments), this
+ }, fired: function () {
+ return !!d
+ }
+ };
+ return k
+ }, n.extend({
+ Deferred: function (a) {
+ var b = [["resolve", "done", n.Callbacks("once memory"), "resolved"], ["reject", "fail", n.Callbacks("once memory"), "rejected"], ["notify", "progress", n.Callbacks("memory")]], c = "pending", d = {
+ state: function () {
+ return c
+ }, always: function () {
+ return e.done(arguments).fail(arguments), this
+ }, then: function () {
+ var a = arguments;
+ return n.Deferred(function (c) {
+ n.each(b, function (b, f) {
+ var g = n.isFunction(a[b]) && a[b];
+ e[f[1]](function () {
+ var a = g && g.apply(this, arguments);
+ a && n.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
+ })
+ }), a = null
+ }).promise()
+ }, promise: function (a) {
+ return null != a ? n.extend(a, d) : d
+ }
+ }, e = {};
+ return d.pipe = d.then, n.each(b, function (a, f) {
+ var g = f[2], h = f[3];
+ d[f[1]] = g.add, h && g.add(function () {
+ c = h
+ }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
+ return e[f[0] + "With"](this === e ? d : this, arguments), this
+ }, e[f[0] + "With"] = g.fireWith
+ }), d.promise(e), a && a.call(e, e), e
+ }, when: function (a) {
+ var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && n.isFunction(a.promise) ? e : 0, g = 1 === f ? a : n.Deferred(), h = function (a, b, c) {
+ return function (e) {
+ b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
+ }
+ }, i, j, k;
+ if (e > 1)for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && n.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
+ return f || g.resolveWith(k, c), g.promise()
+ }
+ });
+ var I;
+ n.fn.ready = function (a) {
+ return n.ready.promise().done(a), this
+ }, n.extend({
+ isReady: !1, readyWait: 1, holdReady: function (a) {
+ a ? n.readyWait++ : n.ready(!0)
+ }, ready: function (a) {
+ if (a === !0 ? !--n.readyWait : !n.isReady) {
+ if (!z.body)return setTimeout(n.ready);
+ n.isReady = !0, a !== !0 && --n.readyWait > 0 || (I.resolveWith(z, [n]), n.fn.trigger && n(z).trigger("ready").off("ready"))
+ }
+ }
+ });
+ function J() {
+ z.addEventListener ? (z.removeEventListener("DOMContentLoaded", K, !1), a.removeEventListener("load", K, !1)) : (z.detachEvent("onreadystatechange", K), a.detachEvent("onload", K))
+ }
+
+ function K() {
+ (z.addEventListener || "load" === event.type || "complete" === z.readyState) && (J(), n.ready())
+ }
+
+ n.ready.promise = function (b) {
+ if (!I)if (I = n.Deferred(), "complete" === z.readyState)setTimeout(n.ready); else if (z.addEventListener)z.addEventListener("DOMContentLoaded", K, !1), a.addEventListener("load", K, !1); else {
+ z.attachEvent("onreadystatechange", K), a.attachEvent("onload", K);
+ var c = !1;
+ try {
+ c = null == a.frameElement && z.documentElement
+ } catch (d) {
+ }
+ c && c.doScroll && !function e() {
+ if (!n.isReady) {
+ try {
+ c.doScroll("left")
+ } catch (a) {
+ return setTimeout(e, 50)
+ }
+ J(), n.ready()
+ }
+ }()
+ }
+ return I.promise(b)
+ };
+ var L = "undefined", M;
+ for (M in n(l))break;
+ l.ownLast = "0" !== M, l.inlineBlockNeedsLayout = !1, n(function () {
+ var a, b, c = z.getElementsByTagName("body")[0];
+ c && (a = z.createElement("div"), a.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px", b = z.createElement("div"), c.appendChild(a).appendChild(b), typeof b.style.zoom !== L && (b.style.cssText = "border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1", (l.inlineBlockNeedsLayout = 3 === b.offsetWidth) && (c.style.zoom = 1)), c.removeChild(a), a = b = null)
+ }), function () {
+ var a = z.createElement("div");
+ if (null == l.deleteExpando) {
+ l.deleteExpando = !0;
+ try {
+ delete a.test
+ } catch (b) {
+ l.deleteExpando = !1
+ }
+ }
+ a = null
+ }(), n.acceptData = function (a) {
+ var b = n.noData[(a.nodeName + " ").toLowerCase()], c = +a.nodeType || 1;
+ return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b
+ };
+ var N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, O = /([A-Z])/g;
+
+ function P(a, b, c) {
+ if (void 0 === c && 1 === a.nodeType) {
+ var d = "data-" + b.replace(O, "-$1").toLowerCase();
+ if (c = a.getAttribute(d), "string" == typeof c) {
+ try {
+ c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c
+ } catch (e) {
+ }
+ n.data(a, b, c)
+ } else c = void 0
+ }
+ return c
+ }
+
+ function Q(a) {
+ var b;
+ for (b in a)if (("data" !== b || !n.isEmptyObject(a[b])) && "toJSON" !== b)return !1;
+ return !0
+ }
+
+ function R(a, b, d, e) {
+ if (n.acceptData(a)) {
+ var f, g, h = n.expando, i = a.nodeType, j = i ? n.cache : a, k = i ? a[h] : a[h] && h;
+ if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b)return k || (k = i ? a[h] = c.pop() || n.guid++ : h), j[k] || (j[k] = i ? {} : {toJSON: n.noop}), ("object" == typeof b || "function" == typeof b) && (e ? j[k] = n.extend(j[k], b) : j[k].data = n.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[n.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[n.camelCase(b)])) : f = g, f
+ }
+ }
+
+ function S(a, b, c) {
+ if (n.acceptData(a)) {
+ var d, e, f = a.nodeType, g = f ? n.cache : a, h = f ? a[n.expando] : n.expando;
+ if (g[h]) {
+ if (b && (d = c ? g[h] : g[h].data)) {
+ n.isArray(b) ? b = b.concat(n.map(b, n.camelCase)) : b in d ? b = [b] : (b = n.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
+ while (e--)delete d[b[e]];
+ if (c ? !Q(d) : !n.isEmptyObject(d))return
+ }
+ (c || (delete g[h].data, Q(g[h]))) && (f ? n.cleanData([a], !0) : l.deleteExpando || g != g.window ? delete g[h] : g[h] = null)
+ }
+ }
+ }
+
+ n.extend({
+ cache: {},
+ noData: {"applet ": !0, "embed ": !0, "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},
+ hasData: function (a) {
+ return a = a.nodeType ? n.cache[a[n.expando]] : a[n.expando], !!a && !Q(a)
+ },
+ data: function (a, b, c) {
+ return R(a, b, c)
+ },
+ removeData: function (a, b) {
+ return S(a, b)
+ },
+ _data: function (a, b, c) {
+ return R(a, b, c, !0)
+ },
+ _removeData: function (a, b) {
+ return S(a, b, !0)
+ }
+ }), n.fn.extend({
+ data: function (a, b) {
+ var c, d, e, f = this[0], g = f && f.attributes;
+ if (void 0 === a) {
+ if (this.length && (e = n.data(f), 1 === f.nodeType && !n._data(f, "parsedAttrs"))) {
+ c = g.length;
+ while (c--)d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d]));
+ n._data(f, "parsedAttrs", !0)
+ }
+ return e
+ }
+ return "object" == typeof a ? this.each(function () {
+ n.data(this, a)
+ }) : arguments.length > 1 ? this.each(function () {
+ n.data(this, a, b)
+ }) : f ? P(f, a, n.data(f, a)) : void 0
+ }, removeData: function (a) {
+ return this.each(function () {
+ n.removeData(this, a)
+ })
+ }
+ }), n.extend({
+ queue: function (a, b, c) {
+ var d;
+ return a ? (b = (b || "fx") + "queue", d = n._data(a, b), c && (!d || n.isArray(c) ? d = n._data(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0
+ }, dequeue: function (a, b) {
+ b = b || "fx";
+ var c = n.queue(a, b), d = c.length, e = c.shift(), f = n._queueHooks(a, b), g = function () {
+ n.dequeue(a, b)
+ };
+ "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
+ }, _queueHooks: function (a, b) {
+ var c = b + "queueHooks";
+ return n._data(a, c) || n._data(a, c, {
+ empty: n.Callbacks("once memory").add(function () {
+ n._removeData(a, b + "queue"), n._removeData(a, c)
+ })
+ })
+ }
+ }), n.fn.extend({
+ queue: function (a, b) {
+ var c = 2;
+ return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function () {
+ var c = n.queue(this, a, b);
+ n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a)
+ })
+ }, dequeue: function (a) {
+ return this.each(function () {
+ n.dequeue(this, a)
+ })
+ }, clearQueue: function (a) {
+ return this.queue(a || "fx", [])
+ }, promise: function (a, b) {
+ var c, d = 1, e = n.Deferred(), f = this, g = this.length, h = function () {
+ --d || e.resolveWith(f, [f])
+ };
+ "string" != typeof a && (b = a, a = void 0), a = a || "fx";
+ while (g--)c = n._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
+ return h(), e.promise(b)
+ }
+ });
+ var T = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, U = ["Top", "Right", "Bottom", "Left"], V = function (a, b) {
+ return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a)
+ }, W = n.access = function (a, b, c, d, e, f, g) {
+ var h = 0, i = a.length, j = null == c;
+ if ("object" === n.type(c)) {
+ e = !0;
+ for (h in c)n.access(a, b, h, c[h], !0, f, g)
+ } else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) {
+ return j.call(n(a), c)
+ })), b))for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
+ return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
+ }, X = /^(?:checkbox|radio)$/i;
+ !function () {
+ var a = z.createDocumentFragment(), b = z.createElement("div"), c = z.createElement("input");
+ if (b.setAttribute("className", "t"), b.innerHTML = " <link/><table></table><a href='/a'>a</a>", l.leadingWhitespace = 3 === b.firstChild.nodeType, l.tbody = !b.getElementsByTagName("tbody").length, l.htmlSerialize = !!b.getElementsByTagName("link").length, l.html5Clone = "<:nav></:nav>" !== z.createElement("nav").cloneNode(!0).outerHTML, c.type = "checkbox", c.checked = !0, a.appendChild(c), l.appendChecked = c.checked, b.innerHTML = "<textarea>x</textarea>", l.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, a.appendChild(b), b.innerHTML = "<input type='radio' checked='checked' name='t'/>", l.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, l.noCloneEvent = !0, b.attachEvent && (b.attachEvent("onclick", function () {
+ l.noCloneEvent = !1
+ }), b.cloneNode(!0).click()), null == l.deleteExpando) {
+ l.deleteExpando = !0;
+ try {
+ delete b.test
+ } catch (d) {
+ l.deleteExpando = !1
+ }
+ }
+ a = b = c = null
+ }(), function () {
+ var b, c, d = z.createElement("div");
+ for (b in{
+ submit: !0,
+ change: !0,
+ focusin: !0
+ })c = "on" + b, (l[b + "Bubbles"] = c in a) || (d.setAttribute(c, "t"), l[b + "Bubbles"] = d.attributes[c].expando === !1);
+ d = null
+ }();
+ var Y = /^(?:input|select|textarea)$/i, Z = /^key/, $ = /^(?:mouse|contextmenu)|click/, _ = /^(?:focusinfocus|focusoutblur)$/, ab = /^([^.]*)(?:\.(.+)|)$/;
+
+ function bb() {
+ return !0
+ }
+
+ function cb() {
+ return !1
+ }
+
+ function db() {
+ try {
+ return z.activeElement
+ } catch (a) {
+ }
+ }
+
+ n.event = {
+ global: {},
+ add: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = n._data(a);
+ if (r) {
+ c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = n.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) {
+ return typeof n === L || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
+ }, k.elem = a), b = (b || "").match(F) || [""], h = b.length;
+ while (h--)f = ab.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = n.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = n.event.special[o] || {}, l = n.extend({
+ type: o,
+ origType: q,
+ data: d,
+ handler: c,
+ guid: c.guid,
+ selector: e,
+ needsContext: e && n.expr.match.needsContext.test(e),
+ namespace: p.join(".")
+ }, i), (m = g[o]) || (m = g[o] = [], m.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, l) : m.push(l), n.event.global[o] = !0);
+ a = null
+ }
+ },
+ remove: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = n.hasData(a) && n._data(a);
+ if (r && (k = r.events)) {
+ b = (b || "").match(F) || [""], j = b.length;
+ while (j--)if (h = ab.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
+ l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = m.length;
+ while (f--)g = m[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (m.splice(f, 1), g.selector && m.delegateCount--, l.remove && l.remove.call(a, g));
+ i && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete k[o])
+ } else for (o in k)n.event.remove(a, o + b[j], c, d, !0);
+ n.isEmptyObject(k) && (delete r.handle, n._removeData(a, "events"))
+ }
+ },
+ trigger: function (b, c, d, e) {
+ var f, g, h, i, k, l, m, o = [d || z], p = j.call(b, "type") ? b.type : b, q = j.call(b, "namespace") ? b.namespace.split(".") : [];
+ if (h = l = d = d || z, 3 !== d.nodeType && 8 !== d.nodeType && !_.test(p + n.event.triggered) && (p.indexOf(".") >= 0 && (q = p.split("."), p = q.shift(), q.sort()), g = p.indexOf(":") < 0 && "on" + p, b = b[n.expando] ? b : new n.Event(p, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = q.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + q.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : n.makeArray(c, [b]), k = n.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) {
+ if (!e && !k.noBubble && !n.isWindow(d)) {
+ for (i = k.delegateType || p, _.test(i + p) || (h = h.parentNode); h; h = h.parentNode)o.push(h), l = h;
+ l === (d.ownerDocument || z) && o.push(l.defaultView || l.parentWindow || a)
+ }
+ m = 0;
+ while ((h = o[m++]) && !b.isPropagationStopped())b.type = m > 1 ? i : k.bindType || p, f = (n._data(h, "events") || {})[b.type] && n._data(h, "handle"), f && f.apply(h, c), f = g && h[g], f && f.apply && n.acceptData(h) && (b.result = f.apply(h, c), b.result === !1 && b.preventDefault());
+ if (b.type = p, !e && !b.isDefaultPrevented() && (!k._default || k._default.apply(o.pop(), c) === !1) && n.acceptData(d) && g && d[p] && !n.isWindow(d)) {
+ l = d[g], l && (d[g] = null), n.event.triggered = p;
+ try {
+ d[p]()
+ } catch (r) {
+ }
+ n.event.triggered = void 0, l && (d[g] = l)
+ }
+ return b.result
+ }
+ },
+ dispatch: function (a) {
+ a = n.event.fix(a);
+ var b, c, e, f, g, h = [], i = d.call(arguments), j = (n._data(this, "events") || {})[a.type] || [], k = n.event.special[a.type] || {};
+ if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
+ h = n.event.handlers.call(this, a, j), b = 0;
+ while ((f = h[b++]) && !a.isPropagationStopped()) {
+ a.currentTarget = f.elem, g = 0;
+ while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, c = ((n.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c && (a.result = c) === !1 && (a.preventDefault(), a.stopPropagation()))
+ }
+ return k.postDispatch && k.postDispatch.call(this, a), a.result
+ }
+ },
+ handlers: function (a, b) {
+ var c, d, e, f, g = [], h = b.delegateCount, i = a.target;
+ if (h && i.nodeType && (!a.button || "click" !== a.type))for (; i != this; i = i.parentNode || this)if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) {
+ for (e = [], f = 0; h > f; f++)d = b[f], c = d.selector + " ", void 0 === e[c] && (e[c] = d.needsContext ? n(c, this).index(i) >= 0 : n.find(c, this, null, [i]).length), e[c] && e.push(d);
+ e.length && g.push({elem: i, handlers: e})
+ }
+ return h < b.length && g.push({elem: this, handlers: b.slice(h)}), g
+ },
+ fix: function (a) {
+ if (a[n.expando])return a;
+ var b, c, d, e = a.type, f = a, g = this.fixHooks[e];
+ g || (this.fixHooks[e] = g = $.test(e) ? this.mouseHooks : Z.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new n.Event(f), b = d.length;
+ while (b--)c = d[b], a[c] = f[c];
+ return a.target || (a.target = f.srcElement || z), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
+ },
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+ fixHooks: {},
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "), filter: function (a, b) {
+ return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
+ }
+ },
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (a, b) {
+ var c, d, e, f = b.button, g = b.fromElement;
+ return null == a.pageX && null != b.clientX && (d = a.target.ownerDocument || z, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e && e.scrollLeft || c && c.scrollLeft || 0) - (e && e.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (e && e.scrollTop || c && c.scrollTop || 0) - (e && e.clientTop || c && c.clientTop || 0)), !a.relatedTarget && g && (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
+ }
+ },
+ special: {
+ load: {noBubble: !0}, focus: {
+ trigger: function () {
+ if (this !== db() && this.focus)try {
+ return this.focus(), !1
+ } catch (a) {
+ }
+ }, delegateType: "focusin"
+ }, blur: {
+ trigger: function () {
+ return this === db() && this.blur ? (this.blur(), !1) : void 0
+ }, delegateType: "focusout"
+ }, click: {
+ trigger: function () {
+ return n.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
+ }, _default: function (a) {
+ return n.nodeName(a.target, "a")
+ }
+ }, beforeunload: {
+ postDispatch: function (a) {
+ void 0 !== a.result && (a.originalEvent.returnValue = a.result)
+ }
+ }
+ },
+ simulate: function (a, b, c, d) {
+ var e = n.extend(new n.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
+ d ? n.event.trigger(e, null, b) : n.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
+ }
+ }, n.removeEvent = z.removeEventListener ? function (a, b, c) {
+ a.removeEventListener && a.removeEventListener(b, c, !1)
+ } : function (a, b, c) {
+ var d = "on" + b;
+ a.detachEvent && (typeof a[d] === L && (a[d] = null), a.detachEvent(d, c))
+ }, n.Event = function (a, b) {
+ return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && (a.returnValue === !1 || a.getPreventDefault && a.getPreventDefault()) ? bb : cb) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b)
+ }, n.Event.prototype = {
+ isDefaultPrevented: cb,
+ isPropagationStopped: cb,
+ isImmediatePropagationStopped: cb,
+ preventDefault: function () {
+ var a = this.originalEvent;
+ this.isDefaultPrevented = bb, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
+ },
+ stopPropagation: function () {
+ var a = this.originalEvent;
+ this.isPropagationStopped = bb, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
+ },
+ stopImmediatePropagation: function () {
+ this.isImmediatePropagationStopped = bb, this.stopPropagation()
+ }
+ }, n.each({mouseenter: "mouseover", mouseleave: "mouseout"}, function (a, b) {
+ n.event.special[a] = {
+ delegateType: b, bindType: b, handle: function (a) {
+ var c, d = this, e = a.relatedTarget, f = a.handleObj;
+ return (!e || e !== d && !n.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
+ }
+ }
+ }), l.submitBubbles || (n.event.special.submit = {
+ setup: function () {
+ return n.nodeName(this, "form") ? !1 : void n.event.add(this, "click._submit keypress._submit", function (a) {
+ var b = a.target, c = n.nodeName(b, "input") || n.nodeName(b, "button") ? b.form : void 0;
+ c && !n._data(c, "submitBubbles") && (n.event.add(c, "submit._submit", function (a) {
+ a._submit_bubble = !0
+ }), n._data(c, "submitBubbles", !0))
+ })
+ }, postDispatch: function (a) {
+ a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && n.event.simulate("submit", this.parentNode, a, !0))
+ }, teardown: function () {
+ return n.nodeName(this, "form") ? !1 : void n.event.remove(this, "._submit")
+ }
+ }), l.changeBubbles || (n.event.special.change = {
+ setup: function () {
+ return Y.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (n.event.add(this, "propertychange._change", function (a) {
+ "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
+ }), n.event.add(this, "click._change", function (a) {
+ this._just_changed && !a.isTrigger && (this._just_changed = !1), n.event.simulate("change", this, a, !0)
+ })), !1) : void n.event.add(this, "beforeactivate._change", function (a) {
+ var b = a.target;
+ Y.test(b.nodeName) && !n._data(b, "changeBubbles") && (n.event.add(b, "change._change", function (a) {
+ !this.parentNode || a.isSimulated || a.isTrigger || n.event.simulate("change", this.parentNode, a, !0)
+ }), n._data(b, "changeBubbles", !0))
+ })
+ }, handle: function (a) {
+ var b = a.target;
+ return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
+ }, teardown: function () {
+ return n.event.remove(this, "._change"), !Y.test(this.nodeName)
+ }
+ }), l.focusinBubbles || n.each({focus: "focusin", blur: "focusout"}, function (a, b) {
+ var c = function (a) {
+ n.event.simulate(b, a.target, n.event.fix(a), !0)
+ };
+ n.event.special[b] = {
+ setup: function () {
+ var d = this.ownerDocument || this, e = n._data(d, b);
+ e || d.addEventListener(a, c, !0), n._data(d, b, (e || 0) + 1)
+ }, teardown: function () {
+ var d = this.ownerDocument || this, e = n._data(d, b) - 1;
+ e ? n._data(d, b, e) : (d.removeEventListener(a, c, !0), n._removeData(d, b))
+ }
+ }
+ }), n.fn.extend({
+ on: function (a, b, c, d, e) {
+ var f, g;
+ if ("object" == typeof a) {
+ "string" != typeof b && (c = c || b, b = void 0);
+ for (f in a)this.on(f, b, c, a[f], e);
+ return this
+ }
+ if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1)d = cb; else if (!d)return this;
+ return 1 === e && (g = d, d = function (a) {
+ return n().off(a), g.apply(this, arguments)
+ }, d.guid = g.guid || (g.guid = n.guid++)), this.each(function () {
+ n.event.add(this, a, d, c, b)
+ })
+ }, one: function (a, b, c, d) {
+ return this.on(a, b, c, d, 1)
+ }, off: function (a, b, c) {
+ var d, e;
+ if (a && a.preventDefault && a.handleObj)return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
+ if ("object" == typeof a) {
+ for (e in a)this.off(e, b, a[e]);
+ return this
+ }
+ return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = cb), this.each(function () {
+ n.event.remove(this, a, c, b)
+ })
+ }, trigger: function (a, b) {
+ return this.each(function () {
+ n.event.trigger(a, b, this)
+ })
+ }, triggerHandler: function (a, b) {
+ var c = this[0];
+ return c ? n.event.trigger(a, b, c, !0) : void 0
+ }
+ });
+ function eb(a) {
+ var b = fb.split("|"), c = a.createDocumentFragment();
+ if (c.createElement)while (b.length)c.createElement(b.pop());
+ return c
+ }
+
+ var fb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", gb = / jQuery\d+="(?:null|\d+)"/g, hb = new RegExp("<(?:" + fb + ")[\\s/>]", "i"), ib = /^\s+/, jb = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, kb = /<([\w:]+)/, lb = /<tbody/i, mb = /<|&#?\w+;/, nb = /<(?:script|style|link)/i, ob = /checked\s*(?:[^=]|=\s*.checked.)/i, pb = /^$|\/(?:java|ecma)script/i, qb = /^true\/(.*)/, rb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, sb = {
+ option: [1, "<select multiple='multiple'>", "</select>"],
+ legend: [1, "<fieldset>", "</fieldset>"],
+ area: [1, "<map>", "</map>"],
+ param: [1, "<object>", "</object>"],
+ thead: [1, "<table>", "</table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+ _default: l.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
+ }, tb = eb(z), ub = tb.appendChild(z.createElement("div"));
+ sb.optgroup = sb.option, sb.tbody = sb.tfoot = sb.colgroup = sb.caption = sb.thead, sb.th = sb.td;
+ function vb(a, b) {
+ var c, d, e = 0, f = typeof a.getElementsByTagName !== L ? a.getElementsByTagName(b || "*") : typeof a.querySelectorAll !== L ? a.querySelectorAll(b || "*") : void 0;
+ if (!f)for (f = [], c = a.childNodes || a; null != (d = c[e]); e++)!b || n.nodeName(d, b) ? f.push(d) : n.merge(f, vb(d, b));
+ return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], f) : f
+ }
+
+ function wb(a) {
+ X.test(a.type) && (a.defaultChecked = a.checked)
+ }
+
+ function xb(a, b) {
+ return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
+ }
+
+ function yb(a) {
+ return a.type = (null !== n.find.attr(a, "type")) + "/" + a.type, a
+ }
+
+ function zb(a) {
+ var b = qb.exec(a.type);
+ return b ? a.type = b[1] : a.removeAttribute("type"), a
+ }
+
+ function Ab(a, b) {
+ for (var c, d = 0; null != (c = a[d]); d++)n._data(c, "globalEval", !b || n._data(b[d], "globalEval"))
+ }
+
+ function Bb(a, b) {
+ if (1 === b.nodeType && n.hasData(a)) {
+ var c, d, e, f = n._data(a), g = n._data(b, f), h = f.events;
+ if (h) {
+ delete g.handle, g.events = {};
+ for (c in h)for (d = 0, e = h[c].length; e > d; d++)n.event.add(b, c, h[c][d])
+ }
+ g.data && (g.data = n.extend({}, g.data))
+ }
+ }
+
+ function Cb(a, b) {
+ var c, d, e;
+ if (1 === b.nodeType) {
+ if (c = b.nodeName.toLowerCase(), !l.noCloneEvent && b[n.expando]) {
+ e = n._data(b);
+ for (d in e.events)n.removeEvent(b, d, e.handle);
+ b.removeAttribute(n.expando)
+ }
+ "script" === c && b.text !== a.text ? (yb(b).text = a.text, zb(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), l.html5Clone && a.innerHTML && !n.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && X.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
+ }
+ }
+
+ n.extend({
+ clone: function (a, b, c) {
+ var d, e, f, g, h, i = n.contains(a.ownerDocument, a);
+ if (l.html5Clone || n.isXMLDoc(a) || !hb.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (ub.innerHTML = a.outerHTML, ub.removeChild(f = ub.firstChild)), !(l.noCloneEvent && l.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a)))for (d = vb(f), h = vb(a), g = 0; null != (e = h[g]); ++g)d[g] && Cb(e, d[g]);
+ if (b)if (c)for (h = h || vb(a), d = d || vb(f), g = 0; null != (e = h[g]); g++)Bb(e, d[g]); else Bb(a, f);
+ return d = vb(f, "script"), d.length > 0 && Ab(d, !i && vb(a, "script")), d = h = e = null, f
+ }, buildFragment: function (a, b, c, d) {
+ for (var e, f, g, h, i, j, k, m = a.length, o = eb(b), p = [], q = 0; m > q; q++)if (f = a[q], f || 0 === f)if ("object" === n.type(f))n.merge(p, f.nodeType ? [f] : f); else if (mb.test(f)) {
+ h = h || o.appendChild(b.createElement("div")), i = (kb.exec(f) || ["", ""])[1].toLowerCase(), k = sb[i] || sb._default, h.innerHTML = k[1] + f.replace(jb, "<$1></$2>") + k[2], e = k[0];
+ while (e--)h = h.lastChild;
+ if (!l.leadingWhitespace && ib.test(f) && p.push(b.createTextNode(ib.exec(f)[0])), !l.tbody) {
+ f = "table" !== i || lb.test(f) ? "<table>" !== k[1] || lb.test(f) ? 0 : h : h.firstChild, e = f && f.childNodes.length;
+ while (e--)n.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j)
+ }
+ n.merge(p, h.childNodes), h.textContent = "";
+ while (h.firstChild)h.removeChild(h.firstChild);
+ h = o.lastChild
+ } else p.push(b.createTextNode(f));
+ h && o.removeChild(h), l.appendChecked || n.grep(vb(p, "input"), wb), q = 0;
+ while (f = p[q++])if ((!d || -1 === n.inArray(f, d)) && (g = n.contains(f.ownerDocument, f), h = vb(o.appendChild(f), "script"), g && Ab(h), c)) {
+ e = 0;
+ while (f = h[e++])pb.test(f.type || "") && c.push(f)
+ }
+ return h = null, o
+ }, cleanData: function (a, b) {
+ for (var d, e, f, g, h = 0, i = n.expando, j = n.cache, k = l.deleteExpando, m = n.event.special; null != (d = a[h]); h++)if ((b || n.acceptData(d)) && (f = d[i], g = f && j[f])) {
+ if (g.events)for (e in g.events)m[e] ? n.event.remove(d, e) : n.removeEvent(d, e, g.handle);
+ j[f] && (delete j[f], k ? delete d[i] : typeof d.removeAttribute !== L ? d.removeAttribute(i) : d[i] = null, c.push(f))
+ }
+ }
+ }), n.fn.extend({
+ text: function (a) {
+ return W(this, function (a) {
+ return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || z).createTextNode(a))
+ }, null, a, arguments.length)
+ }, append: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = xb(this, a);
+ b.appendChild(a)
+ }
+ })
+ }, prepend: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = xb(this, a);
+ b.insertBefore(a, b.firstChild)
+ }
+ })
+ }, before: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this)
+ })
+ }, after: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
+ })
+ }, remove: function (a, b) {
+ for (var c, d = a ? n.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || n.cleanData(vb(c)), c.parentNode && (b && n.contains(c.ownerDocument, c) && Ab(vb(c, "script")), c.parentNode.removeChild(c));
+ return this
+ }, empty: function () {
+ for (var a, b = 0; null != (a = this[b]); b++) {
+ 1 === a.nodeType && n.cleanData(vb(a, !1));
+ while (a.firstChild)a.removeChild(a.firstChild);
+ a.options && n.nodeName(a, "select") && (a.options.length = 0)
+ }
+ return this
+ }, clone: function (a, b) {
+ return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
+ return n.clone(this, a, b)
+ })
+ }, html: function (a) {
+ return W(this, function (a) {
+ var b = this[0] || {}, c = 0, d = this.length;
+ if (void 0 === a)return 1 === b.nodeType ? b.innerHTML.replace(gb, "") : void 0;
+ if (!("string" != typeof a || nb.test(a) || !l.htmlSerialize && hb.test(a) || !l.leadingWhitespace && ib.test(a) || sb[(kb.exec(a) || ["", ""])[1].toLowerCase()])) {
+ a = a.replace(jb, "<$1></$2>");
+ try {
+ for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (n.cleanData(vb(b, !1)), b.innerHTML = a);
+ b = 0
+ } catch (e) {
+ }
+ }
+ b && this.empty().append(a)
+ }, null, a, arguments.length)
+ }, replaceWith: function () {
+ var a = arguments[0];
+ return this.domManip(arguments, function (b) {
+ a = this.parentNode, n.cleanData(vb(this)), a && a.replaceChild(b, this)
+ }), a && (a.length || a.nodeType) ? this : this.remove()
+ }, detach: function (a) {
+ return this.remove(a, !0)
+ }, domManip: function (a, b) {
+ a = e.apply([], a);
+ var c, d, f, g, h, i, j = 0, k = this.length, m = this, o = k - 1, p = a[0], q = n.isFunction(p);
+ if (q || k > 1 && "string" == typeof p && !l.checkClone && ob.test(p))return this.each(function (c) {
+ var d = m.eq(c);
+ q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
+ });
+ if (k && (i = n.buildFragment(a, this[0].ownerDocument, !1, this), c = i.firstChild, 1 === i.childNodes.length && (i = c), c)) {
+ for (g = n.map(vb(i, "script"), yb), f = g.length; k > j; j++)d = i, j !== o && (d = n.clone(d, !0, !0), f && n.merge(g, vb(d, "script"))), b.call(this[j], d, j);
+ if (f)for (h = g[g.length - 1].ownerDocument, n.map(g, zb), j = 0; f > j; j++)d = g[j], pb.test(d.type || "") && !n._data(d, "globalEval") && n.contains(h, d) && (d.src ? n._evalUrl && n._evalUrl(d.src) : n.globalEval((d.text || d.textContent || d.innerHTML || "").replace(rb, "")));
+ i = c = null
+ }
+ return this
+ }
+ }), n.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (a, b) {
+ n.fn[a] = function (a) {
+ for (var c, d = 0, e = [], g = n(a), h = g.length - 1; h >= d; d++)c = d === h ? this : this.clone(!0), n(g[d])[b](c), f.apply(e, c.get());
+ return this.pushStack(e)
+ }
+ });
+ var Db, Eb = {};
+
+ function Fb(b, c) {
+ var d = n(c.createElement(b)).appendTo(c.body), e = a.getDefaultComputedStyle ? a.getDefaultComputedStyle(d[0]).display : n.css(d[0], "display");
+ return d.detach(), e
+ }
+
+ function Gb(a) {
+ var b = z, c = Eb[a];
+ return c || (c = Fb(a, b), "none" !== c && c || (Db = (Db || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Db[0].contentWindow || Db[0].contentDocument).document, b.write(), b.close(), c = Fb(a, b), Db.detach()), Eb[a] = c), c
+ }
+
+ !function () {
+ var a, b, c = z.createElement("div"), d = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
+ c.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = c.getElementsByTagName("a")[0], a.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(a.style.opacity), l.cssFloat = !!a.style.cssFloat, c.style.backgroundClip = "content-box", c.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === c.style.backgroundClip, a = c = null, l.shrinkWrapBlocks = function () {
+ var a, c, e, f;
+ if (null == b) {
+ if (a = z.getElementsByTagName("body")[0], !a)return;
+ f = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px", c = z.createElement("div"), e = z.createElement("div"), a.appendChild(c).appendChild(e), b = !1, typeof e.style.zoom !== L && (e.style.cssText = d + ";width:1px;padding:1px;zoom:1", e.innerHTML = "<div></div>", e.firstChild.style.width = "5px", b = 3 !== e.offsetWidth), a.removeChild(c), a = c = e = null
+ }
+ return b
+ }
+ }();
+ var Hb = /^margin/, Ib = new RegExp("^(" + T + ")(?!px)[a-z%]+$", "i"), Jb, Kb, Lb = /^(top|right|bottom|left)$/;
+ a.getComputedStyle ? (Jb = function (a) {
+ return a.ownerDocument.defaultView.getComputedStyle(a, null)
+ }, Kb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Jb(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, c && ("" !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), Ib.test(g) && Hb.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 === g ? g : g + ""
+ }) : z.documentElement.currentStyle && (Jb = function (a) {
+ return a.currentStyle
+ }, Kb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Jb(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Ib.test(g) && !Lb.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto"
+ });
+ function Mb(a, b) {
+ return {
+ get: function () {
+ var c = a();
+ if (null != c)return c ? void delete this.get : (this.get = b).apply(this, arguments)
+ }
+ }
+ }
+
+ !function () {
+ var b, c, d, e, f, g, h = z.createElement("div"), i = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px", j = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";
+ h.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", b = h.getElementsByTagName("a")[0], b.style.cssText = "float:left;opacity:.5", l.opacity = /^0.5/.test(b.style.opacity), l.cssFloat = !!b.style.cssFloat, h.style.backgroundClip = "content-box", h.cloneNode(!0).style.backgroundClip = "", l.clearCloneStyle = "content-box" === h.style.backgroundClip, b = h = null, n.extend(l, {
+ reliableHiddenOffsets: function () {
+ if (null != c)return c;
+ var a, b, d, e = z.createElement("div"), f = z.getElementsByTagName("body")[0];
+ if (f)return e.setAttribute("className", "t"), e.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = z.createElement("div"), a.style.cssText = i, f.appendChild(a).appendChild(e), e.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", b = e.getElementsByTagName("td"), b[0].style.cssText = "padding:0;margin:0;border:0;display:none", d = 0 === b[0].offsetHeight, b[0].style.display = "", b[1].style.display = "none", c = d && 0 === b[0].offsetHeight, f.removeChild(a), e = f = null, c
+ }, boxSizing: function () {
+ return null == d && k(), d
+ }, boxSizingReliable: function () {
+ return null == e && k(), e
+ }, pixelPosition: function () {
+ return null == f && k(), f
+ }, reliableMarginRight: function () {
+ var b, c, d, e;
+ if (null == g && a.getComputedStyle) {
+ if (b = z.getElementsByTagName("body")[0], !b)return;
+ c = z.createElement("div"), d = z.createElement("div"), c.style.cssText = i, b.appendChild(c).appendChild(d), e = d.appendChild(z.createElement("div")), e.style.cssText = d.style.cssText = j, e.style.marginRight = e.style.width = "0", d.style.width = "1px", g = !parseFloat((a.getComputedStyle(e, null) || {}).marginRight), b.removeChild(c)
+ }
+ return g
+ }
+ });
+ function k() {
+ var b, c, h = z.getElementsByTagName("body")[0];
+ h && (b = z.createElement("div"), c = z.createElement("div"), b.style.cssText = i, h.appendChild(b).appendChild(c), c.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%", n.swap(h, null != h.style.zoom ? {zoom: 1} : {}, function () {
+ d = 4 === c.offsetWidth
+ }), e = !0, f = !1, g = !0, a.getComputedStyle && (f = "1%" !== (a.getComputedStyle(c, null) || {}).top, e = "4px" === (a.getComputedStyle(c, null) || {width: "4px"}).width), h.removeChild(b), c = h = null)
+ }
+ }(), n.swap = function (a, b, c, d) {
+ var e, f, g = {};
+ for (f in b)g[f] = a.style[f], a.style[f] = b[f];
+ e = c.apply(a, d || []);
+ for (f in b)a.style[f] = g[f];
+ return e
+ };
+ var Nb = /alpha\([^)]*\)/i, Ob = /opacity\s*=\s*([^)]*)/, Pb = /^(none|table(?!-c[ea]).+)/, Qb = new RegExp("^(" + T + ")(.*)$", "i"), Rb = new RegExp("^([+-])=(" + T + ")", "i"), Sb = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }, Tb = {letterSpacing: 0, fontWeight: 400}, Ub = ["Webkit", "O", "Moz", "ms"];
+
+ function Vb(a, b) {
+ if (b in a)return b;
+ var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = Ub.length;
+ while (e--)if (b = Ub[e] + c, b in a)return b;
+ return d
+ }
+
+ function Wb(a, b) {
+ for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++)d = a[g], d.style && (f[g] = n._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && V(d) && (f[g] = n._data(d, "olddisplay", Gb(d.nodeName)))) : f[g] || (e = V(d), (c && "none" !== c || !e) && n._data(d, "olddisplay", e ? c : n.css(d, "display"))));
+ for (g = 0; h > g; g++)d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
+ return a
+ }
+
+ function Xb(a, b, c) {
+ var d = Qb.exec(b);
+ return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
+ }
+
+ function Yb(a, b, c, d, e) {
+ for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += n.css(a, c + U[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + U[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + U[f] + "Width", !0, e))) : (g += n.css(a, "padding" + U[f], !0, e), "padding" !== c && (g += n.css(a, "border" + U[f] + "Width", !0, e)));
+ return g
+ }
+
+ function Zb(a, b, c) {
+ var d = !0, e = "width" === b ? a.offsetWidth : a.offsetHeight, f = Jb(a), g = l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, f);
+ if (0 >= e || null == e) {
+ if (e = Kb(a, b, f), (0 > e || null == e) && (e = a.style[b]), Ib.test(e))return e;
+ d = g && (l.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
+ }
+ return e + Yb(a, b, c || (g ? "border" : "content"), d, f) + "px"
+ }
+
+ n.extend({
+ cssHooks: {
+ opacity: {
+ get: function (a, b) {
+ if (b) {
+ var c = Kb(a, "opacity");
+ return "" === c ? "1" : c
+ }
+ }
+ }
+ },
+ cssNumber: {
+ columnCount: !0,
+ fillOpacity: !0,
+ fontWeight: !0,
+ lineHeight: !0,
+ opacity: !0,
+ order: !0,
+ orphans: !0,
+ widows: !0,
+ zIndex: !0,
+ zoom: !0
+ },
+ cssProps: {"float": l.cssFloat ? "cssFloat" : "styleFloat"},
+ style: function (a, b, c, d) {
+ if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
+ var e, f, g, h = n.camelCase(b), i = a.style;
+ if (b = n.cssProps[h] || (n.cssProps[h] = Vb(i, h)), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c)return g && "get"in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
+ if (f = typeof c, "string" === f && (e = Rb.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(n.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || n.cssNumber[h] || (c += "px"), l.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set"in g && void 0 === (c = g.set(a, c, d)))))try {
+ i[b] = "", i[b] = c
+ } catch (j) {
+ }
+ }
+ },
+ css: function (a, b, c, d) {
+ var e, f, g, h = n.camelCase(b);
+ return b = n.cssProps[h] || (n.cssProps[h] = Vb(a.style, h)), g = n.cssHooks[b] || n.cssHooks[h], g && "get"in g && (f = g.get(a, !0, c)), void 0 === f && (f = Kb(a, b, d)), "normal" === f && b in Tb && (f = Tb[b]), "" === c || c ? (e = parseFloat(f), c === !0 || n.isNumeric(e) ? e || 0 : f) : f
+ }
+ }), n.each(["height", "width"], function (a, b) {
+ n.cssHooks[b] = {
+ get: function (a, c, d) {
+ return c ? 0 === a.offsetWidth && Pb.test(n.css(a, "display")) ? n.swap(a, Sb, function () {
+ return Zb(a, b, d)
+ }) : Zb(a, b, d) : void 0
+ }, set: function (a, c, d) {
+ var e = d && Jb(a);
+ return Xb(a, c, d ? Yb(a, b, d, l.boxSizing() && "border-box" === n.css(a, "boxSizing", !1, e), e) : 0)
+ }
+ }
+ }), l.opacity || (n.cssHooks.opacity = {
+ get: function (a, b) {
+ return Ob.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
+ }, set: function (a, b) {
+ var c = a.style, d = a.currentStyle, e = n.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "", f = d && d.filter || c.filter || "";
+ c.zoom = 1, (b >= 1 || "" === b) && "" === n.trim(f.replace(Nb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Nb.test(f) ? f.replace(Nb, e) : f + " " + e)
+ }
+ }), n.cssHooks.marginRight = Mb(l.reliableMarginRight, function (a, b) {
+ return b ? n.swap(a, {display: "inline-block"}, Kb, [a, "marginRight"]) : void 0
+ }), n.each({margin: "", padding: "", border: "Width"}, function (a, b) {
+ n.cssHooks[a + b] = {
+ expand: function (c) {
+ for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++)e[a + U[d] + b] = f[d] || f[d - 2] || f[0];
+ return e
+ }
+ }, Hb.test(a) || (n.cssHooks[a + b].set = Xb)
+ }), n.fn.extend({
+ css: function (a, b) {
+ return W(this, function (a, b, c) {
+ var d, e, f = {}, g = 0;
+ if (n.isArray(b)) {
+ for (d = Jb(a), e = b.length; e > g; g++)f[b[g]] = n.css(a, b[g], !1, d);
+ return f
+ }
+ return void 0 !== c ? n.style(a, b, c) : n.css(a, b)
+ }, a, b, arguments.length > 1)
+ }, show: function () {
+ return Wb(this, !0)
+ }, hide: function () {
+ return Wb(this)
+ }, toggle: function (a) {
+ return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
+ V(this) ? n(this).show() : n(this).hide()
+ })
+ }
+ });
+ function $b(a, b, c, d, e) {
+ return new $b.prototype.init(a, b, c, d, e)
+ }
+
+ n.Tween = $b, $b.prototype = {
+ constructor: $b, init: function (a, b, c, d, e, f) {
+ this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px")
+ }, cur: function () {
+ var a = $b.propHooks[this.prop];
+ return a && a.get ? a.get(this) : $b.propHooks._default.get(this)
+ }, run: function (a) {
+ var b, c = $b.propHooks[this.prop];
+ return this.pos = b = this.options.duration ? n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : $b.propHooks._default.set(this), this
+ }
+ }, $b.prototype.init.prototype = $b.prototype, $b.propHooks = {
+ _default: {
+ get: function (a) {
+ var b;
+ return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
+ }, set: function (a) {
+ n.fx.step[a.prop] ? n.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[n.cssProps[a.prop]] || n.cssHooks[a.prop]) ? n.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
+ }
+ }
+ }, $b.propHooks.scrollTop = $b.propHooks.scrollLeft = {
+ set: function (a) {
+ a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
+ }
+ }, n.easing = {
+ linear: function (a) {
+ return a
+ }, swing: function (a) {
+ return .5 - Math.cos(a * Math.PI) / 2
+ }
+ }, n.fx = $b.prototype.init, n.fx.step = {};
+ var _b, ac, bc = /^(?:toggle|show|hide)$/, cc = new RegExp("^(?:([+-])=|)(" + T + ")([a-z%]*)$", "i"), dc = /queueHooks$/, ec = [jc], fc = {
+ "*": [function (a, b) {
+ var c = this.createTween(a, b), d = c.cur(), e = cc.exec(b), f = e && e[3] || (n.cssNumber[a] ? "" : "px"), g = (n.cssNumber[a] || "px" !== f && +d) && cc.exec(n.css(c.elem, a)), h = 1, i = 20;
+ if (g && g[3] !== f) {
+ f = f || g[3], e = e || [], g = +d || 1;
+ do h = h || ".5", g /= h, n.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
+ }
+ return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
+ }]
+ };
+
+ function gc() {
+ return setTimeout(function () {
+ _b = void 0
+ }), _b = n.now()
+ }
+
+ function hc(a, b) {
+ var c, d = {height: a}, e = 0;
+ for (b = b ? 1 : 0; 4 > e; e += 2 - b)c = U[e], d["margin" + c] = d["padding" + c] = a;
+ return b && (d.opacity = d.width = a), d
+ }
+
+ function ic(a, b, c) {
+ for (var d, e = (fc[b] || []).concat(fc["*"]), f = 0, g = e.length; g > f; f++)if (d = e[f].call(c, b, a))return d
+ }
+
+ function jc(a, b, c) {
+ var d, e, f, g, h, i, j, k, m = this, o = {}, p = a.style, q = a.nodeType && V(a), r = n._data(a, "fxshow");
+ c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
+ h.unqueued || i()
+ }), h.unqueued++, m.always(function () {
+ m.always(function () {
+ h.unqueued--, n.queue(a, "fx").length || h.empty.fire()
+ })
+ })), 1 === a.nodeType && ("height"in b || "width"in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = n.css(a, "display"), k = Gb(a.nodeName), "none" === j && (j = k), "inline" === j && "none" === n.css(a, "float") && (l.inlineBlockNeedsLayout && "inline" !== k ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", l.shrinkWrapBlocks() || m.always(function () {
+ p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]
+ }));
+ for (d in b)if (e = b[d], bc.exec(e)) {
+ if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) {
+ if ("show" !== e || !r || void 0 === r[d])continue;
+ q = !0
+ }
+ o[d] = r && r[d] || n.style(a, d)
+ }
+ if (!n.isEmptyObject(o)) {
+ r ? "hidden"in r && (q = r.hidden) : r = n._data(a, "fxshow", {}), f && (r.hidden = !q), q ? n(a).show() : m.done(function () {
+ n(a).hide()
+ }), m.done(function () {
+ var b;
+ n._removeData(a, "fxshow");
+ for (b in o)n.style(a, b, o[b])
+ });
+ for (d in o)g = ic(q ? r[d] : 0, d, m), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
+ }
+ }
+
+ function kc(a, b) {
+ var c, d, e, f, g;
+ for (c in a)if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand"in g) {
+ f = g.expand(f), delete a[d];
+ for (c in f)c in a || (a[c] = f[c], b[c] = e)
+ } else b[d] = e
+ }
+
+ function lc(a, b, c) {
+ var d, e, f = 0, g = ec.length, h = n.Deferred().always(function () {
+ delete i.elem
+ }), i = function () {
+ if (e)return !1;
+ for (var b = _b || gc(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++)j.tweens[g].run(f);
+ return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
+ }, j = h.promise({
+ elem: a,
+ props: n.extend({}, b),
+ opts: n.extend(!0, {specialEasing: {}}, c),
+ originalProperties: b,
+ originalOptions: c,
+ startTime: _b || gc(),
+ duration: c.duration,
+ tweens: [],
+ createTween: function (b, c) {
+ var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
+ return j.tweens.push(d), d
+ },
+ stop: function (b) {
+ var c = 0, d = b ? j.tweens.length : 0;
+ if (e)return this;
+ for (e = !0; d > c; c++)j.tweens[c].run(1);
+ return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
+ }
+ }), k = j.props;
+ for (kc(k, j.opts.specialEasing); g > f; f++)if (d = ec[f].call(j, a, k, j.opts))return d;
+ return n.map(k, ic, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
+ elem: a,
+ anim: j,
+ queue: j.opts.queue
+ })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
+ }
+
+ n.Animation = n.extend(lc, {
+ tweener: function (a, b) {
+ n.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
+ for (var c, d = 0, e = a.length; e > d; d++)c = a[d], fc[c] = fc[c] || [], fc[c].unshift(b)
+ }, prefilter: function (a, b) {
+ b ? ec.unshift(a) : ec.push(a)
+ }
+ }), n.speed = function (a, b, c) {
+ var d = a && "object" == typeof a ? n.extend({}, a) : {
+ complete: c || !c && b || n.isFunction(a) && a,
+ duration: a,
+ easing: c && b || b && !n.isFunction(b) && b
+ };
+ return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function () {
+ n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue)
+ }, d
+ }, n.fn.extend({
+ fadeTo: function (a, b, c, d) {
+ return this.filter(V).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
+ }, animate: function (a, b, c, d) {
+ var e = n.isEmptyObject(a), f = n.speed(b, c, d), g = function () {
+ var b = lc(this, n.extend({}, a), f);
+ (e || n._data(this, "finish")) && b.stop(!0)
+ };
+ return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
+ }, stop: function (a, b, c) {
+ var d = function (a) {
+ var b = a.stop;
+ delete a.stop, b(c)
+ };
+ return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () {
+ var b = !0, e = null != a && a + "queueHooks", f = n.timers, g = n._data(this);
+ if (e)g[e] && g[e].stop && d(g[e]); else for (e in g)g[e] && g[e].stop && dc.test(e) && d(g[e]);
+ for (e = f.length; e--;)f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
+ (b || !c) && n.dequeue(this, a)
+ })
+ }, finish: function (a) {
+ return a !== !1 && (a = a || "fx"), this.each(function () {
+ var b, c = n._data(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = n.timers, g = d ? d.length : 0;
+ for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;)f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
+ for (b = 0; g > b; b++)d[b] && d[b].finish && d[b].finish.call(this);
+ delete c.finish
+ })
+ }
+ }), n.each(["toggle", "show", "hide"], function (a, b) {
+ var c = n.fn[b];
+ n.fn[b] = function (a, d, e) {
+ return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(hc(b, !0), a, d, e)
+ }
+ }), n.each({
+ slideDown: hc("show"),
+ slideUp: hc("hide"),
+ slideToggle: hc("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (a, b) {
+ n.fn[a] = function (a, c, d) {
+ return this.animate(b, a, c, d)
+ }
+ }), n.timers = [], n.fx.tick = function () {
+ var a, b = n.timers, c = 0;
+ for (_b = n.now(); c < b.length; c++)a = b[c], a() || b[c] !== a || b.splice(c--, 1);
+ b.length || n.fx.stop(), _b = void 0
+ }, n.fx.timer = function (a) {
+ n.timers.push(a), a() ? n.fx.start() : n.timers.pop()
+ }, n.fx.interval = 13, n.fx.start = function () {
+ ac || (ac = setInterval(n.fx.tick, n.fx.interval))
+ }, n.fx.stop = function () {
+ clearInterval(ac), ac = null
+ }, n.fx.speeds = {slow: 600, fast: 200, _default: 400}, n.fn.delay = function (a, b) {
+ return a = n.fx ? n.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
+ var d = setTimeout(b, a);
+ c.stop = function () {
+ clearTimeout(d)
+ }
+ })
+ }, function () {
+ var a, b, c, d, e = z.createElement("div");
+ e.setAttribute("className", "t"), e.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", a = e.getElementsByTagName("a")[0], c = z.createElement("select"), d = c.appendChild(z.createElement("option")), b = e.getElementsByTagName("input")[0], a.style.cssText = "top:1px", l.getSetAttribute = "t" !== e.className, l.style = /top/.test(a.getAttribute("style")), l.hrefNormalized = "/a" === a.getAttribute("href"), l.checkOn = !!b.value, l.optSelected = d.selected, l.enctype = !!z.createElement("form").enctype, c.disabled = !0, l.optDisabled = !d.disabled, b = z.createElement("input"), b.setAttribute("value", ""), l.input = "" === b.getAttribute("value"), b.value = "t", b.setAttribute("type", "radio"), l.radioValue = "t" === b.value, a = b = c = d = e = null
+ }();
+ var mc = /\r/g;
+ n.fn.extend({
+ val: function (a) {
+ var b, c, d, e = this[0];
+ {
+ if (arguments.length)return d = n.isFunction(a), this.each(function (c) {
+ var e;
+ 1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function (a) {
+ return null == a ? "" : a + ""
+ })), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set"in b && void 0 !== b.set(this, e, "value") || (this.value = e))
+ });
+ if (e)return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get"in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(mc, "") : null == c ? "" : c)
+ }
+ }
+ }), n.extend({
+ valHooks: {
+ option: {
+ get: function (a) {
+ var b = n.find.attr(a, "value");
+ return null != b ? b : n.text(a)
+ }
+ }, select: {
+ get: function (a) {
+ for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)if (c = d[i], !(!c.selected && i !== e || (l.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && n.nodeName(c.parentNode, "optgroup"))) {
+ if (b = n(c).val(), f)return b;
+ g.push(b)
+ }
+ return g
+ }, set: function (a, b) {
+ var c, d, e = a.options, f = n.makeArray(b), g = e.length;
+ while (g--)if (d = e[g], n.inArray(n.valHooks.option.get(d), f) >= 0)try {
+ d.selected = c = !0
+ } catch (h) {
+ d.scrollHeight
+ } else d.selected = !1;
+ return c || (a.selectedIndex = -1), e
+ }
+ }
+ }
+ }), n.each(["radio", "checkbox"], function () {
+ n.valHooks[this] = {
+ set: function (a, b) {
+ return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) >= 0 : void 0
+ }
+ }, l.checkOn || (n.valHooks[this].get = function (a) {
+ return null === a.getAttribute("value") ? "on" : a.value
+ })
+ });
+ var nc, oc, pc = n.expr.attrHandle, qc = /^(?:checked|selected)$/i, rc = l.getSetAttribute, sc = l.input;
+ n.fn.extend({
+ attr: function (a, b) {
+ return W(this, n.attr, a, b, arguments.length > 1)
+ }, removeAttr: function (a) {
+ return this.each(function () {
+ n.removeAttr(this, a)
+ })
+ }
+ }), n.extend({
+ attr: function (a, b, c) {
+ var d, e, f = a.nodeType;
+ if (a && 3 !== f && 8 !== f && 2 !== f)return typeof a.getAttribute === L ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), d = n.attrHooks[b] || (n.expr.match.bool.test(b) ? oc : nc)), void 0 === c ? d && "get"in d && null !== (e = d.get(a, b)) ? e : (e = n.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set"in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void n.removeAttr(a, b))
+ }, removeAttr: function (a, b) {
+ var c, d, e = 0, f = b && b.match(F);
+ if (f && 1 === a.nodeType)while (c = f[e++])d = n.propFix[c] || c, n.expr.match.bool.test(c) ? sc && rc || !qc.test(c) ? a[d] = !1 : a[n.camelCase("default-" + c)] = a[d] = !1 : n.attr(a, c, ""), a.removeAttribute(rc ? c : d)
+ }, attrHooks: {
+ type: {
+ set: function (a, b) {
+ if (!l.radioValue && "radio" === b && n.nodeName(a, "input")) {
+ var c = a.value;
+ return a.setAttribute("type", b), c && (a.value = c), b
+ }
+ }
+ }
+ }
+ }), oc = {
+ set: function (a, b, c) {
+ return b === !1 ? n.removeAttr(a, c) : sc && rc || !qc.test(c) ? a.setAttribute(!rc && n.propFix[c] || c, c) : a[n.camelCase("default-" + c)] = a[c] = !0, c
+ }
+ }, n.each(n.expr.match.bool.source.match(/\w+/g), function (a, b) {
+ var c = pc[b] || n.find.attr;
+ pc[b] = sc && rc || !qc.test(b) ? function (a, b, d) {
+ var e, f;
+ return d || (f = pc[b], pc[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, pc[b] = f), e
+ } : function (a, b, c) {
+ return c ? void 0 : a[n.camelCase("default-" + b)] ? b.toLowerCase() : null
+ }
+ }), sc && rc || (n.attrHooks.value = {
+ set: function (a, b, c) {
+ return n.nodeName(a, "input") ? void(a.defaultValue = b) : nc && nc.set(a, b, c)
+ }
+ }), rc || (nc = {
+ set: function (a, b, c) {
+ var d = a.getAttributeNode(c);
+ return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0
+ }
+ }, pc.id = pc.name = pc.coords = function (a, b, c) {
+ var d;
+ return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null
+ }, n.valHooks.button = {
+ get: function (a, b) {
+ var c = a.getAttributeNode(b);
+ return c && c.specified ? c.value : void 0
+ }, set: nc.set
+ }, n.attrHooks.contenteditable = {
+ set: function (a, b, c) {
+ nc.set(a, "" === b ? !1 : b, c)
+ }
+ }, n.each(["width", "height"], function (a, b) {
+ n.attrHooks[b] = {
+ set: function (a, c) {
+ return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
+ }
+ }
+ })), l.style || (n.attrHooks.style = {
+ get: function (a) {
+ return a.style.cssText || void 0
+ }, set: function (a, b) {
+ return a.style.cssText = b + ""
+ }
+ });
+ var tc = /^(?:input|select|textarea|button|object)$/i, uc = /^(?:a|area)$/i;
+ n.fn.extend({
+ prop: function (a, b) {
+ return W(this, n.prop, a, b, arguments.length > 1)
+ }, removeProp: function (a) {
+ return a = n.propFix[a] || a, this.each(function () {
+ try {
+ this[a] = void 0, delete this[a]
+ } catch (b) {
+ }
+ })
+ }
+ }), n.extend({
+ propFix: {"for": "htmlFor", "class": "className"}, prop: function (a, b, c) {
+ var d, e, f, g = a.nodeType;
+ if (a && 3 !== g && 8 !== g && 2 !== g)return f = 1 !== g || !n.isXMLDoc(a), f && (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set"in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get"in e && null !== (d = e.get(a, b)) ? d : a[b]
+ }, propHooks: {
+ tabIndex: {
+ get: function (a) {
+ var b = n.find.attr(a, "tabindex");
+ return b ? parseInt(b, 10) : tc.test(a.nodeName) || uc.test(a.nodeName) && a.href ? 0 : -1
+ }
+ }
+ }
+ }), l.hrefNormalized || n.each(["href", "src"], function (a, b) {
+ n.propHooks[b] = {
+ get: function (a) {
+ return a.getAttribute(b, 4)
+ }
+ }
+ }), l.optSelected || (n.propHooks.selected = {
+ get: function (a) {
+ var b = a.parentNode;
+ return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
+ }
+ }), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
+ n.propFix[this.toLowerCase()] = this
+ }), l.enctype || (n.propFix.enctype = "encoding");
+ var vc = /[\t\r\n\f]/g;
+ n.fn.extend({
+ addClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = "string" == typeof a && a;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).addClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(F) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : " ")) {
+ f = 0;
+ while (e = b[f++])d.indexOf(" " + e + " ") < 0 && (d += e + " ");
+ g = n.trim(d), c.className !== g && (c.className = g)
+ }
+ return this
+ }, removeClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = 0 === arguments.length || "string" == typeof a && a;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).removeClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(F) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(vc, " ") : "")) {
+ f = 0;
+ while (e = b[f++])while (d.indexOf(" " + e + " ") >= 0)d = d.replace(" " + e + " ", " ");
+ g = a ? n.trim(d) : "", c.className !== g && (c.className = g)
+ }
+ return this
+ }, toggleClass: function (a, b) {
+ var c = typeof a;
+ return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(n.isFunction(a) ? function (c) {
+ n(this).toggleClass(a.call(this, c, this.className, b), b)
+ } : function () {
+ if ("string" === c) {
+ var b, d = 0, e = n(this), f = a.match(F) || [];
+ while (b = f[d++])e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
+ } else(c === L || "boolean" === c) && (this.className && n._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : n._data(this, "__className__") || "")
+ })
+ }, hasClass: function (a) {
+ for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(vc, " ").indexOf(b) >= 0)return !0;
+ return !1
+ }
+ }), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
+ n.fn[b] = function (a, c) {
+ return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
+ }
+ }), n.fn.extend({
+ hover: function (a, b) {
+ return this.mouseenter(a).mouseleave(b || a)
+ }, bind: function (a, b, c) {
+ return this.on(a, null, b, c)
+ }, unbind: function (a, b) {
+ return this.off(a, null, b)
+ }, delegate: function (a, b, c, d) {
+ return this.on(b, a, c, d)
+ }, undelegate: function (a, b, c) {
+ return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
+ }
+ });
+ var wc = n.now(), xc = /\?/, yc = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+ n.parseJSON = function (b) {
+ if (a.JSON && a.JSON.parse)return a.JSON.parse(b + "");
+ var c, d = null, e = n.trim(b + "");
+ return e && !n.trim(e.replace(yc, function (a, b, e, f) {
+ return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, "")
+ })) ? Function("return " + e)() : n.error("Invalid JSON: " + b)
+ }, n.parseXML = function (b) {
+ var c, d;
+ if (!b || "string" != typeof b)return null;
+ try {
+ a.DOMParser ? (d = new DOMParser, c = d.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b))
+ } catch (e) {
+ c = void 0
+ }
+ return c && c.documentElement && !c.getElementsByTagName("parsererror").length || n.error("Invalid XML: " + b), c
+ };
+ var zc, Ac, Bc = /#.*$/, Cc = /([?&])_=[^&]*/, Dc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Ec = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Fc = /^(?:GET|HEAD)$/, Gc = /^\/\//, Hc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, Ic = {}, Jc = {}, Kc = "*/".concat("*");
+ try {
+ Ac = location.href
+ } catch (Lc) {
+ Ac = z.createElement("a"), Ac.href = "", Ac = Ac.href
+ }
+ zc = Hc.exec(Ac.toLowerCase()) || [];
+ function Mc(a) {
+ return function (b, c) {
+ "string" != typeof b && (c = b, b = "*");
+ var d, e = 0, f = b.toLowerCase().match(F) || [];
+ if (n.isFunction(c))while (d = f[e++])"+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
+ }
+ }
+
+ function Nc(a, b, c, d) {
+ var e = {}, f = a === Jc;
+
+ function g(h) {
+ var i;
+ return e[h] = !0, n.each(a[h] || [], function (a, h) {
+ var j = h(b, c, d);
+ return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
+ }), i
+ }
+
+ return g(b.dataTypes[0]) || !e["*"] && g("*")
+ }
+
+ function Oc(a, b) {
+ var c, d, e = n.ajaxSettings.flatOptions || {};
+ for (d in b)void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]);
+ return c && n.extend(!0, a, c), a
+ }
+
+ function Pc(a, b, c) {
+ var d, e, f, g, h = a.contents, i = a.dataTypes;
+ while ("*" === i[0])i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type"));
+ if (e)for (g in h)if (h[g] && h[g].test(e)) {
+ i.unshift(g);
+ break
+ }
+ if (i[0]in c)f = i[0]; else {
+ for (g in c) {
+ if (!i[0] || a.converters[g + " " + i[0]]) {
+ f = g;
+ break
+ }
+ d || (d = g)
+ }
+ f = f || d
+ }
+ return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
+ }
+
+ function Qc(a, b, c, d) {
+ var e, f, g, h, i, j = {}, k = a.dataTypes.slice();
+ if (k[1])for (g in a.converters)j[g.toLowerCase()] = a.converters[g];
+ f = k.shift();
+ while (f)if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())if ("*" === f)f = i; else if ("*" !== i && i !== f) {
+ if (g = j[i + " " + f] || j["* " + f], !g)for (e in j)if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
+ g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
+ break
+ }
+ if (g !== !0)if (g && a["throws"])b = g(b); else try {
+ b = g(b)
+ } catch (l) {
+ return {state: "parsererror", error: g ? l : "No conversion from " + i + " to " + f}
+ }
+ }
+ return {state: "success", data: b}
+ }
+
+ n.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: Ac,
+ type: "GET",
+ isLocal: Ec.test(zc[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": Kc,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {xml: /xml/, html: /html/, json: /json/},
+ responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"},
+ converters: {"* text": String, "text html": !0, "text json": n.parseJSON, "text xml": n.parseXML},
+ flatOptions: {url: !0, context: !0}
+ },
+ ajaxSetup: function (a, b) {
+ return b ? Oc(Oc(a, n.ajaxSettings), b) : Oc(n.ajaxSettings, a)
+ },
+ ajaxPrefilter: Mc(Ic),
+ ajaxTransport: Mc(Jc),
+ ajax: function (a, b) {
+ "object" == typeof a && (b = a, a = void 0), b = b || {};
+ var c, d, e, f, g, h, i, j, k = n.ajaxSetup({}, b), l = k.context || k, m = k.context && (l.nodeType || l.jquery) ? n(l) : n.event, o = n.Deferred(), p = n.Callbacks("once memory"), q = k.statusCode || {}, r = {}, s = {}, t = 0, u = "canceled", v = {
+ readyState: 0,
+ getResponseHeader: function (a) {
+ var b;
+ if (2 === t) {
+ if (!j) {
+ j = {};
+ while (b = Dc.exec(f))j[b[1].toLowerCase()] = b[2]
+ }
+ b = j[a.toLowerCase()]
+ }
+ return null == b ? null : b
+ },
+ getAllResponseHeaders: function () {
+ return 2 === t ? f : null
+ },
+ setRequestHeader: function (a, b) {
+ var c = a.toLowerCase();
+ return t || (a = s[c] = s[c] || a, r[a] = b), this
+ },
+ overrideMimeType: function (a) {
+ return t || (k.mimeType = a), this
+ },
+ statusCode: function (a) {
+ var b;
+ if (a)if (2 > t)for (b in a)q[b] = [q[b], a[b]]; else v.always(a[v.status]);
+ return this
+ },
+ abort: function (a) {
+ var b = a || u;
+ return i && i.abort(b), x(0, b), this
+ }
+ };
+ if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || Ac) + "").replace(Bc, "").replace(Gc, zc[1] + "//"), k.type = b.method || b.type || k.method || k.type, k.dataTypes = n.trim(k.dataType || "*").toLowerCase().match(F) || [""], null == k.crossDomain && (c = Hc.exec(k.url.toLowerCase()), k.crossDomain = !(!c || c[1] === zc[1] && c[2] === zc[2] && (c[3] || ("http:" === c[1] ? "80" : "443")) === (zc[3] || ("http:" === zc[1] ? "80" : "443")))), k.data && k.processData && "string" != typeof k.data && (k.data = n.param(k.data, k.traditional)), Nc(Ic, k, b, v), 2 === t)return v;
+ h = k.global, h && 0 === n.active++ && n.event.trigger("ajaxStart"), k.type = k.type.toUpperCase(), k.hasContent = !Fc.test(k.type), e = k.url, k.hasContent || (k.data && (e = k.url += (xc.test(e) ? "&" : "?") + k.data, delete k.data), k.cache === !1 && (k.url = Cc.test(e) ? e.replace(Cc, "$1_=" + wc++) : e + (xc.test(e) ? "&" : "?") + "_=" + wc++)), k.ifModified && (n.lastModified[e] && v.setRequestHeader("If-Modified-Since", n.lastModified[e]), n.etag[e] && v.setRequestHeader("If-None-Match", n.etag[e])), (k.data && k.hasContent && k.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", k.contentType), v.setRequestHeader("Accept", k.dataTypes[0] && k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + ("*" !== k.dataTypes[0] ? ", " + Kc + "; q=0.01" : "") : k.accepts["*"]);
+ for (d in k.headers)v.setRequestHeader(d, k.headers[d]);
+ if (k.beforeSend && (k.beforeSend.call(l, v, k) === !1 || 2 === t))return v.abort();
+ u = "abort";
+ for (d in{success: 1, error: 1, complete: 1})v[d](k[d]);
+ if (i = Nc(Jc, k, b, v)) {
+ v.readyState = 1, h && m.trigger("ajaxSend", [v, k]), k.async && k.timeout > 0 && (g = setTimeout(function () {
+ v.abort("timeout")
+ }, k.timeout));
+ try {
+ t = 1, i.send(r, x)
+ } catch (w) {
+ if (!(2 > t))throw w;
+ x(-1, w)
+ }
+ } else x(-1, "No Transport");
+ function x(a, b, c, d) {
+ var j, r, s, u, w, x = b;
+ 2 !== t && (t = 2, g && clearTimeout(g), i = void 0, f = d || "", v.readyState = a > 0 ? 4 : 0, j = a >= 200 && 300 > a || 304 === a, c && (u = Pc(k, v, c)), u = Qc(k, u, v, j), j ? (k.ifModified && (w = v.getResponseHeader("Last-Modified"), w && (n.lastModified[e] = w), w = v.getResponseHeader("etag"), w && (n.etag[e] = w)), 204 === a || "HEAD" === k.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || x) + "", j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, h && m.trigger(j ? "ajaxSuccess" : "ajaxError", [v, k, j ? r : s]), p.fireWith(l, [v, x]), h && (m.trigger("ajaxComplete", [v, k]), --n.active || n.event.trigger("ajaxStop")))
+ }
+
+ return v
+ },
+ getJSON: function (a, b, c) {
+ return n.get(a, b, c, "json")
+ },
+ getScript: function (a, b) {
+ return n.get(a, void 0, b, "script")
+ }
+ }), n.each(["get", "post"], function (a, b) {
+ n[b] = function (a, c, d, e) {
+ return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax({
+ url: a,
+ type: b,
+ dataType: e,
+ data: c,
+ success: d
+ })
+ }
+ }), n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
+ n.fn[b] = function (a) {
+ return this.on(b, a)
+ }
+ }), n._evalUrl = function (a) {
+ return n.ajax({url: a, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0})
+ }, n.fn.extend({
+ wrapAll: function (a) {
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).wrapAll(a.call(this, b))
+ });
+ if (this[0]) {
+ var b = n(a, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
+ var a = this;
+ while (a.firstChild && 1 === a.firstChild.nodeType)a = a.firstChild;
+ return a
+ }).append(this)
+ }
+ return this
+ }, wrapInner: function (a) {
+ return this.each(n.isFunction(a) ? function (b) {
+ n(this).wrapInner(a.call(this, b))
+ } : function () {
+ var b = n(this), c = b.contents();
+ c.length ? c.wrapAll(a) : b.append(a)
+ })
+ }, wrap: function (a) {
+ var b = n.isFunction(a);
+ return this.each(function (c) {
+ n(this).wrapAll(b ? a.call(this, c) : a)
+ })
+ }, unwrap: function () {
+ return this.parent().each(function () {
+ n.nodeName(this, "body") || n(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), n.expr.filters.hidden = function (a) {
+ return a.offsetWidth <= 0 && a.offsetHeight <= 0 || !l.reliableHiddenOffsets() && "none" === (a.style && a.style.display || n.css(a, "display"))
+ }, n.expr.filters.visible = function (a) {
+ return !n.expr.filters.hidden(a)
+ };
+ var Rc = /%20/g, Sc = /\[\]$/, Tc = /\r?\n/g, Uc = /^(?:submit|button|image|reset|file)$/i, Vc = /^(?:input|select|textarea|keygen)/i;
+
+ function Wc(a, b, c, d) {
+ var e;
+ if (n.isArray(b))n.each(b, function (b, e) {
+ c || Sc.test(a) ? d(a, e) : Wc(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
+ }); else if (c || "object" !== n.type(b))d(a, b); else for (e in b)Wc(a + "[" + e + "]", b[e], c, d)
+ }
+
+ n.param = function (a, b) {
+ var c, d = [], e = function (a, b) {
+ b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
+ };
+ if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a))n.each(a, function () {
+ e(this.name, this.value)
+ }); else for (c in a)Wc(c, a[c], b, e);
+ return d.join("&").replace(Rc, "+")
+ }, n.fn.extend({
+ serialize: function () {
+ return n.param(this.serializeArray())
+ }, serializeArray: function () {
+ return this.map(function () {
+ var a = n.prop(this, "elements");
+ return a ? n.makeArray(a) : this
+ }).filter(function () {
+ var a = this.type;
+ return this.name && !n(this).is(":disabled") && Vc.test(this.nodeName) && !Uc.test(a) && (this.checked || !X.test(a))
+ }).map(function (a, b) {
+ var c = n(this).val();
+ return null == c ? null : n.isArray(c) ? n.map(c, function (a) {
+ return {name: b.name, value: a.replace(Tc, "\r\n")}
+ }) : {name: b.name, value: c.replace(Tc, "\r\n")}
+ }).get()
+ }
+ }), n.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function () {
+ return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && $c() || _c()
+ } : $c;
+ var Xc = 0, Yc = {}, Zc = n.ajaxSettings.xhr();
+ a.ActiveXObject && n(a).on("unload", function () {
+ for (var a in Yc)Yc[a](void 0, !0)
+ }), l.cors = !!Zc && "withCredentials"in Zc, Zc = l.ajax = !!Zc, Zc && n.ajaxTransport(function (a) {
+ if (!a.crossDomain || l.cors) {
+ var b;
+ return {
+ send: function (c, d) {
+ var e, f = a.xhr(), g = ++Xc;
+ if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)for (e in a.xhrFields)f[e] = a.xhrFields[e];
+ a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
+ for (e in c)void 0 !== c[e] && f.setRequestHeader(e, c[e] + "");
+ f.send(a.hasContent && a.data || null), b = function (c, e) {
+ var h, i, j;
+ if (b && (e || 4 === f.readyState))if (delete Yc[g], b = void 0, f.onreadystatechange = n.noop, e)4 !== f.readyState && f.abort(); else {
+ j = {}, h = f.status, "string" == typeof f.responseText && (j.text = f.responseText);
+ try {
+ i = f.statusText
+ } catch (k) {
+ i = ""
+ }
+ h || !a.isLocal || a.crossDomain ? 1223 === h && (h = 204) : h = j.text ? 200 : 404
+ }
+ j && d(h, i, j, f.getAllResponseHeaders())
+ }, a.async ? 4 === f.readyState ? setTimeout(b) : f.onreadystatechange = Yc[g] = b : b()
+ }, abort: function () {
+ b && b(void 0, !0)
+ }
+ }
+ }
+ });
+ function $c() {
+ try {
+ return new a.XMLHttpRequest
+ } catch (b) {
+ }
+ }
+
+ function _c() {
+ try {
+ return new a.ActiveXObject("Microsoft.XMLHTTP")
+ } catch (b) {
+ }
+ }
+
+ n.ajaxSetup({
+ accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
+ contents: {script: /(?:java|ecma)script/},
+ converters: {
+ "text script": function (a) {
+ return n.globalEval(a), a
+ }
+ }
+ }), n.ajaxPrefilter("script", function (a) {
+ void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
+ }), n.ajaxTransport("script", function (a) {
+ if (a.crossDomain) {
+ var b, c = z.head || n("head")[0] || z.documentElement;
+ return {
+ send: function (d, e) {
+ b = z.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function (a, c) {
+ (c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || e(200, "success"))
+ }, c.insertBefore(b, c.firstChild)
+ }, abort: function () {
+ b && b.onload(void 0, !0)
+ }
+ }
+ }
+ });
+ var ad = [], bd = /(=)\?(?=&|$)|\?\?/;
+ n.ajaxSetup({
+ jsonp: "callback", jsonpCallback: function () {
+ var a = ad.pop() || n.expando + "_" + wc++;
+ return this[a] = !0, a
+ }
+ }), n.ajaxPrefilter("json jsonp", function (b, c, d) {
+ var e, f, g, h = b.jsonp !== !1 && (bd.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && bd.test(b.data) && "data");
+ return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(bd, "$1" + e) : b.jsonp !== !1 && (b.url += (xc.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () {
+ return g || n.error(e + " was not called"), g[0]
+ }, b.dataTypes[0] = "json", f = a[e], a[e] = function () {
+ g = arguments
+ }, d.always(function () {
+ a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, ad.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0
+ }), "script") : void 0
+ }), n.parseHTML = function (a, b, c) {
+ if (!a || "string" != typeof a)return null;
+ "boolean" == typeof b && (c = b, b = !1), b = b || z;
+ var d = v.exec(a), e = !c && [];
+ return d ? [b.createElement(d[1])] : (d = n.buildFragment([a], b, e), e && e.length && n(e).remove(), n.merge([], d.childNodes))
+ };
+ var cd = n.fn.load;
+ n.fn.load = function (a, b, c) {
+ if ("string" != typeof a && cd)return cd.apply(this, arguments);
+ var d, e, f, g = this, h = a.indexOf(" ");
+ return h >= 0 && (d = a.slice(h, a.length), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (f = "POST"), g.length > 0 && n.ajax({
+ url: a,
+ type: f,
+ dataType: "html",
+ data: b
+ }).done(function (a) {
+ e = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a)
+ }).complete(c && function (a, b) {
+ g.each(c, e || [a.responseText, b, a])
+ }), this
+ }, n.expr.filters.animated = function (a) {
+ return n.grep(n.timers, function (b) {
+ return a === b.elem
+ }).length
+ };
+ var dd = a.document.documentElement;
+
+ function ed(a) {
+ return n.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
+ }
+
+ n.offset = {
+ setOffset: function (a, b, c) {
+ var d, e, f, g, h, i, j, k = n.css(a, "position"), l = n(a), m = {};
+ "static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && n.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using"in b ? b.using.call(a, m) : l.css(m)
+ }
+ }, n.fn.extend({
+ offset: function (a) {
+ if (arguments.length)return void 0 === a ? this : this.each(function (b) {
+ n.offset.setOffset(this, a, b)
+ });
+ var b, c, d = {top: 0, left: 0}, e = this[0], f = e && e.ownerDocument;
+ if (f)return b = f.documentElement, n.contains(b, e) ? (typeof e.getBoundingClientRect !== L && (d = e.getBoundingClientRect()), c = ed(f), {
+ top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
+ left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
+ }) : d
+ }, position: function () {
+ if (this[0]) {
+ var a, b, c = {top: 0, left: 0}, d = this[0];
+ return "fixed" === n.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (c = a.offset()), c.top += n.css(a[0], "borderTopWidth", !0), c.left += n.css(a[0], "borderLeftWidth", !0)), {
+ top: b.top - c.top - n.css(d, "marginTop", !0),
+ left: b.left - c.left - n.css(d, "marginLeft", !0)
+ }
+ }
+ }, offsetParent: function () {
+ return this.map(function () {
+ var a = this.offsetParent || dd;
+ while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position"))a = a.offsetParent;
+ return a || dd
+ })
+ }
+ }), n.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (a, b) {
+ var c = /Y/.test(b);
+ n.fn[a] = function (d) {
+ return W(this, function (a, d, e) {
+ var f = ed(a);
+ return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void(f ? f.scrollTo(c ? n(f).scrollLeft() : e, c ? e : n(f).scrollTop()) : a[d] = e)
+ }, a, d, arguments.length, null)
+ }
+ }), n.each(["top", "left"], function (a, b) {
+ n.cssHooks[b] = Mb(l.pixelPosition, function (a, c) {
+ return c ? (c = Kb(a, b), Ib.test(c) ? n(a).position()[b] + "px" : c) : void 0
+ })
+ }), n.each({Height: "height", Width: "width"}, function (a, b) {
+ n.each({padding: "inner" + a, content: b, "": "outer" + a}, function (c, d) {
+ n.fn[d] = function (d, e) {
+ var f = arguments.length && (c || "boolean" != typeof d), g = c || (d === !0 || e === !0 ? "margin" : "border");
+ return W(this, function (b, c, d) {
+ var e;
+ return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g)
+ }, b, f ? d : void 0, f, null)
+ }
+ })
+ }), n.fn.size = function () {
+ return this.length
+ }, n.fn.andSelf = n.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function () {
+ return n
+ });
+ var fd = a.jQuery, gd = a.$;
+ return n.noConflict = function (b) {
+ return a.$ === n && (a.$ = gd), b && a.jQuery === n && (a.jQuery = fd), n
+ }, typeof b === L && (a.jQuery = a.$ = n), n
+});
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.js
new file mode 100644
index 00000000..37d65e37
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.js
@@ -0,0 +1,10319 @@
+/*!
+ * jQuery JavaScript Library v1.11.2
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-17T15:27Z
+ */
+
+(function (global, factory) {
+
+ if (typeof module === "object" && typeof module.exports === "object") {
+ // For CommonJS and CommonJS-like environments where a proper window is present,
+ // execute the factory and get jQuery
+ // For environments that do not inherently posses a window with a document
+ // (such as Node.js), expose a jQuery-making factory as module.exports
+ // This accentuates the need for the creation of a real window
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info
+ module.exports = global.document ?
+ factory(global, true) :
+ function (w) {
+ if (!w.document) {
+ throw new Error("jQuery requires a window with a document");
+ }
+ return factory(w);
+ };
+ } else {
+ factory(global);
+ }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//
+
+ var deletedIds = [];
+
+ var slice = deletedIds.slice;
+
+ var concat = deletedIds.concat;
+
+ var push = deletedIds.push;
+
+ var indexOf = deletedIds.indexOf;
+
+ var class2type = {};
+
+ var toString = class2type.toString;
+
+ var hasOwn = class2type.hasOwnProperty;
+
+ var support = {};
+
+
+ var
+ version = "1.11.2",
+
+ // Define a local copy of jQuery
+ jQuery = function (selector, context) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init(selector, context);
+ },
+
+ // Support: Android<4.1, IE<9
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function (all, letter) {
+ return letter.toUpperCase();
+ };
+
+ jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function () {
+ return slice.call(this);
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function (num) {
+ return num != null ?
+
+ // Return just the one element from the set
+ ( num < 0 ? this[num + this.length] : this[num] ) :
+
+ // Return all the elements in a clean array
+ slice.call(this);
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function (elems) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge(this.constructor(), elems);
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function (callback, args) {
+ return jQuery.each(this, callback, args);
+ },
+
+ map: function (callback) {
+ return this.pushStack(jQuery.map(this, function (elem, i) {
+ return callback.call(elem, i, elem);
+ }));
+ },
+
+ slice: function () {
+ return this.pushStack(slice.apply(this, arguments));
+ },
+
+ first: function () {
+ return this.eq(0);
+ },
+
+ last: function () {
+ return this.eq(-1);
+ },
+
+ eq: function (i) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
+ },
+
+ end: function () {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: deletedIds.sort,
+ splice: deletedIds.splice
+ };
+
+ jQuery.extend = jQuery.fn.extend = function () {
+ var src, copyIsArray, copy, name, options, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === "boolean") {
+ deep = target;
+
+ // skip the boolean and the target
+ target = arguments[i] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if (typeof target !== "object" && !jQuery.isFunction(target)) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if (i === length) {
+ target = this;
+ i--;
+ }
+
+ for (; i < length; i++) {
+ // Only deal with non-null/undefined values
+ if ((options = arguments[i]) != null) {
+ // Extend the base object
+ for (name in options) {
+ src = target[name];
+ copy = options[name];
+
+ // Prevent never-ending loop
+ if (target === copy) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) )) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[name] = jQuery.extend(deep, clone, copy);
+
+ // Don't bring in undefined values
+ } else if (copy !== undefined) {
+ target[name] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+ };
+
+ jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace(/\D/g, ""),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function (msg) {
+ throw new Error(msg);
+ },
+
+ noop: function () {
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function (obj) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function (obj) {
+ return jQuery.type(obj) === "array";
+ },
+
+ isWindow: function (obj) {
+ /* jshint eqeqeq: false */
+ return obj != null && obj == obj.window;
+ },
+
+ isNumeric: function (obj) {
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ // adding 1 corrects loss of precision from parseFloat (#15100)
+ return !jQuery.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0;
+ },
+
+ isEmptyObject: function (obj) {
+ var name;
+ for (name in obj) {
+ return false;
+ }
+ return true;
+ },
+
+ isPlainObject: function (obj) {
+ var key;
+
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ try {
+ // Not own constructor property must be Object
+ if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
+ return false;
+ }
+ } catch (e) {
+ // IE8,9 Will throw exceptions on certain host objects #9897
+ return false;
+ }
+
+ // Support: IE<9
+ // Handle iteration over inherited properties before own properties.
+ if (support.ownLast) {
+ for (key in obj) {
+ return hasOwn.call(obj, key);
+ }
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ for (key in obj) {
+ }
+
+ return key === undefined || hasOwn.call(obj, key);
+ },
+
+ type: function (obj) {
+ if (obj == null) {
+ return obj + "";
+ }
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[toString.call(obj)] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ // Workarounds based on findings by Jim Driscoll
+ // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+ globalEval: function (data) {
+ if (data && jQuery.trim(data)) {
+ // We use execScript on Internet Explorer
+ // We use an anonymous function so that context is window
+ // rather than jQuery in Firefox
+ ( window.execScript || function (data) {
+ window["eval"].call(window, data);
+ } )(data);
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function (string) {
+ return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
+ },
+
+ nodeName: function (elem, name) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function (obj, callback, args) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike(obj);
+
+ if (args) {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android<4.1, IE<9
+ trim: function (text) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace(rtrim, "");
+ },
+
+ // results is for internal usage only
+ makeArray: function (arr, results) {
+ var ret = results || [];
+
+ if (arr != null) {
+ if (isArraylike(Object(arr))) {
+ jQuery.merge(ret,
+ typeof arr === "string" ?
+ [arr] : arr
+ );
+ } else {
+ push.call(ret, arr);
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function (elem, arr, i) {
+ var len;
+
+ if (arr) {
+ if (indexOf) {
+ return indexOf.call(arr, elem, i);
+ }
+
+ len = arr.length;
+ i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
+
+ for (; i < len; i++) {
+ // Skip accessing in sparse arrays
+ if (i in arr && arr[i] === elem) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function (first, second) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ while (j < len) {
+ first[i++] = second[j++];
+ }
+
+ // Support: IE<9
+ // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
+ if (len !== len) {
+ while (second[j] !== undefined) {
+ first[i++] = second[j++];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function (elems, callback, invert) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for (; i < length; i++) {
+ callbackInverse = !callback(elems[i], i);
+ if (callbackInverse !== callbackExpect) {
+ matches.push(elems[i]);
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function (elems, callback, arg) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike(elems),
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for (i in elems) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply([], ret);
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function (fn, context) {
+ var args, proxy, tmp;
+
+ if (typeof context === "string") {
+ tmp = fn[context];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if (!jQuery.isFunction(fn)) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call(arguments, 2);
+ proxy = function () {
+ return fn.apply(context || this, args.concat(slice.call(arguments)));
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ now: function () {
+ return +( new Date() );
+ },
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+ });
+
+// Populate the class2type map
+ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
+ class2type["[object " + name + "]"] = name.toLowerCase();
+ });
+
+ function isArraylike(obj) {
+ var length = obj.length,
+ type = jQuery.type(obj);
+
+ if (type === "function" || jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ if (obj.nodeType === 1 && length) {
+ return true;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+ }
+
+ var Sizzle =
+ /*!
+ * Sizzle CSS Selector Engine v2.2.0-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-16
+ */
+ (function (window) {
+
+ var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function (a, b) {
+ if (a === b) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // http://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function (list, elem) {
+ var i = 0,
+ len = list.length;
+ for (; i < len; i++) {
+ if (list[i] === elem) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace("w", "w#"),
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + characterEncoding + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp(whitespace + "+", "g"),
+ rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
+
+ rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
+ rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
+
+ rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g"),
+
+ rpseudo = new RegExp(pseudos),
+ ridentifier = new RegExp("^" + identifier + "$"),
+
+ matchExpr = {
+ "ID": new RegExp("^#(" + characterEncoding + ")"),
+ "CLASS": new RegExp("^\\.(" + characterEncoding + ")"),
+ "TAG": new RegExp("^(" + characterEncoding.replace("w", "w*") + ")"),
+ "ATTR": new RegExp("^" + attributes),
+ "PSEUDO": new RegExp("^" + pseudos),
+ "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
+ "bool": new RegExp("^(?:" + booleans + ")$", "i"),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"),
+ funescape = function (_, escaped, escapedWhitespace) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode(high + 0x10000) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function () {
+ setDocument();
+ };
+
+// Optimize for push.apply( _, NodeList )
+ try {
+ push.apply(
+ (arr = slice.call(preferredDoc.childNodes)),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push = {
+ apply: arr.length ?
+
+ // Leverage slice if possible
+ function (target, els) {
+ push_native.apply(target, slice.call(els));
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function (target, els) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ((target[j++] = els[i++])) {
+ }
+ target.length = j - 1;
+ }
+ };
+ }
+
+ function Sizzle(selector, context, results, seed) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if (( context ? context.ownerDocument || context : preferredDoc ) !== document) {
+ setDocument(context);
+ }
+
+ context = context || document;
+ results = results || [];
+ nodeType = context.nodeType;
+
+ if (typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
+
+ return results;
+ }
+
+ if (!seed && documentIsHTML) {
+
+ // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+ if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
+ // Speed-up: Sizzle("#ID")
+ if ((m = match[1])) {
+ if (nodeType === 9) {
+ elem = context.getElementById(m);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document (jQuery #6963)
+ if (elem && elem.parentNode) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if (elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) &&
+ contains(context, elem) && elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if (match[2]) {
+ push.apply(results, context.getElementsByTagName(selector));
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ((m = match[3]) && support.getElementsByClassName) {
+ push.apply(results, context.getElementsByClassName(m));
+ return results;
+ }
+ }
+
+ // QSA path
+ if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType !== 1 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if (nodeType === 1 && context.nodeName.toLowerCase() !== "object") {
+ groups = tokenize(selector);
+
+ if ((old = context.getAttribute("id"))) {
+ nid = old.replace(rescape, "\\$&");
+ } else {
+ context.setAttribute("id", nid);
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while (i--) {
+ groups[i] = nid + toSelector(groups[i]);
+ }
+ newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
+ newSelector = groups.join(",");
+ }
+
+ if (newSelector) {
+ try {
+ push.apply(results,
+ newContext.querySelectorAll(newSelector)
+ );
+ return results;
+ } catch (qsaError) {
+ } finally {
+ if (!old) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select(selector.replace(rtrim, "$1"), context, results, seed);
+ }
+
+ /**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+ function createCache() {
+ var keys = [];
+
+ function cache(key, value) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if (keys.push(key + " ") > Expr.cacheLength) {
+ // Only keep the most recent entries
+ delete cache[keys.shift()];
+ }
+ return (cache[key + " "] = value);
+ }
+
+ return cache;
+ }
+
+ /**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+ function markFunction(fn) {
+ fn[expando] = true;
+ return fn;
+ }
+
+ /**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+ function assert(fn) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn(div);
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if (div.parentNode) {
+ div.parentNode.removeChild(div);
+ }
+ // release memory in IE
+ div = null;
+ }
+ }
+
+ /**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+ function addHandle(attrs, handler) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while (i--) {
+ Expr.attrHandle[arr[i]] = handler;
+ }
+ }
+
+ /**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+ function siblingCheck(a, b) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if (diff) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if (cur) {
+ while ((cur = cur.nextSibling)) {
+ if (cur === b) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+ }
+
+ /**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+ function createInputPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+ function createButtonPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+ function createPositionalPseudo(fn) {
+ return markFunction(function (argument) {
+ argument = +argument;
+ return markFunction(function (seed, matches) {
+ var j,
+ matchIndexes = fn([], seed.length, argument),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while (i--) {
+ if (seed[(j = matchIndexes[i])]) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+ }
+
+ /**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+ function testContext(context) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+ }
+
+// Expose support vars for convenience
+ support = Sizzle.support = {};
+
+ /**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+ isXML = Sizzle.isXML = function (elem) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+ };
+
+ /**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+ setDocument = Sizzle.setDocument = function (node) {
+ var hasCompare, parent,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // If no document and documentElement is available, return
+ if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+ parent = doc.defaultView;
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if (parent && parent !== parent.top) {
+ // IE11 does not have attachEvent, so all must suffer
+ if (parent.addEventListener) {
+ parent.addEventListener("unload", unloadHandler, false);
+ } else if (parent.attachEvent) {
+ parent.attachEvent("onunload", unloadHandler);
+ }
+ }
+
+ /* Support tests
+ ---------------------------------------------------------------------- */
+ documentIsHTML = !isXML(doc);
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function (div) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function (div) {
+ div.appendChild(doc.createComment(""));
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test(doc.getElementsByClassName);
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function (div) {
+ docElem.appendChild(div).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName(expando).length;
+ });
+
+ // ID find and filter
+ if (support.getById) {
+ Expr.find["ID"] = function (id, context) {
+ if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+ var m = context.getElementById(id);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ };
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function (tag, context) {
+ if (typeof context.getElementsByTagName !== "undefined") {
+ return context.getElementsByTagName(tag);
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if (support.qsa) {
+ return context.querySelectorAll(tag);
+ }
+ } :
+
+ function (tag, context) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName(tag);
+
+ // Filter out possible comments
+ if (tag === "*") {
+ while ((elem = results[i++])) {
+ if (elem.nodeType === 1) {
+ tmp.push(elem);
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
+ if (documentIsHTML) {
+ return context.getElementsByClassName(className);
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ((support.qsa = rnative.test(doc.querySelectorAll))) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function (div) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ docElem.appendChild(div).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\f]' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if (div.querySelectorAll("[msallowcapture^='']").length) {
+ rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if (!div.querySelectorAll("[selected]").length) {
+ rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
+ }
+
+ // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+ if (!div.querySelectorAll("[id~=" + expando + "-]").length) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":checked").length) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibing-combinator selector` fails
+ if (!div.querySelectorAll("a#" + expando + "+*").length) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function (div) {
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute("type", "hidden");
+ div.appendChild(input).setAttribute("name", "D");
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if (div.querySelectorAll("[name=d]").length) {
+ rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":enabled").length) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ((support.matchesSelector = rnative.test((matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector)))) {
+
+ assert(function (div) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call(div, "div");
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call(div, "[s!='']:x");
+ rbuggyMatches.push("!=", pseudos);
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
+ rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test(docElem.compareDocumentPosition);
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test(docElem.contains) ?
+ function (a, b) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains(bup) :
+ a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16
+ ));
+ } :
+ function (a, b) {
+ if (b) {
+ while ((b = b.parentNode)) {
+ if (b === a) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function (a, b) {
+
+ // Flag for duplicate removal
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if (compare) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition(b) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if (compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition(a) === compare)) {
+
+ // Choose the first element that is related to our preferred document
+ if (a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf(sortInput, a) - indexOf(sortInput, b) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function (a, b) {
+ // Exit early if the nodes are identical
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [a],
+ bp = [b];
+
+ // Parentless nodes are either documents or disconnected
+ if (!aup || !bup) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf(sortInput, a) - indexOf(sortInput, b) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if (aup === bup) {
+ return siblingCheck(a, b);
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ((cur = cur.parentNode)) {
+ ap.unshift(cur);
+ }
+ cur = b;
+ while ((cur = cur.parentNode)) {
+ bp.unshift(cur);
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while (ap[i] === bp[i]) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck(ap[i], bp[i]) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+ };
+
+ Sizzle.matches = function (expr, elements) {
+ return Sizzle(expr, null, null, elements);
+ };
+
+ Sizzle.matchesSelector = function (elem, expr) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(rattributeQuotes, "='$1']");
+
+ if (support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test(expr) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test(expr) )) {
+
+ try {
+ var ret = matches.call(elem, expr);
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if (ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11) {
+ return ret;
+ }
+ } catch (e) {
+ }
+ }
+
+ return Sizzle(expr, document, null, [elem]).length > 0;
+ };
+
+ Sizzle.contains = function (context, elem) {
+ // Set document vars if needed
+ if (( context.ownerDocument || context ) !== document) {
+ setDocument(context);
+ }
+ return contains(context, elem);
+ };
+
+ Sizzle.attr = function (elem, name) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ var fn = Expr.attrHandle[name.toLowerCase()],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?
+ fn(elem, name, !documentIsHTML) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute(name) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+ };
+
+ Sizzle.error = function (msg) {
+ throw new Error("Syntax error, unrecognized expression: " + msg);
+ };
+
+ /**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+ Sizzle.uniqueSort = function (results) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice(0);
+ results.sort(sortOrder);
+
+ if (hasDuplicate) {
+ while ((elem = results[i++])) {
+ if (elem === results[i]) {
+ j = duplicates.push(i);
+ }
+ }
+ while (j--) {
+ results.splice(duplicates[j], 1);
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+ };
+
+ /**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+ getText = Sizzle.getText = function (elem) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if (!nodeType) {
+ // If no nodeType, this is expected to be an array
+ while ((node = elem[i++])) {
+ // Do not traverse comment nodes
+ ret += getText(node);
+ }
+ } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if (typeof elem.textContent === "string") {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText(elem);
+ }
+ }
+ } else if (nodeType === 3 || nodeType === 4) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+ };
+
+ Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": {dir: "parentNode", first: true},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: true},
+ "~": {dir: "previousSibling"}
+ },
+
+ preFilter: {
+ "ATTR": function (match) {
+ match[1] = match[1].replace(runescape, funescape);
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace(runescape, funescape);
+
+ if (match[2] === "~=") {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice(0, 4);
+ },
+
+ "CHILD": function (match) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if (match[1].slice(0, 3) === "nth") {
+ // nth-* requires argument
+ if (!match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if (match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function (match) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if (matchExpr["CHILD"].test(match[0])) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if (match[3]) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if (unquoted && rpseudo.test(unquoted) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize(unquoted, true)) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
+
+ // excess is a negative index
+ match[0] = match[0].slice(0, excess);
+ match[2] = unquoted.slice(0, excess);
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice(0, 3);
+ }
+ },
+
+ filter: {
+
+ "TAG": function (nodeNameSelector) {
+ var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function () {
+ return true;
+ } :
+ function (elem) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function (className) {
+ var pattern = classCache[className + " "];
+
+ return pattern ||
+ (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) &&
+ classCache(className, function (elem) {
+ return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
+ });
+ },
+
+ "ATTR": function (name, operator, check) {
+ return function (elem) {
+ var result = Sizzle.attr(elem, name);
+
+ if (result == null) {
+ return operator === "!=";
+ }
+ if (!operator) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf(check) === 0 :
+ operator === "*=" ? check && result.indexOf(check) > -1 :
+ operator === "$=" ? check && result.slice(-check.length) === check :
+ operator === "~=" ? ( " " + result.replace(rwhitespace, " ") + " " ).indexOf(check) > -1 :
+ operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function (type, what, argument, first, last) {
+ var simple = type.slice(0, 3) !== "nth",
+ forward = type.slice(-4) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function (elem) {
+ return !!elem.parentNode;
+ } :
+
+ function (elem, context, xml) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if (parent) {
+
+ // :(first|last|only)-(child|of-type)
+ if (simple) {
+ while (dir) {
+ node = elem;
+ while ((node = node[dir])) {
+ if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [forward ? parent.firstChild : parent.lastChild];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if (forward && useCache) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[expando] || (parent[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[nodeIndex];
+
+ while ((node = ++nodeIndex && node && node[dir] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ // When found, cache indexes on `parent` and break
+ if (node.nodeType === 1 && ++diff && node === elem) {
+ outerCache[type] = [dirruns, nodeIndex, diff];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ((node = ++nodeIndex && node && node[dir] ||
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ if (( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff) {
+ // Cache the index of each encountered element
+ if (useCache) {
+ (node[expando] || (node[expando] = {}))[type] = [dirruns, diff];
+ }
+
+ if (node === elem) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function (pseudo, argument) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||
+ Sizzle.error("unsupported pseudo: " + pseudo);
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if (fn[expando]) {
+ return fn(argument);
+ }
+
+ // But maintain support for old signatures
+ if (fn.length > 1) {
+ args = [pseudo, pseudo, "", argument];
+ return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?
+ markFunction(function (seed, matches) {
+ var idx,
+ matched = fn(seed, argument),
+ i = matched.length;
+ while (i--) {
+ idx = indexOf(seed, matched[i]);
+ seed[idx] = !( matches[idx] = matched[i] );
+ }
+ }) :
+ function (elem) {
+ return fn(elem, 0, args);
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function (selector) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile(selector.replace(rtrim, "$1"));
+
+ return matcher[expando] ?
+ markFunction(function (seed, matches, context, xml) {
+ var elem,
+ unmatched = matcher(seed, null, xml, []),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while (i--) {
+ if ((elem = unmatched[i])) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function (elem, context, xml) {
+ input[0] = elem;
+ matcher(input, null, xml, results);
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function (selector) {
+ return function (elem) {
+ return Sizzle(selector, elem).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function (text) {
+ text = text.replace(runescape, funescape);
+ return function (elem) {
+ return ( elem.textContent || elem.innerText || getText(elem) ).indexOf(text) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction(function (lang) {
+ // lang value must be a valid identifier
+ if (!ridentifier.test(lang || "")) {
+ Sizzle.error("unsupported lang: " + lang);
+ }
+ lang = lang.replace(runescape, funescape).toLowerCase();
+ return function (elem) {
+ var elemLang;
+ do {
+ if ((elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
+ }
+ } while ((elem = elem.parentNode) && elem.nodeType === 1);
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function (elem) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice(1) === elem.id;
+ },
+
+ "root": function (elem) {
+ return elem === docElem;
+ },
+
+ "focus": function (elem) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function (elem) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function (elem) {
+ return elem.disabled === true;
+ },
+
+ "checked": function (elem) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function (elem) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if (elem.parentNode) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function (elem) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ if (elem.nodeType < 6) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function (elem) {
+ return !Expr.pseudos["empty"](elem);
+ },
+
+ // Element/input types
+ "header": function (elem) {
+ return rheader.test(elem.nodeName);
+ },
+
+ "input": function (elem) {
+ return rinputs.test(elem.nodeName);
+ },
+
+ "button": function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function (elem) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function () {
+ return [0];
+ }),
+
+ "last": createPositionalPseudo(function (matchIndexes, length) {
+ return [length - 1];
+ }),
+
+ "eq": createPositionalPseudo(function (matchIndexes, length, argument) {
+ return [argument < 0 ? argument + length : argument];
+ }),
+
+ "even": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 0;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 1;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; --i >= 0;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; ++i < length;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+
+ Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+ for (i in {radio: true, checkbox: true, file: true, password: true, image: true}) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in {submit: true, reset: true}) {
+ Expr.pseudos[i] = createButtonPseudo(i);
+ }
+
+// Easy API for creating new setFilters
+ function setFilters() {
+ }
+
+ setFilters.prototype = Expr.filters = Expr.pseudos;
+ Expr.setFilters = new setFilters();
+
+ tokenize = Sizzle.tokenize = function (selector, parseOnly) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[selector + " "];
+
+ if (cached) {
+ return parseOnly ? 0 : cached.slice(0);
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while (soFar) {
+
+ // Comma and first run
+ if (!matched || (match = rcomma.exec(soFar))) {
+ if (match) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice(match[0].length) || soFar;
+ }
+ groups.push((tokens = []));
+ }
+
+ matched = false;
+
+ // Combinators
+ if ((match = rcombinators.exec(soFar))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace(rtrim, " ")
+ });
+ soFar = soFar.slice(matched.length);
+ }
+
+ // Filters
+ for (type in Expr.filter) {
+ if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||
+ (match = preFilters[type](match)))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice(matched.length);
+ }
+ }
+
+ if (!matched) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error(selector) :
+ // Cache the tokens
+ tokenCache(selector, groups).slice(0);
+ };
+
+ function toSelector(tokens) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for (; i < len; i++) {
+ selector += tokens[i].value;
+ }
+ return selector;
+ }
+
+ function addCombinator(matcher, combinator, base) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function (elem, context, xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ return matcher(elem, context, xml);
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function (elem, context, xml) {
+ var oldCache, outerCache,
+ newCache = [dirruns, doneName];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if (xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ if (matcher(elem, context, xml)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ outerCache = elem[expando] || (elem[expando] = {});
+ if ((oldCache = outerCache[dir]) &&
+ oldCache[0] === dirruns && oldCache[1] === doneName) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[2] = oldCache[2]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ outerCache[dir] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ((newCache[2] = matcher(elem, context, xml))) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+ }
+
+ function elementMatcher(matchers) {
+ return matchers.length > 1 ?
+ function (elem, context, xml) {
+ var i = matchers.length;
+ while (i--) {
+ if (!matchers[i](elem, context, xml)) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+ }
+
+ function multipleContexts(selector, contexts, results) {
+ var i = 0,
+ len = contexts.length;
+ for (; i < len; i++) {
+ Sizzle(selector, contexts[i], results);
+ }
+ return results;
+ }
+
+ function condense(unmatched, map, filter, context, xml) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for (; i < len; i++) {
+ if ((elem = unmatched[i])) {
+ if (!filter || filter(elem, context, xml)) {
+ newUnmatched.push(elem);
+ if (mapped) {
+ map.push(i);
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+ }
+
+ function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
+ if (postFilter && !postFilter[expando]) {
+ postFilter = setMatcher(postFilter);
+ }
+ if (postFinder && !postFinder[expando]) {
+ postFinder = setMatcher(postFinder, postSelector);
+ }
+ return markFunction(function (seed, results, context, xml) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense(elems, preMap, preFilter, context, xml) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if (matcher) {
+ matcher(matcherIn, matcherOut, context, xml);
+ }
+
+ // Apply postFilter
+ if (postFilter) {
+ temp = condense(matcherOut, postMap);
+ postFilter(temp, [], context, xml);
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while (i--) {
+ if ((elem = temp[i])) {
+ matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
+ }
+ }
+ }
+
+ if (seed) {
+ if (postFinder || preFilter) {
+ if (postFinder) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i])) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push((matcherIn[i] = elem));
+ }
+ }
+ postFinder(null, (matcherOut = []), temp, xml);
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice(preexisting, matcherOut.length) :
+ matcherOut
+ );
+ if (postFinder) {
+ postFinder(null, results, matcherOut, xml);
+ } else {
+ push.apply(results, matcherOut);
+ }
+ }
+ });
+ }
+
+ function matcherFromTokens(tokens) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[tokens[0].type],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator(function (elem) {
+ return elem === checkContext;
+ }, implicitRelative, true),
+ matchAnyContext = addCombinator(function (elem) {
+ return indexOf(checkContext, elem) > -1;
+ }, implicitRelative, true),
+ matchers = [function (elem, context, xml) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext(elem, context, xml) :
+ matchAnyContext(elem, context, xml) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ }];
+
+ for (; i < len; i++) {
+ if ((matcher = Expr.relative[tokens[i].type])) {
+ matchers = [addCombinator(elementMatcher(matchers), matcher)];
+ } else {
+ matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
+
+ // Return special upon seeing a positional matcher
+ if (matcher[expando]) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for (; j < len; j++) {
+ if (Expr.relative[tokens[j].type]) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher(matchers),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice(0, i - 1).concat({value: tokens[i - 2].type === " " ? "*" : ""})
+ ).replace(rtrim, "$1"),
+ matcher,
+ i < j && matcherFromTokens(tokens.slice(i, j)),
+ j < len && matcherFromTokens((tokens = tokens.slice(j))),
+ j < len && toSelector(tokens)
+ );
+ }
+ matchers.push(matcher);
+ }
+ }
+
+ return elementMatcher(matchers);
+ }
+
+ function matcherFromGroupMatchers(elementMatchers, setMatchers) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function (seed, context, xml, results, outermost) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]("*", outermost),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if (outermost) {
+ outermostContext = context !== document && context;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for (; i !== len && (elem = elems[i]) != null; i++) {
+ if (byElement && elem) {
+ j = 0;
+ while ((matcher = elementMatchers[j++])) {
+ if (matcher(elem, context, xml)) {
+ results.push(elem);
+ break;
+ }
+ }
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if (bySet) {
+ // They will have gone through all possible matchers
+ if ((elem = !matcher && elem)) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if (seed) {
+ unmatched.push(elem);
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if (bySet && i !== matchedCount) {
+ j = 0;
+ while ((matcher = setMatchers[j++])) {
+ matcher(unmatched, setMatched, context, xml);
+ }
+
+ if (seed) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if (matchedCount > 0) {
+ while (i--) {
+ if (!(unmatched[i] || setMatched[i])) {
+ setMatched[i] = pop.call(results);
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense(setMatched);
+ }
+
+ // Add matches to results
+ push.apply(results, setMatched);
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if (outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1) {
+
+ Sizzle.uniqueSort(results);
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction(superMatcher) :
+ superMatcher;
+ }
+
+ compile = Sizzle.compile = function (selector, match /* Internal Use Only */) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[selector + " "];
+
+ if (!cached) {
+ // Generate a function of recursive functions that can be used to check each element
+ if (!match) {
+ match = tokenize(selector);
+ }
+ i = match.length;
+ while (i--) {
+ cached = matcherFromTokens(match[i]);
+ if (cached[expando]) {
+ setMatchers.push(cached);
+ } else {
+ elementMatchers.push(cached);
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+ };
+
+ /**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+ select = Sizzle.select = function (selector, context, results, seed) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize((selector = compiled.selector || selector));
+
+ results = results || [];
+
+ // Try to minimize operations if there is no seed and only one group
+ if (match.length === 1) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice(0);
+ if (tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[tokens[1].type]) {
+
+ context = ( Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [] )[0];
+ if (!context) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if (compiled) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice(tokens.shift().value.length);
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
+ while (i--) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if (Expr.relative[(type = token.type)]) {
+ break;
+ }
+ if ((find = Expr.find[type])) {
+ // Search, expanding context for leading sibling combinators
+ if ((seed = find(
+ token.matches[0].replace(runescape, funescape),
+ rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
+ ))) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice(i, 1);
+ selector = seed.length && toSelector(tokens);
+ if (!selector) {
+ push.apply(results, seed);
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile(selector, match) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test(selector) && testContext(context.parentNode) || context
+ );
+ return results;
+ };
+
+// One-time assignments
+
+// Sort stability
+ support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+ support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+ setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+ support.sortDetached = assert(function (div1) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition(document.createElement("div")) & 1;
+ });
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+ if (!assert(function (div) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#";
+ })) {
+ addHandle("type|href|height|width", function (elem, name, isXML) {
+ if (!isXML) {
+ return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
+ }
+ });
+ }
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+ if (!support.attributes || !assert(function (div) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute("value", "");
+ return div.firstChild.getAttribute("value") === "";
+ })) {
+ addHandle("value", function (elem, name, isXML) {
+ if (!isXML && elem.nodeName.toLowerCase() === "input") {
+ return elem.defaultValue;
+ }
+ });
+ }
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+ if (!assert(function (div) {
+ return div.getAttribute("disabled") == null;
+ })) {
+ addHandle(booleans, function (elem, name, isXML) {
+ var val;
+ if (!isXML) {
+ return elem[name] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+ }
+
+ return Sizzle;
+
+ })(window);
+
+
+ jQuery.find = Sizzle;
+ jQuery.expr = Sizzle.selectors;
+ jQuery.expr[":"] = jQuery.expr.pseudos;
+ jQuery.unique = Sizzle.uniqueSort;
+ jQuery.text = Sizzle.getText;
+ jQuery.isXMLDoc = Sizzle.isXML;
+ jQuery.contains = Sizzle.contains;
+
+
+ var rneedsContext = jQuery.expr.match.needsContext;
+
+ var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+ var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+ function winnow(elements, qualifier, not) {
+ if (jQuery.isFunction(qualifier)) {
+ return jQuery.grep(elements, function (elem, i) {
+ /* jshint -W018 */
+ return !!qualifier.call(elem, i, elem) !== not;
+ });
+
+ }
+
+ if (qualifier.nodeType) {
+ return jQuery.grep(elements, function (elem) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if (typeof qualifier === "string") {
+ if (risSimple.test(qualifier)) {
+ return jQuery.filter(qualifier, elements, not);
+ }
+
+ qualifier = jQuery.filter(qualifier, elements);
+ }
+
+ return jQuery.grep(elements, function (elem) {
+ return ( jQuery.inArray(elem, qualifier) >= 0 ) !== not;
+ });
+ }
+
+ jQuery.filter = function (expr, elems, not) {
+ var elem = elems[0];
+
+ if (not) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector(elem, expr) ? [elem] : [] :
+ jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
+ return elem.nodeType === 1;
+ }));
+ };
+
+ jQuery.fn.extend({
+ find: function (selector) {
+ var i,
+ ret = [],
+ self = this,
+ len = self.length;
+
+ if (typeof selector !== "string") {
+ return this.pushStack(jQuery(selector).filter(function () {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(self[i], this)) {
+ return true;
+ }
+ }
+ }));
+ }
+
+ for (i = 0; i < len; i++) {
+ jQuery.find(selector, self[i], ret);
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret);
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+ filter: function (selector) {
+ return this.pushStack(winnow(this, selector || [], false));
+ },
+ not: function (selector) {
+ return this.pushStack(winnow(this, selector || [], true));
+ },
+ is: function (selector) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test(selector) ?
+ jQuery(selector) :
+ selector || [],
+ false
+ ).length;
+ }
+ });
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+ var rootjQuery,
+
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ init = jQuery.fn.init = function (selector, context) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if (!selector) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if (typeof selector === "string") {
+ if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [null, selector, null];
+
+ } else {
+ match = rquickExpr.exec(selector);
+ }
+
+ // Match html or make sure no context is specified for #id
+ if (match && (match[1] || !context)) {
+
+ // HANDLE: $(html) -> $(array)
+ if (match[1]) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge(this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ));
+
+ // HANDLE: $(html, props)
+ if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
+ for (match in context) {
+ // Properties of context are called as methods if possible
+ if (jQuery.isFunction(this[match])) {
+ this[match](context[match]);
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr(match, context[match]);
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById(match[2]);
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if (elem && elem.parentNode) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if (elem.id !== match[2]) {
+ return rootjQuery.find(selector);
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if (!context || context.jquery) {
+ return ( context || rootjQuery ).find(selector);
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor(context).find(selector);
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if (selector.nodeType) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if (jQuery.isFunction(selector)) {
+ return typeof rootjQuery.ready !== "undefined" ?
+ rootjQuery.ready(selector) :
+ // Execute immediately if ready is not present
+ selector(jQuery);
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray(selector, this);
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+ init.prototype = jQuery.fn;
+
+// Initialize central reference
+ rootjQuery = jQuery(document);
+
+
+ var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ // methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+ jQuery.extend({
+ dir: function (elem, dir, until) {
+ var matched = [],
+ cur = elem[dir];
+
+ while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) {
+ if (cur.nodeType === 1) {
+ matched.push(cur);
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ sibling: function (n, elem) {
+ var r = [];
+
+ for (; n; n = n.nextSibling) {
+ if (n.nodeType === 1 && n !== elem) {
+ r.push(n);
+ }
+ }
+
+ return r;
+ }
+ });
+
+ jQuery.fn.extend({
+ has: function (target) {
+ var i,
+ targets = jQuery(target, this),
+ len = targets.length;
+
+ return this.filter(function () {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(this, targets[i])) {
+ return true;
+ }
+ }
+ });
+ },
+
+ closest: function (selectors, context) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ pos = rneedsContext.test(selectors) || typeof selectors !== "string" ?
+ jQuery(selectors, context || this.context) :
+ 0;
+
+ for (; i < l; i++) {
+ for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
+ // Always skip document fragments
+ if (cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors))) {
+
+ matched.push(cur);
+ break;
+ }
+ }
+ }
+
+ return this.pushStack(matched.length > 1 ? jQuery.unique(matched) : matched);
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function (elem) {
+
+ // No argument, return index in parent
+ if (!elem) {
+ return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // index in selector
+ if (typeof elem === "string") {
+ return jQuery.inArray(this[0], jQuery(elem));
+ }
+
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this);
+ },
+
+ add: function (selector, context) {
+ return this.pushStack(
+ jQuery.unique(
+ jQuery.merge(this.get(), jQuery(selector, context))
+ )
+ );
+ },
+
+ addBack: function (selector) {
+ return this.add(selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+ });
+
+ function sibling(cur, dir) {
+ do {
+ cur = cur[dir];
+ } while (cur && cur.nodeType !== 1);
+
+ return cur;
+ }
+
+ jQuery.each({
+ parent: function (elem) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function (elem) {
+ return jQuery.dir(elem, "parentNode");
+ },
+ parentsUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "parentNode", until);
+ },
+ next: function (elem) {
+ return sibling(elem, "nextSibling");
+ },
+ prev: function (elem) {
+ return sibling(elem, "previousSibling");
+ },
+ nextAll: function (elem) {
+ return jQuery.dir(elem, "nextSibling");
+ },
+ prevAll: function (elem) {
+ return jQuery.dir(elem, "previousSibling");
+ },
+ nextUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "nextSibling", until);
+ },
+ prevUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "previousSibling", until);
+ },
+ siblings: function (elem) {
+ return jQuery.sibling(( elem.parentNode || {} ).firstChild, elem);
+ },
+ children: function (elem) {
+ return jQuery.sibling(elem.firstChild);
+ },
+ contents: function (elem) {
+ return jQuery.nodeName(elem, "iframe") ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.merge([], elem.childNodes);
+ }
+ }, function (name, fn) {
+ jQuery.fn[name] = function (until, selector) {
+ var ret = jQuery.map(this, fn, until);
+
+ if (name.slice(-5) !== "Until") {
+ selector = until;
+ }
+
+ if (selector && typeof selector === "string") {
+ ret = jQuery.filter(selector, ret);
+ }
+
+ if (this.length > 1) {
+ // Remove duplicates
+ if (!guaranteedUnique[name]) {
+ ret = jQuery.unique(ret);
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if (rparentsprev.test(name)) {
+ ret = ret.reverse();
+ }
+ }
+
+ return this.pushStack(ret);
+ };
+ });
+ var rnotwhite = (/\S+/g);
+
+
+// String to Object options format cache
+ var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+ function createOptions(options) {
+ var object = optionsCache[options] = {};
+ jQuery.each(options.match(rnotwhite) || [], function (_, flag) {
+ object[flag] = true;
+ });
+ return object;
+ }
+
+ /*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+ jQuery.Callbacks = function (options) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[options] || createOptions(options) ) :
+ jQuery.extend({}, options);
+
+ var // Flag to know if list is currently firing
+ firing,
+ // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function (data) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for (; list && firingIndex < firingLength; firingIndex++) {
+ if (list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if (list) {
+ if (stack) {
+ if (stack.length) {
+ fire(stack.shift());
+ }
+ } else if (memory) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function () {
+ if (list) {
+ // First, we save the current length
+ var start = list.length;
+ (function add(args) {
+ jQuery.each(args, function (_, arg) {
+ var type = jQuery.type(arg);
+ if (type === "function") {
+ if (!options.unique || !self.has(arg)) {
+ list.push(arg);
+ }
+ } else if (arg && arg.length && type !== "string") {
+ // Inspect recursively
+ add(arg);
+ }
+ });
+ })(arguments);
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if (firing) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if (memory) {
+ firingStart = start;
+ fire(memory);
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function () {
+ if (list) {
+ jQuery.each(arguments, function (_, arg) {
+ var index;
+ while (( index = jQuery.inArray(arg, list, index) ) > -1) {
+ list.splice(index, 1);
+ // Handle firing indexes
+ if (firing) {
+ if (index <= firingLength) {
+ firingLength--;
+ }
+ if (index <= firingIndex) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function (fn) {
+ return fn ? jQuery.inArray(fn, list) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function () {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function () {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function () {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function () {
+ stack = undefined;
+ if (!memory) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function () {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function (context, args) {
+ if (list && ( !fired || stack )) {
+ args = args || [];
+ args = [context, args.slice ? args.slice() : args];
+ if (firing) {
+ stack.push(args);
+ } else {
+ fire(args);
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function () {
+ self.fireWith(this, arguments);
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function () {
+ return !!fired;
+ }
+ };
+
+ return self;
+ };
+
+
+ jQuery.extend({
+
+ Deferred: function (func) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"],
+ ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"],
+ ["notify", "progress", jQuery.Callbacks("memory")]
+ ],
+ state = "pending",
+ promise = {
+ state: function () {
+ return state;
+ },
+ always: function () {
+ deferred.done(arguments).fail(arguments);
+ return this;
+ },
+ then: function (/* fnDone, fnFail, fnProgress */) {
+ var fns = arguments;
+ return jQuery.Deferred(function (newDefer) {
+ jQuery.each(tuples, function (i, tuple) {
+ var fn = jQuery.isFunction(fns[i]) && fns[i];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[tuple[1]](function () {
+ var returned = fn && fn.apply(this, arguments);
+ if (returned && jQuery.isFunction(returned.promise)) {
+ returned.promise()
+ .done(newDefer.resolve)
+ .fail(newDefer.reject)
+ .progress(newDefer.notify);
+ } else {
+ newDefer[tuple[0] + "With"](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments);
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function (obj) {
+ return obj != null ? jQuery.extend(obj, promise) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each(tuples, function (i, tuple) {
+ var list = tuple[2],
+ stateString = tuple[3];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[tuple[1]] = list.add;
+
+ // Handle state
+ if (stateString) {
+ list.add(function () {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[i ^ 1][2].disable, tuples[2][2].lock);
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[tuple[0]] = function () {
+ deferred[tuple[0] + "With"](this === deferred ? promise : this, arguments);
+ return this;
+ };
+ deferred[tuple[0] + "With"] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise(deferred);
+
+ // Call given func if any
+ if (func) {
+ func.call(deferred, deferred);
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function (subordinate /* , ..., subordinateN */) {
+ var i = 0,
+ resolveValues = slice.call(arguments),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction(subordinate.promise) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function (i, contexts, values) {
+ return function (value) {
+ contexts[i] = this;
+ values[i] = arguments.length > 1 ? slice.call(arguments) : value;
+ if (values === progressValues) {
+ deferred.notifyWith(contexts, values);
+
+ } else if (!(--remaining)) {
+ deferred.resolveWith(contexts, values);
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // add listeners to Deferred subordinates; treat others as resolved
+ if (length > 1) {
+ progressValues = new Array(length);
+ progressContexts = new Array(length);
+ resolveContexts = new Array(length);
+ for (; i < length; i++) {
+ if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) {
+ resolveValues[i].promise()
+ .done(updateFunc(i, resolveContexts, resolveValues))
+ .fail(deferred.reject)
+ .progress(updateFunc(i, progressContexts, progressValues));
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // if we're not waiting on anything, resolve the master
+ if (!remaining) {
+ deferred.resolveWith(resolveContexts, resolveValues);
+ }
+
+ return deferred.promise();
+ }
+ });
+
+
+// The deferred used on DOM ready
+ var readyList;
+
+ jQuery.fn.ready = function (fn) {
+ // Add the callback
+ jQuery.ready.promise().done(fn);
+
+ return this;
+ };
+
+ jQuery.extend({
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function (hold) {
+ if (hold) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready(true);
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function (wait) {
+
+ // Abort if there are pending holds or we're already ready
+ if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
+ return;
+ }
+
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if (!document.body) {
+ return setTimeout(jQuery.ready);
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if (wait !== true && --jQuery.readyWait > 0) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith(document, [jQuery]);
+
+ // Trigger any bound ready events
+ if (jQuery.fn.triggerHandler) {
+ jQuery(document).triggerHandler("ready");
+ jQuery(document).off("ready");
+ }
+ }
+ });
+
+ /**
+ * Clean-up method for dom ready events
+ */
+ function detach() {
+ if (document.addEventListener) {
+ document.removeEventListener("DOMContentLoaded", completed, false);
+ window.removeEventListener("load", completed, false);
+
+ } else {
+ document.detachEvent("onreadystatechange", completed);
+ window.detachEvent("onload", completed);
+ }
+ }
+
+ /**
+ * The ready event handler and self cleanup method
+ */
+ function completed() {
+ // readyState === "complete" is good enough for us to call the dom ready in oldIE
+ if (document.addEventListener || event.type === "load" || document.readyState === "complete") {
+ detach();
+ jQuery.ready();
+ }
+ }
+
+ jQuery.ready.promise = function (obj) {
+ if (!readyList) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // we once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if (document.readyState === "complete") {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout(jQuery.ready);
+
+ // Standards-based browsers support DOMContentLoaded
+ } else if (document.addEventListener) {
+ // Use the handy event callback
+ document.addEventListener("DOMContentLoaded", completed, false);
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener("load", completed, false);
+
+ // If IE event model is used
+ } else {
+ // Ensure firing before onload, maybe late but safe also for iframes
+ document.attachEvent("onreadystatechange", completed);
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent("onload", completed);
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var top = false;
+
+ try {
+ top = window.frameElement == null && document.documentElement;
+ } catch (e) {
+ }
+
+ if (top && top.doScroll) {
+ (function doScrollCheck() {
+ if (!jQuery.isReady) {
+
+ try {
+ // Use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ top.doScroll("left");
+ } catch (e) {
+ return setTimeout(doScrollCheck, 50);
+ }
+
+ // detach all dom ready events
+ detach();
+
+ // and execute any waiting functions
+ jQuery.ready();
+ }
+ })();
+ }
+ }
+ }
+ return readyList.promise(obj);
+ };
+
+
+ var strundefined = typeof undefined;
+
+
+// Support: IE<9
+// Iteration over object's inherited properties before its own
+ var i;
+ for (i in jQuery(support)) {
+ break;
+ }
+ support.ownLast = i !== "0";
+
+// Note: most support tests are defined in their respective modules.
+// false until the test is run
+ support.inlineBlockNeedsLayout = false;
+
+// Execute ASAP in case we need to set body.style.zoom
+ jQuery(function () {
+ // Minified: var a,b,c,d
+ var val, div, body, container;
+
+ body = document.getElementsByTagName("body")[0];
+ if (!body || !body.style) {
+ // Return for frameset docs that don't have a body
+ return;
+ }
+
+ // Setup
+ div = document.createElement("div");
+ container = document.createElement("div");
+ container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+ body.appendChild(container).appendChild(div);
+
+ if (typeof div.style.zoom !== strundefined) {
+ // Support: IE<8
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+
+ support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
+ if (val) {
+ // Prevent IE 6 from affecting layout for positioned elements #11048
+ // Prevent IE from shrinking the body in IE 7 mode #12869
+ // Support: IE<8
+ body.style.zoom = 1;
+ }
+ }
+
+ body.removeChild(container);
+ });
+
+
+ (function () {
+ var div = document.createElement("div");
+
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch (e) {
+ support.deleteExpando = false;
+ }
+ }
+
+ // Null elements to avoid leaks in IE.
+ div = null;
+ })();
+
+
+ /**
+ * Determines whether an object can have data
+ */
+ jQuery.acceptData = function (elem) {
+ var noData = jQuery.noData[(elem.nodeName + " ").toLowerCase()],
+ nodeType = +elem.nodeType || 1;
+
+ // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
+ return nodeType !== 1 && nodeType !== 9 ?
+ false :
+
+ // Nodes accept data unless otherwise specified; rejection can be conditional
+ !noData || noData !== true && elem.getAttribute("classid") === noData;
+ };
+
+
+ var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+ function dataAttr(elem, key, data) {
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if (data === undefined && elem.nodeType === 1) {
+
+ var name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase();
+
+ data = elem.getAttribute(name);
+
+ if (typeof data === "string") {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test(data) ? jQuery.parseJSON(data) :
+ data;
+ } catch (e) {
+ }
+
+ // Make sure we set the data so it isn't changed later
+ jQuery.data(elem, key, data);
+
+ } else {
+ data = undefined;
+ }
+ }
+
+ return data;
+ }
+
+// checks a cache object for emptiness
+ function isEmptyDataObject(obj) {
+ var name;
+ for (name in obj) {
+
+ // if the public data object is empty, the private is still empty
+ if (name === "data" && jQuery.isEmptyObject(obj[name])) {
+ continue;
+ }
+ if (name !== "toJSON") {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function internalData(elem, name, data, pvt /* Internal Use Only */) {
+ if (!jQuery.acceptData(elem)) {
+ return;
+ }
+
+ var ret, thisCache,
+ internalKey = jQuery.expando,
+
+ // We have to handle DOM nodes and JS objects differently because IE6-7
+ // can't GC object references properly across the DOM-JS boundary
+ isNode = elem.nodeType,
+
+ // Only DOM nodes need the global jQuery cache; JS object data is
+ // attached directly to the object so GC can occur automatically
+ cache = isNode ? jQuery.cache : elem,
+
+ // Only defining an ID for JS objects if its cache already exists allows
+ // the code to shortcut on the same path as a DOM node with no cache
+ id = isNode ? elem[internalKey] : elem[internalKey] && internalKey;
+
+ // Avoid doing any more work than we need to when trying to get data on an
+ // object that has no data at all
+ if ((!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string") {
+ return;
+ }
+
+ if (!id) {
+ // Only DOM nodes need a new unique ID for each element since their data
+ // ends up in the global cache
+ if (isNode) {
+ id = elem[internalKey] = deletedIds.pop() || jQuery.guid++;
+ } else {
+ id = internalKey;
+ }
+ }
+
+ if (!cache[id]) {
+ // Avoid exposing jQuery metadata on plain JS objects when the object
+ // is serialized using JSON.stringify
+ cache[id] = isNode ? {} : {toJSON: jQuery.noop};
+ }
+
+ // An object can be passed to jQuery.data instead of a key/value pair; this gets
+ // shallow copied over onto the existing cache
+ if (typeof name === "object" || typeof name === "function") {
+ if (pvt) {
+ cache[id] = jQuery.extend(cache[id], name);
+ } else {
+ cache[id].data = jQuery.extend(cache[id].data, name);
+ }
+ }
+
+ thisCache = cache[id];
+
+ // jQuery data() is stored in a separate object inside the object's internal data
+ // cache in order to avoid key collisions between internal data and user-defined
+ // data.
+ if (!pvt) {
+ if (!thisCache.data) {
+ thisCache.data = {};
+ }
+
+ thisCache = thisCache.data;
+ }
+
+ if (data !== undefined) {
+ thisCache[jQuery.camelCase(name)] = data;
+ }
+
+ // Check for both converted-to-camel and non-converted data property names
+ // If a data property was specified
+ if (typeof name === "string") {
+
+ // First Try to find as-is property data
+ ret = thisCache[name];
+
+ // Test for null|undefined property data
+ if (ret == null) {
+
+ // Try to find the camelCased property
+ ret = thisCache[jQuery.camelCase(name)];
+ }
+ } else {
+ ret = thisCache;
+ }
+
+ return ret;
+ }
+
+ function internalRemoveData(elem, name, pvt) {
+ if (!jQuery.acceptData(elem)) {
+ return;
+ }
+
+ var thisCache, i,
+ isNode = elem.nodeType,
+
+ // See jQuery.data for more information
+ cache = isNode ? jQuery.cache : elem,
+ id = isNode ? elem[jQuery.expando] : jQuery.expando;
+
+ // If there is already no cache entry for this object, there is no
+ // purpose in continuing
+ if (!cache[id]) {
+ return;
+ }
+
+ if (name) {
+
+ thisCache = pvt ? cache[id] : cache[id].data;
+
+ if (thisCache) {
+
+ // Support array or space separated string names for data keys
+ if (!jQuery.isArray(name)) {
+
+ // try the string as a key before any manipulation
+ if (name in thisCache) {
+ name = [name];
+ } else {
+
+ // split the camel cased version by spaces unless a key with the spaces exists
+ name = jQuery.camelCase(name);
+ if (name in thisCache) {
+ name = [name];
+ } else {
+ name = name.split(" ");
+ }
+ }
+ } else {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = name.concat(jQuery.map(name, jQuery.camelCase));
+ }
+
+ i = name.length;
+ while (i--) {
+ delete thisCache[name[i]];
+ }
+
+ // If there is no data left in the cache, we want to continue
+ // and let the cache object itself get destroyed
+ if (pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache)) {
+ return;
+ }
+ }
+ }
+
+ // See jQuery.data for more information
+ if (!pvt) {
+ delete cache[id].data;
+
+ // Don't destroy the parent cache unless the internal data object
+ // had been the only thing left in it
+ if (!isEmptyDataObject(cache[id])) {
+ return;
+ }
+ }
+
+ // Destroy the cache
+ if (isNode) {
+ jQuery.cleanData([elem], true);
+
+ // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+ /* jshint eqeqeq: false */
+ } else if (support.deleteExpando || cache != cache.window) {
+ /* jshint eqeqeq: true */
+ delete cache[id];
+
+ // When all else fails, null
+ } else {
+ cache[id] = null;
+ }
+ }
+
+ jQuery.extend({
+ cache: {},
+
+ // The following elements (space-suffixed to avoid Object.prototype collisions)
+ // throw uncatchable exceptions if you attempt to set expando properties
+ noData: {
+ "applet ": true,
+ "embed ": true,
+ // ...but Flash objects (which have this classid) *can* handle expandos
+ "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+ },
+
+ hasData: function (elem) {
+ elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando];
+ return !!elem && !isEmptyDataObject(elem);
+ },
+
+ data: function (elem, name, data) {
+ return internalData(elem, name, data);
+ },
+
+ removeData: function (elem, name) {
+ return internalRemoveData(elem, name);
+ },
+
+ // For internal use only.
+ _data: function (elem, name, data) {
+ return internalData(elem, name, data, true);
+ },
+
+ _removeData: function (elem, name) {
+ return internalRemoveData(elem, name, true);
+ }
+ });
+
+ jQuery.fn.extend({
+ data: function (key, value) {
+ var i, name, data,
+ elem = this[0],
+ attrs = elem && elem.attributes;
+
+ // Special expections of .data basically thwart jQuery.access,
+ // so implement the relevant behavior ourselves
+
+ // Gets all values
+ if (key === undefined) {
+ if (this.length) {
+ data = jQuery.data(elem);
+
+ if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) {
+ i = attrs.length;
+ while (i--) {
+
+ // Support: IE11+
+ // The attrs elements can be null (#14894)
+ if (attrs[i]) {
+ name = attrs[i].name;
+ if (name.indexOf("data-") === 0) {
+ name = jQuery.camelCase(name.slice(5));
+ dataAttr(elem, name, data[name]);
+ }
+ }
+ }
+ jQuery._data(elem, "parsedAttrs", true);
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if (typeof key === "object") {
+ return this.each(function () {
+ jQuery.data(this, key);
+ });
+ }
+
+ return arguments.length > 1 ?
+
+ // Sets one value
+ this.each(function () {
+ jQuery.data(this, key, value);
+ }) :
+
+ // Gets one value
+ // Try to fetch any internally stored data first
+ elem ? dataAttr(elem, key, jQuery.data(elem, key)) : undefined;
+ },
+
+ removeData: function (key) {
+ return this.each(function () {
+ jQuery.removeData(this, key);
+ });
+ }
+ });
+
+
+ jQuery.extend({
+ queue: function (elem, type, data) {
+ var queue;
+
+ if (elem) {
+ type = ( type || "fx" ) + "queue";
+ queue = jQuery._data(elem, type);
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if (data) {
+ if (!queue || jQuery.isArray(data)) {
+ queue = jQuery._data(elem, type, jQuery.makeArray(data));
+ } else {
+ queue.push(data);
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function (elem, type) {
+ type = type || "fx";
+
+ var queue = jQuery.queue(elem, type),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks(elem, type),
+ next = function () {
+ jQuery.dequeue(elem, type);
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if (fn === "inprogress") {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if (fn) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if (type === "fx") {
+ queue.unshift("inprogress");
+ }
+
+ // clear up the last queue stop function
+ delete hooks.stop;
+ fn.call(elem, next, hooks);
+ }
+
+ if (!startLength && hooks) {
+ hooks.empty.fire();
+ }
+ },
+
+ // not intended for public consumption - generates a queueHooks object, or returns the current one
+ _queueHooks: function (elem, type) {
+ var key = type + "queueHooks";
+ return jQuery._data(elem, key) || jQuery._data(elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function () {
+ jQuery._removeData(elem, type + "queue");
+ jQuery._removeData(elem, key);
+ })
+ });
+ }
+ });
+
+ jQuery.fn.extend({
+ queue: function (type, data) {
+ var setter = 2;
+
+ if (typeof type !== "string") {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if (arguments.length < setter) {
+ return jQuery.queue(this[0], type);
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function () {
+ var queue = jQuery.queue(this, type, data);
+
+ // ensure a hooks for this queue
+ jQuery._queueHooks(this, type);
+
+ if (type === "fx" && queue[0] !== "inprogress") {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ dequeue: function (type) {
+ return this.each(function () {
+ jQuery.dequeue(this, type);
+ });
+ },
+ clearQueue: function (type) {
+ return this.queue(type || "fx", []);
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function (type, obj) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function () {
+ if (!( --count )) {
+ defer.resolveWith(elements, [elements]);
+ }
+ };
+
+ if (typeof type !== "string") {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while (i--) {
+ tmp = jQuery._data(elements[i], type + "queueHooks");
+ if (tmp && tmp.empty) {
+ count++;
+ tmp.empty.add(resolve);
+ }
+ }
+ resolve();
+ return defer.promise(obj);
+ }
+ });
+ var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+ var cssExpand = ["Top", "Right", "Bottom", "Left"];
+
+ var isHidden = function (elem, el) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css(elem, "display") === "none" || !jQuery.contains(elem.ownerDocument, elem);
+ };
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+ var access = jQuery.access = function (elems, fn, key, value, chainable, emptyGet, raw) {
+ var i = 0,
+ length = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if (jQuery.type(key) === "object") {
+ chainable = true;
+ for (i in key) {
+ jQuery.access(elems, fn, i, key[i], true, emptyGet, raw);
+ }
+
+ // Sets one value
+ } else if (value !== undefined) {
+ chainable = true;
+
+ if (!jQuery.isFunction(value)) {
+ raw = true;
+ }
+
+ if (bulk) {
+ // Bulk operations run against the entire set
+ if (raw) {
+ fn.call(elems, value);
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function (elem, key, value) {
+ return bulk.call(jQuery(elem), value);
+ };
+ }
+ }
+
+ if (fn) {
+ for (; i < length; i++) {
+ fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call(elems) :
+ length ? fn(elems[0], key) : emptyGet;
+ };
+ var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+ (function () {
+ // Minified: var a,b,c
+ var input = document.createElement("input"),
+ div = document.createElement("div"),
+ fragment = document.createDocumentFragment();
+
+ // Setup
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+ // IE strips leading whitespace when .innerHTML is used
+ support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ support.tbody = !div.getElementsByTagName("tbody").length;
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ support.htmlSerialize = !!div.getElementsByTagName("link").length;
+
+ // Makes sure cloning an html5 element does not cause problems
+ // Where outerHTML is undefined, this still works
+ support.html5Clone =
+ document.createElement("nav").cloneNode(true).outerHTML !== "<:nav></:nav>";
+
+ // Check if a disconnected checkbox will retain its checked
+ // value of true after appended to the DOM (IE6/7)
+ input.type = "checkbox";
+ input.checked = true;
+ fragment.appendChild(input);
+ support.appendChecked = input.checked;
+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ // Support: IE6-IE11+
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
+
+ // #11217 - WebKit loses check when the name is after the checked attribute
+ fragment.appendChild(div);
+ div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
+
+ // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+ // old WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
+
+ // Support: IE<9
+ // Opera does not clone events (and typeof div.attachEvent === undefined).
+ // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+ support.noCloneEvent = true;
+ if (div.attachEvent) {
+ div.attachEvent("onclick", function () {
+ support.noCloneEvent = false;
+ });
+
+ div.cloneNode(true).click();
+ }
+
+ // Execute the test only if not already executed in another module.
+ if (support.deleteExpando == null) {
+ // Support: IE<9
+ support.deleteExpando = true;
+ try {
+ delete div.test;
+ } catch (e) {
+ support.deleteExpando = false;
+ }
+ }
+ })();
+
+
+ (function () {
+ var i, eventName,
+ div = document.createElement("div");
+
+ // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
+ for (i in {submit: true, change: true, focusin: true}) {
+ eventName = "on" + i;
+
+ if (!(support[i + "Bubbles"] = eventName in window)) {
+ // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+ div.setAttribute(eventName, "t");
+ support[i + "Bubbles"] = div.attributes[eventName].expando === false;
+ }
+ }
+
+ // Null elements to avoid leaks in IE.
+ div = null;
+ })();
+
+
+ var rformElems = /^(?:input|select|textarea)$/i,
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+ function returnTrue() {
+ return true;
+ }
+
+ function returnFalse() {
+ return false;
+ }
+
+ function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch (err) {
+ }
+ }
+
+ /*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+ jQuery.event = {
+
+ global: {},
+
+ add: function (elem, types, handler, data, selector) {
+ var tmp, events, t, handleObjIn,
+ special, eventHandle, handleObj,
+ handlers, type, namespaces, origType,
+ elemData = jQuery._data(elem);
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if (!elemData) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if (handler.handler) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if (!handler.guid) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if (!(events = elemData.events)) {
+ events = elemData.events = {};
+ }
+ if (!(eventHandle = elemData.handle)) {
+ eventHandle = elemData.handle = function (e) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
+ jQuery.event.dispatch.apply(eventHandle.elem, arguments) :
+ undefined;
+ };
+ // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+ eventHandle.elem = elem;
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match(rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if (!type) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[type] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[type] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test(selector),
+ namespace: namespaces.join(".")
+ }, handleObjIn);
+
+ // Init the event handler queue if we're the first
+ if (!(handlers = events[type])) {
+ handlers = events[type] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener/attachEvent if the special events handler returns false
+ if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
+ // Bind the global event handler to the element
+ if (elem.addEventListener) {
+ elem.addEventListener(type, eventHandle, false);
+
+ } else if (elem.attachEvent) {
+ elem.attachEvent("on" + type, eventHandle);
+ }
+ }
+ }
+
+ if (special.add) {
+ special.add.call(elem, handleObj);
+
+ if (!handleObj.handler.guid) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if (selector) {
+ handlers.splice(handlers.delegateCount++, 0, handleObj);
+ } else {
+ handlers.push(handleObj);
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[type] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ // Detach an event or set of events from an element
+ remove: function (elem, types, handler, selector, mappedTypes) {
+ var j, handleObj, tmp,
+ origCount, t, events,
+ special, handlers, type,
+ namespaces, origType,
+ elemData = jQuery.hasData(elem) && jQuery._data(elem);
+
+ if (!elemData || !(events = elemData.events)) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match(rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if (!type) {
+ for (type in events) {
+ jQuery.event.remove(elem, type + types[t], handler, selector, true);
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[type] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[type] || [];
+ tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while (j--) {
+ handleObj = handlers[j];
+
+ if (( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test(handleObj.namespace) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector )) {
+ handlers.splice(j, 1);
+
+ if (handleObj.selector) {
+ handlers.delegateCount--;
+ }
+ if (special.remove) {
+ special.remove.call(elem, handleObj);
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if (origCount && !handlers.length) {
+ if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
+ jQuery.removeEvent(elem, type, elemData.handle);
+ }
+
+ delete events[type];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if (jQuery.isEmptyObject(events)) {
+ delete elemData.handle;
+
+ // removeData also checks for emptiness and clears the expando if empty
+ // so use it instead of delete
+ jQuery._removeData(elem, "events");
+ }
+ },
+
+ trigger: function (event, data, elem, onlyHandlers) {
+ var handle, ontype, cur,
+ bubbleType, special, tmp, i,
+ eventPath = [elem || document],
+ type = hasOwn.call(event, "type") ? event.type : event,
+ namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if (elem.nodeType === 3 || elem.nodeType === 8) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if (rfocusMorph.test(type + jQuery.event.triggered)) {
+ return;
+ }
+
+ if (type.indexOf(".") >= 0) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[jQuery.expando] ?
+ event :
+ new jQuery.Event(type, typeof event === "object" && event);
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if (!event.target) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [event] :
+ jQuery.makeArray(data, [event]);
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[type] || {};
+ if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) {
+
+ bubbleType = special.delegateType || type;
+ if (!rfocusMorph.test(bubbleType + type)) {
+ cur = cur.parentNode;
+ }
+ for (; cur; cur = cur.parentNode) {
+ eventPath.push(cur);
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if (tmp === (elem.ownerDocument || document)) {
+ eventPath.push(tmp.defaultView || tmp.parentWindow || window);
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( jQuery._data(cur, "events") || {} )[event.type] && jQuery._data(cur, "handle");
+ if (handle) {
+ handle.apply(cur, data);
+ }
+
+ // Native handler
+ handle = ontype && cur[ontype];
+ if (handle && handle.apply && jQuery.acceptData(cur)) {
+ event.result = handle.apply(cur, data);
+ if (event.result === false) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if (!onlyHandlers && !event.isDefaultPrevented()) {
+
+ if ((!special._default || special._default.apply(eventPath.pop(), data) === false) &&
+ jQuery.acceptData(elem)) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Can't use an .isFunction() check here because IE6/7 fails that test.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if (ontype && elem[type] && !jQuery.isWindow(elem)) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ontype];
+
+ if (tmp) {
+ elem[ontype] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ try {
+ elem[type]();
+ } catch (e) {
+ // IE<9 dies on focus/blur to hidden element (#1486,#12518)
+ // only reproducible on winXP IE8 native, not IE9 in IE8 mode
+ }
+ jQuery.event.triggered = undefined;
+
+ if (tmp) {
+ elem[ontype] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function (event) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix(event);
+
+ var i, ret, handleObj, matched, j,
+ handlerQueue = [],
+ args = slice.call(arguments),
+ handlers = ( jQuery._data(this, "events") || {} )[event.type] || [],
+ special = jQuery.event.special[event.type] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if (special.preDispatch && special.preDispatch.call(this, event) === false) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call(this, event, handlers);
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
+
+ // Triggered event must either 1) have no namespace, or
+ // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+ if (!event.namespace_re || event.namespace_re.test(handleObj.namespace)) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler )
+ .apply(matched.elem, args);
+
+ if (ret !== undefined) {
+ if ((event.result = ret) === false) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if (special.postDispatch) {
+ special.postDispatch.call(this, event);
+ }
+
+ return event.result;
+ },
+
+ handlers: function (event, handlers) {
+ var sel, handleObj, matches, i,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if (delegateCount && cur.nodeType && (!event.button || event.type !== "click")) {
+
+ /* jshint eqeqeq: false */
+ for (; cur != this; cur = cur.parentNode || this) {
+ /* jshint eqeqeq: true */
+
+ // Don't check non-elements (#13208)
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if (cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click")) {
+ matches = [];
+ for (i = 0; i < delegateCount; i++) {
+ handleObj = handlers[i];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if (matches[sel] === undefined) {
+ matches[sel] = handleObj.needsContext ?
+ jQuery(sel, this).index(cur) >= 0 :
+ jQuery.find(sel, this, null, [cur]).length;
+ }
+ if (matches[sel]) {
+ matches.push(handleObj);
+ }
+ }
+ if (matches.length) {
+ handlerQueue.push({elem: cur, handlers: matches});
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if (delegateCount < handlers.length) {
+ handlerQueue.push({elem: this, handlers: handlers.slice(delegateCount)});
+ }
+
+ return handlerQueue;
+ },
+
+ fix: function (event) {
+ if (event[jQuery.expando]) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[type];
+
+ if (!fixHook) {
+ this.fixHooks[type] = fixHook =
+ rmouseEvent.test(type) ? this.mouseHooks :
+ rkeyEvent.test(type) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat(fixHook.props) : this.props;
+
+ event = new jQuery.Event(originalEvent);
+
+ i = copy.length;
+ while (i--) {
+ prop = copy[i];
+ event[prop] = originalEvent[prop];
+ }
+
+ // Support: IE<9
+ // Fix target property (#1925)
+ if (!event.target) {
+ event.target = originalEvent.srcElement || document;
+ }
+
+ // Support: Chrome 23+, Safari?
+ // Target should not be a text node (#504, #13143)
+ if (event.target.nodeType === 3) {
+ event.target = event.target.parentNode;
+ }
+
+ // Support: IE<9
+ // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+ event.metaKey = !!event.metaKey;
+
+ return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function (event, original) {
+
+ // Add which for key events
+ if (event.which == null) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (event, original) {
+ var body, eventDoc, doc,
+ button = original.button,
+ fromElement = original.fromElement;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if (event.pageX == null && original.clientX != null) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add relatedTarget, if necessary
+ if (!event.relatedTarget && fromElement) {
+ event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if (!event.which && button !== undefined) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function () {
+ if (this !== safeActiveElement() && this.focus) {
+ try {
+ this.focus();
+ return false;
+ } catch (e) {
+ // Support: IE<9
+ // If we error on focus to hidden element (#1486, #12518),
+ // let .trigger() run the handlers
+ }
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function () {
+ if (this === safeActiveElement() && this.blur) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function () {
+ if (jQuery.nodeName(this, "input") && this.type === "checkbox" && this.click) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function (event) {
+ return jQuery.nodeName(event.target, "a");
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function (event) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if (event.result !== undefined && event.originalEvent) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function (type, elem, event, bubble) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if (bubble) {
+ jQuery.event.trigger(e, null, elem);
+ } else {
+ jQuery.event.dispatch.call(elem, e);
+ }
+ if (e.isDefaultPrevented()) {
+ event.preventDefault();
+ }
+ }
+ };
+
+ jQuery.removeEvent = document.removeEventListener ?
+ function (elem, type, handle) {
+ if (elem.removeEventListener) {
+ elem.removeEventListener(type, handle, false);
+ }
+ } :
+ function (elem, type, handle) {
+ var name = "on" + type;
+
+ if (elem.detachEvent) {
+
+ // #8545, #7054, preventing memory leaks for custom events in IE6-8
+ // detachEvent needed property on element, by name of that event, to properly expose it to GC
+ if (typeof elem[name] === strundefined) {
+ elem[name] = null;
+ }
+
+ elem.detachEvent(name, handle);
+ }
+ };
+
+ jQuery.Event = function (src, props) {
+ // Allow instantiation without the 'new' keyword
+ if (!(this instanceof jQuery.Event)) {
+ return new jQuery.Event(src, props);
+ }
+
+ // Event object
+ if (src && src.type) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+ // Support: IE < 9, Android < 4.0
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if (props) {
+ jQuery.extend(this, props);
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[jQuery.expando] = true;
+ };
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+ jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function () {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+ if (!e) {
+ return;
+ }
+
+ // If preventDefault exists, run it on the original event
+ if (e.preventDefault) {
+ e.preventDefault();
+
+ // Support: IE
+ // Otherwise set the returnValue property of the original event to false
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function () {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+ if (!e) {
+ return;
+ }
+ // If stopPropagation exists, run it on the original event
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ }
+
+ // Support: IE
+ // Set the cancelBubble property of the original event to true
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function () {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if (e && e.stopImmediatePropagation) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+ };
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+ jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function (orig, fix) {
+ jQuery.event.special[orig] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function (event) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if (!related || (related !== target && !jQuery.contains(target, related))) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply(this, arguments);
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+ });
+
+// IE submit delegation
+ if (!support.submitBubbles) {
+
+ jQuery.event.special.submit = {
+ setup: function () {
+ // Only need this for delegated form submit events
+ if (jQuery.nodeName(this, "form")) {
+ return false;
+ }
+
+ // Lazy-add a submit handler when a descendant form may potentially be submitted
+ jQuery.event.add(this, "click._submit keypress._submit", function (e) {
+ // Node name check avoids a VML-related crash in IE (#9807)
+ var elem = e.target,
+ form = jQuery.nodeName(elem, "input") || jQuery.nodeName(elem, "button") ? elem.form : undefined;
+ if (form && !jQuery._data(form, "submitBubbles")) {
+ jQuery.event.add(form, "submit._submit", function (event) {
+ event._submit_bubble = true;
+ });
+ jQuery._data(form, "submitBubbles", true);
+ }
+ });
+ // return undefined since we don't need an event listener
+ },
+
+ postDispatch: function (event) {
+ // If form was submitted by the user, bubble the event up the tree
+ if (event._submit_bubble) {
+ delete event._submit_bubble;
+ if (this.parentNode && !event.isTrigger) {
+ jQuery.event.simulate("submit", this.parentNode, event, true);
+ }
+ }
+ },
+
+ teardown: function () {
+ // Only need this for delegated form submit events
+ if (jQuery.nodeName(this, "form")) {
+ return false;
+ }
+
+ // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+ jQuery.event.remove(this, "._submit");
+ }
+ };
+ }
+
+// IE change delegation and checkbox/radio fix
+ if (!support.changeBubbles) {
+
+ jQuery.event.special.change = {
+
+ setup: function () {
+
+ if (rformElems.test(this.nodeName)) {
+ // IE doesn't fire change on a check/radio until blur; trigger it on click
+ // after a propertychange. Eat the blur-change in special.change.handle.
+ // This still fires onchange a second time for check/radio after blur.
+ if (this.type === "checkbox" || this.type === "radio") {
+ jQuery.event.add(this, "propertychange._change", function (event) {
+ if (event.originalEvent.propertyName === "checked") {
+ this._just_changed = true;
+ }
+ });
+ jQuery.event.add(this, "click._change", function (event) {
+ if (this._just_changed && !event.isTrigger) {
+ this._just_changed = false;
+ }
+ // Allow triggered, simulated change events (#11500)
+ jQuery.event.simulate("change", this, event, true);
+ });
+ }
+ return false;
+ }
+ // Delegated event; lazy-add a change handler on descendant inputs
+ jQuery.event.add(this, "beforeactivate._change", function (e) {
+ var elem = e.target;
+
+ if (rformElems.test(elem.nodeName) && !jQuery._data(elem, "changeBubbles")) {
+ jQuery.event.add(elem, "change._change", function (event) {
+ if (this.parentNode && !event.isSimulated && !event.isTrigger) {
+ jQuery.event.simulate("change", this.parentNode, event, true);
+ }
+ });
+ jQuery._data(elem, "changeBubbles", true);
+ }
+ });
+ },
+
+ handle: function (event) {
+ var elem = event.target;
+
+ // Swallow native change events from checkbox/radio, we already triggered them above
+ if (this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox")) {
+ return event.handleObj.handler.apply(this, arguments);
+ }
+ },
+
+ teardown: function () {
+ jQuery.event.remove(this, "._change");
+
+ return !rformElems.test(this.nodeName);
+ }
+ };
+ }
+
+// Create "bubbling" focus and blur events
+ if (!support.focusinBubbles) {
+ jQuery.each({focus: "focusin", blur: "focusout"}, function (orig, fix) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function (event) {
+ jQuery.event.simulate(fix, event.target, jQuery.event.fix(event), true);
+ };
+
+ jQuery.event.special[fix] = {
+ setup: function () {
+ var doc = this.ownerDocument || this,
+ attaches = jQuery._data(doc, fix);
+
+ if (!attaches) {
+ doc.addEventListener(orig, handler, true);
+ }
+ jQuery._data(doc, fix, ( attaches || 0 ) + 1);
+ },
+ teardown: function () {
+ var doc = this.ownerDocument || this,
+ attaches = jQuery._data(doc, fix) - 1;
+
+ if (!attaches) {
+ doc.removeEventListener(orig, handler, true);
+ jQuery._removeData(doc, fix);
+ } else {
+ jQuery._data(doc, fix, attaches);
+ }
+ }
+ };
+ });
+ }
+
+ jQuery.fn.extend({
+
+ on: function (types, selector, data, fn, /*INTERNAL*/ one) {
+ var type, origFn;
+
+ // Types can be a map of types/handlers
+ if (typeof types === "object") {
+ // ( types-Object, selector, data )
+ if (typeof selector !== "string") {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for (type in types) {
+ this.on(type, selector, data, types[type], one);
+ }
+ return this;
+ }
+
+ if (data == null && fn == null) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if (fn == null) {
+ if (typeof selector === "string") {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ } else if (!fn) {
+ return this;
+ }
+
+ if (one === 1) {
+ origFn = fn;
+ fn = function (event) {
+ // Can use an empty set, since event contains the info
+ jQuery().off(event);
+ return origFn.apply(this, arguments);
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each(function () {
+ jQuery.event.add(this, types, fn, data, selector);
+ });
+ },
+ one: function (types, selector, data, fn) {
+ return this.on(types, selector, data, fn, 1);
+ },
+ off: function (types, selector, fn) {
+ var handleObj, type;
+ if (types && types.preventDefault && types.handleObj) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery(types.delegateTarget).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if (typeof types === "object") {
+ // ( types-object [, selector] )
+ for (type in types) {
+ this.off(type, selector, types[type]);
+ }
+ return this;
+ }
+ if (selector === false || typeof selector === "function") {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ }
+ return this.each(function () {
+ jQuery.event.remove(this, types, fn, selector);
+ });
+ },
+
+ trigger: function (type, data) {
+ return this.each(function () {
+ jQuery.event.trigger(type, data, this);
+ });
+ },
+ triggerHandler: function (type, data) {
+ var elem = this[0];
+ if (elem) {
+ return jQuery.event.trigger(type, data, elem, true);
+ }
+ }
+ });
+
+
+ function createSafeFragment(document) {
+ var list = nodeNames.split("|"),
+ safeFrag = document.createDocumentFragment();
+
+ if (safeFrag.createElement) {
+ while (list.length) {
+ safeFrag.createElement(
+ list.pop()
+ );
+ }
+ }
+ return safeFrag;
+ }
+
+ var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+ "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+ rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+ rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+ option: [1, "<select multiple='multiple'>", "</select>"],
+ legend: [1, "<fieldset>", "</fieldset>"],
+ area: [1, "<map>", "</map>"],
+ param: [1, "<object>", "</object>"],
+ thead: [1, "<table>", "</table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+
+ // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+ // unless wrapped in a div with non-breaking characters in front of it.
+ _default: support.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
+ },
+ safeFragment = createSafeFragment(document),
+ fragmentDiv = safeFragment.appendChild(document.createElement("div"));
+
+ wrapMap.optgroup = wrapMap.option;
+ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+ wrapMap.th = wrapMap.td;
+
+ function getAll(context, tag) {
+ var elems, elem,
+ i = 0,
+ found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName(tag || "*") :
+ typeof context.querySelectorAll !== strundefined ? context.querySelectorAll(tag || "*") :
+ undefined;
+
+ if (!found) {
+ for (found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++) {
+ if (!tag || jQuery.nodeName(elem, tag)) {
+ found.push(elem);
+ } else {
+ jQuery.merge(found, getAll(elem, tag));
+ }
+ }
+ }
+
+ return tag === undefined || tag && jQuery.nodeName(context, tag) ?
+ jQuery.merge([context], found) :
+ found;
+ }
+
+// Used in buildFragment, fixes the defaultChecked property
+ function fixDefaultChecked(elem) {
+ if (rcheckableType.test(elem.type)) {
+ elem.defaultChecked = elem.checked;
+ }
+ }
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+ function manipulationTarget(elem, content) {
+ return jQuery.nodeName(elem, "table") &&
+ jQuery.nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr") ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody")) :
+ elem;
+ }
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+ function disableScript(elem) {
+ elem.type = (jQuery.find.attr(elem, "type") !== null) + "/" + elem.type;
+ return elem;
+ }
+
+ function restoreScript(elem) {
+ var match = rscriptTypeMasked.exec(elem.type);
+ if (match) {
+ elem.type = match[1];
+ } else {
+ elem.removeAttribute("type");
+ }
+ return elem;
+ }
+
+// Mark scripts as having already been evaluated
+ function setGlobalEval(elems, refElements) {
+ var elem,
+ i = 0;
+ for (; (elem = elems[i]) != null; i++) {
+ jQuery._data(elem, "globalEval", !refElements || jQuery._data(refElements[i], "globalEval"));
+ }
+ }
+
+ function cloneCopyEvent(src, dest) {
+
+ if (dest.nodeType !== 1 || !jQuery.hasData(src)) {
+ return;
+ }
+
+ var type, i, l,
+ oldData = jQuery._data(src),
+ curData = jQuery._data(dest, oldData),
+ events = oldData.events;
+
+ if (events) {
+ delete curData.handle;
+ curData.events = {};
+
+ for (type in events) {
+ for (i = 0, l = events[type].length; i < l; i++) {
+ jQuery.event.add(dest, type, events[type][i]);
+ }
+ }
+ }
+
+ // make the cloned public data object a copy from the original
+ if (curData.data) {
+ curData.data = jQuery.extend({}, curData.data);
+ }
+ }
+
+ function fixCloneNodeIssues(src, dest) {
+ var nodeName, e, data;
+
+ // We do not need to do anything for non-Elements
+ if (dest.nodeType !== 1) {
+ return;
+ }
+
+ nodeName = dest.nodeName.toLowerCase();
+
+ // IE6-8 copies events bound via attachEvent when using cloneNode.
+ if (!support.noCloneEvent && dest[jQuery.expando]) {
+ data = jQuery._data(dest);
+
+ for (e in data.events) {
+ jQuery.removeEvent(dest, e, data.handle);
+ }
+
+ // Event data gets referenced instead of copied if the expando gets copied too
+ dest.removeAttribute(jQuery.expando);
+ }
+
+ // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+ if (nodeName === "script" && dest.text !== src.text) {
+ disableScript(dest).text = src.text;
+ restoreScript(dest);
+
+ // IE6-10 improperly clones children of object elements using classid.
+ // IE10 throws NoModificationAllowedError if parent is null, #12132.
+ } else if (nodeName === "object") {
+ if (dest.parentNode) {
+ dest.outerHTML = src.outerHTML;
+ }
+
+ // This path appears unavoidable for IE9. When cloning an object
+ // element in IE9, the outerHTML strategy above is not sufficient.
+ // If the src has innerHTML and the destination does not,
+ // copy the src.innerHTML into the dest.innerHTML. #10324
+ if (support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) )) {
+ dest.innerHTML = src.innerHTML;
+ }
+
+ } else if (nodeName === "input" && rcheckableType.test(src.type)) {
+ // IE6-8 fails to persist the checked state of a cloned checkbox
+ // or radio button. Worse, IE6-7 fail to give the cloned element
+ // a checked appearance if the defaultChecked value isn't also set
+
+ dest.defaultChecked = dest.checked = src.checked;
+
+ // IE6-7 get confused and end up setting the value of a cloned
+ // checkbox/radio button to an empty string instead of "on"
+ if (dest.value !== src.value) {
+ dest.value = src.value;
+ }
+
+ // IE6-8 fails to return the selected option to the default selected
+ // state when cloning options
+ } else if (nodeName === "option") {
+ dest.defaultSelected = dest.selected = src.defaultSelected;
+
+ // IE6-8 fails to set the defaultValue to the correct value when
+ // cloning other types of input fields
+ } else if (nodeName === "input" || nodeName === "textarea") {
+ dest.defaultValue = src.defaultValue;
+ }
+ }
+
+ jQuery.extend({
+ clone: function (elem, dataAndEvents, deepDataAndEvents) {
+ var destElements, node, clone, i, srcElements,
+ inPage = jQuery.contains(elem.ownerDocument, elem);
+
+ if (support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">")) {
+ clone = elem.cloneNode(true);
+
+ // IE<=8 does not properly clone detached, unknown element nodes
+ } else {
+ fragmentDiv.innerHTML = elem.outerHTML;
+ fragmentDiv.removeChild(clone = fragmentDiv.firstChild);
+ }
+
+ if ((!support.noCloneEvent || !support.noCloneChecked) &&
+ (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll(clone);
+ srcElements = getAll(elem);
+
+ // Fix all IE cloning issues
+ for (i = 0; (node = srcElements[i]) != null; ++i) {
+ // Ensure that the destination node is not null; Fixes #9587
+ if (destElements[i]) {
+ fixCloneNodeIssues(node, destElements[i]);
+ }
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if (dataAndEvents) {
+ if (deepDataAndEvents) {
+ srcElements = srcElements || getAll(elem);
+ destElements = destElements || getAll(clone);
+
+ for (i = 0; (node = srcElements[i]) != null; i++) {
+ cloneCopyEvent(node, destElements[i]);
+ }
+ } else {
+ cloneCopyEvent(elem, clone);
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll(clone, "script");
+ if (destElements.length > 0) {
+ setGlobalEval(destElements, !inPage && getAll(elem, "script"));
+ }
+
+ destElements = srcElements = node = null;
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function (elems, context, scripts, selection) {
+ var j, elem, contains,
+ tmp, tag, tbody, wrap,
+ l = elems.length,
+
+ // Ensure a safe fragment
+ safe = createSafeFragment(context),
+
+ nodes = [],
+ i = 0;
+
+ for (; i < l; i++) {
+ elem = elems[i];
+
+ if (elem || elem === 0) {
+
+ // Add nodes directly
+ if (jQuery.type(elem) === "object") {
+ jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
+
+ // Convert non-html into a text node
+ } else if (!rhtml.test(elem)) {
+ nodes.push(context.createTextNode(elem));
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || safe.appendChild(context.createElement("div"));
+
+ // Deserialize a standard representation
+ tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+
+ tmp.innerHTML = wrap[1] + elem.replace(rxhtmlTag, "<$1></$2>") + wrap[2];
+
+ // Descend through wrappers to the right content
+ j = wrap[0];
+ while (j--) {
+ tmp = tmp.lastChild;
+ }
+
+ // Manually add leading whitespace removed by IE
+ if (!support.leadingWhitespace && rleadingWhitespace.test(elem)) {
+ nodes.push(context.createTextNode(rleadingWhitespace.exec(elem)[0]));
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if (!support.tbody) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ elem = tag === "table" && !rtbody.test(elem) ?
+ tmp.firstChild :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !rtbody.test(elem) ?
+ tmp :
+ 0;
+
+ j = elem && elem.childNodes.length;
+ while (j--) {
+ if (jQuery.nodeName((tbody = elem.childNodes[j]), "tbody") && !tbody.childNodes.length) {
+ elem.removeChild(tbody);
+ }
+ }
+ }
+
+ jQuery.merge(nodes, tmp.childNodes);
+
+ // Fix #12392 for WebKit and IE > 9
+ tmp.textContent = "";
+
+ // Fix #12392 for oldIE
+ while (tmp.firstChild) {
+ tmp.removeChild(tmp.firstChild);
+ }
+
+ // Remember the top-level container for proper cleanup
+ tmp = safe.lastChild;
+ }
+ }
+ }
+
+ // Fix #11356: Clear elements from fragment
+ if (tmp) {
+ safe.removeChild(tmp);
+ }
+
+ // Reset defaultChecked for any radios and checkboxes
+ // about to be appended to the DOM in IE 6/7 (#8060)
+ if (!support.appendChecked) {
+ jQuery.grep(getAll(nodes, "input"), fixDefaultChecked);
+ }
+
+ i = 0;
+ while ((elem = nodes[i++])) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if (selection && jQuery.inArray(elem, selection) !== -1) {
+ continue;
+ }
+
+ contains = jQuery.contains(elem.ownerDocument, elem);
+
+ // Append to fragment
+ tmp = getAll(safe.appendChild(elem), "script");
+
+ // Preserve script evaluation history
+ if (contains) {
+ setGlobalEval(tmp);
+ }
+
+ // Capture executables
+ if (scripts) {
+ j = 0;
+ while ((elem = tmp[j++])) {
+ if (rscriptType.test(elem.type || "")) {
+ scripts.push(elem);
+ }
+ }
+ }
+ }
+
+ tmp = null;
+
+ return safe;
+ },
+
+ cleanData: function (elems, /* internal */ acceptData) {
+ var elem, type, id, data,
+ i = 0,
+ internalKey = jQuery.expando,
+ cache = jQuery.cache,
+ deleteExpando = support.deleteExpando,
+ special = jQuery.event.special;
+
+ for (; (elem = elems[i]) != null; i++) {
+ if (acceptData || jQuery.acceptData(elem)) {
+
+ id = elem[internalKey];
+ data = id && cache[id];
+
+ if (data) {
+ if (data.events) {
+ for (type in data.events) {
+ if (special[type]) {
+ jQuery.event.remove(elem, type);
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent(elem, type, data.handle);
+ }
+ }
+ }
+
+ // Remove cache only if it was not already removed by jQuery.event.remove
+ if (cache[id]) {
+
+ delete cache[id];
+
+ // IE does not allow us to delete expando properties from nodes,
+ // nor does it have a removeAttribute function on Document nodes;
+ // we must handle all of these cases
+ if (deleteExpando) {
+ delete elem[internalKey];
+
+ } else if (typeof elem.removeAttribute !== strundefined) {
+ elem.removeAttribute(internalKey);
+
+ } else {
+ elem[internalKey] = null;
+ }
+
+ deletedIds.push(id);
+ }
+ }
+ }
+ }
+ }
+ });
+
+ jQuery.fn.extend({
+ text: function (value) {
+ return access(this, function (value) {
+ return value === undefined ?
+ jQuery.text(this) :
+ this.empty().append(( this[0] && this[0].ownerDocument || document ).createTextNode(value));
+ }, null, value, arguments.length);
+ },
+
+ append: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.appendChild(elem);
+ }
+ });
+ },
+
+ prepend: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.insertBefore(elem, target.firstChild);
+ }
+ });
+ },
+
+ before: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this);
+ }
+ });
+ },
+
+ after: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this.nextSibling);
+ }
+ });
+ },
+
+ remove: function (selector, keepData /* Internal Use Only */) {
+ var elem,
+ elems = selector ? jQuery.filter(selector, this) : this,
+ i = 0;
+
+ for (; (elem = elems[i]) != null; i++) {
+
+ if (!keepData && elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem));
+ }
+
+ if (elem.parentNode) {
+ if (keepData && jQuery.contains(elem.ownerDocument, elem)) {
+ setGlobalEval(getAll(elem, "script"));
+ }
+ elem.parentNode.removeChild(elem);
+ }
+ }
+
+ return this;
+ },
+
+ empty: function () {
+ var elem,
+ i = 0;
+
+ for (; (elem = this[i]) != null; i++) {
+ // Remove element nodes and prevent memory leaks
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ }
+
+ // Remove any remaining nodes
+ while (elem.firstChild) {
+ elem.removeChild(elem.firstChild);
+ }
+
+ // If this is a select, ensure that it displays empty (#12336)
+ // Support: IE<9
+ if (elem.options && jQuery.nodeName(elem, "select")) {
+ elem.options.length = 0;
+ }
+ }
+
+ return this;
+ },
+
+ clone: function (dataAndEvents, deepDataAndEvents) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map(function () {
+ return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
+ });
+ },
+
+ html: function (value) {
+ return access(this, function (value) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if (value === undefined) {
+ return elem.nodeType === 1 ?
+ elem.innerHTML.replace(rinlinejQuery, "") :
+ undefined;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if (typeof value === "string" && !rnoInnerhtml.test(value) &&
+ ( support.htmlSerialize || !rnoshimcache.test(value) ) &&
+ ( support.leadingWhitespace || !rleadingWhitespace.test(value) ) && !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for (; i < l; i++) {
+ // Remove element nodes and prevent memory leaks
+ elem = this[i] || {};
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch (e) {
+ }
+ }
+
+ if (elem) {
+ this.empty().append(value);
+ }
+ }, null, value, arguments.length);
+ },
+
+ replaceWith: function () {
+ var arg = arguments[0];
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip(arguments, function (elem) {
+ arg = this.parentNode;
+
+ jQuery.cleanData(getAll(this));
+
+ if (arg) {
+ arg.replaceChild(elem, this);
+ }
+ });
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return arg && (arg.length || arg.nodeType) ? this : this.remove();
+ },
+
+ detach: function (selector) {
+ return this.remove(selector, true);
+ },
+
+ domManip: function (args, callback) {
+
+ // Flatten any nested arrays
+ args = concat.apply([], args);
+
+ var first, node, hasScripts,
+ scripts, doc, fragment,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[0],
+ isFunction = jQuery.isFunction(value);
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if (isFunction ||
+ ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value) )) {
+ return this.each(function (index) {
+ var self = set.eq(index);
+ if (isFunction) {
+ args[0] = value.call(this, index, self.html());
+ }
+ self.domManip(args, callback);
+ });
+ }
+
+ if (l) {
+ fragment = jQuery.buildFragment(args, this[0].ownerDocument, false, this);
+ first = fragment.firstChild;
+
+ if (fragment.childNodes.length === 1) {
+ fragment = first;
+ }
+
+ if (first) {
+ scripts = jQuery.map(getAll(fragment, "script"), disableScript);
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for (; i < l; i++) {
+ node = fragment;
+
+ if (i !== iNoClone) {
+ node = jQuery.clone(node, true, true);
+
+ // Keep references to cloned scripts for later restoration
+ if (hasScripts) {
+ jQuery.merge(scripts, getAll(node, "script"));
+ }
+ }
+
+ callback.call(this[i], node, i);
+ }
+
+ if (hasScripts) {
+ doc = scripts[scripts.length - 1].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map(scripts, restoreScript);
+
+ // Evaluate executable scripts on first document insertion
+ for (i = 0; i < hasScripts; i++) {
+ node = scripts[i];
+ if (rscriptType.test(node.type || "") && !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) {
+
+ if (node.src) {
+ // Optional AJAX dependency, but won't run scripts if not present
+ if (jQuery._evalUrl) {
+ jQuery._evalUrl(node.src);
+ }
+ } else {
+ jQuery.globalEval(( node.text || node.textContent || node.innerHTML || "" ).replace(rcleanScript, ""));
+ }
+ }
+ }
+ }
+
+ // Fix #11809: Avoid leaking memory
+ fragment = first = null;
+ }
+ }
+
+ return this;
+ }
+ });
+
+ jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (name, original) {
+ jQuery.fn[name] = function (selector) {
+ var elems,
+ i = 0,
+ ret = [],
+ insert = jQuery(selector),
+ last = insert.length - 1;
+
+ for (; i <= last; i++) {
+ elems = i === last ? this : this.clone(true);
+ jQuery(insert[i])[original](elems);
+
+ // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+ push.apply(ret, elems.get());
+ }
+
+ return this.pushStack(ret);
+ };
+ });
+
+
+ var iframe,
+ elemdisplay = {};
+
+ /**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+ function actualDisplay(name, doc) {
+ var style,
+ elem = jQuery(doc.createElement(name)).appendTo(doc.body),
+
+ // getDefaultComputedStyle might be reliably used only on attached element
+ display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle(elem[0]) ) ?
+
+ // Use of this method is a temporary fix (more like optmization) until something better comes along,
+ // since it was removed from specification and supported only in FF
+ style.display : jQuery.css(elem[0], "display");
+
+ // We don't have any data stored on the element,
+ // so use "detach" method as fast way to get rid of the element
+ elem.detach();
+
+ return display;
+ }
+
+ /**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+ function defaultDisplay(nodeName) {
+ var doc = document,
+ display = elemdisplay[nodeName];
+
+ if (!display) {
+ display = actualDisplay(nodeName, doc);
+
+ // If the simple way fails, read from inside an iframe
+ if (display === "none" || !display) {
+
+ // Use the already-created iframe if possible
+ iframe = (iframe || jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement);
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
+
+ // Support: IE
+ doc.write();
+ doc.close();
+
+ display = actualDisplay(nodeName, doc);
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[nodeName] = display;
+ }
+
+ return display;
+ }
+
+
+ (function () {
+ var shrinkWrapBlocksVal;
+
+ support.shrinkWrapBlocks = function () {
+ if (shrinkWrapBlocksVal != null) {
+ return shrinkWrapBlocksVal;
+ }
+
+ // Will be changed later if needed.
+ shrinkWrapBlocksVal = false;
+
+ // Minified: var b,c,d
+ var div, body, container;
+
+ body = document.getElementsByTagName("body")[0];
+ if (!body || !body.style) {
+ // Test fired too early or in an unsupported environment, exit.
+ return;
+ }
+
+ // Setup
+ div = document.createElement("div");
+ container = document.createElement("div");
+ container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+ body.appendChild(container).appendChild(div);
+
+ // Support: IE6
+ // Check if elements with layout shrink-wrap their children
+ if (typeof div.style.zoom !== strundefined) {
+ // Reset CSS: box-sizing; display; margin; border
+ div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+ "box-sizing:content-box;display:block;margin:0;border:0;" +
+ "padding:1px;width:1px;zoom:1";
+ div.appendChild(document.createElement("div")).style.width = "5px";
+ shrinkWrapBlocksVal = div.offsetWidth !== 3;
+ }
+
+ body.removeChild(container);
+
+ return shrinkWrapBlocksVal;
+ };
+
+ })();
+ var rmargin = (/^margin/);
+
+ var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
+
+
+ var getStyles, curCSS,
+ rposition = /^(top|right|bottom|left)$/;
+
+ if (window.getComputedStyle) {
+ getStyles = function (elem) {
+ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ if (elem.ownerDocument.defaultView.opener) {
+ return elem.ownerDocument.defaultView.getComputedStyle(elem, null);
+ }
+
+ return window.getComputedStyle(elem, null);
+ };
+
+ curCSS = function (elem, name, computed) {
+ var width, minWidth, maxWidth, ret,
+ style = elem.style;
+
+ computed = computed || getStyles(elem);
+
+ // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+ ret = computed ? computed.getPropertyValue(name) || computed[name] : undefined;
+
+ if (computed) {
+
+ if (ret === "" && !jQuery.contains(elem.ownerDocument, elem)) {
+ ret = jQuery.style(elem, name);
+ }
+
+ // A tribute to the "awesome hack by Dean Edwards"
+ // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+ // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if (rnumnonpx.test(ret) && rmargin.test(name)) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ return ret === undefined ?
+ ret :
+ ret + "";
+ };
+ } else if (document.documentElement.currentStyle) {
+ getStyles = function (elem) {
+ return elem.currentStyle;
+ };
+
+ curCSS = function (elem, name, computed) {
+ var left, rs, rsLeft, ret,
+ style = elem.style;
+
+ computed = computed || getStyles(elem);
+ ret = computed ? computed[name] : undefined;
+
+ // Avoid setting ret to empty string here
+ // so we don't default to auto
+ if (ret == null && style && style[name]) {
+ ret = style[name];
+ }
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ // but not position css attributes, as those are proportional to the parent element instead
+ // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+ if (rnumnonpx.test(ret) && !rposition.test(name)) {
+
+ // Remember the original values
+ left = style.left;
+ rs = elem.runtimeStyle;
+ rsLeft = rs && rs.left;
+
+ // Put in the new values to get a computed value out
+ if (rsLeft) {
+ rs.left = elem.currentStyle.left;
+ }
+ style.left = name === "fontSize" ? "1em" : ret;
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ if (rsLeft) {
+ rs.left = rsLeft;
+ }
+ }
+
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ return ret === undefined ?
+ ret :
+ ret + "" || "auto";
+ };
+ }
+
+
+ function addGetHookIf(conditionFn, hookFn) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function () {
+ var condition = conditionFn();
+
+ if (condition == null) {
+ // The test was not ready at this point; screw the hook this time
+ // but check again when needed next time.
+ return;
+ }
+
+ if (condition) {
+ // Hook not needed (or it's not possible to use it due to missing dependency),
+ // remove it.
+ // Since there are no other hooks for marginRight, remove the whole object.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+
+ return (this.get = hookFn).apply(this, arguments);
+ }
+ };
+ }
+
+
+ (function () {
+ // Minified: var b,c,d,e,f,g, h,i
+ var div, style, a, pixelPositionVal, boxSizingReliableVal,
+ reliableHiddenOffsetsVal, reliableMarginRightVal;
+
+ // Setup
+ div = document.createElement("div");
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+ a = div.getElementsByTagName("a")[0];
+ style = a && a.style;
+
+ // Finish early in limited (non-browser) environments
+ if (!style) {
+ return;
+ }
+
+ style.cssText = "float:left;opacity:.5";
+
+ // Support: IE<9
+ // Make sure that element opacity exists (as opposed to filter)
+ support.opacity = style.opacity === "0.5";
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ support.cssFloat = !!style.cssFloat;
+
+ div.style.backgroundClip = "content-box";
+ div.cloneNode(true).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
+ style.WebkitBoxSizing === "";
+
+ jQuery.extend(support, {
+ reliableHiddenOffsets: function () {
+ if (reliableHiddenOffsetsVal == null) {
+ computeStyleTests();
+ }
+ return reliableHiddenOffsetsVal;
+ },
+
+ boxSizingReliable: function () {
+ if (boxSizingReliableVal == null) {
+ computeStyleTests();
+ }
+ return boxSizingReliableVal;
+ },
+
+ pixelPosition: function () {
+ if (pixelPositionVal == null) {
+ computeStyleTests();
+ }
+ return pixelPositionVal;
+ },
+
+ // Support: Android 2.3
+ reliableMarginRight: function () {
+ if (reliableMarginRightVal == null) {
+ computeStyleTests();
+ }
+ return reliableMarginRightVal;
+ }
+ });
+
+ function computeStyleTests() {
+ // Minified: var b,c,d,j
+ var div, body, container, contents;
+
+ body = document.getElementsByTagName("body")[0];
+ if (!body || !body.style) {
+ // Test fired too early or in an unsupported environment, exit.
+ return;
+ }
+
+ // Setup
+ div = document.createElement("div");
+ container = document.createElement("div");
+ container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+ body.appendChild(container).appendChild(div);
+
+ div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
+ "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
+ "border:1px;padding:1px;width:4px;position:absolute";
+
+ // Support: IE<9
+ // Assume reasonable values in the absence of getComputedStyle
+ pixelPositionVal = boxSizingReliableVal = false;
+ reliableMarginRightVal = true;
+
+ // Check for getComputedStyle so that this code is not run in IE<9.
+ if (window.getComputedStyle) {
+ pixelPositionVal = ( window.getComputedStyle(div, null) || {} ).top !== "1%";
+ boxSizingReliableVal =
+ ( window.getComputedStyle(div, null) || {width: "4px"} ).width === "4px";
+
+ // Support: Android 2.3
+ // Div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container (#3333)
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ contents = div.appendChild(document.createElement("div"));
+
+ // Reset CSS: box-sizing; display; margin; border; padding
+ contents.style.cssText = div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+ "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+ contents.style.marginRight = contents.style.width = "0";
+ div.style.width = "1px";
+
+ reliableMarginRightVal = !parseFloat(( window.getComputedStyle(contents, null) || {} ).marginRight);
+
+ div.removeChild(contents);
+ }
+
+ // Support: IE8
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+ contents = div.getElementsByTagName("td");
+ contents[0].style.cssText = "margin:0;border:0;padding:0;display:none";
+ reliableHiddenOffsetsVal = contents[0].offsetHeight === 0;
+ if (reliableHiddenOffsetsVal) {
+ contents[0].style.display = "";
+ contents[1].style.display = "none";
+ reliableHiddenOffsetsVal = contents[0].offsetHeight === 0;
+ }
+
+ body.removeChild(container);
+ }
+
+ })();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+ jQuery.swap = function (elem, options, callback, args) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for (name in options) {
+ old[name] = elem.style[name];
+ elem.style[name] = options[name];
+ }
+
+ ret = callback.apply(elem, args || []);
+
+ // Revert the old values
+ for (name in options) {
+ elem.style[name] = old[name];
+ }
+
+ return ret;
+ };
+
+
+ var
+ ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity\s*=\s*([^)]*)/,
+
+ // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rnumsplit = new RegExp("^(" + pnum + ")(.*)$", "i"),
+ rrelNum = new RegExp("^([+-])=(" + pnum + ")", "i"),
+
+ cssShow = {position: "absolute", visibility: "hidden", display: "block"},
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+
+ cssPrefixes = ["Webkit", "O", "Moz", "ms"];
+
+
+// return a css property mapped to a potentially vendor prefixed property
+ function vendorPropName(style, name) {
+
+ // shortcut for names that are not vendor prefixed
+ if (name in style) {
+ return name;
+ }
+
+ // check for vendor prefixed names
+ var capName = name.charAt(0).toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while (i--) {
+ name = cssPrefixes[i] + capName;
+ if (name in style) {
+ return name;
+ }
+ }
+
+ return origName;
+ }
+
+ function showHide(elements, show) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for (; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+
+ values[index] = jQuery._data(elem, "olddisplay");
+ display = elem.style.display;
+ if (show) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if (!values[index] && display === "none") {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if (elem.style.display === "" && isHidden(elem)) {
+ values[index] = jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ }
+ } else {
+ hidden = isHidden(elem);
+
+ if (display && display !== "none" || !hidden) {
+ jQuery._data(elem, "olddisplay", hidden ? display : jQuery.css(elem, "display"));
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for (index = 0; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+ if (!show || elem.style.display === "none" || elem.style.display === "") {
+ elem.style.display = show ? values[index] || "" : "none";
+ }
+ }
+
+ return elements;
+ }
+
+ function setPositiveNumber(elem, value, subtract) {
+ var matches = rnumsplit.exec(value);
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max(0, matches[1] - ( subtract || 0 )) + ( matches[2] || "px" ) :
+ value;
+ }
+
+ function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for (; i < 4; i += 2) {
+ // both box models exclude margin, so add it if we want it
+ if (extra === "margin") {
+ val += jQuery.css(elem, extra + cssExpand[i], true, styles);
+ }
+
+ if (isBorderBox) {
+ // border-box includes padding, so remove it if we want content
+ if (extra === "content") {
+ val -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+ }
+
+ // at this point, extra isn't border nor margin, so remove border
+ if (extra !== "margin") {
+ val -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ } else {
+ // at this point, extra isn't content, so add padding
+ val += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+
+ // at this point, extra isn't content nor padding, so add border
+ if (extra !== "padding") {
+ val += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ }
+ }
+
+ return val;
+ }
+
+ function getWidthOrHeight(elem, name, extra) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles(elem),
+ isBorderBox = support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box";
+
+ // some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if (val <= 0 || val == null) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS(elem, name, styles);
+ if (val < 0 || val == null) {
+ val = elem.style[name];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if (rnumnonpx.test(val)) {
+ return val;
+ }
+
+ // we need the check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[name] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat(val) || 0;
+ }
+
+ // use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+ }
+
+ jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function (elem, computed) {
+ if (computed) {
+ // We should always get a number back from opacity
+ var ret = curCSS(elem, "opacity");
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function (elem, name, value, extra) {
+ // Don't set styles on text and comment nodes
+ if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase(name),
+ style = elem.style;
+
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(style, origName) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // Check if we're setting a value
+ if (value !== undefined) {
+ type = typeof value;
+
+ // convert relative number strings (+= or -=) to relative numbers. #7345
+ if (type === "string" && (ret = rrelNum.exec(value))) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat(jQuery.css(elem, name));
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set. See: #7116
+ if (value == null || value !== value) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if (type === "number" && !jQuery.cssNumber[origName]) {
+ value += "px";
+ }
+
+ // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+ // but it would mean to define eight (for every problematic property) identical functions
+ if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
+ style[name] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
+
+ // Support: IE
+ // Swallow errors from 'invalid' CSS values (#5509)
+ try {
+ style[name] = value;
+ } catch (e) {
+ }
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[name];
+ }
+ },
+
+ css: function (elem, name, extra, styles) {
+ var num, val, hooks,
+ origName = jQuery.camelCase(name);
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(elem.style, origName) );
+
+ // gets hook for the prefixed version
+ // followed by the unprefixed version
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // If a hook was provided get the computed value from there
+ if (hooks && "get" in hooks) {
+ val = hooks.get(elem, true, extra);
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if (val === undefined) {
+ val = curCSS(elem, name, styles);
+ }
+
+ //convert "normal" to computed value
+ if (val === "normal" && name in cssNormalTransform) {
+ val = cssNormalTransform[name];
+ }
+
+ // Return, converting to number if forced or a qualifier was provided and val looks numeric
+ if (extra === "" || extra) {
+ num = parseFloat(val);
+ return extra === true || jQuery.isNumeric(num) ? num || 0 : val;
+ }
+ return val;
+ }
+ });
+
+ jQuery.each(["height", "width"], function (i, name) {
+ jQuery.cssHooks[name] = {
+ get: function (elem, computed, extra) {
+ if (computed) {
+ // certain elements can have dimension info if we invisibly show them
+ // however, it must have a current display style that would benefit from this
+ return rdisplayswap.test(jQuery.css(elem, "display")) && elem.offsetWidth === 0 ?
+ jQuery.swap(elem, cssShow, function () {
+ return getWidthOrHeight(elem, name, extra);
+ }) :
+ getWidthOrHeight(elem, name, extra);
+ }
+ },
+
+ set: function (elem, value, extra) {
+ var styles = extra && getStyles(elem);
+ return setPositiveNumber(elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ support.boxSizing && jQuery.css(elem, "boxSizing", false, styles) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+ });
+
+ if (!support.opacity) {
+ jQuery.cssHooks.opacity = {
+ get: function (elem, computed) {
+ // IE uses filters for opacity
+ return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
+ ( 0.01 * parseFloat(RegExp.$1) ) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function (elem, value) {
+ var style = elem.style,
+ currentStyle = elem.currentStyle,
+ opacity = jQuery.isNumeric(value) ? "alpha(opacity=" + value * 100 + ")" : "",
+ filter = currentStyle && currentStyle.filter || style.filter || "";
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+ // if value === "", then remove inline opacity #12685
+ if (( value >= 1 || value === "" ) &&
+ jQuery.trim(filter.replace(ralpha, "")) === "" &&
+ style.removeAttribute) {
+
+ // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+ // if "filter:" is present at all, clearType is disabled, we want to avoid this
+ // style.removeAttribute is IE Only, but so apparently is this code path...
+ style.removeAttribute("filter");
+
+ // if there is no filter style applied in a css rule or unset inline opacity, we are done
+ if (value === "" || currentStyle && !currentStyle.filter) {
+ return;
+ }
+ }
+
+ // otherwise, set new filter values
+ style.filter = ralpha.test(filter) ?
+ filter.replace(ralpha, opacity) :
+ filter + " " + opacity;
+ }
+ };
+ }
+
+ jQuery.cssHooks.marginRight = addGetHookIf(support.reliableMarginRight,
+ function (elem, computed) {
+ if (computed) {
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // Work around by temporarily setting element display to inline-block
+ return jQuery.swap(elem, {"display": "inline-block"},
+ curCSS, [elem, "marginRight"]);
+ }
+ }
+ );
+
+// These hooks are used by animate to expand properties
+ jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function (prefix, suffix) {
+ jQuery.cssHooks[prefix + suffix] = {
+ expand: function (value) {
+ var i = 0,
+ expanded = {},
+
+ // assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [value];
+
+ for (; i < 4; i++) {
+ expanded[prefix + cssExpand[i] + suffix] =
+ parts[i] || parts[i - 2] || parts[0];
+ }
+
+ return expanded;
+ }
+ };
+
+ if (!rmargin.test(prefix)) {
+ jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
+ }
+ });
+
+ jQuery.fn.extend({
+ css: function (name, value) {
+ return access(this, function (elem, name, value) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if (jQuery.isArray(name)) {
+ styles = getStyles(elem);
+ len = name.length;
+
+ for (; i < len; i++) {
+ map[name[i]] = jQuery.css(elem, name[i], false, styles);
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style(elem, name, value) :
+ jQuery.css(elem, name);
+ }, name, value, arguments.length > 1);
+ },
+ show: function () {
+ return showHide(this, true);
+ },
+ hide: function () {
+ return showHide(this);
+ },
+ toggle: function (state) {
+ if (typeof state === "boolean") {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function () {
+ if (isHidden(this)) {
+ jQuery(this).show();
+ } else {
+ jQuery(this).hide();
+ }
+ });
+ }
+ });
+
+
+ function Tween(elem, options, prop, end, easing) {
+ return new Tween.prototype.init(elem, options, prop, end, easing);
+ }
+
+ jQuery.Tween = Tween;
+
+ Tween.prototype = {
+ constructor: Tween,
+ init: function (elem, options, prop, end, easing, unit) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[prop] ? "" : "px" );
+ },
+ cur: function () {
+ var hooks = Tween.propHooks[this.prop];
+
+ return hooks && hooks.get ?
+ hooks.get(this) :
+ Tween.propHooks._default.get(this);
+ },
+ run: function (percent) {
+ var eased,
+ hooks = Tween.propHooks[this.prop];
+
+ if (this.options.duration) {
+ this.pos = eased = jQuery.easing[this.easing](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if (this.options.step) {
+ this.options.step.call(this.elem, this.now, this);
+ }
+
+ if (hooks && hooks.set) {
+ hooks.set(this);
+ } else {
+ Tween.propHooks._default.set(this);
+ }
+ return this;
+ }
+ };
+
+ Tween.prototype.init.prototype = Tween.prototype;
+
+ Tween.propHooks = {
+ _default: {
+ get: function (tween) {
+ var result;
+
+ if (tween.elem[tween.prop] != null &&
+ (!tween.elem.style || tween.elem.style[tween.prop] == null)) {
+ return tween.elem[tween.prop];
+ }
+
+ // passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails
+ // so, simple values such as "10px" are parsed to Float.
+ // complex values such as "rotate(1rad)" are returned as is.
+ result = jQuery.css(tween.elem, tween.prop, "");
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function (tween) {
+ // use step hook for back compat - use cssHook if its there - use .style if its
+ // available and use plain properties where available
+ if (jQuery.fx.step[tween.prop]) {
+ jQuery.fx.step[tween.prop](tween);
+ } else if (tween.elem.style && ( tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop] )) {
+ jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
+ } else {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ }
+ };
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+ Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function (tween) {
+ if (tween.elem.nodeType && tween.elem.parentNode) {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ };
+
+ jQuery.easing = {
+ linear: function (p) {
+ return p;
+ },
+ swing: function (p) {
+ return 0.5 - Math.cos(p * Math.PI) / 2;
+ }
+ };
+
+ jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+ jQuery.fx.step = {};
+
+
+ var
+ fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i"),
+ rrun = /queueHooks$/,
+ animationPrefilters = [defaultPrefilter],
+ tweeners = {
+ "*": [function (prop, value) {
+ var tween = this.createTween(prop, value),
+ target = tween.cur(),
+ parts = rfxnum.exec(value),
+ unit = parts && parts[3] || ( jQuery.cssNumber[prop] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[prop] || unit !== "px" && +target ) &&
+ rfxnum.exec(jQuery.css(tween.elem, prop)),
+ scale = 1,
+ maxIterations = 20;
+
+ if (start && start[3] !== unit) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[3];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*
+ // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style(tween.elem, prop, start + unit);
+
+ // Update scale, tolerating zero or NaN from tween.cur()
+ // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+ } while (scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations);
+ }
+
+ // Update tween properties
+ if (parts) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[1] ?
+ start + ( parts[1] + 1 ) * parts[2] :
+ +parts[2];
+ }
+
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+ function createFxNow() {
+ setTimeout(function () {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+ }
+
+// Generate parameters to create a standard animation
+ function genFx(type, includeWidth) {
+ var which,
+ attrs = {height: type},
+ i = 0;
+
+ // if we include width, step value is 1 to do all cssExpand values,
+ // if we don't include width, step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for (; i < 4; i += 2 - includeWidth) {
+ which = cssExpand[i];
+ attrs["margin" + which] = attrs["padding" + which] = type;
+ }
+
+ if (includeWidth) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+ }
+
+ function createTween(value, prop, animation) {
+ var tween,
+ collection = ( tweeners[prop] || [] ).concat(tweeners["*"]),
+ index = 0,
+ length = collection.length;
+ for (; index < length; index++) {
+ if ((tween = collection[index].call(animation, prop, value))) {
+
+ // we're done with this property
+ return tween;
+ }
+ }
+ }
+
+ function defaultPrefilter(elem, props, opts) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden(elem),
+ dataShow = jQuery._data(elem, "fxshow");
+
+ // handle queue: false promises
+ if (!opts.queue) {
+ hooks = jQuery._queueHooks(elem, "fx");
+ if (hooks.unqueued == null) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function () {
+ if (!hooks.unqueued) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function () {
+ // doing this makes sure that the complete handler will be called
+ // before this completes
+ anim.always(function () {
+ hooks.unqueued--;
+ if (!jQuery.queue(elem, "fx").length) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // height/width overflow pass
+ if (elem.nodeType === 1 && ( "height" in props || "width" in props )) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [style.overflow, style.overflowX, style.overflowY];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ display = jQuery.css(elem, "display");
+
+ // Test default display if display is currently "none"
+ checkDisplay = display === "none" ?
+ jQuery._data(elem, "olddisplay") || defaultDisplay(elem.nodeName) : display;
+
+ if (checkDisplay === "inline" && jQuery.css(elem, "float") === "none") {
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if (!support.inlineBlockNeedsLayout || defaultDisplay(elem.nodeName) === "inline") {
+ style.display = "inline-block";
+ } else {
+ style.zoom = 1;
+ }
+ }
+ }
+
+ if (opts.overflow) {
+ style.overflow = "hidden";
+ if (!support.shrinkWrapBlocks()) {
+ anim.always(function () {
+ style.overflow = opts.overflow[0];
+ style.overflowX = opts.overflow[1];
+ style.overflowY = opts.overflow[2];
+ });
+ }
+ }
+
+ // show/hide pass
+ for (prop in props) {
+ value = props[prop];
+ if (rfxtypes.exec(value)) {
+ delete props[prop];
+ toggle = toggle || value === "toggle";
+ if (value === ( hidden ? "hide" : "show" )) {
+
+ // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+ if (value === "show" && dataShow && dataShow[prop] !== undefined) {
+ hidden = true;
+ } else {
+ continue;
+ }
+ }
+ orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
+
+ // Any non-fx value stops us from restoring the original display value
+ } else {
+ display = undefined;
+ }
+ }
+
+ if (!jQuery.isEmptyObject(orig)) {
+ if (dataShow) {
+ if ("hidden" in dataShow) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = jQuery._data(elem, "fxshow", {});
+ }
+
+ // store state if its toggle - enables .stop().toggle() to "reverse"
+ if (toggle) {
+ dataShow.hidden = !hidden;
+ }
+ if (hidden) {
+ jQuery(elem).show();
+ } else {
+ anim.done(function () {
+ jQuery(elem).hide();
+ });
+ }
+ anim.done(function () {
+ var prop;
+ jQuery._removeData(elem, "fxshow");
+ for (prop in orig) {
+ jQuery.style(elem, prop, orig[prop]);
+ }
+ });
+ for (prop in orig) {
+ tween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
+
+ if (!( prop in dataShow )) {
+ dataShow[prop] = tween.start;
+ if (hidden) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+
+ // If this is a noop like .hide().hide(), restore an overwritten display value
+ } else if ((display === "none" ? defaultDisplay(elem.nodeName) : display) === "inline") {
+ style.display = display;
+ }
+ }
+
+ function propFilter(props, specialEasing) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for (index in props) {
+ name = jQuery.camelCase(index);
+ easing = specialEasing[name];
+ value = props[index];
+ if (jQuery.isArray(value)) {
+ easing = value[1];
+ value = props[index] = value[0];
+ }
+
+ if (index !== name) {
+ props[name] = value;
+ delete props[index];
+ }
+
+ hooks = jQuery.cssHooks[name];
+ if (hooks && "expand" in hooks) {
+ value = hooks.expand(value);
+ delete props[name];
+
+ // not quite $.extend, this wont overwrite keys already present.
+ // also - reusing 'index' from above because we have the correct "name"
+ for (index in value) {
+ if (!( index in props )) {
+ props[index] = value[index];
+ specialEasing[index] = easing;
+ }
+ }
+ } else {
+ specialEasing[name] = easing;
+ }
+ }
+ }
+
+ function Animation(elem, properties, options) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always(function () {
+ // don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function () {
+ if (stopped) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
+ // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for (; index < length; index++) {
+ animation.tweens[index].run(percent);
+ }
+
+ deferred.notifyWith(elem, [animation, percent, remaining]);
+
+ if (percent < 1 && length) {
+ return remaining;
+ } else {
+ deferred.resolveWith(elem, [animation]);
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend({}, properties),
+ opts: jQuery.extend(true, {specialEasing: {}}, options),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function (prop, end) {
+ var tween = jQuery.Tween(elem, animation.opts, prop, end,
+ animation.opts.specialEasing[prop] || animation.opts.easing);
+ animation.tweens.push(tween);
+ return tween;
+ },
+ stop: function (gotoEnd) {
+ var index = 0,
+ // if we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if (stopped) {
+ return this;
+ }
+ stopped = true;
+ for (; index < length; index++) {
+ animation.tweens[index].run(1);
+ }
+
+ // resolve when we played the last frame
+ // otherwise, reject
+ if (gotoEnd) {
+ deferred.resolveWith(elem, [animation, gotoEnd]);
+ } else {
+ deferred.rejectWith(elem, [animation, gotoEnd]);
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter(props, animation.opts.specialEasing);
+
+ for (; index < length; index++) {
+ result = animationPrefilters[index].call(animation, elem, props, animation.opts);
+ if (result) {
+ return result;
+ }
+ }
+
+ jQuery.map(props, createTween, animation);
+
+ if (jQuery.isFunction(animation.opts.start)) {
+ animation.opts.start.call(elem, animation);
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend(tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress(animation.opts.progress)
+ .done(animation.opts.done, animation.opts.complete)
+ .fail(animation.opts.fail)
+ .always(animation.opts.always);
+ }
+
+ jQuery.Animation = jQuery.extend(Animation, {
+ tweener: function (props, callback) {
+ if (jQuery.isFunction(props)) {
+ callback = props;
+ props = ["*"];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for (; index < length; index++) {
+ prop = props[index];
+ tweeners[prop] = tweeners[prop] || [];
+ tweeners[prop].unshift(callback);
+ }
+ },
+
+ prefilter: function (callback, prepend) {
+ if (prepend) {
+ animationPrefilters.unshift(callback);
+ } else {
+ animationPrefilters.push(callback);
+ }
+ }
+ });
+
+ jQuery.speed = function (speed, easing, fn) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction(speed) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // normalize opt.queue - true/undefined/null -> "fx"
+ if (opt.queue == null || opt.queue === true) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function () {
+ if (jQuery.isFunction(opt.old)) {
+ opt.old.call(this);
+ }
+
+ if (opt.queue) {
+ jQuery.dequeue(this, opt.queue);
+ }
+ };
+
+ return opt;
+ };
+
+ jQuery.fn.extend({
+ fadeTo: function (speed, to, easing, callback) {
+
+ // show any hidden elements after setting opacity to 0
+ return this.filter(isHidden).css("opacity", 0).show()
+
+ // animate to the value specified
+ .end().animate({opacity: to}, speed, easing, callback);
+ },
+ animate: function (prop, speed, easing, callback) {
+ var empty = jQuery.isEmptyObject(prop),
+ optall = jQuery.speed(speed, easing, callback),
+ doAnimation = function () {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation(this, jQuery.extend({}, prop), optall);
+
+ // Empty animations, or finishing resolves immediately
+ if (empty || jQuery._data(this, "finish")) {
+ anim.stop(true);
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each(doAnimation) :
+ this.queue(optall.queue, doAnimation);
+ },
+ stop: function (type, clearQueue, gotoEnd) {
+ var stopQueue = function (hooks) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop(gotoEnd);
+ };
+
+ if (typeof type !== "string") {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if (clearQueue && type !== false) {
+ this.queue(type || "fx", []);
+ }
+
+ return this.each(function () {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = jQuery._data(this);
+
+ if (index) {
+ if (data[index] && data[index].stop) {
+ stopQueue(data[index]);
+ }
+ } else {
+ for (index in data) {
+ if (data[index] && data[index].stop && rrun.test(index)) {
+ stopQueue(data[index]);
+ }
+ }
+ }
+
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
+ timers[index].anim.stop(gotoEnd);
+ dequeue = false;
+ timers.splice(index, 1);
+ }
+ }
+
+ // start the next in the queue if the last step wasn't forced
+ // timers currently will call their complete callbacks, which will dequeue
+ // but only if they were gotoEnd
+ if (dequeue || !gotoEnd) {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ finish: function (type) {
+ if (type !== false) {
+ type = type || "fx";
+ }
+ return this.each(function () {
+ var index,
+ data = jQuery._data(this),
+ queue = data[type + "queue"],
+ hooks = data[type + "queueHooks"],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // enable finishing flag on private data
+ data.finish = true;
+
+ // empty the queue first
+ jQuery.queue(this, type, []);
+
+ if (hooks && hooks.stop) {
+ hooks.stop.call(this, true);
+ }
+
+ // look for any active animations, and finish them
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && timers[index].queue === type) {
+ timers[index].anim.stop(true);
+ timers.splice(index, 1);
+ }
+ }
+
+ // look for any animations in the old queue and finish them
+ for (index = 0; index < length; index++) {
+ if (queue[index] && queue[index].finish) {
+ queue[index].finish.call(this);
+ }
+ }
+
+ // turn off finishing flag
+ delete data.finish;
+ });
+ }
+ });
+
+ jQuery.each(["toggle", "show", "hide"], function (i, name) {
+ var cssFn = jQuery.fn[name];
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply(this, arguments) :
+ this.animate(genFx(name, true), speed, easing, callback);
+ };
+ });
+
+// Generate shortcuts for custom animations
+ jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (name, props) {
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return this.animate(props, speed, easing, callback);
+ };
+ });
+
+ jQuery.timers = [];
+ jQuery.fx.tick = function () {
+ var timer,
+ timers = jQuery.timers,
+ i = 0;
+
+ fxNow = jQuery.now();
+
+ for (; i < timers.length; i++) {
+ timer = timers[i];
+ // Checks the timer has not already been removed
+ if (!timer() && timers[i] === timer) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if (!timers.length) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+ };
+
+ jQuery.fx.timer = function (timer) {
+ jQuery.timers.push(timer);
+ if (timer()) {
+ jQuery.fx.start();
+ } else {
+ jQuery.timers.pop();
+ }
+ };
+
+ jQuery.fx.interval = 13;
+
+ jQuery.fx.start = function () {
+ if (!timerId) {
+ timerId = setInterval(jQuery.fx.tick, jQuery.fx.interval);
+ }
+ };
+
+ jQuery.fx.stop = function () {
+ clearInterval(timerId);
+ timerId = null;
+ };
+
+ jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ };
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+ jQuery.fn.delay = function (time, type) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue(type, function (next, hooks) {
+ var timeout = setTimeout(next, time);
+ hooks.stop = function () {
+ clearTimeout(timeout);
+ };
+ });
+ };
+
+
+ (function () {
+ // Minified: var a,b,c,d,e
+ var input, div, select, a, opt;
+
+ // Setup
+ div = document.createElement("div");
+ div.setAttribute("className", "t");
+ div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+ a = div.getElementsByTagName("a")[0];
+
+ // First batch of tests.
+ select = document.createElement("select");
+ opt = select.appendChild(document.createElement("option"));
+ input = div.getElementsByTagName("input")[0];
+
+ a.style.cssText = "top:1px";
+
+ // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+ support.getSetAttribute = div.className !== "t";
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText instead)
+ support.style = /top/.test(a.getAttribute("style"));
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ support.hrefNormalized = a.getAttribute("href") === "/a";
+
+ // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+ support.checkOn = !!input.value;
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ support.optSelected = opt.selected;
+
+ // Tests for enctype support on a form (#6743)
+ support.enctype = !!document.createElement("form").enctype;
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as disabled)
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE8 only
+ // Check if we can trust getAttribute("value")
+ input = document.createElement("input");
+ input.setAttribute("value", "");
+ support.input = input.getAttribute("value") === "";
+
+ // Check if an input maintains its value after becoming a radio
+ input.value = "t";
+ input.setAttribute("type", "radio");
+ support.radioValue = input.value === "t";
+ })();
+
+
+ var rreturn = /\r/g;
+
+ jQuery.fn.extend({
+ val: function (value) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if (!arguments.length) {
+ if (elem) {
+ hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
+
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // handle most common string cases
+ ret.replace(rreturn, "") :
+ // handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction(value);
+
+ return this.each(function (i) {
+ var val;
+
+ if (this.nodeType !== 1) {
+ return;
+ }
+
+ if (isFunction) {
+ val = value.call(this, i, jQuery(this).val());
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if (val == null) {
+ val = "";
+ } else if (typeof val === "number") {
+ val += "";
+ } else if (jQuery.isArray(val)) {
+ val = jQuery.map(val, function (value) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
+
+ // If set returns undefined, fall back to normal setting
+ if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
+ this.value = val;
+ }
+ });
+ }
+ });
+
+ jQuery.extend({
+ valHooks: {
+ option: {
+ get: function (elem) {
+ var val = jQuery.find.attr(elem, "value");
+ return val != null ?
+ val :
+ // Support: IE10-11+
+ // option.text throws exceptions (#14686, #14858)
+ jQuery.trim(jQuery.text(elem));
+ }
+ },
+ select: {
+ get: function (elem) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for (; i < max; i++) {
+ option = options[i];
+
+ // oldIE doesn't update selected after form reset (#2551)
+ if (( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName(option.parentNode, "optgroup") )) {
+
+ // Get the specific value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if (one) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push(value);
+ }
+ }
+
+ return values;
+ },
+
+ set: function (elem, value) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray(value),
+ i = options.length;
+
+ while (i--) {
+ option = options[i];
+
+ if (jQuery.inArray(jQuery.valHooks.option.get(option), values) >= 0) {
+
+ // Support: IE6
+ // When new option element is added to select box we need to
+ // force reflow of newly added node in order to workaround delay
+ // of initialization properties
+ try {
+ option.selected = optionSet = true;
+
+ } catch (_) {
+
+ // Will be executed only in IE6
+ option.scrollHeight;
+ }
+
+ } else {
+ option.selected = false;
+ }
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if (!optionSet) {
+ elem.selectedIndex = -1;
+ }
+
+ return options;
+ }
+ }
+ }
+ });
+
+// Radios and checkboxes getter/setter
+ jQuery.each(["radio", "checkbox"], function () {
+ jQuery.valHooks[this] = {
+ set: function (elem, value) {
+ if (jQuery.isArray(value)) {
+ return ( elem.checked = jQuery.inArray(jQuery(elem).val(), value) >= 0 );
+ }
+ }
+ };
+ if (!support.checkOn) {
+ jQuery.valHooks[this].get = function (elem) {
+ // Support: Webkit
+ // "" is returned instead of "on" if a value isn't specified
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+ });
+
+
+ var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle,
+ ruseDefault = /^(?:checked|selected)$/i,
+ getSetAttribute = support.getSetAttribute,
+ getSetInput = support.input;
+
+ jQuery.fn.extend({
+ attr: function (name, value) {
+ return access(this, jQuery.attr, name, value, arguments.length > 1);
+ },
+
+ removeAttr: function (name) {
+ return this.each(function () {
+ jQuery.removeAttr(this, name);
+ });
+ }
+ });
+
+ jQuery.extend({
+ attr: function (elem, name, value) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if (typeof elem.getAttribute === strundefined) {
+ return jQuery.prop(elem, name, value);
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[name] ||
+ ( jQuery.expr.match.bool.test(name) ? boolHook : nodeHook );
+ }
+
+ if (value !== undefined) {
+
+ if (value === null) {
+ jQuery.removeAttr(elem, name);
+
+ } else if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
+ return ret;
+
+ } else {
+ elem.setAttribute(name, value + "");
+ return value;
+ }
+
+ } else if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr(elem, name);
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function (elem, value) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match(rnotwhite);
+
+ if (attrNames && elem.nodeType === 1) {
+ while ((name = attrNames[i++])) {
+ propName = jQuery.propFix[name] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if (jQuery.expr.match.bool.test(name)) {
+ // Set corresponding property to false
+ if (getSetInput && getSetAttribute || !ruseDefault.test(name)) {
+ elem[propName] = false;
+ // Support: IE<9
+ // Also clear defaultChecked/defaultSelected (if appropriate)
+ } else {
+ elem[jQuery.camelCase("default-" + name)] =
+ elem[propName] = false;
+ }
+
+ // See #9699 for explanation of this approach (setting first, then removal)
+ } else {
+ jQuery.attr(elem, name, "");
+ }
+
+ elem.removeAttribute(getSetAttribute ? name : propName);
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function (elem, value) {
+ if (!support.radioValue && value === "radio" && jQuery.nodeName(elem, "input")) {
+ // Setting the type on a radio button after the value resets the value in IE6-9
+ // Reset value to default in case type is set after value during creation
+ var val = elem.value;
+ elem.setAttribute("type", value);
+ if (val) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ }
+ });
+
+// Hook for boolean attributes
+ boolHook = {
+ set: function (elem, value, name) {
+ if (value === false) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr(elem, name);
+ } else if (getSetInput && getSetAttribute || !ruseDefault.test(name)) {
+ // IE<8 needs the *property* name
+ elem.setAttribute(!getSetAttribute && jQuery.propFix[name] || name, name);
+
+ // Use defaultChecked and defaultSelected for oldIE
+ } else {
+ elem[jQuery.camelCase("default-" + name)] = elem[name] = true;
+ }
+
+ return name;
+ }
+ };
+
+// Retrieve booleans specially
+ jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) {
+
+ var getter = attrHandle[name] || jQuery.find.attr;
+
+ attrHandle[name] = getSetInput && getSetAttribute || !ruseDefault.test(name) ?
+ function (elem, name, isXML) {
+ var ret, handle;
+ if (!isXML) {
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[name];
+ attrHandle[name] = ret;
+ ret = getter(elem, name, isXML) != null ?
+ name.toLowerCase() :
+ null;
+ attrHandle[name] = handle;
+ }
+ return ret;
+ } :
+ function (elem, name, isXML) {
+ if (!isXML) {
+ return elem[jQuery.camelCase("default-" + name)] ?
+ name.toLowerCase() :
+ null;
+ }
+ };
+ });
+
+// fix oldIE attroperties
+ if (!getSetInput || !getSetAttribute) {
+ jQuery.attrHooks.value = {
+ set: function (elem, value, name) {
+ if (jQuery.nodeName(elem, "input")) {
+ // Does not return so that setAttribute is also used
+ elem.defaultValue = value;
+ } else {
+ // Use nodeHook if defined (#1954); otherwise setAttribute is fine
+ return nodeHook && nodeHook.set(elem, value, name);
+ }
+ }
+ };
+ }
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+ if (!getSetAttribute) {
+
+ // Use this for any attribute in IE6/7
+ // This fixes almost every IE6/7 issue
+ nodeHook = {
+ set: function (elem, value, name) {
+ // Set the existing or create a new attribute node
+ var ret = elem.getAttributeNode(name);
+ if (!ret) {
+ elem.setAttributeNode(
+ (ret = elem.ownerDocument.createAttribute(name))
+ );
+ }
+
+ ret.value = value += "";
+
+ // Break association with cloned elements by also using setAttribute (#9646)
+ if (name === "value" || value === elem.getAttribute(name)) {
+ return value;
+ }
+ }
+ };
+
+ // Some attributes are constructed with empty-string values when not defined
+ attrHandle.id = attrHandle.name = attrHandle.coords =
+ function (elem, name, isXML) {
+ var ret;
+ if (!isXML) {
+ return (ret = elem.getAttributeNode(name)) && ret.value !== "" ?
+ ret.value :
+ null;
+ }
+ };
+
+ // Fixing value retrieval on a button requires this module
+ jQuery.valHooks.button = {
+ get: function (elem, name) {
+ var ret = elem.getAttributeNode(name);
+ if (ret && ret.specified) {
+ return ret.value;
+ }
+ },
+ set: nodeHook.set
+ };
+
+ // Set contenteditable to false on removals(#10429)
+ // Setting to empty string throws an error as an invalid value
+ jQuery.attrHooks.contenteditable = {
+ set: function (elem, value, name) {
+ nodeHook.set(elem, value === "" ? false : value, name);
+ }
+ };
+
+ // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+ // This is for removals
+ jQuery.each(["width", "height"], function (i, name) {
+ jQuery.attrHooks[name] = {
+ set: function (elem, value) {
+ if (value === "") {
+ elem.setAttribute(name, "auto");
+ return value;
+ }
+ }
+ };
+ });
+ }
+
+ if (!support.style) {
+ jQuery.attrHooks.style = {
+ get: function (elem) {
+ // Return undefined in the case of empty string
+ // Note: IE uppercases css property names, but if we were to .toLowerCase()
+ // .cssText, that would destroy case senstitivity in URL's, like in "background"
+ return elem.style.cssText || undefined;
+ },
+ set: function (elem, value) {
+ return ( elem.style.cssText = value + "" );
+ }
+ };
+ }
+
+
+ var rfocusable = /^(?:input|select|textarea|button|object)$/i,
+ rclickable = /^(?:a|area)$/i;
+
+ jQuery.fn.extend({
+ prop: function (name, value) {
+ return access(this, jQuery.prop, name, value, arguments.length > 1);
+ },
+
+ removeProp: function (name) {
+ name = jQuery.propFix[name] || name;
+ return this.each(function () {
+ // try/catch handles cases where IE balks (such as removing a property on window)
+ try {
+ this[name] = undefined;
+ delete this[name];
+ } catch (e) {
+ }
+ });
+ }
+ });
+
+ jQuery.extend({
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function (elem, name, value) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // don't get/set properties on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc(elem);
+
+ if (notxml) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[name] || name;
+ hooks = jQuery.propHooks[name];
+ }
+
+ if (value !== undefined) {
+ return hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined ?
+ ret :
+ ( elem[name] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null ?
+ ret :
+ elem[name];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function (elem) {
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ // Use proper attribute retrieval(#12072)
+ var tabindex = jQuery.find.attr(elem, "tabindex");
+
+ return tabindex ?
+ parseInt(tabindex, 10) :
+ rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ?
+ 0 :
+ -1;
+ }
+ }
+ }
+ });
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+ if (!support.hrefNormalized) {
+ // href/src property should get the full normalized URL (#10299/#12915)
+ jQuery.each(["href", "src"], function (i, name) {
+ jQuery.propHooks[name] = {
+ get: function (elem) {
+ return elem.getAttribute(name, 4);
+ }
+ };
+ });
+ }
+
+// Support: Safari, IE9+
+// mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+ if (!support.optSelected) {
+ jQuery.propHooks.selected = {
+ get: function (elem) {
+ var parent = elem.parentNode;
+
+ if (parent) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if (parent.parentNode) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ return null;
+ }
+ };
+ }
+
+ jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+ ], function () {
+ jQuery.propFix[this.toLowerCase()] = this;
+ });
+
+// IE6/7 call enctype encoding
+ if (!support.enctype) {
+ jQuery.propFix.enctype = "encoding";
+ }
+
+
+ var rclass = /[\t\r\n\f]/g;
+
+ jQuery.fn.extend({
+ addClass: function (value) {
+ var classes, elem, cur, clazz, j, finalValue,
+ i = 0,
+ len = this.length,
+ proceed = typeof value === "string" && value;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).addClass(value.call(this, j, this.className));
+ });
+ }
+
+ if (proceed) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match(rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ " "
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ if (cur.indexOf(" " + clazz + " ") < 0) {
+ cur += clazz + " ";
+ }
+ }
+
+ // only assign if different to avoid unneeded rendering.
+ finalValue = jQuery.trim(cur);
+ if (elem.className !== finalValue) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function (value) {
+ var classes, elem, cur, clazz, j, finalValue,
+ i = 0,
+ len = this.length,
+ proceed = arguments.length === 0 || typeof value === "string" && value;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).removeClass(value.call(this, j, this.className));
+ });
+ }
+ if (proceed) {
+ classes = ( value || "" ).match(rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ ""
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ // Remove *all* instances
+ while (cur.indexOf(" " + clazz + " ") >= 0) {
+ cur = cur.replace(" " + clazz + " ", " ");
+ }
+ }
+
+ // only assign if different to avoid unneeded rendering.
+ finalValue = value ? jQuery.trim(cur) : "";
+ if (elem.className !== finalValue) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function (value, stateVal) {
+ var type = typeof value;
+
+ if (typeof stateVal === "boolean" && type === "string") {
+ return stateVal ? this.addClass(value) : this.removeClass(value);
+ }
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (i) {
+ jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal);
+ });
+ }
+
+ return this.each(function () {
+ if (type === "string") {
+ // toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery(this),
+ classNames = value.match(rnotwhite) || [];
+
+ while ((className = classNames[i++])) {
+ // check each className given, space separated list
+ if (self.hasClass(className)) {
+ self.removeClass(className);
+ } else {
+ self.addClass(className);
+ }
+ }
+
+ // Toggle whole class name
+ } else if (type === strundefined || type === "boolean") {
+ if (this.className) {
+ // store className if set
+ jQuery._data(this, "__className__", this.className);
+ }
+
+ // If the element has a class name or if we're passed "false",
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || "";
+ }
+ });
+ },
+
+ hasClass: function (selector) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for (; i < l; i++) {
+ if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) >= 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ });
+
+
+// Return jQuery for attributes-only inclusion
+
+
+ jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) {
+
+ // Handle event binding
+ jQuery.fn[name] = function (data, fn) {
+ return arguments.length > 0 ?
+ this.on(name, null, data, fn) :
+ this.trigger(name);
+ };
+ });
+
+ jQuery.fn.extend({
+ hover: function (fnOver, fnOut) {
+ return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
+ },
+
+ bind: function (types, data, fn) {
+ return this.on(types, null, data, fn);
+ },
+ unbind: function (types, fn) {
+ return this.off(types, null, fn);
+ },
+
+ delegate: function (selector, types, data, fn) {
+ return this.on(types, selector, data, fn);
+ },
+ undelegate: function (selector, types, fn) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
+ }
+ });
+
+
+ var nonce = jQuery.now();
+
+ var rquery = (/\?/);
+
+
+ var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+
+ jQuery.parseJSON = function (data) {
+ // Attempt to parse using the native JSON parser first
+ if (window.JSON && window.JSON.parse) {
+ // Support: Android 2.3
+ // Workaround failure to string-cast null input
+ return window.JSON.parse(data + "");
+ }
+
+ var requireNonComma,
+ depth = null,
+ str = jQuery.trim(data + "");
+
+ // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
+ // after removing valid tokens
+ return str && !jQuery.trim(str.replace(rvalidtokens, function (token, comma, open, close) {
+
+ // Force termination if we see a misplaced comma
+ if (requireNonComma && comma) {
+ depth = 0;
+ }
+
+ // Perform no more replacements after returning to outermost depth
+ if (depth === 0) {
+ return token;
+ }
+
+ // Commas must not follow "[", "{", or ","
+ requireNonComma = open || comma;
+
+ // Determine new depth
+ // array/object open ("[" or "{"): depth += true - false (increment)
+ // array/object close ("]" or "}"): depth += false - true (decrement)
+ // other cases ("," or primitive): depth += true - true (numeric cast)
+ depth += !close - !open;
+
+ // Remove this token
+ return "";
+ })) ?
+ ( Function("return " + str) )() :
+ jQuery.error("Invalid JSON: " + data);
+ };
+
+
+// Cross-browser xml parsing
+ jQuery.parseXML = function (data) {
+ var xml, tmp;
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ try {
+ if (window.DOMParser) { // Standard
+ tmp = new DOMParser();
+ xml = tmp.parseFromString(data, "text/xml");
+ } else { // IE
+ xml = new ActiveXObject("Microsoft.XMLDOM");
+ xml.async = "false";
+ xml.loadXML(data);
+ }
+ } catch (e) {
+ xml = undefined;
+ }
+ if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) {
+ jQuery.error("Invalid XML: " + data);
+ }
+ return xml;
+ };
+
+
+ var
+ // Document location
+ ajaxLocParts,
+ ajaxLocation,
+
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+ try {
+ ajaxLocation = location.href;
+ } catch (e) {
+ // Use the href attribute of an A element
+ // since IE will modify it given document.location
+ ajaxLocation = document.createElement("a");
+ ajaxLocation.href = "";
+ ajaxLocation = ajaxLocation.href;
+ }
+
+// Segment location into parts
+ ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+ function addToPrefiltersOrTransports(structure) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function (dataTypeExpression, func) {
+
+ if (typeof dataTypeExpression !== "string") {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match(rnotwhite) || [];
+
+ if (jQuery.isFunction(func)) {
+ // For each dataType in the dataTypeExpression
+ while ((dataType = dataTypes[i++])) {
+ // Prepend if requested
+ if (dataType.charAt(0) === "+") {
+ dataType = dataType.slice(1) || "*";
+ (structure[dataType] = structure[dataType] || []).unshift(func);
+
+ // Otherwise append
+ } else {
+ (structure[dataType] = structure[dataType] || []).push(func);
+ }
+ }
+ }
+ };
+ }
+
+// Base inspection function for prefilters and transports
+ function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect(dataType) {
+ var selected;
+ inspected[dataType] = true;
+ jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
+ var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
+ if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
+ options.dataTypes.unshift(dataTypeOrTransport);
+ inspect(dataTypeOrTransport);
+ return false;
+ } else if (seekingTransport) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
+ }
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+ function ajaxExtend(target, src) {
+ var deep, key,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for (key in src) {
+ if (src[key] !== undefined) {
+ ( flatOptions[key] ? target : ( deep || (deep = {}) ) )[key] = src[key];
+ }
+ }
+ if (deep) {
+ jQuery.extend(true, target, deep);
+ }
+
+ return target;
+ }
+
+ /* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+ function ajaxHandleResponses(s, jqXHR, responses) {
+ var firstDataType, ct, finalDataType, type,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while (dataTypes[0] === "*") {
+ dataTypes.shift();
+ if (ct === undefined) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if (ct) {
+ for (type in contents) {
+ if (contents[type] && contents[type].test(ct)) {
+ dataTypes.unshift(type);
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if (dataTypes[0] in responses) {
+ finalDataType = dataTypes[0];
+ } else {
+ // Try convertible dataTypes
+ for (type in responses) {
+ if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
+ finalDataType = type;
+ break;
+ }
+ if (!firstDataType) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if (finalDataType) {
+ if (finalDataType !== dataTypes[0]) {
+ dataTypes.unshift(finalDataType);
+ }
+ return responses[finalDataType];
+ }
+ }
+
+ /* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+ function ajaxConvert(s, response, jqXHR, isSuccess) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if (dataTypes[1]) {
+ for (conv in s.converters) {
+ converters[conv.toLowerCase()] = s.converters[conv];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while (current) {
+
+ if (s.responseFields[current]) {
+ jqXHR[s.responseFields[current]] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if (!prev && isSuccess && s.dataFilter) {
+ response = s.dataFilter(response, s.dataType);
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if (current) {
+
+ // There's only work to do if current dataType is non-auto
+ if (current === "*") {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if (prev !== "*" && prev !== current) {
+
+ // Seek a direct converter
+ conv = converters[prev + " " + current] || converters["* " + current];
+
+ // If none found, seek a pair
+ if (!conv) {
+ for (conv2 in converters) {
+
+ // If conv2 outputs current
+ tmp = conv2.split(" ");
+ if (tmp[1] === current) {
+
+ // If prev can be converted to accepted input
+ conv = converters[prev + " " + tmp[0]] ||
+ converters["* " + tmp[0]];
+ if (conv) {
+ // Condense equivalence converters
+ if (conv === true) {
+ conv = converters[conv2];
+
+ // Otherwise, insert the intermediate dataType
+ } else if (converters[conv2] !== true) {
+ current = tmp[0];
+ dataTypes.unshift(tmp[1]);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if (conv !== true) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if (conv && s["throws"]) {
+ response = conv(response);
+ } else {
+ try {
+ response = conv(response);
+ } catch (e) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return {state: "success", data: response};
+ }
+
+ jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test(ajaxLocParts[1]),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function (target, settings) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :
+
+ // Extending ajaxSettings
+ ajaxExtend(jQuery.ajaxSettings, target);
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
+ ajaxTransport: addToPrefiltersOrTransports(transports),
+
+ // Main method
+ ajax: function (url, options) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if (typeof url === "object") {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var // Cross-domain detection vars
+ parts,
+ // Loop variable
+ i,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers as string
+ responseHeadersString,
+ // timeout handle
+ timeoutTimer,
+
+ // To know if global events are to be dispatched
+ fireGlobals,
+
+ transport,
+ // Response headers
+ responseHeaders,
+ // Create the final options object
+ s = jQuery.ajaxSetup({}, options),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery(callbackContext) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function (key) {
+ var match;
+ if (state === 2) {
+ if (!responseHeaders) {
+ responseHeaders = {};
+ while ((match = rheaders.exec(responseHeadersString))) {
+ responseHeaders[match[1].toLowerCase()] = match[2];
+ }
+ }
+ match = responseHeaders[key.toLowerCase()];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function () {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function (name, value) {
+ var lname = name.toLowerCase();
+ if (!state) {
+ name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;
+ requestHeaders[name] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function (type) {
+ if (!state) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function (map) {
+ var code;
+ if (map) {
+ if (state < 2) {
+ for (code in map) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[code] = [statusCode[code], map[code]];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always(map[jqXHR.status]);
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function (statusText) {
+ var finalText = statusText || strAbort;
+ if (transport) {
+ transport.abort(finalText);
+ }
+ done(0, finalText);
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise(jqXHR).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//");
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(rnotwhite) || [""];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if (s.crossDomain == null) {
+ parts = rurl.exec(s.url.toLowerCase());
+ s.crossDomain = !!( parts &&
+ ( parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] ||
+ ( parts[3] || ( parts[1] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[3] || ( ajaxLocParts[1] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if (s.data && s.processData && typeof s.data !== "string") {
+ s.data = jQuery.param(s.data, s.traditional);
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
+
+ // If request was aborted inside a prefilter, stop there
+ if (state === 2) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if (fireGlobals && jQuery.active++ === 0) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test(s.type);
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if (!s.hasContent) {
+
+ // If data is available, append data to url
+ if (s.data) {
+ cacheURL = ( s.url += ( rquery.test(cacheURL) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if (s.cache === false) {
+ s.url = rts.test(cacheURL) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace(rts, "$1_=" + nonce++) :
+
+ // Otherwise add one to the end
+ cacheURL + ( rquery.test(cacheURL) ? "&" : "?" ) + "_=" + nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ if (jQuery.lastModified[cacheURL]) {
+ jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
+ }
+ if (jQuery.etag[cacheURL]) {
+ jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
+ jqXHR.setRequestHeader("Content-Type", s.contentType);
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[0] && s.accepts[s.dataTypes[0]] ?
+ s.accepts[s.dataTypes[0]] + ( s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts["*"]
+ );
+
+ // Check for headers option
+ for (i in s.headers) {
+ jqXHR.setRequestHeader(i, s.headers[i]);
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if (s.beforeSend && ( s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2 )) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for (i in {success: 1, error: 1, complete: 1}) {
+ jqXHR[i](s[i]);
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
+
+ // If no transport, we auto-abort
+ if (!transport) {
+ done(-1, "No Transport");
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxSend", [jqXHR, s]);
+ }
+ // Timeout
+ if (s.async && s.timeout > 0) {
+ timeoutTimer = setTimeout(function () {
+ jqXHR.abort("timeout");
+ }, s.timeout);
+ }
+
+ try {
+ state = 1;
+ transport.send(requestHeaders, done);
+ } catch (e) {
+ // Propagate exception as error if not done
+ if (state < 2) {
+ done(-1, e);
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done(status, nativeStatusText, responses, headers) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if (state === 2) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if (timeoutTimer) {
+ clearTimeout(timeoutTimer);
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if (responses) {
+ response = ajaxHandleResponses(s, jqXHR, responses);
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert(s, response, jqXHR, isSuccess);
+
+ // If successful, handle type chaining
+ if (isSuccess) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if (modified) {
+ jQuery.lastModified[cacheURL] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if (modified) {
+ jQuery.etag[cacheURL] = modified;
+ }
+ }
+
+ // if no content
+ if (status === 204 || s.type === "HEAD") {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if (status === 304) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // We extract error from statusText
+ // then normalize statusText and status for non-aborts
+ error = statusText;
+ if (status || !statusText) {
+ statusText = "error";
+ if (status < 0) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if (isSuccess) {
+ deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
+ } else {
+ deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode(statusCode);
+ statusCode = undefined;
+
+ if (fireGlobals) {
+ globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError",
+ [jqXHR, s, isSuccess ? success : error]);
+ }
+
+ // Complete
+ completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
+
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
+ // Handle the global AJAX counter
+ if (!( --jQuery.active )) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function (url, data, callback) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ getScript: function (url, callback) {
+ return jQuery.get(url, undefined, callback, "script");
+ }
+ });
+
+ jQuery.each(["get", "post"], function (i, method) {
+ jQuery[method] = function (url, data, callback, type) {
+ // shift arguments if data argument was omitted
+ if (jQuery.isFunction(data)) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+ });
+
+
+ jQuery._evalUrl = function (url) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ };
+
+
+ jQuery.fn.extend({
+ wrapAll: function (html) {
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapAll(html.call(this, i));
+ });
+ }
+
+ if (this[0]) {
+ // The elements to wrap the target around
+ var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
+
+ if (this[0].parentNode) {
+ wrap.insertBefore(this[0]);
+ }
+
+ wrap.map(function () {
+ var elem = this;
+
+ while (elem.firstChild && elem.firstChild.nodeType === 1) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function (html) {
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapInner(html.call(this, i));
+ });
+ }
+
+ return this.each(function () {
+ var self = jQuery(this),
+ contents = self.contents();
+
+ if (contents.length) {
+ contents.wrapAll(html);
+
+ } else {
+ self.append(html);
+ }
+ });
+ },
+
+ wrap: function (html) {
+ var isFunction = jQuery.isFunction(html);
+
+ return this.each(function (i) {
+ jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
+ });
+ },
+
+ unwrap: function () {
+ return this.parent().each(function () {
+ if (!jQuery.nodeName(this, "body")) {
+ jQuery(this).replaceWith(this.childNodes);
+ }
+ }).end();
+ }
+ });
+
+
+ jQuery.expr.filters.hidden = function (elem) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+ (!support.reliableHiddenOffsets() &&
+ ((elem.style && elem.style.display) || jQuery.css(elem, "display")) === "none");
+ };
+
+ jQuery.expr.filters.visible = function (elem) {
+ return !jQuery.expr.filters.hidden(elem);
+ };
+
+
+ var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+ function buildParams(prefix, obj, traditional, add) {
+ var name;
+
+ if (jQuery.isArray(obj)) {
+ // Serialize array item.
+ jQuery.each(obj, function (i, v) {
+ if (traditional || rbracket.test(prefix)) {
+ // Treat each array item as a scalar.
+ add(prefix, v);
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add);
+ }
+ });
+
+ } else if (!traditional && jQuery.type(obj) === "object") {
+ // Serialize object item.
+ for (name in obj) {
+ buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
+ }
+
+ } else {
+ // Serialize scalar item.
+ add(prefix, obj);
+ }
+ }
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+ jQuery.param = function (a, traditional) {
+ var prefix,
+ s = [],
+ add = function (key, value) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction(value) ? value() : ( value == null ? "" : value );
+ s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if (traditional === undefined) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if (jQuery.isArray(a) || ( a.jquery && !jQuery.isPlainObject(a) )) {
+ // Serialize the form elements
+ jQuery.each(a, function () {
+ add(this.name, this.value);
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for (prefix in a) {
+ buildParams(prefix, a[prefix], traditional, add);
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join("&").replace(r20, "+");
+ };
+
+ jQuery.fn.extend({
+ serialize: function () {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function () {
+ return this.map(function () {
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop(this, "elements");
+ return elements ? jQuery.makeArray(elements) : this;
+ })
+ .filter(function () {
+ var type = this.type;
+ // Use .is(":disabled") so that fieldset[disabled] works
+ return this.name && !jQuery(this).is(":disabled") &&
+ rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
+ ( this.checked || !rcheckableType.test(type) );
+ })
+ .map(function (i, elem) {
+ var val = jQuery(this).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray(val) ?
+ jQuery.map(val, function (val) {
+ return {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }) :
+ {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }).get();
+ }
+ });
+
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+ jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
+ // Support: IE6+
+ function () {
+
+ // XHR cannot access local files, always use ActiveX for that case
+ return !this.isLocal &&
+
+ // Support: IE7-8
+ // oldIE XHR does not support non-RFC2616 methods (#13240)
+ // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
+ // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
+ // Although this check for six methods instead of eight
+ // since IE also does not support "trace" and "connect"
+ /^(get|post|head|put|delete|options)$/i.test(this.type) &&
+
+ createStandardXHR() || createActiveXHR();
+ } :
+ // For all other browsers, use the standard XMLHttpRequest object
+ createStandardXHR;
+
+ var xhrId = 0,
+ xhrCallbacks = {},
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE<10
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+ if (window.attachEvent) {
+ window.attachEvent("onunload", function () {
+ for (var key in xhrCallbacks) {
+ xhrCallbacks[key](undefined, true);
+ }
+ });
+ }
+
+// Determine support properties
+ support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+ xhrSupported = support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+ if (xhrSupported) {
+
+ jQuery.ajaxTransport(function (options) {
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if (!options.crossDomain || support.cors) {
+
+ var callback;
+
+ return {
+ send: function (headers, complete) {
+ var i,
+ xhr = options.xhr(),
+ id = ++xhrId;
+
+ // Open the socket
+ xhr.open(options.type, options.url, options.async, options.username, options.password);
+
+ // Apply custom fields if provided
+ if (options.xhrFields) {
+ for (i in options.xhrFields) {
+ xhr[i] = options.xhrFields[i];
+ }
+ }
+
+ // Override mime type if needed
+ if (options.mimeType && xhr.overrideMimeType) {
+ xhr.overrideMimeType(options.mimeType);
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if (!options.crossDomain && !headers["X-Requested-With"]) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for (i in headers) {
+ // Support: IE<9
+ // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
+ // request header to a null-value.
+ //
+ // To keep consistent with other XHR implementations, cast the value
+ // to string and ignore `undefined`.
+ if (headers[i] !== undefined) {
+ xhr.setRequestHeader(i, headers[i] + "");
+ }
+ }
+
+ // Do send the request
+ // This may raise an exception which is actually
+ // handled in jQuery.ajax (so no try/catch here)
+ xhr.send(( options.hasContent && options.data ) || null);
+
+ // Listener
+ callback = function (_, isAbort) {
+ var status, statusText, responses;
+
+ // Was never called and is aborted or complete
+ if (callback && ( isAbort || xhr.readyState === 4 )) {
+ // Clean up
+ delete xhrCallbacks[id];
+ callback = undefined;
+ xhr.onreadystatechange = jQuery.noop;
+
+ // Abort manually if needed
+ if (isAbort) {
+ if (xhr.readyState !== 4) {
+ xhr.abort();
+ }
+ } else {
+ responses = {};
+ status = xhr.status;
+
+ // Support: IE<10
+ // Accessing binary-data responseText throws an exception
+ // (#11426)
+ if (typeof xhr.responseText === "string") {
+ responses.text = xhr.responseText;
+ }
+
+ // Firefox throws an exception when accessing
+ // statusText for faulty cross-domain requests
+ try {
+ statusText = xhr.statusText;
+ } catch (e) {
+ // We normalize with Webkit giving an empty statusText
+ statusText = "";
+ }
+
+ // Filter status for non standard behaviors
+
+ // If the request is local and we have data: assume a success
+ // (success with no data won't get notified, that's the best we
+ // can do given current implementations)
+ if (!status && options.isLocal && !options.crossDomain) {
+ status = responses.text ? 200 : 404;
+ // IE - #1450: sometimes returns 1223 when it should be 204
+ } else if (status === 1223) {
+ status = 204;
+ }
+ }
+ }
+
+ // Call complete if needed
+ if (responses) {
+ complete(status, statusText, responses, xhr.getAllResponseHeaders());
+ }
+ };
+
+ if (!options.async) {
+ // if we're in sync mode we fire the callback
+ callback();
+ } else if (xhr.readyState === 4) {
+ // (IE6 & IE7) if it's in cache and has been
+ // retrieved directly we need to fire the callback
+ setTimeout(callback);
+ } else {
+ // Add to the list of active xhr callbacks
+ xhr.onreadystatechange = xhrCallbacks[id] = callback;
+ }
+ },
+
+ abort: function () {
+ if (callback) {
+ callback(undefined, true);
+ }
+ }
+ };
+ }
+ });
+ }
+
+// Functions to create xhrs
+ function createStandardXHR() {
+ try {
+ return new window.XMLHttpRequest();
+ } catch (e) {
+ }
+ }
+
+ function createActiveXHR() {
+ try {
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
+ } catch (e) {
+ }
+ }
+
+
+// Install script dataType
+ jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function (text) {
+ jQuery.globalEval(text);
+ return text;
+ }
+ }
+ });
+
+// Handle cache's special case and global
+ jQuery.ajaxPrefilter("script", function (s) {
+ if (s.cache === undefined) {
+ s.cache = false;
+ }
+ if (s.crossDomain) {
+ s.type = "GET";
+ s.global = false;
+ }
+ });
+
+// Bind script tag hack transport
+ jQuery.ajaxTransport("script", function (s) {
+
+ // This transport only deals with cross domain requests
+ if (s.crossDomain) {
+
+ var script,
+ head = document.head || jQuery("head")[0] || document.documentElement;
+
+ return {
+
+ send: function (_, callback) {
+
+ script = document.createElement("script");
+
+ script.async = true;
+
+ if (s.scriptCharset) {
+ script.charset = s.scriptCharset;
+ }
+
+ script.src = s.url;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function (_, isAbort) {
+
+ if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+
+ // Remove the script
+ if (script.parentNode) {
+ script.parentNode.removeChild(script);
+ }
+
+ // Dereference the script
+ script = null;
+
+ // Callback if not abort
+ if (!isAbort) {
+ callback(200, "success");
+ }
+ }
+ };
+
+ // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+ // Use native DOM manipulation to avoid our domManip AJAX trickery
+ head.insertBefore(script, head.firstChild);
+ },
+
+ abort: function () {
+ if (script) {
+ script.onload(undefined, true);
+ }
+ }
+ };
+ }
+ });
+
+
+ var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+ jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function () {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+ this[callback] = true;
+ return callback;
+ }
+ });
+
+// Detect, normalize options and install callbacks for jsonp requests
+ jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test(s.url) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test(s.data) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if (jsonProp || s.dataTypes[0] === "jsonp") {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if (jsonProp) {
+ s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
+ } else if (s.jsonp !== false) {
+ s.url += ( rquery.test(s.url) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function () {
+ if (!responseContainer) {
+ jQuery.error(callbackName + " was not called");
+ }
+ return responseContainer[0];
+ };
+
+ // force json dataType
+ s.dataTypes[0] = "json";
+
+ // Install callback
+ overwritten = window[callbackName];
+ window[callbackName] = function () {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function () {
+ // Restore preexisting value
+ window[callbackName] = overwritten;
+
+ // Save back as free
+ if (s[callbackName]) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push(callbackName);
+ }
+
+ // Call if it was a function and we have a response
+ if (responseContainer && jQuery.isFunction(overwritten)) {
+ overwritten(responseContainer[0]);
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+ });
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+ jQuery.parseHTML = function (data, context, keepScripts) {
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ if (typeof context === "boolean") {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec(data),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if (parsed) {
+ return [context.createElement(parsed[1])];
+ }
+
+ parsed = jQuery.buildFragment([data], context, scripts);
+
+ if (scripts && scripts.length) {
+ jQuery(scripts).remove();
+ }
+
+ return jQuery.merge([], parsed.childNodes);
+ };
+
+
+// Keep a copy of the old load method
+ var _load = jQuery.fn.load;
+
+ /**
+ * Load a url into a page
+ */
+ jQuery.fn.load = function (url, params, callback) {
+ if (typeof url !== "string" && _load) {
+ return _load.apply(this, arguments);
+ }
+
+ var selector, response, type,
+ self = this,
+ off = url.indexOf(" ");
+
+ if (off >= 0) {
+ selector = jQuery.trim(url.slice(off, url.length));
+ url = url.slice(0, off);
+ }
+
+ // If it's a function
+ if (jQuery.isFunction(params)) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if (params && typeof params === "object") {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if (self.length > 0) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function (responseText) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html(selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
+
+ // Otherwise use the full result
+ responseText);
+
+ }).complete(callback && function (jqXHR, status) {
+ self.each(callback, response || [jqXHR.responseText, status, jqXHR]);
+ });
+ }
+
+ return this;
+ };
+
+
+// Attach a bunch of functions for handling common AJAX events
+ jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (i, type) {
+ jQuery.fn[type] = function (fn) {
+ return this.on(type, fn);
+ };
+ });
+
+
+ jQuery.expr.filters.animated = function (elem) {
+ return jQuery.grep(jQuery.timers, function (fn) {
+ return elem === fn.elem;
+ }).length;
+ };
+
+
+ var docElem = window.document.documentElement;
+
+ /**
+ * Gets a window from an element
+ */
+ function getWindow(elem) {
+ return jQuery.isWindow(elem) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+ }
+
+ jQuery.offset = {
+ setOffset: function (elem, options, i) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css(elem, "position"),
+ curElem = jQuery(elem),
+ props = {};
+
+ // set position first, in-case top/left are set even on static elem
+ if (position === "static") {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css(elem, "top");
+ curCSSLeft = jQuery.css(elem, "left");
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1;
+
+ // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+ if (calculatePosition) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+ } else {
+ curTop = parseFloat(curCSSTop) || 0;
+ curLeft = parseFloat(curCSSLeft) || 0;
+ }
+
+ if (jQuery.isFunction(options)) {
+ options = options.call(elem, i, curOffset);
+ }
+
+ if (options.top != null) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if (options.left != null) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ("using" in options) {
+ options.using.call(elem, props);
+ } else {
+ curElem.css(props);
+ }
+ }
+ };
+
+ jQuery.fn.extend({
+ offset: function (options) {
+ if (arguments.length) {
+ return options === undefined ?
+ this :
+ this.each(function (i) {
+ jQuery.offset.setOffset(this, options, i);
+ });
+ }
+
+ var docElem, win,
+ box = {top: 0, left: 0},
+ elem = this[0],
+ doc = elem && elem.ownerDocument;
+
+ if (!doc) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if (!jQuery.contains(docElem, elem)) {
+ return box;
+ }
+
+ // If we don't have gBCR, just use 0,0 rather than error
+ // BlackBerry 5, iOS 3 (original iPhone)
+ if (typeof elem.getBoundingClientRect !== strundefined) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow(doc);
+ return {
+ top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
+ left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+ };
+ },
+
+ position: function () {
+ if (!this[0]) {
+ return;
+ }
+
+ var offsetParent, offset,
+ parentOffset = {top: 0, left: 0},
+ elem = this[0];
+
+ // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+ if (jQuery.css(elem, "position") === "fixed") {
+ // we assume that getBoundingClientRect is available when computed position is fixed
+ offset = elem.getBoundingClientRect();
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if (!jQuery.nodeName(offsetParent[0], "html")) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true);
+ parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true);
+ }
+
+ // Subtract parent offsets and element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ return {
+ top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
+ left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
+ };
+ },
+
+ offsetParent: function () {
+ return this.map(function () {
+ var offsetParent = this.offsetParent || docElem;
+
+ while (offsetParent && ( !jQuery.nodeName(offsetParent, "html") && jQuery.css(offsetParent, "position") === "static" )) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent || docElem;
+ });
+ }
+ });
+
+// Create scrollLeft and scrollTop methods
+ jQuery.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (method, prop) {
+ var top = /Y/.test(prop);
+
+ jQuery.fn[method] = function (val) {
+ return access(this, function (elem, method, val) {
+ var win = getWindow(elem);
+
+ if (val === undefined) {
+ return win ? (prop in win) ? win[prop] :
+ win.document.documentElement[method] :
+ elem[method];
+ }
+
+ if (win) {
+ win.scrollTo(
+ !top ? val : jQuery(win).scrollLeft(),
+ top ? val : jQuery(win).scrollTop()
+ );
+
+ } else {
+ elem[method] = val;
+ }
+ }, method, val, arguments.length, null);
+ };
+ });
+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// getComputedStyle returns percent when specified for top/left/bottom/right
+// rather than make the css module depend on the offset module, we just check for it here
+ jQuery.each(["top", "left"], function (i, prop) {
+ jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,
+ function (elem, computed) {
+ if (computed) {
+ computed = curCSS(elem, prop);
+ // if curCSS returns percentage, fallback to offset
+ return rnumnonpx.test(computed) ?
+ jQuery(elem).position()[prop] + "px" :
+ computed;
+ }
+ }
+ );
+ });
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+ jQuery.each({Height: "height", Width: "width"}, function (name, type) {
+ jQuery.each({padding: "inner" + name, content: type, "": "outer" + name}, function (defaultExtra, funcName) {
+ // margin is only for outerHeight, outerWidth
+ jQuery.fn[funcName] = function (margin, value) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access(this, function (elem, type, value) {
+ var doc;
+
+ if (jQuery.isWindow(elem)) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement["client" + name];
+ }
+
+ // Get document width or height
+ if (elem.nodeType === 9) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+ // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+ return Math.max(
+ elem.body["scroll" + name], doc["scroll" + name],
+ elem.body["offset" + name], doc["offset" + name],
+ doc["client" + name]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css(elem, type, extra) :
+
+ // Set width or height on the element
+ jQuery.style(elem, type, value, extra);
+ }, type, chainable ? margin : undefined, chainable, null);
+ };
+ });
+ });
+
+
+// The number of elements contained in the matched element set
+ jQuery.fn.size = function () {
+ return this.length;
+ };
+
+ jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+ if (typeof define === "function" && define.amd) {
+ define("jquery", [], function () {
+ return jQuery;
+ });
+ }
+
+
+ var
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+ jQuery.noConflict = function (deep) {
+ if (window.$ === jQuery) {
+ window.$ = _$;
+ }
+
+ if (deep && window.jQuery === jQuery) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ };
+
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+ if (typeof noGlobal === strundefined) {
+ window.jQuery = window.$ = jQuery;
+ }
+
+
+ return jQuery;
+
+}));
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.js
new file mode 100644
index 00000000..79e6ee1c
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.js
@@ -0,0 +1,2625 @@
+/*! jQuery v1.11.2 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function (a, b) {
+ "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) {
+ if (!a.document)throw new Error("jQuery requires a window with a document");
+ return b(a)
+ } : b(a)
+}("undefined" != typeof window ? window : this, function (a, b) {
+ var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = {}, l = "1.11.2", m = function (a, b) {
+ return new m.fn.init(a, b)
+ }, n = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, o = /^-ms-/, p = /-([\da-z])/gi, q = function (a, b) {
+ return b.toUpperCase()
+ };
+ m.fn = m.prototype = {
+ jquery: l, constructor: m, selector: "", length: 0, toArray: function () {
+ return d.call(this)
+ }, get: function (a) {
+ return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this)
+ }, pushStack: function (a) {
+ var b = m.merge(this.constructor(), a);
+ return b.prevObject = this, b.context = this.context, b
+ }, each: function (a, b) {
+ return m.each(this, a, b)
+ }, map: function (a) {
+ return this.pushStack(m.map(this, function (b, c) {
+ return a.call(b, c, b)
+ }))
+ }, slice: function () {
+ return this.pushStack(d.apply(this, arguments))
+ }, first: function () {
+ return this.eq(0)
+ }, last: function () {
+ return this.eq(-1)
+ }, eq: function (a) {
+ var b = this.length, c = +a + (0 > a ? b : 0);
+ return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
+ }, end: function () {
+ return this.prevObject || this.constructor(null)
+ }, push: f, sort: c.sort, splice: c.splice
+ }, m.extend = m.fn.extend = function () {
+ var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1;
+ for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || m.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)if (null != (e = arguments[h]))for (d in e)a = g[d], c = e[d], g !== c && (j && c && (m.isPlainObject(c) || (b = m.isArray(c))) ? (b ? (b = !1, f = a && m.isArray(a) ? a : []) : f = a && m.isPlainObject(a) ? a : {}, g[d] = m.extend(j, f, c)) : void 0 !== c && (g[d] = c));
+ return g
+ }, m.extend({
+ expando: "jQuery" + (l + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (a) {
+ throw new Error(a)
+ }, noop: function () {
+ }, isFunction: function (a) {
+ return "function" === m.type(a)
+ }, isArray: Array.isArray || function (a) {
+ return "array" === m.type(a)
+ }, isWindow: function (a) {
+ return null != a && a == a.window
+ }, isNumeric: function (a) {
+ return !m.isArray(a) && a - parseFloat(a) + 1 >= 0
+ }, isEmptyObject: function (a) {
+ var b;
+ for (b in a)return !1;
+ return !0
+ }, isPlainObject: function (a) {
+ var b;
+ if (!a || "object" !== m.type(a) || a.nodeType || m.isWindow(a))return !1;
+ try {
+ if (a.constructor && !j.call(a, "constructor") && !j.call(a.constructor.prototype, "isPrototypeOf"))return !1
+ } catch (c) {
+ return !1
+ }
+ if (k.ownLast)for (b in a)return j.call(a, b);
+ for (b in a);
+ return void 0 === b || j.call(a, b)
+ }, type: function (a) {
+ return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
+ }, globalEval: function (b) {
+ b && m.trim(b) && (a.execScript || function (b) {
+ a.eval.call(a, b)
+ })(b)
+ }, camelCase: function (a) {
+ return a.replace(o, "ms-").replace(p, q)
+ }, nodeName: function (a, b) {
+ return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
+ }, each: function (a, b, c) {
+ var d, e = 0, f = a.length, g = r(a);
+ if (c) {
+ if (g) {
+ for (; f > e; e++)if (d = b.apply(a[e], c), d === !1)break
+ } else for (e in a)if (d = b.apply(a[e], c), d === !1)break
+ } else if (g) {
+ for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1)break
+ } else for (e in a)if (d = b.call(a[e], e, a[e]), d === !1)break;
+ return a
+ }, trim: function (a) {
+ return null == a ? "" : (a + "").replace(n, "")
+ }, makeArray: function (a, b) {
+ var c = b || [];
+ return null != a && (r(Object(a)) ? m.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c
+ }, inArray: function (a, b, c) {
+ var d;
+ if (b) {
+ if (g)return g.call(b, a, c);
+ for (d = b.length, c = c ? 0 > c ? Math.max(0, d + c) : c : 0; d > c; c++)if (c in b && b[c] === a)return c
+ }
+ return -1
+ }, merge: function (a, b) {
+ var c = +b.length, d = 0, e = a.length;
+ while (c > d)a[e++] = b[d++];
+ if (c !== c)while (void 0 !== b[d])a[e++] = b[d++];
+ return a.length = e, a
+ }, grep: function (a, b, c) {
+ for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++)d = !b(a[f], f), d !== h && e.push(a[f]);
+ return e
+ }, map: function (a, b, c) {
+ var d, f = 0, g = a.length, h = r(a), i = [];
+ if (h)for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a)d = b(a[f], f, c), null != d && i.push(d);
+ return e.apply([], i)
+ }, guid: 1, proxy: function (a, b) {
+ var c, e, f;
+ return "string" == typeof b && (f = a[b], b = a, a = f), m.isFunction(a) ? (c = d.call(arguments, 2), e = function () {
+ return a.apply(b || this, c.concat(d.call(arguments)))
+ }, e.guid = a.guid = a.guid || m.guid++, e) : void 0
+ }, now: function () {
+ return +new Date
+ }, support: k
+ }), m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) {
+ h["[object " + b + "]"] = b.toLowerCase()
+ });
+ function r(a) {
+ var b = a.length, c = m.type(a);
+ return "function" === c || m.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
+ }
+
+ var s = function (a) {
+ var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u = "sizzle" + 1 * new Date, v = a.document, w = 0, x = 0, y = hb(), z = hb(), A = hb(), B = function (a, b) {
+ return a === b && (l = !0), 0
+ }, C = 1 << 31, D = {}.hasOwnProperty, E = [], F = E.pop, G = E.push, H = E.push, I = E.slice, J = function (a, b) {
+ for (var c = 0, d = a.length; d > c; c++)if (a[c] === b)return c;
+ return -1
+ }, K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", L = "[\\x20\\t\\r\\n\\f]", M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", N = M.replace("w", "w#"), O = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + N + "))|)" + L + "*\\]", P = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + O + ")*)|.*)\\)|)", Q = new RegExp(L + "+", "g"), R = new RegExp("^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$", "g"), S = new RegExp("^" + L + "*," + L + "*"), T = new RegExp("^" + L + "*([>+~]|" + L + ")" + L + "*"), U = new RegExp("=" + L + "*([^\\]'\"]*?)" + L + "*\\]", "g"), V = new RegExp(P), W = new RegExp("^" + N + "$"), X = {
+ ID: new RegExp("^#(" + M + ")"),
+ CLASS: new RegExp("^\\.(" + M + ")"),
+ TAG: new RegExp("^(" + M.replace("w", "w*") + ")"),
+ ATTR: new RegExp("^" + O),
+ PSEUDO: new RegExp("^" + P),
+ CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)", "i"),
+ bool: new RegExp("^(?:" + K + ")$", "i"),
+ needsContext: new RegExp("^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)", "i")
+ }, Y = /^(?:input|select|textarea|button)$/i, Z = /^h\d$/i, $ = /^[^{]+\{\s*\[native \w/, _ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ab = /[+~]/, bb = /'|\\/g, cb = new RegExp("\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)", "ig"), db = function (a, b, c) {
+ var d = "0x" + b - 65536;
+ return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
+ }, eb = function () {
+ m()
+ };
+ try {
+ H.apply(E = I.call(v.childNodes), v.childNodes), E[v.childNodes.length].nodeType
+ } catch (fb) {
+ H = {
+ apply: E.length ? function (a, b) {
+ G.apply(a, I.call(b))
+ } : function (a, b) {
+ var c = a.length, d = 0;
+ while (a[c++] = b[d++]);
+ a.length = c - 1
+ }
+ }
+ }
+ function gb(a, b, d, e) {
+ var f, h, j, k, l, o, r, s, w, x;
+ if ((b ? b.ownerDocument || b : v) !== n && m(b), b = b || n, d = d || [], k = b.nodeType, "string" != typeof a || !a || 1 !== k && 9 !== k && 11 !== k)return d;
+ if (!e && p) {
+ if (11 !== k && (f = _.exec(a)))if (j = f[1]) {
+ if (9 === k) {
+ if (h = b.getElementById(j), !h || !h.parentNode)return d;
+ if (h.id === j)return d.push(h), d
+ } else if (b.ownerDocument && (h = b.ownerDocument.getElementById(j)) && t(b, h) && h.id === j)return d.push(h), d
+ } else {
+ if (f[2])return H.apply(d, b.getElementsByTagName(a)), d;
+ if ((j = f[3]) && c.getElementsByClassName)return H.apply(d, b.getElementsByClassName(j)), d
+ }
+ if (c.qsa && (!q || !q.test(a))) {
+ if (s = r = u, w = b, x = 1 !== k && a, 1 === k && "object" !== b.nodeName.toLowerCase()) {
+ o = g(a), (r = b.getAttribute("id")) ? s = r.replace(bb, "\\$&") : b.setAttribute("id", s), s = "[id='" + s + "'] ", l = o.length;
+ while (l--)o[l] = s + rb(o[l]);
+ w = ab.test(a) && pb(b.parentNode) || b, x = o.join(",")
+ }
+ if (x)try {
+ return H.apply(d, w.querySelectorAll(x)), d
+ } catch (y) {
+ } finally {
+ r || b.removeAttribute("id")
+ }
+ }
+ }
+ return i(a.replace(R, "$1"), b, d, e)
+ }
+
+ function hb() {
+ var a = [];
+
+ function b(c, e) {
+ return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
+ }
+
+ return b
+ }
+
+ function ib(a) {
+ return a[u] = !0, a
+ }
+
+ function jb(a) {
+ var b = n.createElement("div");
+ try {
+ return !!a(b)
+ } catch (c) {
+ return !1
+ } finally {
+ b.parentNode && b.parentNode.removeChild(b), b = null
+ }
+ }
+
+ function kb(a, b) {
+ var c = a.split("|"), e = a.length;
+ while (e--)d.attrHandle[c[e]] = b
+ }
+
+ function lb(a, b) {
+ var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || C) - (~a.sourceIndex || C);
+ if (d)return d;
+ if (c)while (c = c.nextSibling)if (c === b)return -1;
+ return a ? 1 : -1
+ }
+
+ function mb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return "input" === c && b.type === a
+ }
+ }
+
+ function nb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return ("input" === c || "button" === c) && b.type === a
+ }
+ }
+
+ function ob(a) {
+ return ib(function (b) {
+ return b = +b, ib(function (c, d) {
+ var e, f = a([], c.length, b), g = f.length;
+ while (g--)c[e = f[g]] && (c[e] = !(d[e] = c[e]))
+ })
+ })
+ }
+
+ function pb(a) {
+ return a && "undefined" != typeof a.getElementsByTagName && a
+ }
+
+ c = gb.support = {}, f = gb.isXML = function (a) {
+ var b = a && (a.ownerDocument || a).documentElement;
+ return b ? "HTML" !== b.nodeName : !1
+ }, m = gb.setDocument = function (a) {
+ var b, e, g = a ? a.ownerDocument || a : v;
+ return g !== n && 9 === g.nodeType && g.documentElement ? (n = g, o = g.documentElement, e = g.defaultView, e && e !== e.top && (e.addEventListener ? e.addEventListener("unload", eb, !1) : e.attachEvent && e.attachEvent("onunload", eb)), p = !f(g), c.attributes = jb(function (a) {
+ return a.className = "i", !a.getAttribute("className")
+ }), c.getElementsByTagName = jb(function (a) {
+ return a.appendChild(g.createComment("")), !a.getElementsByTagName("*").length
+ }), c.getElementsByClassName = $.test(g.getElementsByClassName), c.getById = jb(function (a) {
+ return o.appendChild(a).id = u, !g.getElementsByName || !g.getElementsByName(u).length
+ }), c.getById ? (d.find.ID = function (a, b) {
+ if ("undefined" != typeof b.getElementById && p) {
+ var c = b.getElementById(a);
+ return c && c.parentNode ? [c] : []
+ }
+ }, d.filter.ID = function (a) {
+ var b = a.replace(cb, db);
+ return function (a) {
+ return a.getAttribute("id") === b
+ }
+ }) : (delete d.find.ID, d.filter.ID = function (a) {
+ var b = a.replace(cb, db);
+ return function (a) {
+ var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id");
+ return c && c.value === b
+ }
+ }), d.find.TAG = c.getElementsByTagName ? function (a, b) {
+ return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(a) : c.qsa ? b.querySelectorAll(a) : void 0
+ } : function (a, b) {
+ var c, d = [], e = 0, f = b.getElementsByTagName(a);
+ if ("*" === a) {
+ while (c = f[e++])1 === c.nodeType && d.push(c);
+ return d
+ }
+ return f
+ }, d.find.CLASS = c.getElementsByClassName && function (a, b) {
+ return p ? b.getElementsByClassName(a) : void 0
+ }, r = [], q = [], (c.qsa = $.test(g.querySelectorAll)) && (jb(function (a) {
+ o.appendChild(a).innerHTML = "<a id='" + u + "'></a><select id='" + u + "-\f]' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && q.push("[*^$]=" + L + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + L + "*(?:value|" + K + ")"), a.querySelectorAll("[id~=" + u + "-]").length || q.push("~="), a.querySelectorAll(":checked").length || q.push(":checked"), a.querySelectorAll("a#" + u + "+*").length || q.push(".#.+[+~]")
+ }), jb(function (a) {
+ var b = g.createElement("input");
+ b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + L + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:")
+ })), (c.matchesSelector = $.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && jb(function (a) {
+ c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", P)
+ }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = $.test(o.compareDocumentPosition), t = b || $.test(o.contains) ? function (a, b) {
+ var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode;
+ return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
+ } : function (a, b) {
+ if (b)while (b = b.parentNode)if (b === a)return !0;
+ return !1
+ }, B = b ? function (a, b) {
+ if (a === b)return l = !0, 0;
+ var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === g || a.ownerDocument === v && t(v, a) ? -1 : b === g || b.ownerDocument === v && t(v, b) ? 1 : k ? J(k, a) - J(k, b) : 0 : 4 & d ? -1 : 1)
+ } : function (a, b) {
+ if (a === b)return l = !0, 0;
+ var c, d = 0, e = a.parentNode, f = b.parentNode, h = [a], i = [b];
+ if (!e || !f)return a === g ? -1 : b === g ? 1 : e ? -1 : f ? 1 : k ? J(k, a) - J(k, b) : 0;
+ if (e === f)return lb(a, b);
+ c = a;
+ while (c = c.parentNode)h.unshift(c);
+ c = b;
+ while (c = c.parentNode)i.unshift(c);
+ while (h[d] === i[d])d++;
+ return d ? lb(h[d], i[d]) : h[d] === v ? -1 : i[d] === v ? 1 : 0
+ }, g) : n
+ }, gb.matches = function (a, b) {
+ return gb(a, null, null, b)
+ }, gb.matchesSelector = function (a, b) {
+ if ((a.ownerDocument || a) !== n && m(a), b = b.replace(U, "='$1']"), !(!c.matchesSelector || !p || r && r.test(b) || q && q.test(b)))try {
+ var d = s.call(a, b);
+ if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d
+ } catch (e) {
+ }
+ return gb(b, n, null, [a]).length > 0
+ }, gb.contains = function (a, b) {
+ return (a.ownerDocument || a) !== n && m(a), t(a, b)
+ }, gb.attr = function (a, b) {
+ (a.ownerDocument || a) !== n && m(a);
+ var e = d.attrHandle[b.toLowerCase()], f = e && D.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0;
+ return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
+ }, gb.error = function (a) {
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ }, gb.uniqueSort = function (a) {
+ var b, d = [], e = 0, f = 0;
+ if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) {
+ while (b = a[f++])b === a[f] && (e = d.push(f));
+ while (e--)a.splice(d[e], 1)
+ }
+ return k = null, a
+ }, e = gb.getText = function (a) {
+ var b, c = "", d = 0, f = a.nodeType;
+ if (f) {
+ if (1 === f || 9 === f || 11 === f) {
+ if ("string" == typeof a.textContent)return a.textContent;
+ for (a = a.firstChild; a; a = a.nextSibling)c += e(a)
+ } else if (3 === f || 4 === f)return a.nodeValue
+ } else while (b = a[d++])c += e(b);
+ return c
+ }, d = gb.selectors = {
+ cacheLength: 50,
+ createPseudo: ib,
+ match: X,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": {dir: "parentNode", first: !0},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: !0},
+ "~": {dir: "previousSibling"}
+ },
+ preFilter: {
+ ATTR: function (a) {
+ return a[1] = a[1].replace(cb, db), a[3] = (a[3] || a[4] || a[5] || "").replace(cb, db), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
+ }, CHILD: function (a) {
+ return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || gb.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && gb.error(a[0]), a
+ }, PSEUDO: function (a) {
+ var b, c = !a[6] && a[2];
+ return X.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && V.test(c) && (b = g(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
+ }
+ },
+ filter: {
+ TAG: function (a) {
+ var b = a.replace(cb, db).toLowerCase();
+ return "*" === a ? function () {
+ return !0
+ } : function (a) {
+ return a.nodeName && a.nodeName.toLowerCase() === b
+ }
+ }, CLASS: function (a) {
+ var b = y[a + " "];
+ return b || (b = new RegExp("(^|" + L + ")" + a + "(" + L + "|$)")) && y(a, function (a) {
+ return b.test("string" == typeof a.className && a.className || "undefined" != typeof a.getAttribute && a.getAttribute("class") || "")
+ })
+ }, ATTR: function (a, b, c) {
+ return function (d) {
+ var e = gb.attr(d, a);
+ return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e.replace(Q, " ") + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
+ }
+ }, CHILD: function (a, b, c, d, e) {
+ var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
+ return 1 === d && 0 === e ? function (a) {
+ return !!a.parentNode
+ } : function (b, c, i) {
+ var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), s = !i && !h;
+ if (q) {
+ if (f) {
+ while (p) {
+ l = b;
+ while (l = l[p])if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return !1;
+ o = p = "only" === a && !o && "nextSibling"
+ }
+ return !0
+ }
+ if (o = [g ? q.firstChild : q.lastChild], g && s) {
+ k = q[u] || (q[u] = {}), j = k[a] || [], n = j[0] === w && j[1], m = j[0] === w && j[2], l = n && q.childNodes[n];
+ while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if (1 === l.nodeType && ++m && l === b) {
+ k[a] = [w, n, m];
+ break
+ }
+ } else if (s && (j = (b[u] || (b[u] = {}))[a]) && j[0] === w)m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (s && ((l[u] || (l[u] = {}))[a] = [w, m]), l === b))break;
+ return m -= e, m === d || m % d === 0 && m / d >= 0
+ }
+ }
+ }, PSEUDO: function (a, b) {
+ var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || gb.error("unsupported pseudo: " + a);
+ return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ib(function (a, c) {
+ var d, f = e(a, b), g = f.length;
+ while (g--)d = J(a, f[g]), a[d] = !(c[d] = f[g])
+ }) : function (a) {
+ return e(a, 0, c)
+ }) : e
+ }
+ },
+ pseudos: {
+ not: ib(function (a) {
+ var b = [], c = [], d = h(a.replace(R, "$1"));
+ return d[u] ? ib(function (a, b, c, e) {
+ var f, g = d(a, null, e, []), h = a.length;
+ while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
+ }) : function (a, e, f) {
+ return b[0] = a, d(b, null, f, c), b[0] = null, !c.pop()
+ }
+ }), has: ib(function (a) {
+ return function (b) {
+ return gb(a, b).length > 0
+ }
+ }), contains: ib(function (a) {
+ return a = a.replace(cb, db), function (b) {
+ return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
+ }
+ }), lang: ib(function (a) {
+ return W.test(a || "") || gb.error("unsupported lang: " + a), a = a.replace(cb, db).toLowerCase(), function (b) {
+ var c;
+ do if (c = p ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
+ return !1
+ }
+ }), target: function (b) {
+ var c = a.location && a.location.hash;
+ return c && c.slice(1) === b.id
+ }, root: function (a) {
+ return a === o
+ }, focus: function (a) {
+ return a === n.activeElement && (!n.hasFocus || n.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
+ }, enabled: function (a) {
+ return a.disabled === !1
+ }, disabled: function (a) {
+ return a.disabled === !0
+ }, checked: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && !!a.checked || "option" === b && !!a.selected
+ }, selected: function (a) {
+ return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ }, empty: function (a) {
+ for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6)return !1;
+ return !0
+ }, parent: function (a) {
+ return !d.pseudos.empty(a)
+ }, header: function (a) {
+ return Z.test(a.nodeName)
+ }, input: function (a) {
+ return Y.test(a.nodeName)
+ }, button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && "button" === a.type || "button" === b
+ }, text: function (a) {
+ var b;
+ return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
+ }, first: ob(function () {
+ return [0]
+ }), last: ob(function (a, b) {
+ return [b - 1]
+ }), eq: ob(function (a, b, c) {
+ return [0 > c ? c + b : c]
+ }), even: ob(function (a, b) {
+ for (var c = 0; b > c; c += 2)a.push(c);
+ return a
+ }), odd: ob(function (a, b) {
+ for (var c = 1; b > c; c += 2)a.push(c);
+ return a
+ }), lt: ob(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
+ return a
+ }), gt: ob(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d);
+ return a
+ })
+ }
+ }, d.pseudos.nth = d.pseudos.eq;
+ for (b in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})d.pseudos[b] = mb(b);
+ for (b in{submit: !0, reset: !0})d.pseudos[b] = nb(b);
+ function qb() {
+ }
+
+ qb.prototype = d.filters = d.pseudos, d.setFilters = new qb, g = gb.tokenize = function (a, b) {
+ var c, e, f, g, h, i, j, k = z[a + " "];
+ if (k)return b ? 0 : k.slice(0);
+ h = a, i = [], j = d.preFilter;
+ while (h) {
+ (!c || (e = S.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = T.exec(h)) && (c = e.shift(), f.push({
+ value: c,
+ type: e[0].replace(R, " ")
+ }), h = h.slice(c.length));
+ for (g in d.filter)!(e = X[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
+ value: c,
+ type: g,
+ matches: e
+ }), h = h.slice(c.length));
+ if (!c)break
+ }
+ return b ? h.length : h ? gb.error(a) : z(a, i).slice(0)
+ };
+ function rb(a) {
+ for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
+ return d
+ }
+
+ function sb(a, b, c) {
+ var d = b.dir, e = c && "parentNode" === d, f = x++;
+ return b.first ? function (b, c, f) {
+ while (b = b[d])if (1 === b.nodeType || e)return a(b, c, f)
+ } : function (b, c, g) {
+ var h, i, j = [w, f];
+ if (g) {
+ while (b = b[d])if ((1 === b.nodeType || e) && a(b, c, g))return !0
+ } else while (b = b[d])if (1 === b.nodeType || e) {
+ if (i = b[u] || (b[u] = {}), (h = i[d]) && h[0] === w && h[1] === f)return j[2] = h[2];
+ if (i[d] = j, j[2] = a(b, c, g))return !0
+ }
+ }
+ }
+
+ function tb(a) {
+ return a.length > 1 ? function (b, c, d) {
+ var e = a.length;
+ while (e--)if (!a[e](b, c, d))return !1;
+ return !0
+ } : a[0]
+ }
+
+ function ub(a, b, c) {
+ for (var d = 0, e = b.length; e > d; d++)gb(a, b[d], c);
+ return c
+ }
+
+ function vb(a, b, c, d, e) {
+ for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
+ return g
+ }
+
+ function wb(a, b, c, d, e, f) {
+ return d && !d[u] && (d = wb(d)), e && !e[u] && (e = wb(e, f)), ib(function (f, g, h, i) {
+ var j, k, l, m = [], n = [], o = g.length, p = f || ub(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : vb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q;
+ if (c && c(q, r, h, i), d) {
+ j = vb(r, n), d(j, [], h, i), k = j.length;
+ while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l))
+ }
+ if (f) {
+ if (e || a) {
+ if (e) {
+ j = [], k = r.length;
+ while (k--)(l = r[k]) && j.push(q[k] = l);
+ e(null, r = [], j, i)
+ }
+ k = r.length;
+ while (k--)(l = r[k]) && (j = e ? J(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
+ }
+ } else r = vb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : H.apply(g, r)
+ })
+ }
+
+ function xb(a) {
+ for (var b, c, e, f = a.length, g = d.relative[a[0].type], h = g || d.relative[" "], i = g ? 1 : 0, k = sb(function (a) {
+ return a === b
+ }, h, !0), l = sb(function (a) {
+ return J(b, a) > -1
+ }, h, !0), m = [function (a, c, d) {
+ var e = !g && (d || c !== j) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d));
+ return b = null, e
+ }]; f > i; i++)if (c = d.relative[a[i].type])m = [sb(tb(m), c)]; else {
+ if (c = d.filter[a[i].type].apply(null, a[i].matches), c[u]) {
+ for (e = ++i; f > e; e++)if (d.relative[a[e].type])break;
+ return wb(i > 1 && tb(m), i > 1 && rb(a.slice(0, i - 1).concat({value: " " === a[i - 2].type ? "*" : ""})).replace(R, "$1"), c, e > i && xb(a.slice(i, e)), f > e && xb(a = a.slice(e)), f > e && rb(a))
+ }
+ m.push(c)
+ }
+ return tb(m)
+ }
+
+ function yb(a, b) {
+ var c = b.length > 0, e = a.length > 0, f = function (f, g, h, i, k) {
+ var l, m, o, p = 0, q = "0", r = f && [], s = [], t = j, u = f || e && d.find.TAG("*", k), v = w += null == t ? 1 : Math.random() || .1, x = u.length;
+ for (k && (j = g !== n && g); q !== x && null != (l = u[q]); q++) {
+ if (e && l) {
+ m = 0;
+ while (o = a[m++])if (o(l, g, h)) {
+ i.push(l);
+ break
+ }
+ k && (w = v)
+ }
+ c && ((l = !o && l) && p--, f && r.push(l))
+ }
+ if (p += q, c && q !== p) {
+ m = 0;
+ while (o = b[m++])o(r, s, g, h);
+ if (f) {
+ if (p > 0)while (q--)r[q] || s[q] || (s[q] = F.call(i));
+ s = vb(s)
+ }
+ H.apply(i, s), k && !f && s.length > 0 && p + b.length > 1 && gb.uniqueSort(i)
+ }
+ return k && (w = v, j = t), r
+ };
+ return c ? ib(f) : f
+ }
+
+ return h = gb.compile = function (a, b) {
+ var c, d = [], e = [], f = A[a + " "];
+ if (!f) {
+ b || (b = g(a)), c = b.length;
+ while (c--)f = xb(b[c]), f[u] ? d.push(f) : e.push(f);
+ f = A(a, yb(e, d)), f.selector = a
+ }
+ return f
+ }, i = gb.select = function (a, b, e, f) {
+ var i, j, k, l, m, n = "function" == typeof a && a, o = !f && g(a = n.selector || a);
+ if (e = e || [], 1 === o.length) {
+ if (j = o[0] = o[0].slice(0), j.length > 2 && "ID" === (k = j[0]).type && c.getById && 9 === b.nodeType && p && d.relative[j[1].type]) {
+ if (b = (d.find.ID(k.matches[0].replace(cb, db), b) || [])[0], !b)return e;
+ n && (b = b.parentNode), a = a.slice(j.shift().value.length)
+ }
+ i = X.needsContext.test(a) ? 0 : j.length;
+ while (i--) {
+ if (k = j[i], d.relative[l = k.type])break;
+ if ((m = d.find[l]) && (f = m(k.matches[0].replace(cb, db), ab.test(j[0].type) && pb(b.parentNode) || b))) {
+ if (j.splice(i, 1), a = f.length && rb(j), !a)return H.apply(e, f), e;
+ break
+ }
+ }
+ }
+ return (n || h(a, o))(f, b, !p, e, ab.test(a) && pb(b.parentNode) || b), e
+ }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = jb(function (a) {
+ return 1 & a.compareDocumentPosition(n.createElement("div"))
+ }), jb(function (a) {
+ return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
+ }) || kb("type|href|height|width", function (a, b, c) {
+ return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
+ }), c.attributes && jb(function (a) {
+ return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
+ }) || kb("value", function (a, b, c) {
+ return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
+ }), jb(function (a) {
+ return null == a.getAttribute("disabled")
+ }) || kb(K, function (a, b, c) {
+ var d;
+ return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
+ }), gb
+ }(a);
+ m.find = s, m.expr = s.selectors, m.expr[":"] = m.expr.pseudos, m.unique = s.uniqueSort, m.text = s.getText, m.isXMLDoc = s.isXML, m.contains = s.contains;
+ var t = m.expr.match.needsContext, u = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, v = /^.[^:#\[\.,]*$/;
+
+ function w(a, b, c) {
+ if (m.isFunction(b))return m.grep(a, function (a, d) {
+ return !!b.call(a, d, a) !== c
+ });
+ if (b.nodeType)return m.grep(a, function (a) {
+ return a === b !== c
+ });
+ if ("string" == typeof b) {
+ if (v.test(b))return m.filter(b, a, c);
+ b = m.filter(b, a)
+ }
+ return m.grep(a, function (a) {
+ return m.inArray(a, b) >= 0 !== c
+ })
+ }
+
+ m.filter = function (a, b, c) {
+ var d = b[0];
+ return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? m.find.matchesSelector(d, a) ? [d] : [] : m.find.matches(a, m.grep(b, function (a) {
+ return 1 === a.nodeType
+ }))
+ }, m.fn.extend({
+ find: function (a) {
+ var b, c = [], d = this, e = d.length;
+ if ("string" != typeof a)return this.pushStack(m(a).filter(function () {
+ for (b = 0; e > b; b++)if (m.contains(d[b], this))return !0
+ }));
+ for (b = 0; e > b; b++)m.find(a, d[b], c);
+ return c = this.pushStack(e > 1 ? m.unique(c) : c), c.selector = this.selector ? this.selector + " " + a : a, c
+ }, filter: function (a) {
+ return this.pushStack(w(this, a || [], !1))
+ }, not: function (a) {
+ return this.pushStack(w(this, a || [], !0))
+ }, is: function (a) {
+ return !!w(this, "string" == typeof a && t.test(a) ? m(a) : a || [], !1).length
+ }
+ });
+ var x, y = a.document, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, A = m.fn.init = function (a, b) {
+ var c, d;
+ if (!a)return this;
+ if ("string" == typeof a) {
+ if (c = "<" === a.charAt(0) && ">" === a.charAt(a.length - 1) && a.length >= 3 ? [null, a, null] : z.exec(a), !c || !c[1] && b)return !b || b.jquery ? (b || x).find(a) : this.constructor(b).find(a);
+ if (c[1]) {
+ if (b = b instanceof m ? b[0] : b, m.merge(this, m.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : y, !0)), u.test(c[1]) && m.isPlainObject(b))for (c in b)m.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
+ return this
+ }
+ if (d = y.getElementById(c[2]), d && d.parentNode) {
+ if (d.id !== c[2])return x.find(a);
+ this.length = 1, this[0] = d
+ }
+ return this.context = y, this.selector = a, this
+ }
+ return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : m.isFunction(a) ? "undefined" != typeof x.ready ? x.ready(a) : a(m) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), m.makeArray(a, this))
+ };
+ A.prototype = m.fn, x = m(y);
+ var B = /^(?:parents|prev(?:Until|All))/, C = {children: !0, contents: !0, next: !0, prev: !0};
+ m.extend({
+ dir: function (a, b, c) {
+ var d = [], e = a[b];
+ while (e && 9 !== e.nodeType && (void 0 === c || 1 !== e.nodeType || !m(e).is(c)))1 === e.nodeType && d.push(e), e = e[b];
+ return d
+ }, sibling: function (a, b) {
+ for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a);
+ return c
+ }
+ }), m.fn.extend({
+ has: function (a) {
+ var b, c = m(a, this), d = c.length;
+ return this.filter(function () {
+ for (b = 0; d > b; b++)if (m.contains(this, c[b]))return !0
+ })
+ }, closest: function (a, b) {
+ for (var c, d = 0, e = this.length, f = [], g = t.test(a) || "string" != typeof a ? m(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && m.find.matchesSelector(c, a))) {
+ f.push(c);
+ break
+ }
+ return this.pushStack(f.length > 1 ? m.unique(f) : f)
+ }, index: function (a) {
+ return a ? "string" == typeof a ? m.inArray(this[0], m(a)) : m.inArray(a.jquery ? a[0] : a, this) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+ }, add: function (a, b) {
+ return this.pushStack(m.unique(m.merge(this.get(), m(a, b))))
+ }, addBack: function (a) {
+ return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
+ }
+ });
+ function D(a, b) {
+ do a = a[b]; while (a && 1 !== a.nodeType);
+ return a
+ }
+
+ m.each({
+ parent: function (a) {
+ var b = a.parentNode;
+ return b && 11 !== b.nodeType ? b : null
+ }, parents: function (a) {
+ return m.dir(a, "parentNode")
+ }, parentsUntil: function (a, b, c) {
+ return m.dir(a, "parentNode", c)
+ }, next: function (a) {
+ return D(a, "nextSibling")
+ }, prev: function (a) {
+ return D(a, "previousSibling")
+ }, nextAll: function (a) {
+ return m.dir(a, "nextSibling")
+ }, prevAll: function (a) {
+ return m.dir(a, "previousSibling")
+ }, nextUntil: function (a, b, c) {
+ return m.dir(a, "nextSibling", c)
+ }, prevUntil: function (a, b, c) {
+ return m.dir(a, "previousSibling", c)
+ }, siblings: function (a) {
+ return m.sibling((a.parentNode || {}).firstChild, a)
+ }, children: function (a) {
+ return m.sibling(a.firstChild)
+ }, contents: function (a) {
+ return m.nodeName(a, "iframe") ? a.contentDocument || a.contentWindow.document : m.merge([], a.childNodes)
+ }
+ }, function (a, b) {
+ m.fn[a] = function (c, d) {
+ var e = m.map(this, b, c);
+ return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = m.filter(d, e)), this.length > 1 && (C[a] || (e = m.unique(e)), B.test(a) && (e = e.reverse())), this.pushStack(e)
+ }
+ });
+ var E = /\S+/g, F = {};
+
+ function G(a) {
+ var b = F[a] = {};
+ return m.each(a.match(E) || [], function (a, c) {
+ b[c] = !0
+ }), b
+ }
+
+ m.Callbacks = function (a) {
+ a = "string" == typeof a ? F[a] || G(a) : m.extend({}, a);
+ var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) {
+ for (c = a.memory && l, d = !0, f = g || 0, g = 0, e = h.length, b = !0; h && e > f; f++)if (h[f].apply(l[0], l[1]) === !1 && a.stopOnFalse) {
+ c = !1;
+ break
+ }
+ b = !1, h && (i ? i.length && j(i.shift()) : c ? h = [] : k.disable())
+ }, k = {
+ add: function () {
+ if (h) {
+ var d = h.length;
+ !function f(b) {
+ m.each(b, function (b, c) {
+ var d = m.type(c);
+ "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && f(c)
+ })
+ }(arguments), b ? e = h.length : c && (g = d, j(c))
+ }
+ return this
+ }, remove: function () {
+ return h && m.each(arguments, function (a, c) {
+ var d;
+ while ((d = m.inArray(c, h, d)) > -1)h.splice(d, 1), b && (e >= d && e--, f >= d && f--)
+ }), this
+ }, has: function (a) {
+ return a ? m.inArray(a, h) > -1 : !(!h || !h.length)
+ }, empty: function () {
+ return h = [], e = 0, this
+ }, disable: function () {
+ return h = i = c = void 0, this
+ }, disabled: function () {
+ return !h
+ }, lock: function () {
+ return i = void 0, c || k.disable(), this
+ }, locked: function () {
+ return !i
+ }, fireWith: function (a, c) {
+ return !h || d && !i || (c = c || [], c = [a, c.slice ? c.slice() : c], b ? i.push(c) : j(c)), this
+ }, fire: function () {
+ return k.fireWith(this, arguments), this
+ }, fired: function () {
+ return !!d
+ }
+ };
+ return k
+ }, m.extend({
+ Deferred: function (a) {
+ var b = [["resolve", "done", m.Callbacks("once memory"), "resolved"], ["reject", "fail", m.Callbacks("once memory"), "rejected"], ["notify", "progress", m.Callbacks("memory")]], c = "pending", d = {
+ state: function () {
+ return c
+ }, always: function () {
+ return e.done(arguments).fail(arguments), this
+ }, then: function () {
+ var a = arguments;
+ return m.Deferred(function (c) {
+ m.each(b, function (b, f) {
+ var g = m.isFunction(a[b]) && a[b];
+ e[f[1]](function () {
+ var a = g && g.apply(this, arguments);
+ a && m.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
+ })
+ }), a = null
+ }).promise()
+ }, promise: function (a) {
+ return null != a ? m.extend(a, d) : d
+ }
+ }, e = {};
+ return d.pipe = d.then, m.each(b, function (a, f) {
+ var g = f[2], h = f[3];
+ d[f[1]] = g.add, h && g.add(function () {
+ c = h
+ }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
+ return e[f[0] + "With"](this === e ? d : this, arguments), this
+ }, e[f[0] + "With"] = g.fireWith
+ }), d.promise(e), a && a.call(e, e), e
+ }, when: function (a) {
+ var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && m.isFunction(a.promise) ? e : 0, g = 1 === f ? a : m.Deferred(), h = function (a, b, c) {
+ return function (e) {
+ b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
+ }
+ }, i, j, k;
+ if (e > 1)for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && m.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
+ return f || g.resolveWith(k, c), g.promise()
+ }
+ });
+ var H;
+ m.fn.ready = function (a) {
+ return m.ready.promise().done(a), this
+ }, m.extend({
+ isReady: !1, readyWait: 1, holdReady: function (a) {
+ a ? m.readyWait++ : m.ready(!0)
+ }, ready: function (a) {
+ if (a === !0 ? !--m.readyWait : !m.isReady) {
+ if (!y.body)return setTimeout(m.ready);
+ m.isReady = !0, a !== !0 && --m.readyWait > 0 || (H.resolveWith(y, [m]), m.fn.triggerHandler && (m(y).triggerHandler("ready"), m(y).off("ready")))
+ }
+ }
+ });
+ function I() {
+ y.addEventListener ? (y.removeEventListener("DOMContentLoaded", J, !1), a.removeEventListener("load", J, !1)) : (y.detachEvent("onreadystatechange", J), a.detachEvent("onload", J))
+ }
+
+ function J() {
+ (y.addEventListener || "load" === event.type || "complete" === y.readyState) && (I(), m.ready())
+ }
+
+ m.ready.promise = function (b) {
+ if (!H)if (H = m.Deferred(), "complete" === y.readyState)setTimeout(m.ready); else if (y.addEventListener)y.addEventListener("DOMContentLoaded", J, !1), a.addEventListener("load", J, !1); else {
+ y.attachEvent("onreadystatechange", J), a.attachEvent("onload", J);
+ var c = !1;
+ try {
+ c = null == a.frameElement && y.documentElement
+ } catch (d) {
+ }
+ c && c.doScroll && !function e() {
+ if (!m.isReady) {
+ try {
+ c.doScroll("left")
+ } catch (a) {
+ return setTimeout(e, 50)
+ }
+ I(), m.ready()
+ }
+ }()
+ }
+ return H.promise(b)
+ };
+ var K = "undefined", L;
+ for (L in m(k))break;
+ k.ownLast = "0" !== L, k.inlineBlockNeedsLayout = !1, m(function () {
+ var a, b, c, d;
+ c = y.getElementsByTagName("body")[0], c && c.style && (b = y.createElement("div"), d = y.createElement("div"), d.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(d).appendChild(b), typeof b.style.zoom !== K && (b.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1", k.inlineBlockNeedsLayout = a = 3 === b.offsetWidth, a && (c.style.zoom = 1)), c.removeChild(d))
+ }), function () {
+ var a = y.createElement("div");
+ if (null == k.deleteExpando) {
+ k.deleteExpando = !0;
+ try {
+ delete a.test
+ } catch (b) {
+ k.deleteExpando = !1
+ }
+ }
+ a = null
+ }(), m.acceptData = function (a) {
+ var b = m.noData[(a.nodeName + " ").toLowerCase()], c = +a.nodeType || 1;
+ return 1 !== c && 9 !== c ? !1 : !b || b !== !0 && a.getAttribute("classid") === b
+ };
+ var M = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, N = /([A-Z])/g;
+
+ function O(a, b, c) {
+ if (void 0 === c && 1 === a.nodeType) {
+ var d = "data-" + b.replace(N, "-$1").toLowerCase();
+ if (c = a.getAttribute(d), "string" == typeof c) {
+ try {
+ c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : M.test(c) ? m.parseJSON(c) : c
+ } catch (e) {
+ }
+ m.data(a, b, c)
+ } else c = void 0
+ }
+ return c
+ }
+
+ function P(a) {
+ var b;
+ for (b in a)if (("data" !== b || !m.isEmptyObject(a[b])) && "toJSON" !== b)return !1;
+ return !0
+ }
+
+ function Q(a, b, d, e) {
+ if (m.acceptData(a)) {
+ var f, g, h = m.expando, i = a.nodeType, j = i ? m.cache : a, k = i ? a[h] : a[h] && h;
+ if (k && j[k] && (e || j[k].data) || void 0 !== d || "string" != typeof b)return k || (k = i ? a[h] = c.pop() || m.guid++ : h), j[k] || (j[k] = i ? {} : {toJSON: m.noop}), ("object" == typeof b || "function" == typeof b) && (e ? j[k] = m.extend(j[k], b) : j[k].data = m.extend(j[k].data, b)), g = j[k], e || (g.data || (g.data = {}), g = g.data), void 0 !== d && (g[m.camelCase(b)] = d), "string" == typeof b ? (f = g[b], null == f && (f = g[m.camelCase(b)])) : f = g, f
+ }
+ }
+
+ function R(a, b, c) {
+ if (m.acceptData(a)) {
+ var d, e, f = a.nodeType, g = f ? m.cache : a, h = f ? a[m.expando] : m.expando;
+ if (g[h]) {
+ if (b && (d = c ? g[h] : g[h].data)) {
+ m.isArray(b) ? b = b.concat(m.map(b, m.camelCase)) : b in d ? b = [b] : (b = m.camelCase(b), b = b in d ? [b] : b.split(" ")), e = b.length;
+ while (e--)delete d[b[e]];
+ if (c ? !P(d) : !m.isEmptyObject(d))return
+ }
+ (c || (delete g[h].data, P(g[h]))) && (f ? m.cleanData([a], !0) : k.deleteExpando || g != g.window ? delete g[h] : g[h] = null)
+ }
+ }
+ }
+
+ m.extend({
+ cache: {},
+ noData: {"applet ": !0, "embed ": !0, "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},
+ hasData: function (a) {
+ return a = a.nodeType ? m.cache[a[m.expando]] : a[m.expando], !!a && !P(a)
+ },
+ data: function (a, b, c) {
+ return Q(a, b, c)
+ },
+ removeData: function (a, b) {
+ return R(a, b)
+ },
+ _data: function (a, b, c) {
+ return Q(a, b, c, !0)
+ },
+ _removeData: function (a, b) {
+ return R(a, b, !0)
+ }
+ }), m.fn.extend({
+ data: function (a, b) {
+ var c, d, e, f = this[0], g = f && f.attributes;
+ if (void 0 === a) {
+ if (this.length && (e = m.data(f), 1 === f.nodeType && !m._data(f, "parsedAttrs"))) {
+ c = g.length;
+ while (c--)g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = m.camelCase(d.slice(5)), O(f, d, e[d])));
+ m._data(f, "parsedAttrs", !0)
+ }
+ return e
+ }
+ return "object" == typeof a ? this.each(function () {
+ m.data(this, a)
+ }) : arguments.length > 1 ? this.each(function () {
+ m.data(this, a, b)
+ }) : f ? O(f, a, m.data(f, a)) : void 0
+ }, removeData: function (a) {
+ return this.each(function () {
+ m.removeData(this, a)
+ })
+ }
+ }), m.extend({
+ queue: function (a, b, c) {
+ var d;
+ return a ? (b = (b || "fx") + "queue", d = m._data(a, b), c && (!d || m.isArray(c) ? d = m._data(a, b, m.makeArray(c)) : d.push(c)), d || []) : void 0
+ }, dequeue: function (a, b) {
+ b = b || "fx";
+ var c = m.queue(a, b), d = c.length, e = c.shift(), f = m._queueHooks(a, b), g = function () {
+ m.dequeue(a, b)
+ };
+ "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
+ }, _queueHooks: function (a, b) {
+ var c = b + "queueHooks";
+ return m._data(a, c) || m._data(a, c, {
+ empty: m.Callbacks("once memory").add(function () {
+ m._removeData(a, b + "queue"), m._removeData(a, c)
+ })
+ })
+ }
+ }), m.fn.extend({
+ queue: function (a, b) {
+ var c = 2;
+ return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? m.queue(this[0], a) : void 0 === b ? this : this.each(function () {
+ var c = m.queue(this, a, b);
+ m._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && m.dequeue(this, a)
+ })
+ }, dequeue: function (a) {
+ return this.each(function () {
+ m.dequeue(this, a)
+ })
+ }, clearQueue: function (a) {
+ return this.queue(a || "fx", [])
+ }, promise: function (a, b) {
+ var c, d = 1, e = m.Deferred(), f = this, g = this.length, h = function () {
+ --d || e.resolveWith(f, [f])
+ };
+ "string" != typeof a && (b = a, a = void 0), a = a || "fx";
+ while (g--)c = m._data(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
+ return h(), e.promise(b)
+ }
+ });
+ var S = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, T = ["Top", "Right", "Bottom", "Left"], U = function (a, b) {
+ return a = b || a, "none" === m.css(a, "display") || !m.contains(a.ownerDocument, a)
+ }, V = m.access = function (a, b, c, d, e, f, g) {
+ var h = 0, i = a.length, j = null == c;
+ if ("object" === m.type(c)) {
+ e = !0;
+ for (h in c)m.access(a, b, h, c[h], !0, f, g)
+ } else if (void 0 !== d && (e = !0, m.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) {
+ return j.call(m(a), c)
+ })), b))for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
+ return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
+ }, W = /^(?:checkbox|radio)$/i;
+ !function () {
+ var a = y.createElement("input"), b = y.createElement("div"), c = y.createDocumentFragment();
+ if (b.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", k.leadingWhitespace = 3 === b.firstChild.nodeType, k.tbody = !b.getElementsByTagName("tbody").length, k.htmlSerialize = !!b.getElementsByTagName("link").length, k.html5Clone = "<:nav></:nav>" !== y.createElement("nav").cloneNode(!0).outerHTML, a.type = "checkbox", a.checked = !0, c.appendChild(a), k.appendChecked = a.checked, b.innerHTML = "<textarea>x</textarea>", k.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue, c.appendChild(b), b.innerHTML = "<input type='radio' checked='checked' name='t'/>", k.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, k.noCloneEvent = !0, b.attachEvent && (b.attachEvent("onclick", function () {
+ k.noCloneEvent = !1
+ }), b.cloneNode(!0).click()), null == k.deleteExpando) {
+ k.deleteExpando = !0;
+ try {
+ delete b.test
+ } catch (d) {
+ k.deleteExpando = !1
+ }
+ }
+ }(), function () {
+ var b, c, d = y.createElement("div");
+ for (b in{
+ submit: !0,
+ change: !0,
+ focusin: !0
+ })c = "on" + b, (k[b + "Bubbles"] = c in a) || (d.setAttribute(c, "t"), k[b + "Bubbles"] = d.attributes[c].expando === !1);
+ d = null
+ }();
+ var X = /^(?:input|select|textarea)$/i, Y = /^key/, Z = /^(?:mouse|pointer|contextmenu)|click/, $ = /^(?:focusinfocus|focusoutblur)$/, _ = /^([^.]*)(?:\.(.+)|)$/;
+
+ function ab() {
+ return !0
+ }
+
+ function bb() {
+ return !1
+ }
+
+ function cb() {
+ try {
+ return y.activeElement
+ } catch (a) {
+ }
+ }
+
+ m.event = {
+ global: {},
+ add: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, n, o, p, q, r = m._data(a);
+ if (r) {
+ c.handler && (i = c, c = i.handler, e = i.selector), c.guid || (c.guid = m.guid++), (g = r.events) || (g = r.events = {}), (k = r.handle) || (k = r.handle = function (a) {
+ return typeof m === K || a && m.event.triggered === a.type ? void 0 : m.event.dispatch.apply(k.elem, arguments)
+ }, k.elem = a), b = (b || "").match(E) || [""], h = b.length;
+ while (h--)f = _.exec(b[h]) || [], o = q = f[1], p = (f[2] || "").split(".").sort(), o && (j = m.event.special[o] || {}, o = (e ? j.delegateType : j.bindType) || o, j = m.event.special[o] || {}, l = m.extend({
+ type: o,
+ origType: q,
+ data: d,
+ handler: c,
+ guid: c.guid,
+ selector: e,
+ needsContext: e && m.expr.match.needsContext.test(e),
+ namespace: p.join(".")
+ }, i), (n = g[o]) || (n = g[o] = [], n.delegateCount = 0, j.setup && j.setup.call(a, d, p, k) !== !1 || (a.addEventListener ? a.addEventListener(o, k, !1) : a.attachEvent && a.attachEvent("on" + o, k))), j.add && (j.add.call(a, l), l.handler.guid || (l.handler.guid = c.guid)), e ? n.splice(n.delegateCount++, 0, l) : n.push(l), m.event.global[o] = !0);
+ a = null
+ }
+ },
+ remove: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, n, o, p, q, r = m.hasData(a) && m._data(a);
+ if (r && (k = r.events)) {
+ b = (b || "").match(E) || [""], j = b.length;
+ while (j--)if (h = _.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
+ l = m.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, n = k[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), i = f = n.length;
+ while (f--)g = n[f], !e && q !== g.origType || c && c.guid !== g.guid || h && !h.test(g.namespace) || d && d !== g.selector && ("**" !== d || !g.selector) || (n.splice(f, 1), g.selector && n.delegateCount--, l.remove && l.remove.call(a, g));
+ i && !n.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || m.removeEvent(a, o, r.handle), delete k[o])
+ } else for (o in k)m.event.remove(a, o + b[j], c, d, !0);
+ m.isEmptyObject(k) && (delete r.handle, m._removeData(a, "events"))
+ }
+ },
+ trigger: function (b, c, d, e) {
+ var f, g, h, i, k, l, n, o = [d || y], p = j.call(b, "type") ? b.type : b, q = j.call(b, "namespace") ? b.namespace.split(".") : [];
+ if (h = l = d = d || y, 3 !== d.nodeType && 8 !== d.nodeType && !$.test(p + m.event.triggered) && (p.indexOf(".") >= 0 && (q = p.split("."), p = q.shift(), q.sort()), g = p.indexOf(":") < 0 && "on" + p, b = b[m.expando] ? b : new m.Event(p, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = q.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + q.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : m.makeArray(c, [b]), k = m.event.special[p] || {}, e || !k.trigger || k.trigger.apply(d, c) !== !1)) {
+ if (!e && !k.noBubble && !m.isWindow(d)) {
+ for (i = k.delegateType || p, $.test(i + p) || (h = h.parentNode); h; h = h.parentNode)o.push(h), l = h;
+ l === (d.ownerDocument || y) && o.push(l.defaultView || l.parentWindow || a)
+ }
+ n = 0;
+ while ((h = o[n++]) && !b.isPropagationStopped())b.type = n > 1 ? i : k.bindType || p, f = (m._data(h, "events") || {})[b.type] && m._data(h, "handle"), f && f.apply(h, c), f = g && h[g], f && f.apply && m.acceptData(h) && (b.result = f.apply(h, c), b.result === !1 && b.preventDefault());
+ if (b.type = p, !e && !b.isDefaultPrevented() && (!k._default || k._default.apply(o.pop(), c) === !1) && m.acceptData(d) && g && d[p] && !m.isWindow(d)) {
+ l = d[g], l && (d[g] = null), m.event.triggered = p;
+ try {
+ d[p]()
+ } catch (r) {
+ }
+ m.event.triggered = void 0, l && (d[g] = l)
+ }
+ return b.result
+ }
+ },
+ dispatch: function (a) {
+ a = m.event.fix(a);
+ var b, c, e, f, g, h = [], i = d.call(arguments), j = (m._data(this, "events") || {})[a.type] || [], k = m.event.special[a.type] || {};
+ if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
+ h = m.event.handlers.call(this, a, j), b = 0;
+ while ((f = h[b++]) && !a.isPropagationStopped()) {
+ a.currentTarget = f.elem, g = 0;
+ while ((e = f.handlers[g++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(e.namespace)) && (a.handleObj = e, a.data = e.data, c = ((m.event.special[e.origType] || {}).handle || e.handler).apply(f.elem, i), void 0 !== c && (a.result = c) === !1 && (a.preventDefault(), a.stopPropagation()))
+ }
+ return k.postDispatch && k.postDispatch.call(this, a), a.result
+ }
+ },
+ handlers: function (a, b) {
+ var c, d, e, f, g = [], h = b.delegateCount, i = a.target;
+ if (h && i.nodeType && (!a.button || "click" !== a.type))for (; i != this; i = i.parentNode || this)if (1 === i.nodeType && (i.disabled !== !0 || "click" !== a.type)) {
+ for (e = [], f = 0; h > f; f++)d = b[f], c = d.selector + " ", void 0 === e[c] && (e[c] = d.needsContext ? m(c, this).index(i) >= 0 : m.find(c, this, null, [i]).length), e[c] && e.push(d);
+ e.length && g.push({elem: i, handlers: e})
+ }
+ return h < b.length && g.push({elem: this, handlers: b.slice(h)}), g
+ },
+ fix: function (a) {
+ if (a[m.expando])return a;
+ var b, c, d, e = a.type, f = a, g = this.fixHooks[e];
+ g || (this.fixHooks[e] = g = Z.test(e) ? this.mouseHooks : Y.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new m.Event(f), b = d.length;
+ while (b--)c = d[b], a[c] = f[c];
+ return a.target || (a.target = f.srcElement || y), 3 === a.target.nodeType && (a.target = a.target.parentNode), a.metaKey = !!a.metaKey, g.filter ? g.filter(a, f) : a
+ },
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+ fixHooks: {},
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "), filter: function (a, b) {
+ return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
+ }
+ },
+ mouseHooks: {
+ props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (a, b) {
+ var c, d, e, f = b.button, g = b.fromElement;
+ return null == a.pageX && null != b.clientX && (d = a.target.ownerDocument || y, e = d.documentElement, c = d.body, a.pageX = b.clientX + (e && e.scrollLeft || c && c.scrollLeft || 0) - (e && e.clientLeft || c && c.clientLeft || 0), a.pageY = b.clientY + (e && e.scrollTop || c && c.scrollTop || 0) - (e && e.clientTop || c && c.clientTop || 0)), !a.relatedTarget && g && (a.relatedTarget = g === a.target ? b.toElement : g), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
+ }
+ },
+ special: {
+ load: {noBubble: !0}, focus: {
+ trigger: function () {
+ if (this !== cb() && this.focus)try {
+ return this.focus(), !1
+ } catch (a) {
+ }
+ }, delegateType: "focusin"
+ }, blur: {
+ trigger: function () {
+ return this === cb() && this.blur ? (this.blur(), !1) : void 0
+ }, delegateType: "focusout"
+ }, click: {
+ trigger: function () {
+ return m.nodeName(this, "input") && "checkbox" === this.type && this.click ? (this.click(), !1) : void 0
+ }, _default: function (a) {
+ return m.nodeName(a.target, "a")
+ }
+ }, beforeunload: {
+ postDispatch: function (a) {
+ void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result)
+ }
+ }
+ },
+ simulate: function (a, b, c, d) {
+ var e = m.extend(new m.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
+ d ? m.event.trigger(e, null, b) : m.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
+ }
+ }, m.removeEvent = y.removeEventListener ? function (a, b, c) {
+ a.removeEventListener && a.removeEventListener(b, c, !1)
+ } : function (a, b, c) {
+ var d = "on" + b;
+ a.detachEvent && (typeof a[d] === K && (a[d] = null), a.detachEvent(d, c))
+ }, m.Event = function (a, b) {
+ return this instanceof m.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? ab : bb) : this.type = a, b && m.extend(this, b), this.timeStamp = a && a.timeStamp || m.now(), void(this[m.expando] = !0)) : new m.Event(a, b)
+ }, m.Event.prototype = {
+ isDefaultPrevented: bb,
+ isPropagationStopped: bb,
+ isImmediatePropagationStopped: bb,
+ preventDefault: function () {
+ var a = this.originalEvent;
+ this.isDefaultPrevented = ab, a && (a.preventDefault ? a.preventDefault() : a.returnValue = !1)
+ },
+ stopPropagation: function () {
+ var a = this.originalEvent;
+ this.isPropagationStopped = ab, a && (a.stopPropagation && a.stopPropagation(), a.cancelBubble = !0)
+ },
+ stopImmediatePropagation: function () {
+ var a = this.originalEvent;
+ this.isImmediatePropagationStopped = ab, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation()
+ }
+ }, m.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function (a, b) {
+ m.event.special[a] = {
+ delegateType: b, bindType: b, handle: function (a) {
+ var c, d = this, e = a.relatedTarget, f = a.handleObj;
+ return (!e || e !== d && !m.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
+ }
+ }
+ }), k.submitBubbles || (m.event.special.submit = {
+ setup: function () {
+ return m.nodeName(this, "form") ? !1 : void m.event.add(this, "click._submit keypress._submit", function (a) {
+ var b = a.target, c = m.nodeName(b, "input") || m.nodeName(b, "button") ? b.form : void 0;
+ c && !m._data(c, "submitBubbles") && (m.event.add(c, "submit._submit", function (a) {
+ a._submit_bubble = !0
+ }), m._data(c, "submitBubbles", !0))
+ })
+ }, postDispatch: function (a) {
+ a._submit_bubble && (delete a._submit_bubble, this.parentNode && !a.isTrigger && m.event.simulate("submit", this.parentNode, a, !0))
+ }, teardown: function () {
+ return m.nodeName(this, "form") ? !1 : void m.event.remove(this, "._submit")
+ }
+ }), k.changeBubbles || (m.event.special.change = {
+ setup: function () {
+ return X.test(this.nodeName) ? (("checkbox" === this.type || "radio" === this.type) && (m.event.add(this, "propertychange._change", function (a) {
+ "checked" === a.originalEvent.propertyName && (this._just_changed = !0)
+ }), m.event.add(this, "click._change", function (a) {
+ this._just_changed && !a.isTrigger && (this._just_changed = !1), m.event.simulate("change", this, a, !0)
+ })), !1) : void m.event.add(this, "beforeactivate._change", function (a) {
+ var b = a.target;
+ X.test(b.nodeName) && !m._data(b, "changeBubbles") && (m.event.add(b, "change._change", function (a) {
+ !this.parentNode || a.isSimulated || a.isTrigger || m.event.simulate("change", this.parentNode, a, !0)
+ }), m._data(b, "changeBubbles", !0))
+ })
+ }, handle: function (a) {
+ var b = a.target;
+ return this !== b || a.isSimulated || a.isTrigger || "radio" !== b.type && "checkbox" !== b.type ? a.handleObj.handler.apply(this, arguments) : void 0
+ }, teardown: function () {
+ return m.event.remove(this, "._change"), !X.test(this.nodeName)
+ }
+ }), k.focusinBubbles || m.each({focus: "focusin", blur: "focusout"}, function (a, b) {
+ var c = function (a) {
+ m.event.simulate(b, a.target, m.event.fix(a), !0)
+ };
+ m.event.special[b] = {
+ setup: function () {
+ var d = this.ownerDocument || this, e = m._data(d, b);
+ e || d.addEventListener(a, c, !0), m._data(d, b, (e || 0) + 1)
+ }, teardown: function () {
+ var d = this.ownerDocument || this, e = m._data(d, b) - 1;
+ e ? m._data(d, b, e) : (d.removeEventListener(a, c, !0), m._removeData(d, b))
+ }
+ }
+ }), m.fn.extend({
+ on: function (a, b, c, d, e) {
+ var f, g;
+ if ("object" == typeof a) {
+ "string" != typeof b && (c = c || b, b = void 0);
+ for (f in a)this.on(f, b, c, a[f], e);
+ return this
+ }
+ if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1)d = bb; else if (!d)return this;
+ return 1 === e && (g = d, d = function (a) {
+ return m().off(a), g.apply(this, arguments)
+ }, d.guid = g.guid || (g.guid = m.guid++)), this.each(function () {
+ m.event.add(this, a, d, c, b)
+ })
+ }, one: function (a, b, c, d) {
+ return this.on(a, b, c, d, 1)
+ }, off: function (a, b, c) {
+ var d, e;
+ if (a && a.preventDefault && a.handleObj)return d = a.handleObj, m(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
+ if ("object" == typeof a) {
+ for (e in a)this.off(e, b, a[e]);
+ return this
+ }
+ return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = bb), this.each(function () {
+ m.event.remove(this, a, c, b)
+ })
+ }, trigger: function (a, b) {
+ return this.each(function () {
+ m.event.trigger(a, b, this)
+ })
+ }, triggerHandler: function (a, b) {
+ var c = this[0];
+ return c ? m.event.trigger(a, b, c, !0) : void 0
+ }
+ });
+ function db(a) {
+ var b = eb.split("|"), c = a.createDocumentFragment();
+ if (c.createElement)while (b.length)c.createElement(b.pop());
+ return c
+ }
+
+ var eb = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", fb = / jQuery\d+="(?:null|\d+)"/g, gb = new RegExp("<(?:" + eb + ")[\\s/>]", "i"), hb = /^\s+/, ib = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, jb = /<([\w:]+)/, kb = /<tbody/i, lb = /<|&#?\w+;/, mb = /<(?:script|style|link)/i, nb = /checked\s*(?:[^=]|=\s*.checked.)/i, ob = /^$|\/(?:java|ecma)script/i, pb = /^true\/(.*)/, qb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, rb = {
+ option: [1, "<select multiple='multiple'>", "</select>"],
+ legend: [1, "<fieldset>", "</fieldset>"],
+ area: [1, "<map>", "</map>"],
+ param: [1, "<object>", "</object>"],
+ thead: [1, "<table>", "</table>"],
+ tr: [2, "<table><tbody>", "</tbody></table>"],
+ col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
+ td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+ _default: k.htmlSerialize ? [0, "", ""] : [1, "X<div>", "</div>"]
+ }, sb = db(y), tb = sb.appendChild(y.createElement("div"));
+ rb.optgroup = rb.option, rb.tbody = rb.tfoot = rb.colgroup = rb.caption = rb.thead, rb.th = rb.td;
+ function ub(a, b) {
+ var c, d, e = 0, f = typeof a.getElementsByTagName !== K ? a.getElementsByTagName(b || "*") : typeof a.querySelectorAll !== K ? a.querySelectorAll(b || "*") : void 0;
+ if (!f)for (f = [], c = a.childNodes || a; null != (d = c[e]); e++)!b || m.nodeName(d, b) ? f.push(d) : m.merge(f, ub(d, b));
+ return void 0 === b || b && m.nodeName(a, b) ? m.merge([a], f) : f
+ }
+
+ function vb(a) {
+ W.test(a.type) && (a.defaultChecked = a.checked)
+ }
+
+ function wb(a, b) {
+ return m.nodeName(a, "table") && m.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
+ }
+
+ function xb(a) {
+ return a.type = (null !== m.find.attr(a, "type")) + "/" + a.type, a
+ }
+
+ function yb(a) {
+ var b = pb.exec(a.type);
+ return b ? a.type = b[1] : a.removeAttribute("type"), a
+ }
+
+ function zb(a, b) {
+ for (var c, d = 0; null != (c = a[d]); d++)m._data(c, "globalEval", !b || m._data(b[d], "globalEval"))
+ }
+
+ function Ab(a, b) {
+ if (1 === b.nodeType && m.hasData(a)) {
+ var c, d, e, f = m._data(a), g = m._data(b, f), h = f.events;
+ if (h) {
+ delete g.handle, g.events = {};
+ for (c in h)for (d = 0, e = h[c].length; e > d; d++)m.event.add(b, c, h[c][d])
+ }
+ g.data && (g.data = m.extend({}, g.data))
+ }
+ }
+
+ function Bb(a, b) {
+ var c, d, e;
+ if (1 === b.nodeType) {
+ if (c = b.nodeName.toLowerCase(), !k.noCloneEvent && b[m.expando]) {
+ e = m._data(b);
+ for (d in e.events)m.removeEvent(b, d, e.handle);
+ b.removeAttribute(m.expando)
+ }
+ "script" === c && b.text !== a.text ? (xb(b).text = a.text, yb(b)) : "object" === c ? (b.parentNode && (b.outerHTML = a.outerHTML), k.html5Clone && a.innerHTML && !m.trim(b.innerHTML) && (b.innerHTML = a.innerHTML)) : "input" === c && W.test(a.type) ? (b.defaultChecked = b.checked = a.checked, b.value !== a.value && (b.value = a.value)) : "option" === c ? b.defaultSelected = b.selected = a.defaultSelected : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
+ }
+ }
+
+ m.extend({
+ clone: function (a, b, c) {
+ var d, e, f, g, h, i = m.contains(a.ownerDocument, a);
+ if (k.html5Clone || m.isXMLDoc(a) || !gb.test("<" + a.nodeName + ">") ? f = a.cloneNode(!0) : (tb.innerHTML = a.outerHTML, tb.removeChild(f = tb.firstChild)), !(k.noCloneEvent && k.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || m.isXMLDoc(a)))for (d = ub(f), h = ub(a), g = 0; null != (e = h[g]); ++g)d[g] && Bb(e, d[g]);
+ if (b)if (c)for (h = h || ub(a), d = d || ub(f), g = 0; null != (e = h[g]); g++)Ab(e, d[g]); else Ab(a, f);
+ return d = ub(f, "script"), d.length > 0 && zb(d, !i && ub(a, "script")), d = h = e = null, f
+ }, buildFragment: function (a, b, c, d) {
+ for (var e, f, g, h, i, j, l, n = a.length, o = db(b), p = [], q = 0; n > q; q++)if (f = a[q], f || 0 === f)if ("object" === m.type(f))m.merge(p, f.nodeType ? [f] : f); else if (lb.test(f)) {
+ h = h || o.appendChild(b.createElement("div")), i = (jb.exec(f) || ["", ""])[1].toLowerCase(), l = rb[i] || rb._default, h.innerHTML = l[1] + f.replace(ib, "<$1></$2>") + l[2], e = l[0];
+ while (e--)h = h.lastChild;
+ if (!k.leadingWhitespace && hb.test(f) && p.push(b.createTextNode(hb.exec(f)[0])), !k.tbody) {
+ f = "table" !== i || kb.test(f) ? "<table>" !== l[1] || kb.test(f) ? 0 : h : h.firstChild, e = f && f.childNodes.length;
+ while (e--)m.nodeName(j = f.childNodes[e], "tbody") && !j.childNodes.length && f.removeChild(j)
+ }
+ m.merge(p, h.childNodes), h.textContent = "";
+ while (h.firstChild)h.removeChild(h.firstChild);
+ h = o.lastChild
+ } else p.push(b.createTextNode(f));
+ h && o.removeChild(h), k.appendChecked || m.grep(ub(p, "input"), vb), q = 0;
+ while (f = p[q++])if ((!d || -1 === m.inArray(f, d)) && (g = m.contains(f.ownerDocument, f), h = ub(o.appendChild(f), "script"), g && zb(h), c)) {
+ e = 0;
+ while (f = h[e++])ob.test(f.type || "") && c.push(f)
+ }
+ return h = null, o
+ }, cleanData: function (a, b) {
+ for (var d, e, f, g, h = 0, i = m.expando, j = m.cache, l = k.deleteExpando, n = m.event.special; null != (d = a[h]); h++)if ((b || m.acceptData(d)) && (f = d[i], g = f && j[f])) {
+ if (g.events)for (e in g.events)n[e] ? m.event.remove(d, e) : m.removeEvent(d, e, g.handle);
+ j[f] && (delete j[f], l ? delete d[i] : typeof d.removeAttribute !== K ? d.removeAttribute(i) : d[i] = null, c.push(f))
+ }
+ }
+ }), m.fn.extend({
+ text: function (a) {
+ return V(this, function (a) {
+ return void 0 === a ? m.text(this) : this.empty().append((this[0] && this[0].ownerDocument || y).createTextNode(a))
+ }, null, a, arguments.length)
+ }, append: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = wb(this, a);
+ b.appendChild(a)
+ }
+ })
+ }, prepend: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = wb(this, a);
+ b.insertBefore(a, b.firstChild)
+ }
+ })
+ }, before: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this)
+ })
+ }, after: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
+ })
+ }, remove: function (a, b) {
+ for (var c, d = a ? m.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || m.cleanData(ub(c)), c.parentNode && (b && m.contains(c.ownerDocument, c) && zb(ub(c, "script")), c.parentNode.removeChild(c));
+ return this
+ }, empty: function () {
+ for (var a, b = 0; null != (a = this[b]); b++) {
+ 1 === a.nodeType && m.cleanData(ub(a, !1));
+ while (a.firstChild)a.removeChild(a.firstChild);
+ a.options && m.nodeName(a, "select") && (a.options.length = 0)
+ }
+ return this
+ }, clone: function (a, b) {
+ return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
+ return m.clone(this, a, b)
+ })
+ }, html: function (a) {
+ return V(this, function (a) {
+ var b = this[0] || {}, c = 0, d = this.length;
+ if (void 0 === a)return 1 === b.nodeType ? b.innerHTML.replace(fb, "") : void 0;
+ if (!("string" != typeof a || mb.test(a) || !k.htmlSerialize && gb.test(a) || !k.leadingWhitespace && hb.test(a) || rb[(jb.exec(a) || ["", ""])[1].toLowerCase()])) {
+ a = a.replace(ib, "<$1></$2>");
+ try {
+ for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (m.cleanData(ub(b, !1)), b.innerHTML = a);
+ b = 0
+ } catch (e) {
+ }
+ }
+ b && this.empty().append(a)
+ }, null, a, arguments.length)
+ }, replaceWith: function () {
+ var a = arguments[0];
+ return this.domManip(arguments, function (b) {
+ a = this.parentNode, m.cleanData(ub(this)), a && a.replaceChild(b, this)
+ }), a && (a.length || a.nodeType) ? this : this.remove()
+ }, detach: function (a) {
+ return this.remove(a, !0)
+ }, domManip: function (a, b) {
+ a = e.apply([], a);
+ var c, d, f, g, h, i, j = 0, l = this.length, n = this, o = l - 1, p = a[0], q = m.isFunction(p);
+ if (q || l > 1 && "string" == typeof p && !k.checkClone && nb.test(p))return this.each(function (c) {
+ var d = n.eq(c);
+ q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
+ });
+ if (l && (i = m.buildFragment(a, this[0].ownerDocument, !1, this), c = i.firstChild, 1 === i.childNodes.length && (i = c), c)) {
+ for (g = m.map(ub(i, "script"), xb), f = g.length; l > j; j++)d = i, j !== o && (d = m.clone(d, !0, !0), f && m.merge(g, ub(d, "script"))), b.call(this[j], d, j);
+ if (f)for (h = g[g.length - 1].ownerDocument, m.map(g, yb), j = 0; f > j; j++)d = g[j], ob.test(d.type || "") && !m._data(d, "globalEval") && m.contains(h, d) && (d.src ? m._evalUrl && m._evalUrl(d.src) : m.globalEval((d.text || d.textContent || d.innerHTML || "").replace(qb, "")));
+ i = c = null
+ }
+ return this
+ }
+ }), m.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (a, b) {
+ m.fn[a] = function (a) {
+ for (var c, d = 0, e = [], g = m(a), h = g.length - 1; h >= d; d++)c = d === h ? this : this.clone(!0), m(g[d])[b](c), f.apply(e, c.get());
+ return this.pushStack(e)
+ }
+ });
+ var Cb, Db = {};
+
+ function Eb(b, c) {
+ var d, e = m(c.createElement(b)).appendTo(c.body), f = a.getDefaultComputedStyle && (d = a.getDefaultComputedStyle(e[0])) ? d.display : m.css(e[0], "display");
+ return e.detach(), f
+ }
+
+ function Fb(a) {
+ var b = y, c = Db[a];
+ return c || (c = Eb(a, b), "none" !== c && c || (Cb = (Cb || m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = (Cb[0].contentWindow || Cb[0].contentDocument).document, b.write(), b.close(), c = Eb(a, b), Cb.detach()), Db[a] = c), c
+ }
+
+ !function () {
+ var a;
+ k.shrinkWrapBlocks = function () {
+ if (null != a)return a;
+ a = !1;
+ var b, c, d;
+ return c = y.getElementsByTagName("body")[0], c && c.style ? (b = y.createElement("div"), d = y.createElement("div"), d.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(d).appendChild(b), typeof b.style.zoom !== K && (b.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1", b.appendChild(y.createElement("div")).style.width = "5px", a = 3 !== b.offsetWidth), c.removeChild(d), a) : void 0
+ }
+ }();
+ var Gb = /^margin/, Hb = new RegExp("^(" + S + ")(?!px)[a-z%]+$", "i"), Ib, Jb, Kb = /^(top|right|bottom|left)$/;
+ a.getComputedStyle ? (Ib = function (b) {
+ return b.ownerDocument.defaultView.opener ? b.ownerDocument.defaultView.getComputedStyle(b, null) : a.getComputedStyle(b, null)
+ }, Jb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Ib(a), g = c ? c.getPropertyValue(b) || c[b] : void 0, c && ("" !== g || m.contains(a.ownerDocument, a) || (g = m.style(a, b)), Hb.test(g) && Gb.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 === g ? g : g + ""
+ }) : y.documentElement.currentStyle && (Ib = function (a) {
+ return a.currentStyle
+ }, Jb = function (a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || Ib(a), g = c ? c[b] : void 0, null == g && h && h[b] && (g = h[b]), Hb.test(g) && !Kb.test(b) && (d = h.left, e = a.runtimeStyle, f = e && e.left, f && (e.left = a.currentStyle.left), h.left = "fontSize" === b ? "1em" : g, g = h.pixelLeft + "px", h.left = d, f && (e.left = f)), void 0 === g ? g : g + "" || "auto"
+ });
+ function Lb(a, b) {
+ return {
+ get: function () {
+ var c = a();
+ if (null != c)return c ? void delete this.get : (this.get = b).apply(this, arguments)
+ }
+ }
+ }
+
+ !function () {
+ var b, c, d, e, f, g, h;
+ if (b = y.createElement("div"), b.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", d = b.getElementsByTagName("a")[0], c = d && d.style) {
+ c.cssText = "float:left;opacity:.5", k.opacity = "0.5" === c.opacity, k.cssFloat = !!c.cssFloat, b.style.backgroundClip = "content-box", b.cloneNode(!0).style.backgroundClip = "", k.clearCloneStyle = "content-box" === b.style.backgroundClip, k.boxSizing = "" === c.boxSizing || "" === c.MozBoxSizing || "" === c.WebkitBoxSizing, m.extend(k, {
+ reliableHiddenOffsets: function () {
+ return null == g && i(), g
+ }, boxSizingReliable: function () {
+ return null == f && i(), f
+ }, pixelPosition: function () {
+ return null == e && i(), e
+ }, reliableMarginRight: function () {
+ return null == h && i(), h
+ }
+ });
+ function i() {
+ var b, c, d, i;
+ c = y.getElementsByTagName("body")[0], c && c.style && (b = y.createElement("div"), d = y.createElement("div"), d.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px", c.appendChild(d).appendChild(b), b.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", e = f = !1, h = !0, a.getComputedStyle && (e = "1%" !== (a.getComputedStyle(b, null) || {}).top, f = "4px" === (a.getComputedStyle(b, null) || {width: "4px"}).width, i = b.appendChild(y.createElement("div")), i.style.cssText = b.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", i.style.marginRight = i.style.width = "0", b.style.width = "1px", h = !parseFloat((a.getComputedStyle(i, null) || {}).marginRight), b.removeChild(i)), b.innerHTML = "<table><tr><td></td><td>t</td></tr></table>", i = b.getElementsByTagName("td"), i[0].style.cssText = "margin:0;border:0;padding:0;display:none", g = 0 === i[0].offsetHeight, g && (i[0].style.display = "", i[1].style.display = "none", g = 0 === i[0].offsetHeight), c.removeChild(d))
+ }
+ }
+ }(), m.swap = function (a, b, c, d) {
+ var e, f, g = {};
+ for (f in b)g[f] = a.style[f], a.style[f] = b[f];
+ e = c.apply(a, d || []);
+ for (f in b)a.style[f] = g[f];
+ return e
+ };
+ var Mb = /alpha\([^)]*\)/i, Nb = /opacity\s*=\s*([^)]*)/, Ob = /^(none|table(?!-c[ea]).+)/, Pb = new RegExp("^(" + S + ")(.*)$", "i"), Qb = new RegExp("^([+-])=(" + S + ")", "i"), Rb = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }, Sb = {letterSpacing: "0", fontWeight: "400"}, Tb = ["Webkit", "O", "Moz", "ms"];
+
+ function Ub(a, b) {
+ if (b in a)return b;
+ var c = b.charAt(0).toUpperCase() + b.slice(1), d = b, e = Tb.length;
+ while (e--)if (b = Tb[e] + c, b in a)return b;
+ return d
+ }
+
+ function Vb(a, b) {
+ for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++)d = a[g], d.style && (f[g] = m._data(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && U(d) && (f[g] = m._data(d, "olddisplay", Fb(d.nodeName)))) : (e = U(d), (c && "none" !== c || !e) && m._data(d, "olddisplay", e ? c : m.css(d, "display"))));
+ for (g = 0; h > g; g++)d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
+ return a
+ }
+
+ function Wb(a, b, c) {
+ var d = Pb.exec(b);
+ return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
+ }
+
+ function Xb(a, b, c, d, e) {
+ for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += m.css(a, c + T[f], !0, e)), d ? ("content" === c && (g -= m.css(a, "padding" + T[f], !0, e)), "margin" !== c && (g -= m.css(a, "border" + T[f] + "Width", !0, e))) : (g += m.css(a, "padding" + T[f], !0, e), "padding" !== c && (g += m.css(a, "border" + T[f] + "Width", !0, e)));
+ return g
+ }
+
+ function Yb(a, b, c) {
+ var d = !0, e = "width" === b ? a.offsetWidth : a.offsetHeight, f = Ib(a), g = k.boxSizing && "border-box" === m.css(a, "boxSizing", !1, f);
+ if (0 >= e || null == e) {
+ if (e = Jb(a, b, f), (0 > e || null == e) && (e = a.style[b]), Hb.test(e))return e;
+ d = g && (k.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
+ }
+ return e + Xb(a, b, c || (g ? "border" : "content"), d, f) + "px"
+ }
+
+ m.extend({
+ cssHooks: {
+ opacity: {
+ get: function (a, b) {
+ if (b) {
+ var c = Jb(a, "opacity");
+ return "" === c ? "1" : c
+ }
+ }
+ }
+ },
+ cssNumber: {
+ 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: {"float": k.cssFloat ? "cssFloat" : "styleFloat"},
+ style: function (a, b, c, d) {
+ if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
+ var e, f, g, h = m.camelCase(b), i = a.style;
+ if (b = m.cssProps[h] || (m.cssProps[h] = Ub(i, h)), g = m.cssHooks[b] || m.cssHooks[h], void 0 === c)return g && "get"in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b];
+ if (f = typeof c, "string" === f && (e = Qb.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(m.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || m.cssNumber[h] || (c += "px"), k.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), !(g && "set"in g && void 0 === (c = g.set(a, c, d)))))try {
+ i[b] = c
+ } catch (j) {
+ }
+ }
+ },
+ css: function (a, b, c, d) {
+ var e, f, g, h = m.camelCase(b);
+ return b = m.cssProps[h] || (m.cssProps[h] = Ub(a.style, h)), g = m.cssHooks[b] || m.cssHooks[h], g && "get"in g && (f = g.get(a, !0, c)), void 0 === f && (f = Jb(a, b, d)), "normal" === f && b in Sb && (f = Sb[b]), "" === c || c ? (e = parseFloat(f), c === !0 || m.isNumeric(e) ? e || 0 : f) : f
+ }
+ }), m.each(["height", "width"], function (a, b) {
+ m.cssHooks[b] = {
+ get: function (a, c, d) {
+ return c ? Ob.test(m.css(a, "display")) && 0 === a.offsetWidth ? m.swap(a, Rb, function () {
+ return Yb(a, b, d)
+ }) : Yb(a, b, d) : void 0
+ }, set: function (a, c, d) {
+ var e = d && Ib(a);
+ return Wb(a, c, d ? Xb(a, b, d, k.boxSizing && "border-box" === m.css(a, "boxSizing", !1, e), e) : 0)
+ }
+ }
+ }), k.opacity || (m.cssHooks.opacity = {
+ get: function (a, b) {
+ return Nb.test((b && a.currentStyle ? a.currentStyle.filter : a.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : b ? "1" : ""
+ }, set: function (a, b) {
+ var c = a.style, d = a.currentStyle, e = m.isNumeric(b) ? "alpha(opacity=" + 100 * b + ")" : "", f = d && d.filter || c.filter || "";
+ c.zoom = 1, (b >= 1 || "" === b) && "" === m.trim(f.replace(Mb, "")) && c.removeAttribute && (c.removeAttribute("filter"), "" === b || d && !d.filter) || (c.filter = Mb.test(f) ? f.replace(Mb, e) : f + " " + e)
+ }
+ }), m.cssHooks.marginRight = Lb(k.reliableMarginRight, function (a, b) {
+ return b ? m.swap(a, {display: "inline-block"}, Jb, [a, "marginRight"]) : void 0
+ }), m.each({margin: "", padding: "", border: "Width"}, function (a, b) {
+ m.cssHooks[a + b] = {
+ expand: function (c) {
+ for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++)e[a + T[d] + b] = f[d] || f[d - 2] || f[0];
+ return e
+ }
+ }, Gb.test(a) || (m.cssHooks[a + b].set = Wb)
+ }), m.fn.extend({
+ css: function (a, b) {
+ return V(this, function (a, b, c) {
+ var d, e, f = {}, g = 0;
+ if (m.isArray(b)) {
+ for (d = Ib(a), e = b.length; e > g; g++)f[b[g]] = m.css(a, b[g], !1, d);
+ return f
+ }
+ return void 0 !== c ? m.style(a, b, c) : m.css(a, b)
+ }, a, b, arguments.length > 1)
+ }, show: function () {
+ return Vb(this, !0)
+ }, hide: function () {
+ return Vb(this)
+ }, toggle: function (a) {
+ return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
+ U(this) ? m(this).show() : m(this).hide()
+ })
+ }
+ });
+ function Zb(a, b, c, d, e) {
+ return new Zb.prototype.init(a, b, c, d, e)
+ }
+
+ m.Tween = Zb, Zb.prototype = {
+ constructor: Zb, init: function (a, b, c, d, e, f) {
+ this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (m.cssNumber[c] ? "" : "px")
+ }, cur: function () {
+ var a = Zb.propHooks[this.prop];
+ return a && a.get ? a.get(this) : Zb.propHooks._default.get(this)
+ }, run: function (a) {
+ var b, c = Zb.propHooks[this.prop];
+ return this.pos = b = this.options.duration ? m.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : Zb.propHooks._default.set(this), this
+ }
+ }, Zb.prototype.init.prototype = Zb.prototype, Zb.propHooks = {
+ _default: {
+ get: function (a) {
+ var b;
+ return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = m.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
+ }, set: function (a) {
+ m.fx.step[a.prop] ? m.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[m.cssProps[a.prop]] || m.cssHooks[a.prop]) ? m.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
+ }
+ }
+ }, Zb.propHooks.scrollTop = Zb.propHooks.scrollLeft = {
+ set: function (a) {
+ a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
+ }
+ }, m.easing = {
+ linear: function (a) {
+ return a
+ }, swing: function (a) {
+ return .5 - Math.cos(a * Math.PI) / 2
+ }
+ }, m.fx = Zb.prototype.init, m.fx.step = {};
+ var $b, _b, ac = /^(?:toggle|show|hide)$/, bc = new RegExp("^(?:([+-])=|)(" + S + ")([a-z%]*)$", "i"), cc = /queueHooks$/, dc = [ic], ec = {
+ "*": [function (a, b) {
+ var c = this.createTween(a, b), d = c.cur(), e = bc.exec(b), f = e && e[3] || (m.cssNumber[a] ? "" : "px"), g = (m.cssNumber[a] || "px" !== f && +d) && bc.exec(m.css(c.elem, a)), h = 1, i = 20;
+ if (g && g[3] !== f) {
+ f = f || g[3], e = e || [], g = +d || 1;
+ do h = h || ".5", g /= h, m.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
+ }
+ return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
+ }]
+ };
+
+ function fc() {
+ return setTimeout(function () {
+ $b = void 0
+ }), $b = m.now()
+ }
+
+ function gc(a, b) {
+ var c, d = {height: a}, e = 0;
+ for (b = b ? 1 : 0; 4 > e; e += 2 - b)c = T[e], d["margin" + c] = d["padding" + c] = a;
+ return b && (d.opacity = d.width = a), d
+ }
+
+ function hc(a, b, c) {
+ for (var d, e = (ec[b] || []).concat(ec["*"]), f = 0, g = e.length; g > f; f++)if (d = e[f].call(c, b, a))return d
+ }
+
+ function ic(a, b, c) {
+ var d, e, f, g, h, i, j, l, n = this, o = {}, p = a.style, q = a.nodeType && U(a), r = m._data(a, "fxshow");
+ c.queue || (h = m._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
+ h.unqueued || i()
+ }), h.unqueued++, n.always(function () {
+ n.always(function () {
+ h.unqueued--, m.queue(a, "fx").length || h.empty.fire()
+ })
+ })), 1 === a.nodeType && ("height"in b || "width"in b) && (c.overflow = [p.overflow, p.overflowX, p.overflowY], j = m.css(a, "display"), l = "none" === j ? m._data(a, "olddisplay") || Fb(a.nodeName) : j, "inline" === l && "none" === m.css(a, "float") && (k.inlineBlockNeedsLayout && "inline" !== Fb(a.nodeName) ? p.zoom = 1 : p.display = "inline-block")), c.overflow && (p.overflow = "hidden", k.shrinkWrapBlocks() || n.always(function () {
+ p.overflow = c.overflow[0], p.overflowX = c.overflow[1], p.overflowY = c.overflow[2]
+ }));
+ for (d in b)if (e = b[d], ac.exec(e)) {
+ if (delete b[d], f = f || "toggle" === e, e === (q ? "hide" : "show")) {
+ if ("show" !== e || !r || void 0 === r[d])continue;
+ q = !0
+ }
+ o[d] = r && r[d] || m.style(a, d)
+ } else j = void 0;
+ if (m.isEmptyObject(o))"inline" === ("none" === j ? Fb(a.nodeName) : j) && (p.display = j); else {
+ r ? "hidden"in r && (q = r.hidden) : r = m._data(a, "fxshow", {}), f && (r.hidden = !q), q ? m(a).show() : n.done(function () {
+ m(a).hide()
+ }), n.done(function () {
+ var b;
+ m._removeData(a, "fxshow");
+ for (b in o)m.style(a, b, o[b])
+ });
+ for (d in o)g = hc(q ? r[d] : 0, d, n), d in r || (r[d] = g.start, q && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
+ }
+ }
+
+ function jc(a, b) {
+ var c, d, e, f, g;
+ for (c in a)if (d = m.camelCase(c), e = b[d], f = a[c], m.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = m.cssHooks[d], g && "expand"in g) {
+ f = g.expand(f), delete a[d];
+ for (c in f)c in a || (a[c] = f[c], b[c] = e)
+ } else b[d] = e
+ }
+
+ function kc(a, b, c) {
+ var d, e, f = 0, g = dc.length, h = m.Deferred().always(function () {
+ delete i.elem
+ }), i = function () {
+ if (e)return !1;
+ for (var b = $b || fc(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++)j.tweens[g].run(f);
+ return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
+ }, j = h.promise({
+ elem: a,
+ props: m.extend({}, b),
+ opts: m.extend(!0, {specialEasing: {}}, c),
+ originalProperties: b,
+ originalOptions: c,
+ startTime: $b || fc(),
+ duration: c.duration,
+ tweens: [],
+ createTween: function (b, c) {
+ var d = m.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
+ return j.tweens.push(d), d
+ },
+ stop: function (b) {
+ var c = 0, d = b ? j.tweens.length : 0;
+ if (e)return this;
+ for (e = !0; d > c; c++)j.tweens[c].run(1);
+ return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
+ }
+ }), k = j.props;
+ for (jc(k, j.opts.specialEasing); g > f; f++)if (d = dc[f].call(j, a, k, j.opts))return d;
+ return m.map(k, hc, j), m.isFunction(j.opts.start) && j.opts.start.call(a, j), m.fx.timer(m.extend(i, {
+ elem: a,
+ anim: j,
+ queue: j.opts.queue
+ })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
+ }
+
+ m.Animation = m.extend(kc, {
+ tweener: function (a, b) {
+ m.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
+ for (var c, d = 0, e = a.length; e > d; d++)c = a[d], ec[c] = ec[c] || [], ec[c].unshift(b)
+ }, prefilter: function (a, b) {
+ b ? dc.unshift(a) : dc.push(a)
+ }
+ }), m.speed = function (a, b, c) {
+ var d = a && "object" == typeof a ? m.extend({}, a) : {
+ complete: c || !c && b || m.isFunction(a) && a,
+ duration: a,
+ easing: c && b || b && !m.isFunction(b) && b
+ };
+ return d.duration = m.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in m.fx.speeds ? m.fx.speeds[d.duration] : m.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function () {
+ m.isFunction(d.old) && d.old.call(this), d.queue && m.dequeue(this, d.queue)
+ }, d
+ }, m.fn.extend({
+ fadeTo: function (a, b, c, d) {
+ return this.filter(U).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
+ }, animate: function (a, b, c, d) {
+ var e = m.isEmptyObject(a), f = m.speed(b, c, d), g = function () {
+ var b = kc(this, m.extend({}, a), f);
+ (e || m._data(this, "finish")) && b.stop(!0)
+ };
+ return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
+ }, stop: function (a, b, c) {
+ var d = function (a) {
+ var b = a.stop;
+ delete a.stop, b(c)
+ };
+ return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () {
+ var b = !0, e = null != a && a + "queueHooks", f = m.timers, g = m._data(this);
+ if (e)g[e] && g[e].stop && d(g[e]); else for (e in g)g[e] && g[e].stop && cc.test(e) && d(g[e]);
+ for (e = f.length; e--;)f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
+ (b || !c) && m.dequeue(this, a)
+ })
+ }, finish: function (a) {
+ return a !== !1 && (a = a || "fx"), this.each(function () {
+ var b, c = m._data(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = m.timers, g = d ? d.length : 0;
+ for (c.finish = !0, m.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;)f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
+ for (b = 0; g > b; b++)d[b] && d[b].finish && d[b].finish.call(this);
+ delete c.finish
+ })
+ }
+ }), m.each(["toggle", "show", "hide"], function (a, b) {
+ var c = m.fn[b];
+ m.fn[b] = function (a, d, e) {
+ return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(gc(b, !0), a, d, e)
+ }
+ }), m.each({
+ slideDown: gc("show"),
+ slideUp: gc("hide"),
+ slideToggle: gc("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (a, b) {
+ m.fn[a] = function (a, c, d) {
+ return this.animate(b, a, c, d)
+ }
+ }), m.timers = [], m.fx.tick = function () {
+ var a, b = m.timers, c = 0;
+ for ($b = m.now(); c < b.length; c++)a = b[c], a() || b[c] !== a || b.splice(c--, 1);
+ b.length || m.fx.stop(), $b = void 0
+ }, m.fx.timer = function (a) {
+ m.timers.push(a), a() ? m.fx.start() : m.timers.pop()
+ }, m.fx.interval = 13, m.fx.start = function () {
+ _b || (_b = setInterval(m.fx.tick, m.fx.interval))
+ }, m.fx.stop = function () {
+ clearInterval(_b), _b = null
+ }, m.fx.speeds = {slow: 600, fast: 200, _default: 400}, m.fn.delay = function (a, b) {
+ return a = m.fx ? m.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
+ var d = setTimeout(b, a);
+ c.stop = function () {
+ clearTimeout(d)
+ }
+ })
+ }, function () {
+ var a, b, c, d, e;
+ b = y.createElement("div"), b.setAttribute("className", "t"), b.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>", d = b.getElementsByTagName("a")[0], c = y.createElement("select"), e = c.appendChild(y.createElement("option")), a = b.getElementsByTagName("input")[0], d.style.cssText = "top:1px", k.getSetAttribute = "t" !== b.className, k.style = /top/.test(d.getAttribute("style")), k.hrefNormalized = "/a" === d.getAttribute("href"), k.checkOn = !!a.value, k.optSelected = e.selected, k.enctype = !!y.createElement("form").enctype, c.disabled = !0, k.optDisabled = !e.disabled, a = y.createElement("input"), a.setAttribute("value", ""), k.input = "" === a.getAttribute("value"), a.value = "t", a.setAttribute("type", "radio"), k.radioValue = "t" === a.value
+ }();
+ var lc = /\r/g;
+ m.fn.extend({
+ val: function (a) {
+ var b, c, d, e = this[0];
+ {
+ if (arguments.length)return d = m.isFunction(a), this.each(function (c) {
+ var e;
+ 1 === this.nodeType && (e = d ? a.call(this, c, m(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : m.isArray(e) && (e = m.map(e, function (a) {
+ return null == a ? "" : a + ""
+ })), b = m.valHooks[this.type] || m.valHooks[this.nodeName.toLowerCase()], b && "set"in b && void 0 !== b.set(this, e, "value") || (this.value = e))
+ });
+ if (e)return b = m.valHooks[e.type] || m.valHooks[e.nodeName.toLowerCase()], b && "get"in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(lc, "") : null == c ? "" : c)
+ }
+ }
+ }), m.extend({
+ valHooks: {
+ option: {
+ get: function (a) {
+ var b = m.find.attr(a, "value");
+ return null != b ? b : m.trim(m.text(a))
+ }
+ }, select: {
+ get: function (a) {
+ for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)if (c = d[i], !(!c.selected && i !== e || (k.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && m.nodeName(c.parentNode, "optgroup"))) {
+ if (b = m(c).val(), f)return b;
+ g.push(b)
+ }
+ return g
+ }, set: function (a, b) {
+ var c, d, e = a.options, f = m.makeArray(b), g = e.length;
+ while (g--)if (d = e[g], m.inArray(m.valHooks.option.get(d), f) >= 0)try {
+ d.selected = c = !0
+ } catch (h) {
+ d.scrollHeight
+ } else d.selected = !1;
+ return c || (a.selectedIndex = -1), e
+ }
+ }
+ }
+ }), m.each(["radio", "checkbox"], function () {
+ m.valHooks[this] = {
+ set: function (a, b) {
+ return m.isArray(b) ? a.checked = m.inArray(m(a).val(), b) >= 0 : void 0
+ }
+ }, k.checkOn || (m.valHooks[this].get = function (a) {
+ return null === a.getAttribute("value") ? "on" : a.value
+ })
+ });
+ var mc, nc, oc = m.expr.attrHandle, pc = /^(?:checked|selected)$/i, qc = k.getSetAttribute, rc = k.input;
+ m.fn.extend({
+ attr: function (a, b) {
+ return V(this, m.attr, a, b, arguments.length > 1)
+ }, removeAttr: function (a) {
+ return this.each(function () {
+ m.removeAttr(this, a)
+ })
+ }
+ }), m.extend({
+ attr: function (a, b, c) {
+ var d, e, f = a.nodeType;
+ if (a && 3 !== f && 8 !== f && 2 !== f)return typeof a.getAttribute === K ? m.prop(a, b, c) : (1 === f && m.isXMLDoc(a) || (b = b.toLowerCase(), d = m.attrHooks[b] || (m.expr.match.bool.test(b) ? nc : mc)), void 0 === c ? d && "get"in d && null !== (e = d.get(a, b)) ? e : (e = m.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set"in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void m.removeAttr(a, b))
+ }, removeAttr: function (a, b) {
+ var c, d, e = 0, f = b && b.match(E);
+ if (f && 1 === a.nodeType)while (c = f[e++])d = m.propFix[c] || c, m.expr.match.bool.test(c) ? rc && qc || !pc.test(c) ? a[d] = !1 : a[m.camelCase("default-" + c)] = a[d] = !1 : m.attr(a, c, ""), a.removeAttribute(qc ? c : d)
+ }, attrHooks: {
+ type: {
+ set: function (a, b) {
+ if (!k.radioValue && "radio" === b && m.nodeName(a, "input")) {
+ var c = a.value;
+ return a.setAttribute("type", b), c && (a.value = c), b
+ }
+ }
+ }
+ }
+ }), nc = {
+ set: function (a, b, c) {
+ return b === !1 ? m.removeAttr(a, c) : rc && qc || !pc.test(c) ? a.setAttribute(!qc && m.propFix[c] || c, c) : a[m.camelCase("default-" + c)] = a[c] = !0, c
+ }
+ }, m.each(m.expr.match.bool.source.match(/\w+/g), function (a, b) {
+ var c = oc[b] || m.find.attr;
+ oc[b] = rc && qc || !pc.test(b) ? function (a, b, d) {
+ var e, f;
+ return d || (f = oc[b], oc[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, oc[b] = f), e
+ } : function (a, b, c) {
+ return c ? void 0 : a[m.camelCase("default-" + b)] ? b.toLowerCase() : null
+ }
+ }), rc && qc || (m.attrHooks.value = {
+ set: function (a, b, c) {
+ return m.nodeName(a, "input") ? void(a.defaultValue = b) : mc && mc.set(a, b, c)
+ }
+ }), qc || (mc = {
+ set: function (a, b, c) {
+ var d = a.getAttributeNode(c);
+ return d || a.setAttributeNode(d = a.ownerDocument.createAttribute(c)), d.value = b += "", "value" === c || b === a.getAttribute(c) ? b : void 0
+ }
+ }, oc.id = oc.name = oc.coords = function (a, b, c) {
+ var d;
+ return c ? void 0 : (d = a.getAttributeNode(b)) && "" !== d.value ? d.value : null
+ }, m.valHooks.button = {
+ get: function (a, b) {
+ var c = a.getAttributeNode(b);
+ return c && c.specified ? c.value : void 0
+ }, set: mc.set
+ }, m.attrHooks.contenteditable = {
+ set: function (a, b, c) {
+ mc.set(a, "" === b ? !1 : b, c)
+ }
+ }, m.each(["width", "height"], function (a, b) {
+ m.attrHooks[b] = {
+ set: function (a, c) {
+ return "" === c ? (a.setAttribute(b, "auto"), c) : void 0
+ }
+ }
+ })), k.style || (m.attrHooks.style = {
+ get: function (a) {
+ return a.style.cssText || void 0
+ }, set: function (a, b) {
+ return a.style.cssText = b + ""
+ }
+ });
+ var sc = /^(?:input|select|textarea|button|object)$/i, tc = /^(?:a|area)$/i;
+ m.fn.extend({
+ prop: function (a, b) {
+ return V(this, m.prop, a, b, arguments.length > 1)
+ }, removeProp: function (a) {
+ return a = m.propFix[a] || a, this.each(function () {
+ try {
+ this[a] = void 0, delete this[a]
+ } catch (b) {
+ }
+ })
+ }
+ }), m.extend({
+ propFix: {"for": "htmlFor", "class": "className"}, prop: function (a, b, c) {
+ var d, e, f, g = a.nodeType;
+ if (a && 3 !== g && 8 !== g && 2 !== g)return f = 1 !== g || !m.isXMLDoc(a), f && (b = m.propFix[b] || b, e = m.propHooks[b]), void 0 !== c ? e && "set"in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get"in e && null !== (d = e.get(a, b)) ? d : a[b]
+ }, propHooks: {
+ tabIndex: {
+ get: function (a) {
+ var b = m.find.attr(a, "tabindex");
+ return b ? parseInt(b, 10) : sc.test(a.nodeName) || tc.test(a.nodeName) && a.href ? 0 : -1
+ }
+ }
+ }
+ }), k.hrefNormalized || m.each(["href", "src"], function (a, b) {
+ m.propHooks[b] = {
+ get: function (a) {
+ return a.getAttribute(b, 4)
+ }
+ }
+ }), k.optSelected || (m.propHooks.selected = {
+ get: function (a) {
+ var b = a.parentNode;
+ return b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex), null
+ }
+ }), m.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
+ m.propFix[this.toLowerCase()] = this
+ }), k.enctype || (m.propFix.enctype = "encoding");
+ var uc = /[\t\r\n\f]/g;
+ m.fn.extend({
+ addClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = "string" == typeof a && a;
+ if (m.isFunction(a))return this.each(function (b) {
+ m(this).addClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(E) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(uc, " ") : " ")) {
+ f = 0;
+ while (e = b[f++])d.indexOf(" " + e + " ") < 0 && (d += e + " ");
+ g = m.trim(d), c.className !== g && (c.className = g)
+ }
+ return this
+ }, removeClass: function (a) {
+ var b, c, d, e, f, g, h = 0, i = this.length, j = 0 === arguments.length || "string" == typeof a && a;
+ if (m.isFunction(a))return this.each(function (b) {
+ m(this).removeClass(a.call(this, b, this.className))
+ });
+ if (j)for (b = (a || "").match(E) || []; i > h; h++)if (c = this[h], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(uc, " ") : "")) {
+ f = 0;
+ while (e = b[f++])while (d.indexOf(" " + e + " ") >= 0)d = d.replace(" " + e + " ", " ");
+ g = a ? m.trim(d) : "", c.className !== g && (c.className = g)
+ }
+ return this
+ }, toggleClass: function (a, b) {
+ var c = typeof a;
+ return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(m.isFunction(a) ? function (c) {
+ m(this).toggleClass(a.call(this, c, this.className, b), b)
+ } : function () {
+ if ("string" === c) {
+ var b, d = 0, e = m(this), f = a.match(E) || [];
+ while (b = f[d++])e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
+ } else(c === K || "boolean" === c) && (this.className && m._data(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : m._data(this, "__className__") || "")
+ })
+ }, hasClass: function (a) {
+ for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(uc, " ").indexOf(b) >= 0)return !0;
+ return !1
+ }
+ }), m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
+ m.fn[b] = function (a, c) {
+ return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
+ }
+ }), m.fn.extend({
+ hover: function (a, b) {
+ return this.mouseenter(a).mouseleave(b || a)
+ }, bind: function (a, b, c) {
+ return this.on(a, null, b, c)
+ }, unbind: function (a, b) {
+ return this.off(a, null, b)
+ }, delegate: function (a, b, c, d) {
+ return this.on(b, a, c, d)
+ }, undelegate: function (a, b, c) {
+ return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
+ }
+ });
+ var vc = m.now(), wc = /\?/, xc = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+ m.parseJSON = function (b) {
+ if (a.JSON && a.JSON.parse)return a.JSON.parse(b + "");
+ var c, d = null, e = m.trim(b + "");
+ return e && !m.trim(e.replace(xc, function (a, b, e, f) {
+ return c && b && (d = 0), 0 === d ? a : (c = e || b, d += !f - !e, "")
+ })) ? Function("return " + e)() : m.error("Invalid JSON: " + b)
+ }, m.parseXML = function (b) {
+ var c, d;
+ if (!b || "string" != typeof b)return null;
+ try {
+ a.DOMParser ? (d = new DOMParser, c = d.parseFromString(b, "text/xml")) : (c = new ActiveXObject("Microsoft.XMLDOM"), c.async = "false", c.loadXML(b))
+ } catch (e) {
+ c = void 0
+ }
+ return c && c.documentElement && !c.getElementsByTagName("parsererror").length || m.error("Invalid XML: " + b), c
+ };
+ var yc, zc, Ac = /#.*$/, Bc = /([?&])_=[^&]*/, Cc = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, Dc = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, Ec = /^(?:GET|HEAD)$/, Fc = /^\/\//, Gc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, Hc = {}, Ic = {}, Jc = "*/".concat("*");
+ try {
+ zc = location.href
+ } catch (Kc) {
+ zc = y.createElement("a"), zc.href = "", zc = zc.href
+ }
+ yc = Gc.exec(zc.toLowerCase()) || [];
+ function Lc(a) {
+ return function (b, c) {
+ "string" != typeof b && (c = b, b = "*");
+ var d, e = 0, f = b.toLowerCase().match(E) || [];
+ if (m.isFunction(c))while (d = f[e++])"+" === d.charAt(0) ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
+ }
+ }
+
+ function Mc(a, b, c, d) {
+ var e = {}, f = a === Ic;
+
+ function g(h) {
+ var i;
+ return e[h] = !0, m.each(a[h] || [], function (a, h) {
+ var j = h(b, c, d);
+ return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
+ }), i
+ }
+
+ return g(b.dataTypes[0]) || !e["*"] && g("*")
+ }
+
+ function Nc(a, b) {
+ var c, d, e = m.ajaxSettings.flatOptions || {};
+ for (d in b)void 0 !== b[d] && ((e[d] ? a : c || (c = {}))[d] = b[d]);
+ return c && m.extend(!0, a, c), a
+ }
+
+ function Oc(a, b, c) {
+ var d, e, f, g, h = a.contents, i = a.dataTypes;
+ while ("*" === i[0])i.shift(), void 0 === e && (e = a.mimeType || b.getResponseHeader("Content-Type"));
+ if (e)for (g in h)if (h[g] && h[g].test(e)) {
+ i.unshift(g);
+ break
+ }
+ if (i[0]in c)f = i[0]; else {
+ for (g in c) {
+ if (!i[0] || a.converters[g + " " + i[0]]) {
+ f = g;
+ break
+ }
+ d || (d = g)
+ }
+ f = f || d
+ }
+ return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
+ }
+
+ function Pc(a, b, c, d) {
+ var e, f, g, h, i, j = {}, k = a.dataTypes.slice();
+ if (k[1])for (g in a.converters)j[g.toLowerCase()] = a.converters[g];
+ f = k.shift();
+ while (f)if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())if ("*" === f)f = i; else if ("*" !== i && i !== f) {
+ if (g = j[i + " " + f] || j["* " + f], !g)for (e in j)if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
+ g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
+ break
+ }
+ if (g !== !0)if (g && a["throws"])b = g(b); else try {
+ b = g(b)
+ } catch (l) {
+ return {state: "parsererror", error: g ? l : "No conversion from " + i + " to " + f}
+ }
+ }
+ return {state: "success", data: b}
+ }
+
+ m.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: zc,
+ type: "GET",
+ isLocal: Dc.test(yc[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": Jc,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {xml: /xml/, html: /html/, json: /json/},
+ responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"},
+ converters: {"* text": String, "text html": !0, "text json": m.parseJSON, "text xml": m.parseXML},
+ flatOptions: {url: !0, context: !0}
+ },
+ ajaxSetup: function (a, b) {
+ return b ? Nc(Nc(a, m.ajaxSettings), b) : Nc(m.ajaxSettings, a)
+ },
+ ajaxPrefilter: Lc(Hc),
+ ajaxTransport: Lc(Ic),
+ ajax: function (a, b) {
+ "object" == typeof a && (b = a, a = void 0), b = b || {};
+ var c, d, e, f, g, h, i, j, k = m.ajaxSetup({}, b), l = k.context || k, n = k.context && (l.nodeType || l.jquery) ? m(l) : m.event, o = m.Deferred(), p = m.Callbacks("once memory"), q = k.statusCode || {}, r = {}, s = {}, t = 0, u = "canceled", v = {
+ readyState: 0,
+ getResponseHeader: function (a) {
+ var b;
+ if (2 === t) {
+ if (!j) {
+ j = {};
+ while (b = Cc.exec(f))j[b[1].toLowerCase()] = b[2]
+ }
+ b = j[a.toLowerCase()]
+ }
+ return null == b ? null : b
+ },
+ getAllResponseHeaders: function () {
+ return 2 === t ? f : null
+ },
+ setRequestHeader: function (a, b) {
+ var c = a.toLowerCase();
+ return t || (a = s[c] = s[c] || a, r[a] = b), this
+ },
+ overrideMimeType: function (a) {
+ return t || (k.mimeType = a), this
+ },
+ statusCode: function (a) {
+ var b;
+ if (a)if (2 > t)for (b in a)q[b] = [q[b], a[b]]; else v.always(a[v.status]);
+ return this
+ },
+ abort: function (a) {
+ var b = a || u;
+ return i && i.abort(b), x(0, b), this
+ }
+ };
+ if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || zc) + "").replace(Ac, "").replace(Fc, yc[1] + "//"), k.type = b.method || b.type || k.method || k.type, k.dataTypes = m.trim(k.dataType || "*").toLowerCase().match(E) || [""], null == k.crossDomain && (c = Gc.exec(k.url.toLowerCase()), k.crossDomain = !(!c || c[1] === yc[1] && c[2] === yc[2] && (c[3] || ("http:" === c[1] ? "80" : "443")) === (yc[3] || ("http:" === yc[1] ? "80" : "443")))), k.data && k.processData && "string" != typeof k.data && (k.data = m.param(k.data, k.traditional)), Mc(Hc, k, b, v), 2 === t)return v;
+ h = m.event && k.global, h && 0 === m.active++ && m.event.trigger("ajaxStart"), k.type = k.type.toUpperCase(), k.hasContent = !Ec.test(k.type), e = k.url, k.hasContent || (k.data && (e = k.url += (wc.test(e) ? "&" : "?") + k.data, delete k.data), k.cache === !1 && (k.url = Bc.test(e) ? e.replace(Bc, "$1_=" + vc++) : e + (wc.test(e) ? "&" : "?") + "_=" + vc++)), k.ifModified && (m.lastModified[e] && v.setRequestHeader("If-Modified-Since", m.lastModified[e]), m.etag[e] && v.setRequestHeader("If-None-Match", m.etag[e])), (k.data && k.hasContent && k.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", k.contentType), v.setRequestHeader("Accept", k.dataTypes[0] && k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + ("*" !== k.dataTypes[0] ? ", " + Jc + "; q=0.01" : "") : k.accepts["*"]);
+ for (d in k.headers)v.setRequestHeader(d, k.headers[d]);
+ if (k.beforeSend && (k.beforeSend.call(l, v, k) === !1 || 2 === t))return v.abort();
+ u = "abort";
+ for (d in{success: 1, error: 1, complete: 1})v[d](k[d]);
+ if (i = Mc(Ic, k, b, v)) {
+ v.readyState = 1, h && n.trigger("ajaxSend", [v, k]), k.async && k.timeout > 0 && (g = setTimeout(function () {
+ v.abort("timeout")
+ }, k.timeout));
+ try {
+ t = 1, i.send(r, x)
+ } catch (w) {
+ if (!(2 > t))throw w;
+ x(-1, w)
+ }
+ } else x(-1, "No Transport");
+ function x(a, b, c, d) {
+ var j, r, s, u, w, x = b;
+ 2 !== t && (t = 2, g && clearTimeout(g), i = void 0, f = d || "", v.readyState = a > 0 ? 4 : 0, j = a >= 200 && 300 > a || 304 === a, c && (u = Oc(k, v, c)), u = Pc(k, u, v, j), j ? (k.ifModified && (w = v.getResponseHeader("Last-Modified"), w && (m.lastModified[e] = w), w = v.getResponseHeader("etag"), w && (m.etag[e] = w)), 204 === a || "HEAD" === k.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || x) + "", j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, h && n.trigger(j ? "ajaxSuccess" : "ajaxError", [v, k, j ? r : s]), p.fireWith(l, [v, x]), h && (n.trigger("ajaxComplete", [v, k]), --m.active || m.event.trigger("ajaxStop")))
+ }
+
+ return v
+ },
+ getJSON: function (a, b, c) {
+ return m.get(a, b, c, "json")
+ },
+ getScript: function (a, b) {
+ return m.get(a, void 0, b, "script")
+ }
+ }), m.each(["get", "post"], function (a, b) {
+ m[b] = function (a, c, d, e) {
+ return m.isFunction(c) && (e = e || d, d = c, c = void 0), m.ajax({
+ url: a,
+ type: b,
+ dataType: e,
+ data: c,
+ success: d
+ })
+ }
+ }), m._evalUrl = function (a) {
+ return m.ajax({url: a, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0})
+ }, m.fn.extend({
+ wrapAll: function (a) {
+ if (m.isFunction(a))return this.each(function (b) {
+ m(this).wrapAll(a.call(this, b))
+ });
+ if (this[0]) {
+ var b = m(a, this[0].ownerDocument).eq(0).clone(!0);
+ this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
+ var a = this;
+ while (a.firstChild && 1 === a.firstChild.nodeType)a = a.firstChild;
+ return a
+ }).append(this)
+ }
+ return this
+ }, wrapInner: function (a) {
+ return this.each(m.isFunction(a) ? function (b) {
+ m(this).wrapInner(a.call(this, b))
+ } : function () {
+ var b = m(this), c = b.contents();
+ c.length ? c.wrapAll(a) : b.append(a)
+ })
+ }, wrap: function (a) {
+ var b = m.isFunction(a);
+ return this.each(function (c) {
+ m(this).wrapAll(b ? a.call(this, c) : a)
+ })
+ }, unwrap: function () {
+ return this.parent().each(function () {
+ m.nodeName(this, "body") || m(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), m.expr.filters.hidden = function (a) {
+ return a.offsetWidth <= 0 && a.offsetHeight <= 0 || !k.reliableHiddenOffsets() && "none" === (a.style && a.style.display || m.css(a, "display"))
+ }, m.expr.filters.visible = function (a) {
+ return !m.expr.filters.hidden(a)
+ };
+ var Qc = /%20/g, Rc = /\[\]$/, Sc = /\r?\n/g, Tc = /^(?:submit|button|image|reset|file)$/i, Uc = /^(?:input|select|textarea|keygen)/i;
+
+ function Vc(a, b, c, d) {
+ var e;
+ if (m.isArray(b))m.each(b, function (b, e) {
+ c || Rc.test(a) ? d(a, e) : Vc(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
+ }); else if (c || "object" !== m.type(b))d(a, b); else for (e in b)Vc(a + "[" + e + "]", b[e], c, d)
+ }
+
+ m.param = function (a, b) {
+ var c, d = [], e = function (a, b) {
+ b = m.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
+ };
+ if (void 0 === b && (b = m.ajaxSettings && m.ajaxSettings.traditional), m.isArray(a) || a.jquery && !m.isPlainObject(a))m.each(a, function () {
+ e(this.name, this.value)
+ }); else for (c in a)Vc(c, a[c], b, e);
+ return d.join("&").replace(Qc, "+")
+ }, m.fn.extend({
+ serialize: function () {
+ return m.param(this.serializeArray())
+ }, serializeArray: function () {
+ return this.map(function () {
+ var a = m.prop(this, "elements");
+ return a ? m.makeArray(a) : this
+ }).filter(function () {
+ var a = this.type;
+ return this.name && !m(this).is(":disabled") && Uc.test(this.nodeName) && !Tc.test(a) && (this.checked || !W.test(a))
+ }).map(function (a, b) {
+ var c = m(this).val();
+ return null == c ? null : m.isArray(c) ? m.map(c, function (a) {
+ return {name: b.name, value: a.replace(Sc, "\r\n")}
+ }) : {name: b.name, value: c.replace(Sc, "\r\n")}
+ }).get()
+ }
+ }), m.ajaxSettings.xhr = void 0 !== a.ActiveXObject ? function () {
+ return !this.isLocal && /^(get|post|head|put|delete|options)$/i.test(this.type) && Zc() || $c()
+ } : Zc;
+ var Wc = 0, Xc = {}, Yc = m.ajaxSettings.xhr();
+ a.attachEvent && a.attachEvent("onunload", function () {
+ for (var a in Xc)Xc[a](void 0, !0)
+ }), k.cors = !!Yc && "withCredentials"in Yc, Yc = k.ajax = !!Yc, Yc && m.ajaxTransport(function (a) {
+ if (!a.crossDomain || k.cors) {
+ var b;
+ return {
+ send: function (c, d) {
+ var e, f = a.xhr(), g = ++Wc;
+ if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)for (e in a.xhrFields)f[e] = a.xhrFields[e];
+ a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
+ for (e in c)void 0 !== c[e] && f.setRequestHeader(e, c[e] + "");
+ f.send(a.hasContent && a.data || null), b = function (c, e) {
+ var h, i, j;
+ if (b && (e || 4 === f.readyState))if (delete Xc[g], b = void 0, f.onreadystatechange = m.noop, e)4 !== f.readyState && f.abort(); else {
+ j = {}, h = f.status, "string" == typeof f.responseText && (j.text = f.responseText);
+ try {
+ i = f.statusText
+ } catch (k) {
+ i = ""
+ }
+ h || !a.isLocal || a.crossDomain ? 1223 === h && (h = 204) : h = j.text ? 200 : 404
+ }
+ j && d(h, i, j, f.getAllResponseHeaders())
+ }, a.async ? 4 === f.readyState ? setTimeout(b) : f.onreadystatechange = Xc[g] = b : b()
+ }, abort: function () {
+ b && b(void 0, !0)
+ }
+ }
+ }
+ });
+ function Zc() {
+ try {
+ return new a.XMLHttpRequest
+ } catch (b) {
+ }
+ }
+
+ function $c() {
+ try {
+ return new a.ActiveXObject("Microsoft.XMLHTTP")
+ } catch (b) {
+ }
+ }
+
+ m.ajaxSetup({
+ accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
+ contents: {script: /(?:java|ecma)script/},
+ converters: {
+ "text script": function (a) {
+ return m.globalEval(a), a
+ }
+ }
+ }), m.ajaxPrefilter("script", function (a) {
+ void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET", a.global = !1)
+ }), m.ajaxTransport("script", function (a) {
+ if (a.crossDomain) {
+ var b, c = y.head || m("head")[0] || y.documentElement;
+ return {
+ send: function (d, e) {
+ b = y.createElement("script"), b.async = !0, a.scriptCharset && (b.charset = a.scriptCharset), b.src = a.url, b.onload = b.onreadystatechange = function (a, c) {
+ (c || !b.readyState || /loaded|complete/.test(b.readyState)) && (b.onload = b.onreadystatechange = null, b.parentNode && b.parentNode.removeChild(b), b = null, c || e(200, "success"))
+ }, c.insertBefore(b, c.firstChild)
+ }, abort: function () {
+ b && b.onload(void 0, !0)
+ }
+ }
+ }
+ });
+ var _c = [], ad = /(=)\?(?=&|$)|\?\?/;
+ m.ajaxSetup({
+ jsonp: "callback", jsonpCallback: function () {
+ var a = _c.pop() || m.expando + "_" + vc++;
+ return this[a] = !0, a
+ }
+ }), m.ajaxPrefilter("json jsonp", function (b, c, d) {
+ var e, f, g, h = b.jsonp !== !1 && (ad.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && ad.test(b.data) && "data");
+ return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = m.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(ad, "$1" + e) : b.jsonp !== !1 && (b.url += (wc.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () {
+ return g || m.error(e + " was not called"), g[0]
+ }, b.dataTypes[0] = "json", f = a[e], a[e] = function () {
+ g = arguments
+ }, d.always(function () {
+ a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, _c.push(e)), g && m.isFunction(f) && f(g[0]), g = f = void 0
+ }), "script") : void 0
+ }), m.parseHTML = function (a, b, c) {
+ if (!a || "string" != typeof a)return null;
+ "boolean" == typeof b && (c = b, b = !1), b = b || y;
+ var d = u.exec(a), e = !c && [];
+ return d ? [b.createElement(d[1])] : (d = m.buildFragment([a], b, e), e && e.length && m(e).remove(), m.merge([], d.childNodes))
+ };
+ var bd = m.fn.load;
+ m.fn.load = function (a, b, c) {
+ if ("string" != typeof a && bd)return bd.apply(this, arguments);
+ var d, e, f, g = this, h = a.indexOf(" ");
+ return h >= 0 && (d = m.trim(a.slice(h, a.length)), a = a.slice(0, h)), m.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (f = "POST"), g.length > 0 && m.ajax({
+ url: a,
+ type: f,
+ dataType: "html",
+ data: b
+ }).done(function (a) {
+ e = arguments, g.html(d ? m("<div>").append(m.parseHTML(a)).find(d) : a)
+ }).complete(c && function (a, b) {
+ g.each(c, e || [a.responseText, b, a])
+ }), this
+ }, m.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
+ m.fn[b] = function (a) {
+ return this.on(b, a)
+ }
+ }), m.expr.filters.animated = function (a) {
+ return m.grep(m.timers, function (b) {
+ return a === b.elem
+ }).length
+ };
+ var cd = a.document.documentElement;
+
+ function dd(a) {
+ return m.isWindow(a) ? a : 9 === a.nodeType ? a.defaultView || a.parentWindow : !1
+ }
+
+ m.offset = {
+ setOffset: function (a, b, c) {
+ var d, e, f, g, h, i, j, k = m.css(a, "position"), l = m(a), n = {};
+ "static" === k && (a.style.position = "relative"), h = l.offset(), f = m.css(a, "top"), i = m.css(a, "left"), j = ("absolute" === k || "fixed" === k) && m.inArray("auto", [f, i]) > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), m.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (n.top = b.top - h.top + g), null != b.left && (n.left = b.left - h.left + e), "using"in b ? b.using.call(a, n) : l.css(n)
+ }
+ }, m.fn.extend({
+ offset: function (a) {
+ if (arguments.length)return void 0 === a ? this : this.each(function (b) {
+ m.offset.setOffset(this, a, b)
+ });
+ var b, c, d = {top: 0, left: 0}, e = this[0], f = e && e.ownerDocument;
+ if (f)return b = f.documentElement, m.contains(b, e) ? (typeof e.getBoundingClientRect !== K && (d = e.getBoundingClientRect()), c = dd(f), {
+ top: d.top + (c.pageYOffset || b.scrollTop) - (b.clientTop || 0),
+ left: d.left + (c.pageXOffset || b.scrollLeft) - (b.clientLeft || 0)
+ }) : d
+ }, position: function () {
+ if (this[0]) {
+ var a, b, c = {top: 0, left: 0}, d = this[0];
+ return "fixed" === m.css(d, "position") ? b = d.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), m.nodeName(a[0], "html") || (c = a.offset()), c.top += m.css(a[0], "borderTopWidth", !0), c.left += m.css(a[0], "borderLeftWidth", !0)), {
+ top: b.top - c.top - m.css(d, "marginTop", !0),
+ left: b.left - c.left - m.css(d, "marginLeft", !0)
+ }
+ }
+ }, offsetParent: function () {
+ return this.map(function () {
+ var a = this.offsetParent || cd;
+ while (a && !m.nodeName(a, "html") && "static" === m.css(a, "position"))a = a.offsetParent;
+ return a || cd
+ })
+ }
+ }), m.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (a, b) {
+ var c = /Y/.test(b);
+ m.fn[a] = function (d) {
+ return V(this, function (a, d, e) {
+ var f = dd(a);
+ return void 0 === e ? f ? b in f ? f[b] : f.document.documentElement[d] : a[d] : void(f ? f.scrollTo(c ? m(f).scrollLeft() : e, c ? e : m(f).scrollTop()) : a[d] = e)
+ }, a, d, arguments.length, null)
+ }
+ }), m.each(["top", "left"], function (a, b) {
+ m.cssHooks[b] = Lb(k.pixelPosition, function (a, c) {
+ return c ? (c = Jb(a, b), Hb.test(c) ? m(a).position()[b] + "px" : c) : void 0
+ })
+ }), m.each({Height: "height", Width: "width"}, function (a, b) {
+ m.each({padding: "inner" + a, content: b, "": "outer" + a}, function (c, d) {
+ m.fn[d] = function (d, e) {
+ var f = arguments.length && (c || "boolean" != typeof d), g = c || (d === !0 || e === !0 ? "margin" : "border");
+ return V(this, function (b, c, d) {
+ var e;
+ return m.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? m.css(b, c, g) : m.style(b, c, d, g)
+ }, b, f ? d : void 0, f, null)
+ }
+ })
+ }), m.fn.size = function () {
+ return this.length
+ }, m.fn.andSelf = m.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function () {
+ return m
+ });
+ var ed = a.jQuery, fd = a.$;
+ return m.noConflict = function (b) {
+ return a.$ === m && (a.$ = fd), b && a.jQuery === m && (a.jQuery = ed), m
+ }, typeof b === K && (a.jQuery = a.$ = m), m
+});
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.map b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.map
new file mode 100644
index 00000000..bd54a5e1
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-1.11.2.min.map
@@ -0,0 +1,1209 @@
+{
+ "version": 3,
+ "file": "jquery-1.11.2.min.js",
+ "sources": ["jquery-1.11.2.js"],
+ "names": [
+ "global",
+ "factory",
+ "module",
+ "exports",
+ "document",
+ "w",
+ "Error",
+ "window",
+ "this",
+ "noGlobal",
+ "deletedIds",
+ "slice",
+ "concat",
+ "push",
+ "indexOf",
+ "class2type",
+ "toString",
+ "hasOwn",
+ "hasOwnProperty",
+ "support",
+ "version",
+ "jQuery",
+ "selector",
+ "context",
+ "fn",
+ "init",
+ "rtrim",
+ "rmsPrefix",
+ "rdashAlpha",
+ "fcamelCase",
+ "all",
+ "letter",
+ "toUpperCase",
+ "prototype",
+ "jquery",
+ "constructor",
+ "length",
+ "toArray",
+ "call",
+ "get",
+ "num",
+ "pushStack",
+ "elems",
+ "ret",
+ "merge",
+ "prevObject",
+ "each",
+ "callback",
+ "args",
+ "map",
+ "elem",
+ "i",
+ "apply",
+ "arguments",
+ "first",
+ "eq",
+ "last",
+ "len",
+ "j",
+ "end",
+ "sort",
+ "splice",
+ "extend",
+ "src",
+ "copyIsArray",
+ "copy",
+ "name",
+ "options",
+ "clone",
+ "target",
+ "deep",
+ "isFunction",
+ "isPlainObject",
+ "isArray",
+ "undefined",
+ "expando",
+ "Math",
+ "random",
+ "replace",
+ "isReady",
+ "error",
+ "msg",
+ "noop",
+ "obj",
+ "type",
+ "Array",
+ "isWindow",
+ "isNumeric",
+ "parseFloat",
+ "isEmptyObject",
+ "key",
+ "nodeType",
+ "e",
+ "ownLast",
+ "globalEval",
+ "data",
+ "trim",
+ "execScript",
+ "camelCase",
+ "string",
+ "nodeName",
+ "toLowerCase",
+ "value",
+ "isArraylike",
+ "text",
+ "makeArray",
+ "arr",
+ "results",
+ "Object",
+ "inArray",
+ "max",
+ "second",
+ "grep",
+ "invert",
+ "callbackInverse",
+ "matches",
+ "callbackExpect",
+ "arg",
+ "guid",
+ "proxy",
+ "tmp",
+ "now",
+ "Date",
+ "split",
+ "Sizzle",
+ "Expr",
+ "getText",
+ "isXML",
+ "tokenize",
+ "compile",
+ "select",
+ "outermostContext",
+ "sortInput",
+ "hasDuplicate",
+ "setDocument",
+ "docElem",
+ "documentIsHTML",
+ "rbuggyQSA",
+ "rbuggyMatches",
+ "contains",
+ "preferredDoc",
+ "dirruns",
+ "done",
+ "classCache",
+ "createCache",
+ "tokenCache",
+ "compilerCache",
+ "sortOrder",
+ "a",
+ "b",
+ "MAX_NEGATIVE",
+ "pop",
+ "push_native",
+ "list",
+ "booleans",
+ "whitespace",
+ "characterEncoding",
+ "identifier",
+ "attributes",
+ "pseudos",
+ "rwhitespace",
+ "RegExp",
+ "rcomma",
+ "rcombinators",
+ "rattributeQuotes",
+ "rpseudo",
+ "ridentifier",
+ "matchExpr",
+ "ID",
+ "CLASS",
+ "TAG",
+ "ATTR",
+ "PSEUDO",
+ "CHILD",
+ "bool",
+ "needsContext",
+ "rinputs",
+ "rheader",
+ "rnative",
+ "rquickExpr",
+ "rsibling",
+ "rescape",
+ "runescape",
+ "funescape",
+ "_",
+ "escaped",
+ "escapedWhitespace",
+ "high",
+ "String",
+ "fromCharCode",
+ "unloadHandler",
+ "childNodes",
+ "els",
+ "seed",
+ "match",
+ "m",
+ "groups",
+ "old",
+ "nid",
+ "newContext",
+ "newSelector",
+ "ownerDocument",
+ "exec",
+ "getElementById",
+ "parentNode",
+ "id",
+ "getElementsByTagName",
+ "getElementsByClassName",
+ "qsa",
+ "test",
+ "getAttribute",
+ "setAttribute",
+ "toSelector",
+ "testContext",
+ "join",
+ "querySelectorAll",
+ "qsaError",
+ "removeAttribute",
+ "keys",
+ "cache",
+ "cacheLength",
+ "shift",
+ "markFunction",
+ "assert",
+ "div",
+ "createElement",
+ "removeChild",
+ "addHandle",
+ "attrs",
+ "handler",
+ "attrHandle",
+ "siblingCheck",
+ "cur",
+ "diff",
+ "sourceIndex",
+ "nextSibling",
+ "createInputPseudo",
+ "createButtonPseudo",
+ "createPositionalPseudo",
+ "argument",
+ "matchIndexes",
+ "documentElement",
+ "node",
+ "hasCompare",
+ "parent",
+ "doc",
+ "defaultView",
+ "top",
+ "addEventListener",
+ "attachEvent",
+ "className",
+ "appendChild",
+ "createComment",
+ "getById",
+ "getElementsByName",
+ "find",
+ "filter",
+ "attrId",
+ "getAttributeNode",
+ "tag",
+ "innerHTML",
+ "input",
+ "matchesSelector",
+ "webkitMatchesSelector",
+ "mozMatchesSelector",
+ "oMatchesSelector",
+ "msMatchesSelector",
+ "disconnectedMatch",
+ "compareDocumentPosition",
+ "adown",
+ "bup",
+ "compare",
+ "sortDetached",
+ "aup",
+ "ap",
+ "bp",
+ "unshift",
+ "expr",
+ "elements",
+ "attr",
+ "val",
+ "specified",
+ "uniqueSort",
+ "duplicates",
+ "detectDuplicates",
+ "sortStable",
+ "textContent",
+ "firstChild",
+ "nodeValue",
+ "selectors",
+ "createPseudo",
+ "relative",
+ ">",
+ "dir",
+ " ",
+ "+",
+ "~",
+ "preFilter",
+ "excess",
+ "unquoted",
+ "nodeNameSelector",
+ "pattern",
+ "operator",
+ "check",
+ "result",
+ "what",
+ "simple",
+ "forward",
+ "ofType",
+ "xml",
+ "outerCache",
+ "nodeIndex",
+ "start",
+ "useCache",
+ "lastChild",
+ "pseudo",
+ "setFilters",
+ "idx",
+ "matched",
+ "not",
+ "matcher",
+ "unmatched",
+ "has",
+ "innerText",
+ "lang",
+ "elemLang",
+ "hash",
+ "location",
+ "root",
+ "focus",
+ "activeElement",
+ "hasFocus",
+ "href",
+ "tabIndex",
+ "enabled",
+ "disabled",
+ "checked",
+ "selected",
+ "selectedIndex",
+ "empty",
+ "header",
+ "button",
+ "even",
+ "odd",
+ "lt",
+ "gt",
+ "radio",
+ "checkbox",
+ "file",
+ "password",
+ "image",
+ "submit",
+ "reset",
+ "filters",
+ "parseOnly",
+ "tokens",
+ "soFar",
+ "preFilters",
+ "cached",
+ "addCombinator",
+ "combinator",
+ "base",
+ "checkNonElements",
+ "doneName",
+ "oldCache",
+ "newCache",
+ "elementMatcher",
+ "matchers",
+ "multipleContexts",
+ "contexts",
+ "condense",
+ "newUnmatched",
+ "mapped",
+ "setMatcher",
+ "postFilter",
+ "postFinder",
+ "postSelector",
+ "temp",
+ "preMap",
+ "postMap",
+ "preexisting",
+ "matcherIn",
+ "matcherOut",
+ "matcherFromTokens",
+ "checkContext",
+ "leadingRelative",
+ "implicitRelative",
+ "matchContext",
+ "matchAnyContext",
+ "matcherFromGroupMatchers",
+ "elementMatchers",
+ "setMatchers",
+ "bySet",
+ "byElement",
+ "superMatcher",
+ "outermost",
+ "matchedCount",
+ "setMatched",
+ "contextBackup",
+ "dirrunsUnique",
+ "token",
+ "compiled",
+ "div1",
+ "defaultValue",
+ "unique",
+ "isXMLDoc",
+ "rneedsContext",
+ "rsingleTag",
+ "risSimple",
+ "winnow",
+ "qualifier",
+ "self",
+ "is",
+ "rootjQuery",
+ "charAt",
+ "parseHTML",
+ "ready",
+ "rparentsprev",
+ "guaranteedUnique",
+ "children",
+ "contents",
+ "next",
+ "prev",
+ "until",
+ "sibling",
+ "n",
+ "r",
+ "targets",
+ "closest",
+ "l",
+ "pos",
+ "index",
+ "prevAll",
+ "add",
+ "addBack",
+ "parents",
+ "parentsUntil",
+ "nextAll",
+ "nextUntil",
+ "prevUntil",
+ "siblings",
+ "contentDocument",
+ "contentWindow",
+ "reverse",
+ "rnotwhite",
+ "optionsCache",
+ "createOptions",
+ "object",
+ "flag",
+ "Callbacks",
+ "firing",
+ "memory",
+ "fired",
+ "firingLength",
+ "firingIndex",
+ "firingStart",
+ "stack",
+ "once",
+ "fire",
+ "stopOnFalse",
+ "disable",
+ "remove",
+ "lock",
+ "locked",
+ "fireWith",
+ "Deferred",
+ "func",
+ "tuples",
+ "state",
+ "promise",
+ "always",
+ "deferred",
+ "fail",
+ "then",
+ "fns",
+ "newDefer",
+ "tuple",
+ "returned",
+ "resolve",
+ "reject",
+ "progress",
+ "notify",
+ "pipe",
+ "stateString",
+ "when",
+ "subordinate",
+ "resolveValues",
+ "remaining",
+ "updateFunc",
+ "values",
+ "progressValues",
+ "notifyWith",
+ "resolveWith",
+ "progressContexts",
+ "resolveContexts",
+ "readyList",
+ "readyWait",
+ "holdReady",
+ "hold",
+ "wait",
+ "body",
+ "setTimeout",
+ "triggerHandler",
+ "off",
+ "detach",
+ "removeEventListener",
+ "completed",
+ "detachEvent",
+ "event",
+ "readyState",
+ "frameElement",
+ "doScroll",
+ "doScrollCheck",
+ "strundefined",
+ "inlineBlockNeedsLayout",
+ "container",
+ "style",
+ "cssText",
+ "zoom",
+ "offsetWidth",
+ "deleteExpando",
+ "acceptData",
+ "noData",
+ "rbrace",
+ "rmultiDash",
+ "dataAttr",
+ "parseJSON",
+ "isEmptyDataObject",
+ "internalData",
+ "pvt",
+ "thisCache",
+ "internalKey",
+ "isNode",
+ "toJSON",
+ "internalRemoveData",
+ "cleanData",
+ "applet ",
+ "embed ",
+ "object ",
+ "hasData",
+ "removeData",
+ "_data",
+ "_removeData",
+ "queue",
+ "dequeue",
+ "startLength",
+ "hooks",
+ "_queueHooks",
+ "stop",
+ "setter",
+ "clearQueue",
+ "count",
+ "defer",
+ "pnum",
+ "source",
+ "cssExpand",
+ "isHidden",
+ "el",
+ "css",
+ "access",
+ "chainable",
+ "emptyGet",
+ "raw",
+ "bulk",
+ "rcheckableType",
+ "fragment",
+ "createDocumentFragment",
+ "leadingWhitespace",
+ "tbody",
+ "htmlSerialize",
+ "html5Clone",
+ "cloneNode",
+ "outerHTML",
+ "appendChecked",
+ "noCloneChecked",
+ "checkClone",
+ "noCloneEvent",
+ "click",
+ "eventName",
+ "change",
+ "focusin",
+ "rformElems",
+ "rkeyEvent",
+ "rmouseEvent",
+ "rfocusMorph",
+ "rtypenamespace",
+ "returnTrue",
+ "returnFalse",
+ "safeActiveElement",
+ "err",
+ "types",
+ "events",
+ "t",
+ "handleObjIn",
+ "special",
+ "eventHandle",
+ "handleObj",
+ "handlers",
+ "namespaces",
+ "origType",
+ "elemData",
+ "handle",
+ "triggered",
+ "dispatch",
+ "delegateType",
+ "bindType",
+ "namespace",
+ "delegateCount",
+ "setup",
+ "mappedTypes",
+ "origCount",
+ "teardown",
+ "removeEvent",
+ "trigger",
+ "onlyHandlers",
+ "ontype",
+ "bubbleType",
+ "eventPath",
+ "Event",
+ "isTrigger",
+ "namespace_re",
+ "noBubble",
+ "parentWindow",
+ "isPropagationStopped",
+ "preventDefault",
+ "isDefaultPrevented",
+ "_default",
+ "fix",
+ "handlerQueue",
+ "delegateTarget",
+ "preDispatch",
+ "currentTarget",
+ "isImmediatePropagationStopped",
+ "stopPropagation",
+ "postDispatch",
+ "sel",
+ "prop",
+ "originalEvent",
+ "fixHook",
+ "fixHooks",
+ "mouseHooks",
+ "keyHooks",
+ "props",
+ "srcElement",
+ "metaKey",
+ "original",
+ "which",
+ "charCode",
+ "keyCode",
+ "eventDoc",
+ "fromElement",
+ "pageX",
+ "clientX",
+ "scrollLeft",
+ "clientLeft",
+ "pageY",
+ "clientY",
+ "scrollTop",
+ "clientTop",
+ "relatedTarget",
+ "toElement",
+ "load",
+ "blur",
+ "beforeunload",
+ "returnValue",
+ "simulate",
+ "bubble",
+ "isSimulated",
+ "defaultPrevented",
+ "timeStamp",
+ "cancelBubble",
+ "stopImmediatePropagation",
+ "mouseenter",
+ "mouseleave",
+ "pointerenter",
+ "pointerleave",
+ "orig",
+ "related",
+ "submitBubbles",
+ "form",
+ "_submit_bubble",
+ "changeBubbles",
+ "propertyName",
+ "_just_changed",
+ "focusinBubbles",
+ "attaches",
+ "on",
+ "one",
+ "origFn",
+ "createSafeFragment",
+ "nodeNames",
+ "safeFrag",
+ "rinlinejQuery",
+ "rnoshimcache",
+ "rleadingWhitespace",
+ "rxhtmlTag",
+ "rtagName",
+ "rtbody",
+ "rhtml",
+ "rnoInnerhtml",
+ "rchecked",
+ "rscriptType",
+ "rscriptTypeMasked",
+ "rcleanScript",
+ "wrapMap",
+ "option",
+ "legend",
+ "area",
+ "param",
+ "thead",
+ "tr",
+ "col",
+ "td",
+ "safeFragment",
+ "fragmentDiv",
+ "optgroup",
+ "tfoot",
+ "colgroup",
+ "caption",
+ "th",
+ "getAll",
+ "found",
+ "fixDefaultChecked",
+ "defaultChecked",
+ "manipulationTarget",
+ "content",
+ "disableScript",
+ "restoreScript",
+ "setGlobalEval",
+ "refElements",
+ "cloneCopyEvent",
+ "dest",
+ "oldData",
+ "curData",
+ "fixCloneNodeIssues",
+ "defaultSelected",
+ "dataAndEvents",
+ "deepDataAndEvents",
+ "destElements",
+ "srcElements",
+ "inPage",
+ "buildFragment",
+ "scripts",
+ "selection",
+ "wrap",
+ "safe",
+ "nodes",
+ "createTextNode",
+ "append",
+ "domManip",
+ "prepend",
+ "insertBefore",
+ "before",
+ "after",
+ "keepData",
+ "html",
+ "replaceWith",
+ "replaceChild",
+ "hasScripts",
+ "set",
+ "iNoClone",
+ "_evalUrl",
+ "appendTo",
+ "prependTo",
+ "insertAfter",
+ "replaceAll",
+ "insert",
+ "iframe",
+ "elemdisplay",
+ "actualDisplay",
+ "display",
+ "getDefaultComputedStyle",
+ "defaultDisplay",
+ "write",
+ "close",
+ "shrinkWrapBlocksVal",
+ "shrinkWrapBlocks",
+ "width",
+ "rmargin",
+ "rnumnonpx",
+ "getStyles",
+ "curCSS",
+ "rposition",
+ "getComputedStyle",
+ "opener",
+ "computed",
+ "minWidth",
+ "maxWidth",
+ "getPropertyValue",
+ "currentStyle",
+ "left",
+ "rs",
+ "rsLeft",
+ "runtimeStyle",
+ "pixelLeft",
+ "addGetHookIf",
+ "conditionFn",
+ "hookFn",
+ "condition",
+ "pixelPositionVal",
+ "boxSizingReliableVal",
+ "reliableHiddenOffsetsVal",
+ "reliableMarginRightVal",
+ "opacity",
+ "cssFloat",
+ "backgroundClip",
+ "clearCloneStyle",
+ "boxSizing",
+ "MozBoxSizing",
+ "WebkitBoxSizing",
+ "reliableHiddenOffsets",
+ "computeStyleTests",
+ "boxSizingReliable",
+ "pixelPosition",
+ "reliableMarginRight",
+ "marginRight",
+ "offsetHeight",
+ "swap",
+ "ralpha",
+ "ropacity",
+ "rdisplayswap",
+ "rnumsplit",
+ "rrelNum",
+ "cssShow",
+ "position",
+ "visibility",
+ "cssNormalTransform",
+ "letterSpacing",
+ "fontWeight",
+ "cssPrefixes",
+ "vendorPropName",
+ "capName",
+ "origName",
+ "showHide",
+ "show",
+ "hidden",
+ "setPositiveNumber",
+ "subtract",
+ "augmentWidthOrHeight",
+ "extra",
+ "isBorderBox",
+ "styles",
+ "getWidthOrHeight",
+ "valueIsBorderBox",
+ "cssHooks",
+ "cssNumber",
+ "columnCount",
+ "fillOpacity",
+ "flexGrow",
+ "flexShrink",
+ "lineHeight",
+ "order",
+ "orphans",
+ "widows",
+ "zIndex",
+ "cssProps",
+ "float",
+ "$1",
+ "margin",
+ "padding",
+ "border",
+ "prefix",
+ "suffix",
+ "expand",
+ "expanded",
+ "parts",
+ "hide",
+ "toggle",
+ "Tween",
+ "easing",
+ "unit",
+ "propHooks",
+ "run",
+ "percent",
+ "eased",
+ "duration",
+ "step",
+ "tween",
+ "fx",
+ "linear",
+ "p",
+ "swing",
+ "cos",
+ "PI",
+ "fxNow",
+ "timerId",
+ "rfxtypes",
+ "rfxnum",
+ "rrun",
+ "animationPrefilters",
+ "defaultPrefilter",
+ "tweeners",
+ "*",
+ "createTween",
+ "scale",
+ "maxIterations",
+ "createFxNow",
+ "genFx",
+ "includeWidth",
+ "height",
+ "animation",
+ "collection",
+ "opts",
+ "oldfire",
+ "checkDisplay",
+ "anim",
+ "dataShow",
+ "unqueued",
+ "overflow",
+ "overflowX",
+ "overflowY",
+ "propFilter",
+ "specialEasing",
+ "Animation",
+ "properties",
+ "stopped",
+ "tick",
+ "currentTime",
+ "startTime",
+ "tweens",
+ "originalProperties",
+ "originalOptions",
+ "gotoEnd",
+ "rejectWith",
+ "timer",
+ "complete",
+ "tweener",
+ "prefilter",
+ "speed",
+ "opt",
+ "speeds",
+ "fadeTo",
+ "to",
+ "animate",
+ "optall",
+ "doAnimation",
+ "finish",
+ "stopQueue",
+ "timers",
+ "cssFn",
+ "slideDown",
+ "slideUp",
+ "slideToggle",
+ "fadeIn",
+ "fadeOut",
+ "fadeToggle",
+ "interval",
+ "setInterval",
+ "clearInterval",
+ "slow",
+ "fast",
+ "delay",
+ "time",
+ "timeout",
+ "clearTimeout",
+ "getSetAttribute",
+ "hrefNormalized",
+ "checkOn",
+ "optSelected",
+ "enctype",
+ "optDisabled",
+ "radioValue",
+ "rreturn",
+ "valHooks",
+ "optionSet",
+ "scrollHeight",
+ "nodeHook",
+ "boolHook",
+ "ruseDefault",
+ "getSetInput",
+ "removeAttr",
+ "nType",
+ "attrHooks",
+ "propName",
+ "attrNames",
+ "propFix",
+ "getter",
+ "setAttributeNode",
+ "createAttribute",
+ "coords",
+ "contenteditable",
+ "rfocusable",
+ "rclickable",
+ "removeProp",
+ "for",
+ "class",
+ "notxml",
+ "tabindex",
+ "parseInt",
+ "rclass",
+ "addClass",
+ "classes",
+ "clazz",
+ "finalValue",
+ "proceed",
+ "removeClass",
+ "toggleClass",
+ "stateVal",
+ "classNames",
+ "hasClass",
+ "hover",
+ "fnOver",
+ "fnOut",
+ "bind",
+ "unbind",
+ "delegate",
+ "undelegate",
+ "nonce",
+ "rquery",
+ "rvalidtokens",
+ "JSON",
+ "parse",
+ "requireNonComma",
+ "depth",
+ "str",
+ "comma",
+ "open",
+ "Function",
+ "parseXML",
+ "DOMParser",
+ "parseFromString",
+ "ActiveXObject",
+ "async",
+ "loadXML",
+ "ajaxLocParts",
+ "ajaxLocation",
+ "rhash",
+ "rts",
+ "rheaders",
+ "rlocalProtocol",
+ "rnoContent",
+ "rprotocol",
+ "rurl",
+ "prefilters",
+ "transports",
+ "allTypes",
+ "addToPrefiltersOrTransports",
+ "structure",
+ "dataTypeExpression",
+ "dataType",
+ "dataTypes",
+ "inspectPrefiltersOrTransports",
+ "jqXHR",
+ "inspected",
+ "seekingTransport",
+ "inspect",
+ "prefilterOrFactory",
+ "dataTypeOrTransport",
+ "ajaxExtend",
+ "flatOptions",
+ "ajaxSettings",
+ "ajaxHandleResponses",
+ "s",
+ "responses",
+ "firstDataType",
+ "ct",
+ "finalDataType",
+ "mimeType",
+ "getResponseHeader",
+ "converters",
+ "ajaxConvert",
+ "response",
+ "isSuccess",
+ "conv2",
+ "current",
+ "conv",
+ "responseFields",
+ "dataFilter",
+ "active",
+ "lastModified",
+ "etag",
+ "url",
+ "isLocal",
+ "processData",
+ "contentType",
+ "accepts",
+ "json",
+ "* text",
+ "text html",
+ "text json",
+ "text xml",
+ "ajaxSetup",
+ "settings",
+ "ajaxPrefilter",
+ "ajaxTransport",
+ "ajax",
+ "cacheURL",
+ "responseHeadersString",
+ "timeoutTimer",
+ "fireGlobals",
+ "transport",
+ "responseHeaders",
+ "callbackContext",
+ "globalEventContext",
+ "completeDeferred",
+ "statusCode",
+ "requestHeaders",
+ "requestHeadersNames",
+ "strAbort",
+ "getAllResponseHeaders",
+ "setRequestHeader",
+ "lname",
+ "overrideMimeType",
+ "code",
+ "status",
+ "abort",
+ "statusText",
+ "finalText",
+ "success",
+ "method",
+ "crossDomain",
+ "traditional",
+ "hasContent",
+ "ifModified",
+ "headers",
+ "beforeSend",
+ "send",
+ "nativeStatusText",
+ "modified",
+ "getJSON",
+ "getScript",
+ "throws",
+ "wrapAll",
+ "wrapInner",
+ "unwrap",
+ "visible",
+ "r20",
+ "rbracket",
+ "rCRLF",
+ "rsubmitterTypes",
+ "rsubmittable",
+ "buildParams",
+ "v",
+ "encodeURIComponent",
+ "serialize",
+ "serializeArray",
+ "xhr",
+ "createStandardXHR",
+ "createActiveXHR",
+ "xhrId",
+ "xhrCallbacks",
+ "xhrSupported",
+ "cors",
+ "username",
+ "xhrFields",
+ "isAbort",
+ "onreadystatechange",
+ "responseText",
+ "XMLHttpRequest",
+ "script",
+ "text script",
+ "head",
+ "scriptCharset",
+ "charset",
+ "onload",
+ "oldCallbacks",
+ "rjsonp",
+ "jsonp",
+ "jsonpCallback",
+ "originalSettings",
+ "callbackName",
+ "overwritten",
+ "responseContainer",
+ "jsonProp",
+ "keepScripts",
+ "parsed",
+ "_load",
+ "params",
+ "animated",
+ "getWindow",
+ "offset",
+ "setOffset",
+ "curPosition",
+ "curLeft",
+ "curCSSTop",
+ "curTop",
+ "curOffset",
+ "curCSSLeft",
+ "calculatePosition",
+ "curElem",
+ "using",
+ "win",
+ "box",
+ "getBoundingClientRect",
+ "pageYOffset",
+ "pageXOffset",
+ "offsetParent",
+ "parentOffset",
+ "scrollTo",
+ "Height",
+ "Width",
+ "defaultExtra",
+ "funcName",
+ "size",
+ "andSelf",
+ "define",
+ "amd",
+ "_jQuery",
+ "_$",
+ "$",
+ "noConflict"
+ ],
+ "mappings": "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"
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.js
new file mode 100644
index 00000000..f4c0ed72
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.js
@@ -0,0 +1,9179 @@
+/*!
+ * jQuery JavaScript Library v2.1.3
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-18T15:11Z
+ */
+
+(function (global, factory) {
+
+ if (typeof module === "object" && typeof module.exports === "object") {
+ // For CommonJS and CommonJS-like environments where a proper `window`
+ // is present, execute the factory and get jQuery.
+ // For environments that do not have a `window` with a `document`
+ // (such as Node.js), expose a factory as module.exports.
+ // This accentuates the need for the creation of a real `window`.
+ // e.g. var jQuery = require("jquery")(window);
+ // See ticket #14549 for more info.
+ module.exports = global.document ?
+ factory(global, true) :
+ function (w) {
+ if (!w.document) {
+ throw new Error("jQuery requires a window with a document");
+ }
+ return factory(w);
+ };
+ } else {
+ factory(global);
+ }
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//
+
+ var arr = [];
+
+ var slice = arr.slice;
+
+ var concat = arr.concat;
+
+ var push = arr.push;
+
+ var indexOf = arr.indexOf;
+
+ var class2type = {};
+
+ var toString = class2type.toString;
+
+ var hasOwn = class2type.hasOwnProperty;
+
+ var support = {};
+
+
+ var
+ // Use the correct document accordingly with window argument (sandbox)
+ document = window.document,
+
+ version = "2.1.3",
+
+ // Define a local copy of jQuery
+ jQuery = function (selector, context) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ // Need init if jQuery is called (just allow error to be thrown if not included)
+ return new jQuery.fn.init(selector, context);
+ },
+
+ // Support: Android<4.1
+ // Make sure we trim BOM and NBSP
+ rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+ // Matches dashed string for camelizing
+ rmsPrefix = /^-ms-/,
+ rdashAlpha = /-([\da-z])/gi,
+
+ // Used by jQuery.camelCase as callback to replace()
+ fcamelCase = function (all, letter) {
+ return letter.toUpperCase();
+ };
+
+ jQuery.fn = jQuery.prototype = {
+ // The current version of jQuery being used
+ jquery: version,
+
+ constructor: jQuery,
+
+ // Start with an empty selector
+ selector: "",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ toArray: function () {
+ return slice.call(this);
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function (num) {
+ return num != null ?
+
+ // Return just the one element from the set
+ ( num < 0 ? this[num + this.length] : this[num] ) :
+
+ // Return all the elements in a clean array
+ slice.call(this);
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function (elems) {
+
+ // Build a new jQuery matched element set
+ var ret = jQuery.merge(this.constructor(), elems);
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+ ret.context = this.context;
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function (callback, args) {
+ return jQuery.each(this, callback, args);
+ },
+
+ map: function (callback) {
+ return this.pushStack(jQuery.map(this, function (elem, i) {
+ return callback.call(elem, i, elem);
+ }));
+ },
+
+ slice: function () {
+ return this.pushStack(slice.apply(this, arguments));
+ },
+
+ first: function () {
+ return this.eq(0);
+ },
+
+ last: function () {
+ return this.eq(-1);
+ },
+
+ eq: function (i) {
+ var len = this.length,
+ j = +i + ( i < 0 ? len : 0 );
+ return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
+ },
+
+ end: function () {
+ return this.prevObject || this.constructor(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: arr.sort,
+ splice: arr.splice
+ };
+
+ jQuery.extend = jQuery.fn.extend = function () {
+ var options, name, src, copy, copyIsArray, clone,
+ target = arguments[0] || {},
+ i = 1,
+ length = arguments.length,
+ deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === "boolean") {
+ deep = target;
+
+ // Skip the boolean and the target
+ target = arguments[i] || {};
+ i++;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if (typeof target !== "object" && !jQuery.isFunction(target)) {
+ target = {};
+ }
+
+ // Extend jQuery itself if only one argument is passed
+ if (i === length) {
+ target = this;
+ i--;
+ }
+
+ for (; i < length; i++) {
+ // Only deal with non-null/undefined values
+ if ((options = arguments[i]) != null) {
+ // Extend the base object
+ for (name in options) {
+ src = target[name];
+ copy = options[name];
+
+ // Prevent never-ending loop
+ if (target === copy) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) )) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[name] = jQuery.extend(deep, clone, copy);
+
+ // Don't bring in undefined values
+ } else if (copy !== undefined) {
+ target[name] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+ };
+
+ jQuery.extend({
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + ( version + Math.random() ).replace(/\D/g, ""),
+
+ // Assume jQuery is ready without the ready module
+ isReady: true,
+
+ error: function (msg) {
+ throw new Error(msg);
+ },
+
+ noop: function () {
+ },
+
+ isFunction: function (obj) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray,
+
+ isWindow: function (obj) {
+ return obj != null && obj === obj.window;
+ },
+
+ isNumeric: function (obj) {
+ // parseFloat NaNs numeric-cast false positives (null|true|false|"")
+ // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+ // subtraction forces infinities to NaN
+ // adding 1 corrects loss of precision from parseFloat (#15100)
+ return !jQuery.isArray(obj) && (obj - parseFloat(obj) + 1) >= 0;
+ },
+
+ isPlainObject: function (obj) {
+ // Not plain objects:
+ // - Any object or value whose internal [[Class]] property is not "[object Object]"
+ // - DOM nodes
+ // - window
+ if (jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ if (obj.constructor && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
+ return false;
+ }
+
+ // If the function hasn't returned already, we're confident that
+ // |obj| is a plain object, created by {} or constructed with new Object
+ return true;
+ },
+
+ isEmptyObject: function (obj) {
+ var name;
+ for (name in obj) {
+ return false;
+ }
+ return true;
+ },
+
+ type: function (obj) {
+ if (obj == null) {
+ return obj + "";
+ }
+ // Support: Android<4.0, iOS<6 (functionish RegExp)
+ return typeof obj === "object" || typeof obj === "function" ?
+ class2type[toString.call(obj)] || "object" :
+ typeof obj;
+ },
+
+ // Evaluates a script in a global context
+ globalEval: function (code) {
+ var script,
+ indirect = eval;
+
+ code = jQuery.trim(code);
+
+ if (code) {
+ // If the code includes a valid, prologue position
+ // strict mode pragma, execute code by injecting a
+ // script tag into the document.
+ if (code.indexOf("use strict") === 1) {
+ script = document.createElement("script");
+ script.text = code;
+ document.head.appendChild(script).parentNode.removeChild(script);
+ } else {
+ // Otherwise, avoid the DOM node creation, insertion
+ // and removal by using an indirect global eval
+ indirect(code);
+ }
+ }
+ },
+
+ // Convert dashed to camelCase; used by the css and data modules
+ // Support: IE9-11+
+ // Microsoft forgot to hump their vendor prefix (#9572)
+ camelCase: function (string) {
+ return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase);
+ },
+
+ nodeName: function (elem, name) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+ },
+
+ // args is for internal usage only
+ each: function (obj, callback, args) {
+ var value,
+ i = 0,
+ length = obj.length,
+ isArray = isArraylike(obj);
+
+ if (args) {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.apply(obj[i], args);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ } else {
+ for (i in obj) {
+ value = callback.call(obj[i], i, obj[i]);
+
+ if (value === false) {
+ break;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+ // Support: Android<4.1
+ trim: function (text) {
+ return text == null ?
+ "" :
+ ( text + "" ).replace(rtrim, "");
+ },
+
+ // results is for internal usage only
+ makeArray: function (arr, results) {
+ var ret = results || [];
+
+ if (arr != null) {
+ if (isArraylike(Object(arr))) {
+ jQuery.merge(ret,
+ typeof arr === "string" ?
+ [arr] : arr
+ );
+ } else {
+ push.call(ret, arr);
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function (elem, arr, i) {
+ return arr == null ? -1 : indexOf.call(arr, elem, i);
+ },
+
+ merge: function (first, second) {
+ var len = +second.length,
+ j = 0,
+ i = first.length;
+
+ for (; j < len; j++) {
+ first[i++] = second[j];
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function (elems, callback, invert) {
+ var callbackInverse,
+ matches = [],
+ i = 0,
+ length = elems.length,
+ callbackExpect = !invert;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for (; i < length; i++) {
+ callbackInverse = !callback(elems[i], i);
+ if (callbackInverse !== callbackExpect) {
+ matches.push(elems[i]);
+ }
+ }
+
+ return matches;
+ },
+
+ // arg is for internal usage only
+ map: function (elems, callback, arg) {
+ var value,
+ i = 0,
+ length = elems.length,
+ isArray = isArraylike(elems),
+ ret = [];
+
+ // Go through the array, translating each of the items to their new values
+ if (isArray) {
+ for (; i < length; i++) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+
+ // Go through every key on the object,
+ } else {
+ for (i in elems) {
+ value = callback(elems[i], i, arg);
+
+ if (value != null) {
+ ret.push(value);
+ }
+ }
+ }
+
+ // Flatten any nested arrays
+ return concat.apply([], ret);
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ // Bind a function to a context, optionally partially applying any
+ // arguments.
+ proxy: function (fn, context) {
+ var tmp, args, proxy;
+
+ if (typeof context === "string") {
+ tmp = fn[context];
+ context = fn;
+ fn = tmp;
+ }
+
+ // Quick check to determine if target is callable, in the spec
+ // this throws a TypeError, but we will just return undefined.
+ if (!jQuery.isFunction(fn)) {
+ return undefined;
+ }
+
+ // Simulated bind
+ args = slice.call(arguments, 2);
+ proxy = function () {
+ return fn.apply(context || this, args.concat(slice.call(arguments)));
+ };
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+ return proxy;
+ },
+
+ now: Date.now,
+
+ // jQuery.support is not used in Core but other projects attach their
+ // properties to it so it needs to exist.
+ support: support
+ });
+
+// Populate the class2type map
+ jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
+ class2type["[object " + name + "]"] = name.toLowerCase();
+ });
+
+ function isArraylike(obj) {
+ var length = obj.length,
+ type = jQuery.type(obj);
+
+ if (type === "function" || jQuery.isWindow(obj)) {
+ return false;
+ }
+
+ if (obj.nodeType === 1 && length) {
+ return true;
+ }
+
+ return type === "array" || length === 0 ||
+ typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+ }
+
+ var Sizzle =
+ /*!
+ * Sizzle CSS Selector Engine v2.2.0-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-16
+ */
+ (function (window) {
+
+ var i,
+ support,
+ Expr,
+ getText,
+ isXML,
+ tokenize,
+ compile,
+ select,
+ outermostContext,
+ sortInput,
+ hasDuplicate,
+
+ // Local document vars
+ setDocument,
+ document,
+ docElem,
+ documentIsHTML,
+ rbuggyQSA,
+ rbuggyMatches,
+ matches,
+ contains,
+
+ // Instance-specific data
+ expando = "sizzle" + 1 * new Date(),
+ preferredDoc = window.document,
+ dirruns = 0,
+ done = 0,
+ classCache = createCache(),
+ tokenCache = createCache(),
+ compilerCache = createCache(),
+ sortOrder = function (a, b) {
+ if (a === b) {
+ hasDuplicate = true;
+ }
+ return 0;
+ },
+
+ // General-purpose constants
+ MAX_NEGATIVE = 1 << 31,
+
+ // Instance methods
+ hasOwn = ({}).hasOwnProperty,
+ arr = [],
+ pop = arr.pop,
+ push_native = arr.push,
+ push = arr.push,
+ slice = arr.slice,
+ // Use a stripped-down indexOf as it's faster than native
+ // http://jsperf.com/thor-indexof-vs-for/5
+ indexOf = function (list, elem) {
+ var i = 0,
+ len = list.length;
+ for (; i < len; i++) {
+ if (list[i] === elem) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+ // Regular expressions
+
+ // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+ whitespace = "[\\x20\\t\\r\\n\\f]",
+ // http://www.w3.org/TR/css3-syntax/#characters
+ characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+ // Loosely modeled on CSS identifier characters
+ // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+ // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+ identifier = characterEncoding.replace("w", "w#"),
+
+ // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+ attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+ // Operator (capture 2)
+ "*([*^$|!~]?=)" + whitespace +
+ // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+ "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+ "*\\]",
+
+ pseudos = ":(" + characterEncoding + ")(?:\\((" +
+ // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+ // 1. quoted (capture 3; capture 4 or capture 5)
+ "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+ // 2. simple (capture 6)
+ "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+ // 3. anything else (capture 2)
+ ".*" +
+ ")\\)|)",
+
+ // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+ rwhitespace = new RegExp(whitespace + "+", "g"),
+ rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
+
+ rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
+ rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
+
+ rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g"),
+
+ rpseudo = new RegExp(pseudos),
+ ridentifier = new RegExp("^" + identifier + "$"),
+
+ matchExpr = {
+ "ID": new RegExp("^#(" + characterEncoding + ")"),
+ "CLASS": new RegExp("^\\.(" + characterEncoding + ")"),
+ "TAG": new RegExp("^(" + characterEncoding.replace("w", "w*") + ")"),
+ "ATTR": new RegExp("^" + attributes),
+ "PSEUDO": new RegExp("^" + pseudos),
+ "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+ "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+ "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
+ "bool": new RegExp("^(?:" + booleans + ")$", "i"),
+ // For use in libraries implementing .is()
+ // We use this for POS matching in `select`
+ "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+ whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
+ },
+
+ rinputs = /^(?:input|select|textarea|button)$/i,
+ rheader = /^h\d$/i,
+
+ rnative = /^[^{]+\{\s*\[native \w/,
+
+ // Easily-parseable/retrievable ID or TAG or CLASS selectors
+ rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+ rsibling = /[+~]/,
+ rescape = /'|\\/g,
+
+ // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+ runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"),
+ funescape = function (_, escaped, escapedWhitespace) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox<24
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ high < 0 ?
+ // BMP codepoint
+ String.fromCharCode(high + 0x10000) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
+ },
+
+ // Used for iframes
+ // See setDocument()
+ // Removing the function wrapper causes a "Permission Denied"
+ // error in IE
+ unloadHandler = function () {
+ setDocument();
+ };
+
+// Optimize for push.apply( _, NodeList )
+ try {
+ push.apply(
+ (arr = slice.call(preferredDoc.childNodes)),
+ preferredDoc.childNodes
+ );
+ // Support: Android<4.0
+ // Detect silently failing push.apply
+ arr[preferredDoc.childNodes.length].nodeType;
+ } catch (e) {
+ push = {
+ apply: arr.length ?
+
+ // Leverage slice if possible
+ function (target, els) {
+ push_native.apply(target, slice.call(els));
+ } :
+
+ // Support: IE<9
+ // Otherwise append directly
+ function (target, els) {
+ var j = target.length,
+ i = 0;
+ // Can't trust NodeList.length
+ while ((target[j++] = els[i++])) {
+ }
+ target.length = j - 1;
+ }
+ };
+ }
+
+ function Sizzle(selector, context, results, seed) {
+ var match, elem, m, nodeType,
+ // QSA vars
+ i, groups, old, nid, newContext, newSelector;
+
+ if (( context ? context.ownerDocument || context : preferredDoc ) !== document) {
+ setDocument(context);
+ }
+
+ context = context || document;
+ results = results || [];
+ nodeType = context.nodeType;
+
+ if (typeof selector !== "string" || !selector ||
+ nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
+
+ return results;
+ }
+
+ if (!seed && documentIsHTML) {
+
+ // Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+ if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
+ // Speed-up: Sizzle("#ID")
+ if ((m = match[1])) {
+ if (nodeType === 9) {
+ elem = context.getElementById(m);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document (jQuery #6963)
+ if (elem && elem.parentNode) {
+ // Handle the case where IE, Opera, and Webkit return items
+ // by name instead of ID
+ if (elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ } else {
+ return results;
+ }
+ } else {
+ // Context is not a document
+ if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) &&
+ contains(context, elem) && elem.id === m) {
+ results.push(elem);
+ return results;
+ }
+ }
+
+ // Speed-up: Sizzle("TAG")
+ } else if (match[2]) {
+ push.apply(results, context.getElementsByTagName(selector));
+ return results;
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ((m = match[3]) && support.getElementsByClassName) {
+ push.apply(results, context.getElementsByClassName(m));
+ return results;
+ }
+ }
+
+ // QSA path
+ if (support.qsa && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
+ nid = old = expando;
+ newContext = context;
+ newSelector = nodeType !== 1 && selector;
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ if (nodeType === 1 && context.nodeName.toLowerCase() !== "object") {
+ groups = tokenize(selector);
+
+ if ((old = context.getAttribute("id"))) {
+ nid = old.replace(rescape, "\\$&");
+ } else {
+ context.setAttribute("id", nid);
+ }
+ nid = "[id='" + nid + "'] ";
+
+ i = groups.length;
+ while (i--) {
+ groups[i] = nid + toSelector(groups[i]);
+ }
+ newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
+ newSelector = groups.join(",");
+ }
+
+ if (newSelector) {
+ try {
+ push.apply(results,
+ newContext.querySelectorAll(newSelector)
+ );
+ return results;
+ } catch (qsaError) {
+ } finally {
+ if (!old) {
+ context.removeAttribute("id");
+ }
+ }
+ }
+ }
+ }
+
+ // All others
+ return select(selector.replace(rtrim, "$1"), context, results, seed);
+ }
+
+ /**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ * deleting the oldest entry
+ */
+ function createCache() {
+ var keys = [];
+
+ function cache(key, value) {
+ // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+ if (keys.push(key + " ") > Expr.cacheLength) {
+ // Only keep the most recent entries
+ delete cache[keys.shift()];
+ }
+ return (cache[key + " "] = value);
+ }
+
+ return cache;
+ }
+
+ /**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+ function markFunction(fn) {
+ fn[expando] = true;
+ return fn;
+ }
+
+ /**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+ function assert(fn) {
+ var div = document.createElement("div");
+
+ try {
+ return !!fn(div);
+ } catch (e) {
+ return false;
+ } finally {
+ // Remove from its parent by default
+ if (div.parentNode) {
+ div.parentNode.removeChild(div);
+ }
+ // release memory in IE
+ div = null;
+ }
+ }
+
+ /**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+ function addHandle(attrs, handler) {
+ var arr = attrs.split("|"),
+ i = attrs.length;
+
+ while (i--) {
+ Expr.attrHandle[arr[i]] = handler;
+ }
+ }
+
+ /**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+ function siblingCheck(a, b) {
+ var cur = b && a,
+ diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+ ( ~b.sourceIndex || MAX_NEGATIVE ) -
+ ( ~a.sourceIndex || MAX_NEGATIVE );
+
+ // Use IE sourceIndex if available on both nodes
+ if (diff) {
+ return diff;
+ }
+
+ // Check if b follows a
+ if (cur) {
+ while ((cur = cur.nextSibling)) {
+ if (cur === b) {
+ return -1;
+ }
+ }
+ }
+
+ return a ? 1 : -1;
+ }
+
+ /**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+ function createInputPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+ function createButtonPseudo(type) {
+ return function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && elem.type === type;
+ };
+ }
+
+ /**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+ function createPositionalPseudo(fn) {
+ return markFunction(function (argument) {
+ argument = +argument;
+ return markFunction(function (seed, matches) {
+ var j,
+ matchIndexes = fn([], seed.length, argument),
+ i = matchIndexes.length;
+
+ // Match elements found at the specified indexes
+ while (i--) {
+ if (seed[(j = matchIndexes[i])]) {
+ seed[j] = !(matches[j] = seed[j]);
+ }
+ }
+ });
+ });
+ }
+
+ /**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+ function testContext(context) {
+ return context && typeof context.getElementsByTagName !== "undefined" && context;
+ }
+
+// Expose support vars for convenience
+ support = Sizzle.support = {};
+
+ /**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+ isXML = Sizzle.isXML = function (elem) {
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+ };
+
+ /**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+ setDocument = Sizzle.setDocument = function (node) {
+ var hasCompare, parent,
+ doc = node ? node.ownerDocument || node : preferredDoc;
+
+ // If no document and documentElement is available, return
+ if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {
+ return document;
+ }
+
+ // Set our document
+ document = doc;
+ docElem = doc.documentElement;
+ parent = doc.defaultView;
+
+ // Support: IE>8
+ // If iframe document is assigned to "document" variable and if iframe has been reloaded,
+ // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+ // IE6-8 do not support the defaultView property so parent will be undefined
+ if (parent && parent !== parent.top) {
+ // IE11 does not have attachEvent, so all must suffer
+ if (parent.addEventListener) {
+ parent.addEventListener("unload", unloadHandler, false);
+ } else if (parent.attachEvent) {
+ parent.attachEvent("onunload", unloadHandler);
+ }
+ }
+
+ /* Support tests
+ ---------------------------------------------------------------------- */
+ documentIsHTML = !isXML(doc);
+
+ /* Attributes
+ ---------------------------------------------------------------------- */
+
+ // Support: IE<8
+ // Verify that getAttribute really returns attributes and not properties
+ // (excepting IE8 booleans)
+ support.attributes = assert(function (div) {
+ div.className = "i";
+ return !div.getAttribute("className");
+ });
+
+ /* getElement(s)By*
+ ---------------------------------------------------------------------- */
+
+ // Check if getElementsByTagName("*") returns only elements
+ support.getElementsByTagName = assert(function (div) {
+ div.appendChild(doc.createComment(""));
+ return !div.getElementsByTagName("*").length;
+ });
+
+ // Support: IE<9
+ support.getElementsByClassName = rnative.test(doc.getElementsByClassName);
+
+ // Support: IE<10
+ // Check if getElementById returns elements by name
+ // The broken getElementById methods don't pick up programatically-set names,
+ // so use a roundabout getElementsByName test
+ support.getById = assert(function (div) {
+ docElem.appendChild(div).id = expando;
+ return !doc.getElementsByName || !doc.getElementsByName(expando).length;
+ });
+
+ // ID find and filter
+ if (support.getById) {
+ Expr.find["ID"] = function (id, context) {
+ if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+ var m = context.getElementById(id);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ };
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ return elem.getAttribute("id") === attrId;
+ };
+ };
+ } else {
+ // Support: IE6/7
+ // getElementById is not reliable as a find shortcut
+ delete Expr.find["ID"];
+
+ Expr.filter["ID"] = function (id) {
+ var attrId = id.replace(runescape, funescape);
+ return function (elem) {
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return node && node.value === attrId;
+ };
+ };
+ }
+
+ // Tag
+ Expr.find["TAG"] = support.getElementsByTagName ?
+ function (tag, context) {
+ if (typeof context.getElementsByTagName !== "undefined") {
+ return context.getElementsByTagName(tag);
+
+ // DocumentFragment nodes don't have gEBTN
+ } else if (support.qsa) {
+ return context.querySelectorAll(tag);
+ }
+ } :
+
+ function (tag, context) {
+ var elem,
+ tmp = [],
+ i = 0,
+ // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+ results = context.getElementsByTagName(tag);
+
+ // Filter out possible comments
+ if (tag === "*") {
+ while ((elem = results[i++])) {
+ if (elem.nodeType === 1) {
+ tmp.push(elem);
+ }
+ }
+
+ return tmp;
+ }
+ return results;
+ };
+
+ // Class
+ Expr.find["CLASS"] = support.getElementsByClassName && function (className, context) {
+ if (documentIsHTML) {
+ return context.getElementsByClassName(className);
+ }
+ };
+
+ /* QSA/matchesSelector
+ ---------------------------------------------------------------------- */
+
+ // QSA and matchesSelector support
+
+ // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+ rbuggyMatches = [];
+
+ // qSa(:focus) reports false when true (Chrome 21)
+ // We allow this because of a bug in IE8/9 that throws an error
+ // whenever `document.activeElement` is accessed on an iframe
+ // So, we allow :focus to pass through QSA all the time to avoid the IE error
+ // See http://bugs.jquery.com/ticket/13378
+ rbuggyQSA = [];
+
+ if ((support.qsa = rnative.test(doc.querySelectorAll))) {
+ // Build QSA regex
+ // Regex strategy adopted from Diego Perini
+ assert(function (div) {
+ // Select is set to empty string on purpose
+ // This is to test IE's treatment of not explicitly
+ // setting a boolean content attribute,
+ // since its presence should be enough
+ // http://bugs.jquery.com/ticket/12359
+ docElem.appendChild(div).innerHTML = "<a id='" + expando + "'></a>" +
+ "<select id='" + expando + "-\f]' msallowcapture=''>" +
+ "<option selected=''></option></select>";
+
+ // Support: IE8, Opera 11-12.16
+ // Nothing should be selected when empty strings follow ^= or $= or *=
+ // The test attribute must be unknown in Opera but "safe" for WinRT
+ // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+ if (div.querySelectorAll("[msallowcapture^='']").length) {
+ rbuggyQSA.push("[*^$]=" + whitespace + "*(?:''|\"\")");
+ }
+
+ // Support: IE8
+ // Boolean attributes and "value" are not treated correctly
+ if (!div.querySelectorAll("[selected]").length) {
+ rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
+ }
+
+ // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+ if (!div.querySelectorAll("[id~=" + expando + "-]").length) {
+ rbuggyQSA.push("~=");
+ }
+
+ // Webkit/Opera - :checked should return selected option elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":checked").length) {
+ rbuggyQSA.push(":checked");
+ }
+
+ // Support: Safari 8+, iOS 8+
+ // https://bugs.webkit.org/show_bug.cgi?id=136851
+ // In-page `selector#id sibing-combinator selector` fails
+ if (!div.querySelectorAll("a#" + expando + "+*").length) {
+ rbuggyQSA.push(".#.+[+~]");
+ }
+ });
+
+ assert(function (div) {
+ // Support: Windows 8 Native Apps
+ // The type and name attributes are restricted during .innerHTML assignment
+ var input = doc.createElement("input");
+ input.setAttribute("type", "hidden");
+ div.appendChild(input).setAttribute("name", "D");
+
+ // Support: IE8
+ // Enforce case-sensitivity of name attribute
+ if (div.querySelectorAll("[name=d]").length) {
+ rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
+ }
+
+ // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+ // IE8 throws error here and will not see later tests
+ if (!div.querySelectorAll(":enabled").length) {
+ rbuggyQSA.push(":enabled", ":disabled");
+ }
+
+ // Opera 10-11 does not throw on post-comma invalid pseudos
+ div.querySelectorAll("*,:x");
+ rbuggyQSA.push(",.*:");
+ });
+ }
+
+ if ((support.matchesSelector = rnative.test((matches = docElem.matches ||
+ docElem.webkitMatchesSelector ||
+ docElem.mozMatchesSelector ||
+ docElem.oMatchesSelector ||
+ docElem.msMatchesSelector)))) {
+
+ assert(function (div) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9)
+ support.disconnectedMatch = matches.call(div, "div");
+
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call(div, "[s!='']:x");
+ rbuggyMatches.push("!=", pseudos);
+ });
+ }
+
+ rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
+ rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
+
+ /* Contains
+ ---------------------------------------------------------------------- */
+ hasCompare = rnative.test(docElem.compareDocumentPosition);
+
+ // Element contains another
+ // Purposefully does not implement inclusive descendent
+ // As in, an element does not contain itself
+ contains = hasCompare || rnative.test(docElem.contains) ?
+ function (a, b) {
+ var adown = a.nodeType === 9 ? a.documentElement : a,
+ bup = b && b.parentNode;
+ return a === bup || !!( bup && bup.nodeType === 1 && (
+ adown.contains ?
+ adown.contains(bup) :
+ a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16
+ ));
+ } :
+ function (a, b) {
+ if (b) {
+ while ((b = b.parentNode)) {
+ if (b === a) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ /* Sorting
+ ---------------------------------------------------------------------- */
+
+ // Document order sorting
+ sortOrder = hasCompare ?
+ function (a, b) {
+
+ // Flag for duplicate removal
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ // Sort on method existence if only one input has compareDocumentPosition
+ var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ if (compare) {
+ return compare;
+ }
+
+ // Calculate position if both inputs belong to the same document
+ compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+ a.compareDocumentPosition(b) :
+
+ // Otherwise we know they are disconnected
+ 1;
+
+ // Disconnected nodes
+ if (compare & 1 ||
+ (!support.sortDetached && b.compareDocumentPosition(a) === compare)) {
+
+ // Choose the first element that is related to our preferred document
+ if (a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {
+ return -1;
+ }
+ if (b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {
+ return 1;
+ }
+
+ // Maintain original order
+ return sortInput ?
+ ( indexOf(sortInput, a) - indexOf(sortInput, b) ) :
+ 0;
+ }
+
+ return compare & 4 ? -1 : 1;
+ } :
+ function (a, b) {
+ // Exit early if the nodes are identical
+ if (a === b) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ var cur,
+ i = 0,
+ aup = a.parentNode,
+ bup = b.parentNode,
+ ap = [a],
+ bp = [b];
+
+ // Parentless nodes are either documents or disconnected
+ if (!aup || !bup) {
+ return a === doc ? -1 :
+ b === doc ? 1 :
+ aup ? -1 :
+ bup ? 1 :
+ sortInput ?
+ ( indexOf(sortInput, a) - indexOf(sortInput, b) ) :
+ 0;
+
+ // If the nodes are siblings, we can do a quick check
+ } else if (aup === bup) {
+ return siblingCheck(a, b);
+ }
+
+ // Otherwise we need full lists of their ancestors for comparison
+ cur = a;
+ while ((cur = cur.parentNode)) {
+ ap.unshift(cur);
+ }
+ cur = b;
+ while ((cur = cur.parentNode)) {
+ bp.unshift(cur);
+ }
+
+ // Walk down the tree looking for a discrepancy
+ while (ap[i] === bp[i]) {
+ i++;
+ }
+
+ return i ?
+ // Do a sibling check if the nodes have a common ancestor
+ siblingCheck(ap[i], bp[i]) :
+
+ // Otherwise nodes in our document sort first
+ ap[i] === preferredDoc ? -1 :
+ bp[i] === preferredDoc ? 1 :
+ 0;
+ };
+
+ return doc;
+ };
+
+ Sizzle.matches = function (expr, elements) {
+ return Sizzle(expr, null, null, elements);
+ };
+
+ Sizzle.matchesSelector = function (elem, expr) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(rattributeQuotes, "='$1']");
+
+ if (support.matchesSelector && documentIsHTML &&
+ ( !rbuggyMatches || !rbuggyMatches.test(expr) ) &&
+ ( !rbuggyQSA || !rbuggyQSA.test(expr) )) {
+
+ try {
+ var ret = matches.call(elem, expr);
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if (ret || support.disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9
+ elem.document && elem.document.nodeType !== 11) {
+ return ret;
+ }
+ } catch (e) {
+ }
+ }
+
+ return Sizzle(expr, document, null, [elem]).length > 0;
+ };
+
+ Sizzle.contains = function (context, elem) {
+ // Set document vars if needed
+ if (( context.ownerDocument || context ) !== document) {
+ setDocument(context);
+ }
+ return contains(context, elem);
+ };
+
+ Sizzle.attr = function (elem, name) {
+ // Set document vars if needed
+ if (( elem.ownerDocument || elem ) !== document) {
+ setDocument(elem);
+ }
+
+ var fn = Expr.attrHandle[name.toLowerCase()],
+ // Don't get fooled by Object.prototype properties (jQuery #13807)
+ val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ?
+ fn(elem, name, !documentIsHTML) :
+ undefined;
+
+ return val !== undefined ?
+ val :
+ support.attributes || !documentIsHTML ?
+ elem.getAttribute(name) :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+ };
+
+ Sizzle.error = function (msg) {
+ throw new Error("Syntax error, unrecognized expression: " + msg);
+ };
+
+ /**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+ Sizzle.uniqueSort = function (results) {
+ var elem,
+ duplicates = [],
+ j = 0,
+ i = 0;
+
+ // Unless we *know* we can detect duplicates, assume their presence
+ hasDuplicate = !support.detectDuplicates;
+ sortInput = !support.sortStable && results.slice(0);
+ results.sort(sortOrder);
+
+ if (hasDuplicate) {
+ while ((elem = results[i++])) {
+ if (elem === results[i]) {
+ j = duplicates.push(i);
+ }
+ }
+ while (j--) {
+ results.splice(duplicates[j], 1);
+ }
+ }
+
+ // Clear input after sorting to release objects
+ // See https://github.com/jquery/sizzle/pull/225
+ sortInput = null;
+
+ return results;
+ };
+
+ /**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+ getText = Sizzle.getText = function (elem) {
+ var node,
+ ret = "",
+ i = 0,
+ nodeType = elem.nodeType;
+
+ if (!nodeType) {
+ // If no nodeType, this is expected to be an array
+ while ((node = elem[i++])) {
+ // Do not traverse comment nodes
+ ret += getText(node);
+ }
+ } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
+ // Use textContent for elements
+ // innerText usage removed for consistency of new lines (jQuery #11153)
+ if (typeof elem.textContent === "string") {
+ return elem.textContent;
+ } else {
+ // Traverse its children
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText(elem);
+ }
+ }
+ } else if (nodeType === 3 || nodeType === 4) {
+ return elem.nodeValue;
+ }
+ // Do not include comment or processing instruction nodes
+
+ return ret;
+ };
+
+ Expr = Sizzle.selectors = {
+
+ // Can be adjusted by the user
+ cacheLength: 50,
+
+ createPseudo: markFunction,
+
+ match: matchExpr,
+
+ attrHandle: {},
+
+ find: {},
+
+ relative: {
+ ">": {dir: "parentNode", first: true},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: true},
+ "~": {dir: "previousSibling"}
+ },
+
+ preFilter: {
+ "ATTR": function (match) {
+ match[1] = match[1].replace(runescape, funescape);
+
+ // Move the given value to match[3] whether quoted or unquoted
+ match[3] = ( match[3] || match[4] || match[5] || "" ).replace(runescape, funescape);
+
+ if (match[2] === "~=") {
+ match[3] = " " + match[3] + " ";
+ }
+
+ return match.slice(0, 4);
+ },
+
+ "CHILD": function (match) {
+ /* matches from matchExpr["CHILD"]
+ 1 type (only|nth|...)
+ 2 what (child|of-type)
+ 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+ 4 xn-component of xn+y argument ([+-]?\d*n|)
+ 5 sign of xn-component
+ 6 x of xn-component
+ 7 sign of y-component
+ 8 y of y-component
+ */
+ match[1] = match[1].toLowerCase();
+
+ if (match[1].slice(0, 3) === "nth") {
+ // nth-* requires argument
+ if (!match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ // numeric x and y parameters for Expr.filter.CHILD
+ // remember that false/true cast respectively to 0/1
+ match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+ match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+ // other types prohibit arguments
+ } else if (match[3]) {
+ Sizzle.error(match[0]);
+ }
+
+ return match;
+ },
+
+ "PSEUDO": function (match) {
+ var excess,
+ unquoted = !match[6] && match[2];
+
+ if (matchExpr["CHILD"].test(match[0])) {
+ return null;
+ }
+
+ // Accept quoted arguments as-is
+ if (match[3]) {
+ match[2] = match[4] || match[5] || "";
+
+ // Strip excess characters from unquoted arguments
+ } else if (unquoted && rpseudo.test(unquoted) &&
+ // Get excess from tokenize (recursively)
+ (excess = tokenize(unquoted, true)) &&
+ // advance to the next closing parenthesis
+ (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
+
+ // excess is a negative index
+ match[0] = match[0].slice(0, excess);
+ match[2] = unquoted.slice(0, excess);
+ }
+
+ // Return only captures needed by the pseudo filter method (type and argument)
+ return match.slice(0, 3);
+ }
+ },
+
+ filter: {
+
+ "TAG": function (nodeNameSelector) {
+ var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
+ return nodeNameSelector === "*" ?
+ function () {
+ return true;
+ } :
+ function (elem) {
+ return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+ };
+ },
+
+ "CLASS": function (className) {
+ var pattern = classCache[className + " "];
+
+ return pattern ||
+ (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) &&
+ classCache(className, function (elem) {
+ return pattern.test(typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "");
+ });
+ },
+
+ "ATTR": function (name, operator, check) {
+ return function (elem) {
+ var result = Sizzle.attr(elem, name);
+
+ if (result == null) {
+ return operator === "!=";
+ }
+ if (!operator) {
+ return true;
+ }
+
+ result += "";
+
+ return operator === "=" ? result === check :
+ operator === "!=" ? result !== check :
+ operator === "^=" ? check && result.indexOf(check) === 0 :
+ operator === "*=" ? check && result.indexOf(check) > -1 :
+ operator === "$=" ? check && result.slice(-check.length) === check :
+ operator === "~=" ? ( " " + result.replace(rwhitespace, " ") + " " ).indexOf(check) > -1 :
+ operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" :
+ false;
+ };
+ },
+
+ "CHILD": function (type, what, argument, first, last) {
+ var simple = type.slice(0, 3) !== "nth",
+ forward = type.slice(-4) !== "last",
+ ofType = what === "of-type";
+
+ return first === 1 && last === 0 ?
+
+ // Shortcut for :nth-*(n)
+ function (elem) {
+ return !!elem.parentNode;
+ } :
+
+ function (elem, context, xml) {
+ var cache, outerCache, node, diff, nodeIndex, start,
+ dir = simple !== forward ? "nextSibling" : "previousSibling",
+ parent = elem.parentNode,
+ name = ofType && elem.nodeName.toLowerCase(),
+ useCache = !xml && !ofType;
+
+ if (parent) {
+
+ // :(first|last|only)-(child|of-type)
+ if (simple) {
+ while (dir) {
+ node = elem;
+ while ((node = node[dir])) {
+ if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
+ return false;
+ }
+ }
+ // Reverse direction for :only-* (if we haven't yet done so)
+ start = dir = type === "only" && !start && "nextSibling";
+ }
+ return true;
+ }
+
+ start = [forward ? parent.firstChild : parent.lastChild];
+
+ // non-xml :nth-child(...) stores cache data on `parent`
+ if (forward && useCache) {
+ // Seek `elem` from a previously-cached index
+ outerCache = parent[expando] || (parent[expando] = {});
+ cache = outerCache[type] || [];
+ nodeIndex = cache[0] === dirruns && cache[1];
+ diff = cache[0] === dirruns && cache[2];
+ node = nodeIndex && parent.childNodes[nodeIndex];
+
+ while ((node = ++nodeIndex && node && node[dir] ||
+
+ // Fallback to seeking `elem` from the start
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ // When found, cache indexes on `parent` and break
+ if (node.nodeType === 1 && ++diff && node === elem) {
+ outerCache[type] = [dirruns, nodeIndex, diff];
+ break;
+ }
+ }
+
+ // Use previously-cached element index if available
+ } else if (useCache && (cache = (elem[expando] || (elem[expando] = {}))[type]) && cache[0] === dirruns) {
+ diff = cache[1];
+
+ // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+ } else {
+ // Use the same loop as above to seek `elem` from the start
+ while ((node = ++nodeIndex && node && node[dir] ||
+ (diff = nodeIndex = 0) || start.pop())) {
+
+ if (( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff) {
+ // Cache the index of each encountered element
+ if (useCache) {
+ (node[expando] || (node[expando] = {}))[type] = [dirruns, diff];
+ }
+
+ if (node === elem) {
+ break;
+ }
+ }
+ }
+ }
+
+ // Incorporate the offset, then check against cycle size
+ diff -= last;
+ return diff === first || ( diff % first === 0 && diff / first >= 0 );
+ }
+ };
+ },
+
+ "PSEUDO": function (pseudo, argument) {
+ // pseudo-class names are case-insensitive
+ // http://www.w3.org/TR/selectors/#pseudo-classes
+ // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+ // Remember that setFilters inherits from pseudos
+ var args,
+ fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] ||
+ Sizzle.error("unsupported pseudo: " + pseudo);
+
+ // The user may use createPseudo to indicate that
+ // arguments are needed to create the filter function
+ // just as Sizzle does
+ if (fn[expando]) {
+ return fn(argument);
+ }
+
+ // But maintain support for old signatures
+ if (fn.length > 1) {
+ args = [pseudo, pseudo, "", argument];
+ return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ?
+ markFunction(function (seed, matches) {
+ var idx,
+ matched = fn(seed, argument),
+ i = matched.length;
+ while (i--) {
+ idx = indexOf(seed, matched[i]);
+ seed[idx] = !( matches[idx] = matched[i] );
+ }
+ }) :
+ function (elem) {
+ return fn(elem, 0, args);
+ };
+ }
+
+ return fn;
+ }
+ },
+
+ pseudos: {
+ // Potentially complex pseudos
+ "not": markFunction(function (selector) {
+ // Trim the selector passed to compile
+ // to avoid treating leading and trailing
+ // spaces as combinators
+ var input = [],
+ results = [],
+ matcher = compile(selector.replace(rtrim, "$1"));
+
+ return matcher[expando] ?
+ markFunction(function (seed, matches, context, xml) {
+ var elem,
+ unmatched = matcher(seed, null, xml, []),
+ i = seed.length;
+
+ // Match elements unmatched by `matcher`
+ while (i--) {
+ if ((elem = unmatched[i])) {
+ seed[i] = !(matches[i] = elem);
+ }
+ }
+ }) :
+ function (elem, context, xml) {
+ input[0] = elem;
+ matcher(input, null, xml, results);
+ // Don't keep the element (issue #299)
+ input[0] = null;
+ return !results.pop();
+ };
+ }),
+
+ "has": markFunction(function (selector) {
+ return function (elem) {
+ return Sizzle(selector, elem).length > 0;
+ };
+ }),
+
+ "contains": markFunction(function (text) {
+ text = text.replace(runescape, funescape);
+ return function (elem) {
+ return ( elem.textContent || elem.innerText || getText(elem) ).indexOf(text) > -1;
+ };
+ }),
+
+ // "Whether an element is represented by a :lang() selector
+ // is based solely on the element's language value
+ // being equal to the identifier C,
+ // or beginning with the identifier C immediately followed by "-".
+ // The matching of C against the element's language value is performed case-insensitively.
+ // The identifier C does not have to be a valid language name."
+ // http://www.w3.org/TR/selectors/#lang-pseudo
+ "lang": markFunction(function (lang) {
+ // lang value must be a valid identifier
+ if (!ridentifier.test(lang || "")) {
+ Sizzle.error("unsupported lang: " + lang);
+ }
+ lang = lang.replace(runescape, funescape).toLowerCase();
+ return function (elem) {
+ var elemLang;
+ do {
+ if ((elemLang = documentIsHTML ?
+ elem.lang :
+ elem.getAttribute("xml:lang") || elem.getAttribute("lang"))) {
+
+ elemLang = elemLang.toLowerCase();
+ return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
+ }
+ } while ((elem = elem.parentNode) && elem.nodeType === 1);
+ return false;
+ };
+ }),
+
+ // Miscellaneous
+ "target": function (elem) {
+ var hash = window.location && window.location.hash;
+ return hash && hash.slice(1) === elem.id;
+ },
+
+ "root": function (elem) {
+ return elem === docElem;
+ },
+
+ "focus": function (elem) {
+ return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+ },
+
+ // Boolean properties
+ "enabled": function (elem) {
+ return elem.disabled === false;
+ },
+
+ "disabled": function (elem) {
+ return elem.disabled === true;
+ },
+
+ "checked": function (elem) {
+ // In CSS3, :checked should return both checked and selected elements
+ // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+ var nodeName = elem.nodeName.toLowerCase();
+ return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+ },
+
+ "selected": function (elem) {
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ if (elem.parentNode) {
+ elem.parentNode.selectedIndex;
+ }
+
+ return elem.selected === true;
+ },
+
+ // Contents
+ "empty": function (elem) {
+ // http://www.w3.org/TR/selectors/#empty-pseudo
+ // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+ // but not by others (comment: 8; processing instruction: 7; etc.)
+ // nodeType < 6 works because attributes (2) do not appear as children
+ for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ if (elem.nodeType < 6) {
+ return false;
+ }
+ }
+ return true;
+ },
+
+ "parent": function (elem) {
+ return !Expr.pseudos["empty"](elem);
+ },
+
+ // Element/input types
+ "header": function (elem) {
+ return rheader.test(elem.nodeName);
+ },
+
+ "input": function (elem) {
+ return rinputs.test(elem.nodeName);
+ },
+
+ "button": function (elem) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && elem.type === "button" || name === "button";
+ },
+
+ "text": function (elem) {
+ var attr;
+ return elem.nodeName.toLowerCase() === "input" &&
+ elem.type === "text" &&
+
+ // Support: IE<8
+ // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+ ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+ },
+
+ // Position-in-collection
+ "first": createPositionalPseudo(function () {
+ return [0];
+ }),
+
+ "last": createPositionalPseudo(function (matchIndexes, length) {
+ return [length - 1];
+ }),
+
+ "eq": createPositionalPseudo(function (matchIndexes, length, argument) {
+ return [argument < 0 ? argument + length : argument];
+ }),
+
+ "even": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 0;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "odd": createPositionalPseudo(function (matchIndexes, length) {
+ var i = 1;
+ for (; i < length; i += 2) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "lt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; --i >= 0;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ }),
+
+ "gt": createPositionalPseudo(function (matchIndexes, length, argument) {
+ var i = argument < 0 ? argument + length : argument;
+ for (; ++i < length;) {
+ matchIndexes.push(i);
+ }
+ return matchIndexes;
+ })
+ }
+ };
+
+ Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+ for (i in {radio: true, checkbox: true, file: true, password: true, image: true}) {
+ Expr.pseudos[i] = createInputPseudo(i);
+ }
+ for (i in {submit: true, reset: true}) {
+ Expr.pseudos[i] = createButtonPseudo(i);
+ }
+
+// Easy API for creating new setFilters
+ function setFilters() {
+ }
+
+ setFilters.prototype = Expr.filters = Expr.pseudos;
+ Expr.setFilters = new setFilters();
+
+ tokenize = Sizzle.tokenize = function (selector, parseOnly) {
+ var matched, match, tokens, type,
+ soFar, groups, preFilters,
+ cached = tokenCache[selector + " "];
+
+ if (cached) {
+ return parseOnly ? 0 : cached.slice(0);
+ }
+
+ soFar = selector;
+ groups = [];
+ preFilters = Expr.preFilter;
+
+ while (soFar) {
+
+ // Comma and first run
+ if (!matched || (match = rcomma.exec(soFar))) {
+ if (match) {
+ // Don't consume trailing commas as valid
+ soFar = soFar.slice(match[0].length) || soFar;
+ }
+ groups.push((tokens = []));
+ }
+
+ matched = false;
+
+ // Combinators
+ if ((match = rcombinators.exec(soFar))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ // Cast descendant combinators to space
+ type: match[0].replace(rtrim, " ")
+ });
+ soFar = soFar.slice(matched.length);
+ }
+
+ // Filters
+ for (type in Expr.filter) {
+ if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] ||
+ (match = preFilters[type](match)))) {
+ matched = match.shift();
+ tokens.push({
+ value: matched,
+ type: type,
+ matches: match
+ });
+ soFar = soFar.slice(matched.length);
+ }
+ }
+
+ if (!matched) {
+ break;
+ }
+ }
+
+ // Return the length of the invalid excess
+ // if we're just parsing
+ // Otherwise, throw an error or return tokens
+ return parseOnly ?
+ soFar.length :
+ soFar ?
+ Sizzle.error(selector) :
+ // Cache the tokens
+ tokenCache(selector, groups).slice(0);
+ };
+
+ function toSelector(tokens) {
+ var i = 0,
+ len = tokens.length,
+ selector = "";
+ for (; i < len; i++) {
+ selector += tokens[i].value;
+ }
+ return selector;
+ }
+
+ function addCombinator(matcher, combinator, base) {
+ var dir = combinator.dir,
+ checkNonElements = base && dir === "parentNode",
+ doneName = done++;
+
+ return combinator.first ?
+ // Check against closest ancestor/preceding element
+ function (elem, context, xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ return matcher(elem, context, xml);
+ }
+ }
+ } :
+
+ // Check against all ancestor/preceding elements
+ function (elem, context, xml) {
+ var oldCache, outerCache,
+ newCache = [dirruns, doneName];
+
+ // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+ if (xml) {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ if (matcher(elem, context, xml)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ while ((elem = elem[dir])) {
+ if (elem.nodeType === 1 || checkNonElements) {
+ outerCache = elem[expando] || (elem[expando] = {});
+ if ((oldCache = outerCache[dir]) &&
+ oldCache[0] === dirruns && oldCache[1] === doneName) {
+
+ // Assign to newCache so results back-propagate to previous elements
+ return (newCache[2] = oldCache[2]);
+ } else {
+ // Reuse newcache so results back-propagate to previous elements
+ outerCache[dir] = newCache;
+
+ // A match means we're done; a fail means we have to keep checking
+ if ((newCache[2] = matcher(elem, context, xml))) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ };
+ }
+
+ function elementMatcher(matchers) {
+ return matchers.length > 1 ?
+ function (elem, context, xml) {
+ var i = matchers.length;
+ while (i--) {
+ if (!matchers[i](elem, context, xml)) {
+ return false;
+ }
+ }
+ return true;
+ } :
+ matchers[0];
+ }
+
+ function multipleContexts(selector, contexts, results) {
+ var i = 0,
+ len = contexts.length;
+ for (; i < len; i++) {
+ Sizzle(selector, contexts[i], results);
+ }
+ return results;
+ }
+
+ function condense(unmatched, map, filter, context, xml) {
+ var elem,
+ newUnmatched = [],
+ i = 0,
+ len = unmatched.length,
+ mapped = map != null;
+
+ for (; i < len; i++) {
+ if ((elem = unmatched[i])) {
+ if (!filter || filter(elem, context, xml)) {
+ newUnmatched.push(elem);
+ if (mapped) {
+ map.push(i);
+ }
+ }
+ }
+ }
+
+ return newUnmatched;
+ }
+
+ function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
+ if (postFilter && !postFilter[expando]) {
+ postFilter = setMatcher(postFilter);
+ }
+ if (postFinder && !postFinder[expando]) {
+ postFinder = setMatcher(postFinder, postSelector);
+ }
+ return markFunction(function (seed, results, context, xml) {
+ var temp, i, elem,
+ preMap = [],
+ postMap = [],
+ preexisting = results.length,
+
+ // Get initial elements from seed or context
+ elems = seed || multipleContexts(selector || "*", context.nodeType ? [context] : context, []),
+
+ // Prefilter to get matcher input, preserving a map for seed-results synchronization
+ matcherIn = preFilter && ( seed || !selector ) ?
+ condense(elems, preMap, preFilter, context, xml) :
+ elems,
+
+ matcherOut = matcher ?
+ // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+ postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+ // ...intermediate processing is necessary
+ [] :
+
+ // ...otherwise use results directly
+ results :
+ matcherIn;
+
+ // Find primary matches
+ if (matcher) {
+ matcher(matcherIn, matcherOut, context, xml);
+ }
+
+ // Apply postFilter
+ if (postFilter) {
+ temp = condense(matcherOut, postMap);
+ postFilter(temp, [], context, xml);
+
+ // Un-match failing elements by moving them back to matcherIn
+ i = temp.length;
+ while (i--) {
+ if ((elem = temp[i])) {
+ matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
+ }
+ }
+ }
+
+ if (seed) {
+ if (postFinder || preFilter) {
+ if (postFinder) {
+ // Get the final matcherOut by condensing this intermediate into postFinder contexts
+ temp = [];
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i])) {
+ // Restore matcherIn since elem is not yet a final match
+ temp.push((matcherIn[i] = elem));
+ }
+ }
+ postFinder(null, (matcherOut = []), temp, xml);
+ }
+
+ // Move matched elements from seed to results to keep them synchronized
+ i = matcherOut.length;
+ while (i--) {
+ if ((elem = matcherOut[i]) &&
+ (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {
+
+ seed[temp] = !(results[temp] = elem);
+ }
+ }
+ }
+
+ // Add elements to results, through postFinder if defined
+ } else {
+ matcherOut = condense(
+ matcherOut === results ?
+ matcherOut.splice(preexisting, matcherOut.length) :
+ matcherOut
+ );
+ if (postFinder) {
+ postFinder(null, results, matcherOut, xml);
+ } else {
+ push.apply(results, matcherOut);
+ }
+ }
+ });
+ }
+
+ function matcherFromTokens(tokens) {
+ var checkContext, matcher, j,
+ len = tokens.length,
+ leadingRelative = Expr.relative[tokens[0].type],
+ implicitRelative = leadingRelative || Expr.relative[" "],
+ i = leadingRelative ? 1 : 0,
+
+ // The foundational matcher ensures that elements are reachable from top-level context(s)
+ matchContext = addCombinator(function (elem) {
+ return elem === checkContext;
+ }, implicitRelative, true),
+ matchAnyContext = addCombinator(function (elem) {
+ return indexOf(checkContext, elem) > -1;
+ }, implicitRelative, true),
+ matchers = [function (elem, context, xml) {
+ var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+ (checkContext = context).nodeType ?
+ matchContext(elem, context, xml) :
+ matchAnyContext(elem, context, xml) );
+ // Avoid hanging onto element (issue #299)
+ checkContext = null;
+ return ret;
+ }];
+
+ for (; i < len; i++) {
+ if ((matcher = Expr.relative[tokens[i].type])) {
+ matchers = [addCombinator(elementMatcher(matchers), matcher)];
+ } else {
+ matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
+
+ // Return special upon seeing a positional matcher
+ if (matcher[expando]) {
+ // Find the next relative operator (if any) for proper handling
+ j = ++i;
+ for (; j < len; j++) {
+ if (Expr.relative[tokens[j].type]) {
+ break;
+ }
+ }
+ return setMatcher(
+ i > 1 && elementMatcher(matchers),
+ i > 1 && toSelector(
+ // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+ tokens.slice(0, i - 1).concat({value: tokens[i - 2].type === " " ? "*" : ""})
+ ).replace(rtrim, "$1"),
+ matcher,
+ i < j && matcherFromTokens(tokens.slice(i, j)),
+ j < len && matcherFromTokens((tokens = tokens.slice(j))),
+ j < len && toSelector(tokens)
+ );
+ }
+ matchers.push(matcher);
+ }
+ }
+
+ return elementMatcher(matchers);
+ }
+
+ function matcherFromGroupMatchers(elementMatchers, setMatchers) {
+ var bySet = setMatchers.length > 0,
+ byElement = elementMatchers.length > 0,
+ superMatcher = function (seed, context, xml, results, outermost) {
+ var elem, j, matcher,
+ matchedCount = 0,
+ i = "0",
+ unmatched = seed && [],
+ setMatched = [],
+ contextBackup = outermostContext,
+ // We must always have either seed elements or outermost context
+ elems = seed || byElement && Expr.find["TAG"]("*", outermost),
+ // Use integer dirruns iff this is the outermost matcher
+ dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+ len = elems.length;
+
+ if (outermost) {
+ outermostContext = context !== document && context;
+ }
+
+ // Add elements passing elementMatchers directly to results
+ // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+ // Support: IE<9, Safari
+ // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+ for (; i !== len && (elem = elems[i]) != null; i++) {
+ if (byElement && elem) {
+ j = 0;
+ while ((matcher = elementMatchers[j++])) {
+ if (matcher(elem, context, xml)) {
+ results.push(elem);
+ break;
+ }
+ }
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ }
+ }
+
+ // Track unmatched elements for set filters
+ if (bySet) {
+ // They will have gone through all possible matchers
+ if ((elem = !matcher && elem)) {
+ matchedCount--;
+ }
+
+ // Lengthen the array for every element, matched or not
+ if (seed) {
+ unmatched.push(elem);
+ }
+ }
+ }
+
+ // Apply set filters to unmatched elements
+ matchedCount += i;
+ if (bySet && i !== matchedCount) {
+ j = 0;
+ while ((matcher = setMatchers[j++])) {
+ matcher(unmatched, setMatched, context, xml);
+ }
+
+ if (seed) {
+ // Reintegrate element matches to eliminate the need for sorting
+ if (matchedCount > 0) {
+ while (i--) {
+ if (!(unmatched[i] || setMatched[i])) {
+ setMatched[i] = pop.call(results);
+ }
+ }
+ }
+
+ // Discard index placeholder values to get only actual matches
+ setMatched = condense(setMatched);
+ }
+
+ // Add matches to results
+ push.apply(results, setMatched);
+
+ // Seedless set matches succeeding multiple successful matchers stipulate sorting
+ if (outermost && !seed && setMatched.length > 0 &&
+ ( matchedCount + setMatchers.length ) > 1) {
+
+ Sizzle.uniqueSort(results);
+ }
+ }
+
+ // Override manipulation of globals by nested matchers
+ if (outermost) {
+ dirruns = dirrunsUnique;
+ outermostContext = contextBackup;
+ }
+
+ return unmatched;
+ };
+
+ return bySet ?
+ markFunction(superMatcher) :
+ superMatcher;
+ }
+
+ compile = Sizzle.compile = function (selector, match /* Internal Use Only */) {
+ var i,
+ setMatchers = [],
+ elementMatchers = [],
+ cached = compilerCache[selector + " "];
+
+ if (!cached) {
+ // Generate a function of recursive functions that can be used to check each element
+ if (!match) {
+ match = tokenize(selector);
+ }
+ i = match.length;
+ while (i--) {
+ cached = matcherFromTokens(match[i]);
+ if (cached[expando]) {
+ setMatchers.push(cached);
+ } else {
+ elementMatchers.push(cached);
+ }
+ }
+
+ // Cache the compiled function
+ cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
+
+ // Save selector and tokenization
+ cached.selector = selector;
+ }
+ return cached;
+ };
+
+ /**
+ * A low-level selection function that works with Sizzle's compiled
+ * selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ * selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+ select = Sizzle.select = function (selector, context, results, seed) {
+ var i, tokens, token, type, find,
+ compiled = typeof selector === "function" && selector,
+ match = !seed && tokenize((selector = compiled.selector || selector));
+
+ results = results || [];
+
+ // Try to minimize operations if there is no seed and only one group
+ if (match.length === 1) {
+
+ // Take a shortcut and set the context if the root selector is an ID
+ tokens = match[0] = match[0].slice(0);
+ if (tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+ support.getById && context.nodeType === 9 && documentIsHTML &&
+ Expr.relative[tokens[1].type]) {
+
+ context = ( Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [] )[0];
+ if (!context) {
+ return results;
+
+ // Precompiled matchers will still verify ancestry, so step up a level
+ } else if (compiled) {
+ context = context.parentNode;
+ }
+
+ selector = selector.slice(tokens.shift().value.length);
+ }
+
+ // Fetch a seed set for right-to-left matching
+ i = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
+ while (i--) {
+ token = tokens[i];
+
+ // Abort if we hit a combinator
+ if (Expr.relative[(type = token.type)]) {
+ break;
+ }
+ if ((find = Expr.find[type])) {
+ // Search, expanding context for leading sibling combinators
+ if ((seed = find(
+ token.matches[0].replace(runescape, funescape),
+ rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
+ ))) {
+
+ // If seed is empty or no tokens remain, we can return early
+ tokens.splice(i, 1);
+ selector = seed.length && toSelector(tokens);
+ if (!selector) {
+ push.apply(results, seed);
+ return results;
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ // Compile and execute a filtering function if one is not provided
+ // Provide `match` to avoid retokenization if we modified the selector above
+ ( compiled || compile(selector, match) )(
+ seed,
+ context,
+ !documentIsHTML,
+ results,
+ rsibling.test(selector) && testContext(context.parentNode) || context
+ );
+ return results;
+ };
+
+// One-time assignments
+
+// Sort stability
+ support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+ support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+ setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+ support.sortDetached = assert(function (div1) {
+ // Should return 1, but returns 4 (following)
+ return div1.compareDocumentPosition(document.createElement("div")) & 1;
+ });
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+ if (!assert(function (div) {
+ div.innerHTML = "<a href='#'></a>";
+ return div.firstChild.getAttribute("href") === "#";
+ })) {
+ addHandle("type|href|height|width", function (elem, name, isXML) {
+ if (!isXML) {
+ return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
+ }
+ });
+ }
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+ if (!support.attributes || !assert(function (div) {
+ div.innerHTML = "<input/>";
+ div.firstChild.setAttribute("value", "");
+ return div.firstChild.getAttribute("value") === "";
+ })) {
+ addHandle("value", function (elem, name, isXML) {
+ if (!isXML && elem.nodeName.toLowerCase() === "input") {
+ return elem.defaultValue;
+ }
+ });
+ }
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+ if (!assert(function (div) {
+ return div.getAttribute("disabled") == null;
+ })) {
+ addHandle(booleans, function (elem, name, isXML) {
+ var val;
+ if (!isXML) {
+ return elem[name] === true ? name.toLowerCase() :
+ (val = elem.getAttributeNode(name)) && val.specified ?
+ val.value :
+ null;
+ }
+ });
+ }
+
+ return Sizzle;
+
+ })(window);
+
+
+ jQuery.find = Sizzle;
+ jQuery.expr = Sizzle.selectors;
+ jQuery.expr[":"] = jQuery.expr.pseudos;
+ jQuery.unique = Sizzle.uniqueSort;
+ jQuery.text = Sizzle.getText;
+ jQuery.isXMLDoc = Sizzle.isXML;
+ jQuery.contains = Sizzle.contains;
+
+
+ var rneedsContext = jQuery.expr.match.needsContext;
+
+ var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+ var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+ function winnow(elements, qualifier, not) {
+ if (jQuery.isFunction(qualifier)) {
+ return jQuery.grep(elements, function (elem, i) {
+ /* jshint -W018 */
+ return !!qualifier.call(elem, i, elem) !== not;
+ });
+
+ }
+
+ if (qualifier.nodeType) {
+ return jQuery.grep(elements, function (elem) {
+ return ( elem === qualifier ) !== not;
+ });
+
+ }
+
+ if (typeof qualifier === "string") {
+ if (risSimple.test(qualifier)) {
+ return jQuery.filter(qualifier, elements, not);
+ }
+
+ qualifier = jQuery.filter(qualifier, elements);
+ }
+
+ return jQuery.grep(elements, function (elem) {
+ return ( indexOf.call(qualifier, elem) >= 0 ) !== not;
+ });
+ }
+
+ jQuery.filter = function (expr, elems, not) {
+ var elem = elems[0];
+
+ if (not) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 && elem.nodeType === 1 ?
+ jQuery.find.matchesSelector(elem, expr) ? [elem] : [] :
+ jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {
+ return elem.nodeType === 1;
+ }));
+ };
+
+ jQuery.fn.extend({
+ find: function (selector) {
+ var i,
+ len = this.length,
+ ret = [],
+ self = this;
+
+ if (typeof selector !== "string") {
+ return this.pushStack(jQuery(selector).filter(function () {
+ for (i = 0; i < len; i++) {
+ if (jQuery.contains(self[i], this)) {
+ return true;
+ }
+ }
+ }));
+ }
+
+ for (i = 0; i < len; i++) {
+ jQuery.find(selector, self[i], ret);
+ }
+
+ // Needed because $( selector, context ) becomes $( context ).find( selector )
+ ret = this.pushStack(len > 1 ? jQuery.unique(ret) : ret);
+ ret.selector = this.selector ? this.selector + " " + selector : selector;
+ return ret;
+ },
+ filter: function (selector) {
+ return this.pushStack(winnow(this, selector || [], false));
+ },
+ not: function (selector) {
+ return this.pushStack(winnow(this, selector || [], true));
+ },
+ is: function (selector) {
+ return !!winnow(
+ this,
+
+ // If this is a positional/relative selector, check membership in the returned set
+ // so $("p:first").is("p:last") won't return true for a doc with two "p".
+ typeof selector === "string" && rneedsContext.test(selector) ?
+ jQuery(selector) :
+ selector || [],
+ false
+ ).length;
+ }
+ });
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+ var rootjQuery,
+
+ // A simple way to check for HTML strings
+ // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+ // Strict HTML recognition (#11290: must start with <)
+ rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+ init = jQuery.fn.init = function (selector, context) {
+ var match, elem;
+
+ // HANDLE: $(""), $(null), $(undefined), $(false)
+ if (!selector) {
+ return this;
+ }
+
+ // Handle HTML strings
+ if (typeof selector === "string") {
+ if (selector[0] === "<" && selector[selector.length - 1] === ">" && selector.length >= 3) {
+ // Assume that strings that start and end with <> are HTML and skip the regex check
+ match = [null, selector, null];
+
+ } else {
+ match = rquickExpr.exec(selector);
+ }
+
+ // Match html or make sure no context is specified for #id
+ if (match && (match[1] || !context)) {
+
+ // HANDLE: $(html) -> $(array)
+ if (match[1]) {
+ context = context instanceof jQuery ? context[0] : context;
+
+ // Option to run scripts is true for back-compat
+ // Intentionally let the error be thrown if parseHTML is not present
+ jQuery.merge(this, jQuery.parseHTML(
+ match[1],
+ context && context.nodeType ? context.ownerDocument || context : document,
+ true
+ ));
+
+ // HANDLE: $(html, props)
+ if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
+ for (match in context) {
+ // Properties of context are called as methods if possible
+ if (jQuery.isFunction(this[match])) {
+ this[match](context[match]);
+
+ // ...and otherwise set as attributes
+ } else {
+ this.attr(match, context[match]);
+ }
+ }
+ }
+
+ return this;
+
+ // HANDLE: $(#id)
+ } else {
+ elem = document.getElementById(match[2]);
+
+ // Support: Blackberry 4.6
+ // gEBID returns nodes no longer in the document (#6963)
+ if (elem && elem.parentNode) {
+ // Inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $(expr, $(...))
+ } else if (!context || context.jquery) {
+ return ( context || rootjQuery ).find(selector);
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return this.constructor(context).find(selector);
+ }
+
+ // HANDLE: $(DOMElement)
+ } else if (selector.nodeType) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if (jQuery.isFunction(selector)) {
+ return typeof rootjQuery.ready !== "undefined" ?
+ rootjQuery.ready(selector) :
+ // Execute immediately if ready is not present
+ selector(jQuery);
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray(selector, this);
+ };
+
+// Give the init function the jQuery prototype for later instantiation
+ init.prototype = jQuery.fn;
+
+// Initialize central reference
+ rootjQuery = jQuery(document);
+
+
+ var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+ // Methods guaranteed to produce a unique set when starting from a unique set
+ guaranteedUnique = {
+ children: true,
+ contents: true,
+ next: true,
+ prev: true
+ };
+
+ jQuery.extend({
+ dir: function (elem, dir, until) {
+ var matched = [],
+ truncate = until !== undefined;
+
+ while ((elem = elem[dir]) && elem.nodeType !== 9) {
+ if (elem.nodeType === 1) {
+ if (truncate && jQuery(elem).is(until)) {
+ break;
+ }
+ matched.push(elem);
+ }
+ }
+ return matched;
+ },
+
+ sibling: function (n, elem) {
+ var matched = [];
+
+ for (; n; n = n.nextSibling) {
+ if (n.nodeType === 1 && n !== elem) {
+ matched.push(n);
+ }
+ }
+
+ return matched;
+ }
+ });
+
+ jQuery.fn.extend({
+ has: function (target) {
+ var targets = jQuery(target, this),
+ l = targets.length;
+
+ return this.filter(function () {
+ var i = 0;
+ for (; i < l; i++) {
+ if (jQuery.contains(this, targets[i])) {
+ return true;
+ }
+ }
+ });
+ },
+
+ closest: function (selectors, context) {
+ var cur,
+ i = 0,
+ l = this.length,
+ matched = [],
+ pos = rneedsContext.test(selectors) || typeof selectors !== "string" ?
+ jQuery(selectors, context || this.context) :
+ 0;
+
+ for (; i < l; i++) {
+ for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
+ // Always skip document fragments
+ if (cur.nodeType < 11 && (pos ?
+ pos.index(cur) > -1 :
+
+ // Don't pass non-elements to Sizzle
+ cur.nodeType === 1 &&
+ jQuery.find.matchesSelector(cur, selectors))) {
+
+ matched.push(cur);
+ break;
+ }
+ }
+ }
+
+ return this.pushStack(matched.length > 1 ? jQuery.unique(matched) : matched);
+ },
+
+ // Determine the position of an element within the set
+ index: function (elem) {
+
+ // No argument, return index in parent
+ if (!elem) {
+ return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+ }
+
+ // Index in selector
+ if (typeof elem === "string") {
+ return indexOf.call(jQuery(elem), this[0]);
+ }
+
+ // Locate the position of the desired element
+ return indexOf.call(this,
+
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem
+ );
+ },
+
+ add: function (selector, context) {
+ return this.pushStack(
+ jQuery.unique(
+ jQuery.merge(this.get(), jQuery(selector, context))
+ )
+ );
+ },
+
+ addBack: function (selector) {
+ return this.add(selector == null ?
+ this.prevObject : this.prevObject.filter(selector)
+ );
+ }
+ });
+
+ function sibling(cur, dir) {
+ while ((cur = cur[dir]) && cur.nodeType !== 1) {
+ }
+ return cur;
+ }
+
+ jQuery.each({
+ parent: function (elem) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function (elem) {
+ return jQuery.dir(elem, "parentNode");
+ },
+ parentsUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "parentNode", until);
+ },
+ next: function (elem) {
+ return sibling(elem, "nextSibling");
+ },
+ prev: function (elem) {
+ return sibling(elem, "previousSibling");
+ },
+ nextAll: function (elem) {
+ return jQuery.dir(elem, "nextSibling");
+ },
+ prevAll: function (elem) {
+ return jQuery.dir(elem, "previousSibling");
+ },
+ nextUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "nextSibling", until);
+ },
+ prevUntil: function (elem, i, until) {
+ return jQuery.dir(elem, "previousSibling", until);
+ },
+ siblings: function (elem) {
+ return jQuery.sibling(( elem.parentNode || {} ).firstChild, elem);
+ },
+ children: function (elem) {
+ return jQuery.sibling(elem.firstChild);
+ },
+ contents: function (elem) {
+ return elem.contentDocument || jQuery.merge([], elem.childNodes);
+ }
+ }, function (name, fn) {
+ jQuery.fn[name] = function (until, selector) {
+ var matched = jQuery.map(this, fn, until);
+
+ if (name.slice(-5) !== "Until") {
+ selector = until;
+ }
+
+ if (selector && typeof selector === "string") {
+ matched = jQuery.filter(selector, matched);
+ }
+
+ if (this.length > 1) {
+ // Remove duplicates
+ if (!guaranteedUnique[name]) {
+ jQuery.unique(matched);
+ }
+
+ // Reverse order for parents* and prev-derivatives
+ if (rparentsprev.test(name)) {
+ matched.reverse();
+ }
+ }
+
+ return this.pushStack(matched);
+ };
+ });
+ var rnotwhite = (/\S+/g);
+
+
+// String to Object options format cache
+ var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+ function createOptions(options) {
+ var object = optionsCache[options] = {};
+ jQuery.each(options.match(rnotwhite) || [], function (_, flag) {
+ object[flag] = true;
+ });
+ return object;
+ }
+
+ /*
+ * Create a callback list using the following parameters:
+ *
+ * options: an optional list of space-separated options that will change how
+ * the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ * once: will ensure the callback list can only be fired once (like a Deferred)
+ *
+ * memory: will keep track of previous values and will call any callback added
+ * after the list has been fired right away with the latest "memorized"
+ * values (like a Deferred)
+ *
+ * unique: will ensure a callback can only be added once (no duplicate in the list)
+ *
+ * stopOnFalse: interrupt callings when a callback returns false
+ *
+ */
+ jQuery.Callbacks = function (options) {
+
+ // Convert options from String-formatted to Object-formatted if needed
+ // (we check in cache first)
+ options = typeof options === "string" ?
+ ( optionsCache[options] || createOptions(options) ) :
+ jQuery.extend({}, options);
+
+ var // Last fire value (for non-forgettable lists)
+ memory,
+ // Flag to know if list was already fired
+ fired,
+ // Flag to know if list is currently firing
+ firing,
+ // First callback to fire (used internally by add and fireWith)
+ firingStart,
+ // End of the loop when firing
+ firingLength,
+ // Index of currently firing callback (modified by remove if needed)
+ firingIndex,
+ // Actual callback list
+ list = [],
+ // Stack of fire calls for repeatable lists
+ stack = !options.once && [],
+ // Fire callbacks
+ fire = function (data) {
+ memory = options.memory && data;
+ fired = true;
+ firingIndex = firingStart || 0;
+ firingStart = 0;
+ firingLength = list.length;
+ firing = true;
+ for (; list && firingIndex < firingLength; firingIndex++) {
+ if (list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse) {
+ memory = false; // To prevent further calls using add
+ break;
+ }
+ }
+ firing = false;
+ if (list) {
+ if (stack) {
+ if (stack.length) {
+ fire(stack.shift());
+ }
+ } else if (memory) {
+ list = [];
+ } else {
+ self.disable();
+ }
+ }
+ },
+ // Actual Callbacks object
+ self = {
+ // Add a callback or a collection of callbacks to the list
+ add: function () {
+ if (list) {
+ // First, we save the current length
+ var start = list.length;
+ (function add(args) {
+ jQuery.each(args, function (_, arg) {
+ var type = jQuery.type(arg);
+ if (type === "function") {
+ if (!options.unique || !self.has(arg)) {
+ list.push(arg);
+ }
+ } else if (arg && arg.length && type !== "string") {
+ // Inspect recursively
+ add(arg);
+ }
+ });
+ })(arguments);
+ // Do we need to add the callbacks to the
+ // current firing batch?
+ if (firing) {
+ firingLength = list.length;
+ // With memory, if we're not firing then
+ // we should call right away
+ } else if (memory) {
+ firingStart = start;
+ fire(memory);
+ }
+ }
+ return this;
+ },
+ // Remove a callback from the list
+ remove: function () {
+ if (list) {
+ jQuery.each(arguments, function (_, arg) {
+ var index;
+ while (( index = jQuery.inArray(arg, list, index) ) > -1) {
+ list.splice(index, 1);
+ // Handle firing indexes
+ if (firing) {
+ if (index <= firingLength) {
+ firingLength--;
+ }
+ if (index <= firingIndex) {
+ firingIndex--;
+ }
+ }
+ }
+ });
+ }
+ return this;
+ },
+ // Check if a given callback is in the list.
+ // If no argument is given, return whether or not list has callbacks attached.
+ has: function (fn) {
+ return fn ? jQuery.inArray(fn, list) > -1 : !!( list && list.length );
+ },
+ // Remove all callbacks from the list
+ empty: function () {
+ list = [];
+ firingLength = 0;
+ return this;
+ },
+ // Have the list do nothing anymore
+ disable: function () {
+ list = stack = memory = undefined;
+ return this;
+ },
+ // Is it disabled?
+ disabled: function () {
+ return !list;
+ },
+ // Lock the list in its current state
+ lock: function () {
+ stack = undefined;
+ if (!memory) {
+ self.disable();
+ }
+ return this;
+ },
+ // Is it locked?
+ locked: function () {
+ return !stack;
+ },
+ // Call all callbacks with the given context and arguments
+ fireWith: function (context, args) {
+ if (list && ( !fired || stack )) {
+ args = args || [];
+ args = [context, args.slice ? args.slice() : args];
+ if (firing) {
+ stack.push(args);
+ } else {
+ fire(args);
+ }
+ }
+ return this;
+ },
+ // Call all the callbacks with the given arguments
+ fire: function () {
+ self.fireWith(this, arguments);
+ return this;
+ },
+ // To know if the callbacks have already been called at least once
+ fired: function () {
+ return !!fired;
+ }
+ };
+
+ return self;
+ };
+
+
+ jQuery.extend({
+
+ Deferred: function (func) {
+ var tuples = [
+ // action, add listener, listener list, final state
+ ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"],
+ ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"],
+ ["notify", "progress", jQuery.Callbacks("memory")]
+ ],
+ state = "pending",
+ promise = {
+ state: function () {
+ return state;
+ },
+ always: function () {
+ deferred.done(arguments).fail(arguments);
+ return this;
+ },
+ then: function (/* fnDone, fnFail, fnProgress */) {
+ var fns = arguments;
+ return jQuery.Deferred(function (newDefer) {
+ jQuery.each(tuples, function (i, tuple) {
+ var fn = jQuery.isFunction(fns[i]) && fns[i];
+ // deferred[ done | fail | progress ] for forwarding actions to newDefer
+ deferred[tuple[1]](function () {
+ var returned = fn && fn.apply(this, arguments);
+ if (returned && jQuery.isFunction(returned.promise)) {
+ returned.promise()
+ .done(newDefer.resolve)
+ .fail(newDefer.reject)
+ .progress(newDefer.notify);
+ } else {
+ newDefer[tuple[0] + "With"](this === promise ? newDefer.promise() : this, fn ? [returned] : arguments);
+ }
+ });
+ });
+ fns = null;
+ }).promise();
+ },
+ // Get a promise for this deferred
+ // If obj is provided, the promise aspect is added to the object
+ promise: function (obj) {
+ return obj != null ? jQuery.extend(obj, promise) : promise;
+ }
+ },
+ deferred = {};
+
+ // Keep pipe for back-compat
+ promise.pipe = promise.then;
+
+ // Add list-specific methods
+ jQuery.each(tuples, function (i, tuple) {
+ var list = tuple[2],
+ stateString = tuple[3];
+
+ // promise[ done | fail | progress ] = list.add
+ promise[tuple[1]] = list.add;
+
+ // Handle state
+ if (stateString) {
+ list.add(function () {
+ // state = [ resolved | rejected ]
+ state = stateString;
+
+ // [ reject_list | resolve_list ].disable; progress_list.lock
+ }, tuples[i ^ 1][2].disable, tuples[2][2].lock);
+ }
+
+ // deferred[ resolve | reject | notify ]
+ deferred[tuple[0]] = function () {
+ deferred[tuple[0] + "With"](this === deferred ? promise : this, arguments);
+ return this;
+ };
+ deferred[tuple[0] + "With"] = list.fireWith;
+ });
+
+ // Make the deferred a promise
+ promise.promise(deferred);
+
+ // Call given func if any
+ if (func) {
+ func.call(deferred, deferred);
+ }
+
+ // All done!
+ return deferred;
+ },
+
+ // Deferred helper
+ when: function (subordinate /* , ..., subordinateN */) {
+ var i = 0,
+ resolveValues = slice.call(arguments),
+ length = resolveValues.length,
+
+ // the count of uncompleted subordinates
+ remaining = length !== 1 || ( subordinate && jQuery.isFunction(subordinate.promise) ) ? length : 0,
+
+ // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+ deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+ // Update function for both resolve and progress values
+ updateFunc = function (i, contexts, values) {
+ return function (value) {
+ contexts[i] = this;
+ values[i] = arguments.length > 1 ? slice.call(arguments) : value;
+ if (values === progressValues) {
+ deferred.notifyWith(contexts, values);
+ } else if (!( --remaining )) {
+ deferred.resolveWith(contexts, values);
+ }
+ };
+ },
+
+ progressValues, progressContexts, resolveContexts;
+
+ // Add listeners to Deferred subordinates; treat others as resolved
+ if (length > 1) {
+ progressValues = new Array(length);
+ progressContexts = new Array(length);
+ resolveContexts = new Array(length);
+ for (; i < length; i++) {
+ if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) {
+ resolveValues[i].promise()
+ .done(updateFunc(i, resolveContexts, resolveValues))
+ .fail(deferred.reject)
+ .progress(updateFunc(i, progressContexts, progressValues));
+ } else {
+ --remaining;
+ }
+ }
+ }
+
+ // If we're not waiting on anything, resolve the master
+ if (!remaining) {
+ deferred.resolveWith(resolveContexts, resolveValues);
+ }
+
+ return deferred.promise();
+ }
+ });
+
+
+// The deferred used on DOM ready
+ var readyList;
+
+ jQuery.fn.ready = function (fn) {
+ // Add the callback
+ jQuery.ready.promise().done(fn);
+
+ return this;
+ };
+
+ jQuery.extend({
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Hold (or release) the ready event
+ holdReady: function (hold) {
+ if (hold) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready(true);
+ }
+ },
+
+ // Handle when the DOM is ready
+ ready: function (wait) {
+
+ // Abort if there are pending holds or we're already ready
+ if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
+ return;
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if (wait !== true && --jQuery.readyWait > 0) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ readyList.resolveWith(document, [jQuery]);
+
+ // Trigger any bound ready events
+ if (jQuery.fn.triggerHandler) {
+ jQuery(document).triggerHandler("ready");
+ jQuery(document).off("ready");
+ }
+ }
+ });
+
+ /**
+ * The ready event handler and self cleanup method
+ */
+ function completed() {
+ document.removeEventListener("DOMContentLoaded", completed, false);
+ window.removeEventListener("load", completed, false);
+ jQuery.ready();
+ }
+
+ jQuery.ready.promise = function (obj) {
+ if (!readyList) {
+
+ readyList = jQuery.Deferred();
+
+ // Catch cases where $(document).ready() is called after the browser event has already occurred.
+ // We once tried to use readyState "interactive" here, but it caused issues like the one
+ // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+ if (document.readyState === "complete") {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ setTimeout(jQuery.ready);
+
+ } else {
+
+ // Use the handy event callback
+ document.addEventListener("DOMContentLoaded", completed, false);
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener("load", completed, false);
+ }
+ }
+ return readyList.promise(obj);
+ };
+
+// Kick off the DOM ready check even if the user does not
+ jQuery.ready.promise();
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+ var access = jQuery.access = function (elems, fn, key, value, chainable, emptyGet, raw) {
+ var i = 0,
+ len = elems.length,
+ bulk = key == null;
+
+ // Sets many values
+ if (jQuery.type(key) === "object") {
+ chainable = true;
+ for (i in key) {
+ jQuery.access(elems, fn, i, key[i], true, emptyGet, raw);
+ }
+
+ // Sets one value
+ } else if (value !== undefined) {
+ chainable = true;
+
+ if (!jQuery.isFunction(value)) {
+ raw = true;
+ }
+
+ if (bulk) {
+ // Bulk operations run against the entire set
+ if (raw) {
+ fn.call(elems, value);
+ fn = null;
+
+ // ...except when executing function values
+ } else {
+ bulk = fn;
+ fn = function (elem, key, value) {
+ return bulk.call(jQuery(elem), value);
+ };
+ }
+ }
+
+ if (fn) {
+ for (; i < len; i++) {
+ fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));
+ }
+ }
+ }
+
+ return chainable ?
+ elems :
+
+ // Gets
+ bulk ?
+ fn.call(elems) :
+ len ? fn(elems[0], key) : emptyGet;
+ };
+
+
+ /**
+ * Determines whether an object can have data
+ */
+ jQuery.acceptData = function (owner) {
+ // Accepts only:
+ // - Node
+ // - Node.ELEMENT_NODE
+ // - Node.DOCUMENT_NODE
+ // - Object
+ // - Any
+ /* jshint -W018 */
+ return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+ };
+
+
+ function Data() {
+ // Support: Android<4,
+ // Old WebKit does not have Object.preventExtensions/freeze method,
+ // return new empty object instead with no [[set]] accessor
+ Object.defineProperty(this.cache = {}, 0, {
+ get: function () {
+ return {};
+ }
+ });
+
+ this.expando = jQuery.expando + Data.uid++;
+ }
+
+ Data.uid = 1;
+ Data.accepts = jQuery.acceptData;
+
+ Data.prototype = {
+ key: function (owner) {
+ // We can accept data for non-element nodes in modern browsers,
+ // but we should not, see #8335.
+ // Always return the key for a frozen object.
+ if (!Data.accepts(owner)) {
+ return 0;
+ }
+
+ var descriptor = {},
+ // Check if the owner object already has a cache key
+ unlock = owner[this.expando];
+
+ // If not, create one
+ if (!unlock) {
+ unlock = Data.uid++;
+
+ // Secure it in a non-enumerable, non-writable property
+ try {
+ descriptor[this.expando] = {value: unlock};
+ Object.defineProperties(owner, descriptor);
+
+ // Support: Android<4
+ // Fallback to a less secure definition
+ } catch (e) {
+ descriptor[this.expando] = unlock;
+ jQuery.extend(owner, descriptor);
+ }
+ }
+
+ // Ensure the cache object
+ if (!this.cache[unlock]) {
+ this.cache[unlock] = {};
+ }
+
+ return unlock;
+ },
+ set: function (owner, data, value) {
+ var prop,
+ // There may be an unlock assigned to this node,
+ // if there is no entry for this "owner", create one inline
+ // and set the unlock as though an owner entry had always existed
+ unlock = this.key(owner),
+ cache = this.cache[unlock];
+
+ // Handle: [ owner, key, value ] args
+ if (typeof data === "string") {
+ cache[data] = value;
+
+ // Handle: [ owner, { properties } ] args
+ } else {
+ // Fresh assignments by object are shallow copied
+ if (jQuery.isEmptyObject(cache)) {
+ jQuery.extend(this.cache[unlock], data);
+ // Otherwise, copy the properties one-by-one to the cache object
+ } else {
+ for (prop in data) {
+ cache[prop] = data[prop];
+ }
+ }
+ }
+ return cache;
+ },
+ get: function (owner, key) {
+ // Either a valid cache is found, or will be created.
+ // New caches will be created and the unlock returned,
+ // allowing direct access to the newly created
+ // empty data object. A valid owner object must be provided.
+ var cache = this.cache[this.key(owner)];
+
+ return key === undefined ?
+ cache : cache[key];
+ },
+ access: function (owner, key, value) {
+ var stored;
+ // In cases where either:
+ //
+ // 1. No key was specified
+ // 2. A string key was specified, but no value provided
+ //
+ // Take the "read" path and allow the get method to determine
+ // which value to return, respectively either:
+ //
+ // 1. The entire cache object
+ // 2. The data stored at the key
+ //
+ if (key === undefined ||
+ ((key && typeof key === "string") && value === undefined)) {
+
+ stored = this.get(owner, key);
+
+ return stored !== undefined ?
+ stored : this.get(owner, jQuery.camelCase(key));
+ }
+
+ // [*]When the key is not a string, or both a key and value
+ // are specified, set or extend (existing objects) with either:
+ //
+ // 1. An object of properties
+ // 2. A key and value
+ //
+ this.set(owner, key, value);
+
+ // Since the "set" path can have two possible entry points
+ // return the expected data based on which path was taken[*]
+ return value !== undefined ? value : key;
+ },
+ remove: function (owner, key) {
+ var i, name, camel,
+ unlock = this.key(owner),
+ cache = this.cache[unlock];
+
+ if (key === undefined) {
+ this.cache[unlock] = {};
+
+ } else {
+ // Support array or space separated string of keys
+ if (jQuery.isArray(key)) {
+ // If "name" is an array of keys...
+ // When data is initially created, via ("key", "val") signature,
+ // keys will be converted to camelCase.
+ // Since there is no way to tell _how_ a key was added, remove
+ // both plain key and camelCase key. #12786
+ // This will only penalize the array argument path.
+ name = key.concat(key.map(jQuery.camelCase));
+ } else {
+ camel = jQuery.camelCase(key);
+ // Try the string as a key before any manipulation
+ if (key in cache) {
+ name = [key, camel];
+ } else {
+ // If a key with the spaces exists, use it.
+ // Otherwise, create an array by matching non-whitespace
+ name = camel;
+ name = name in cache ?
+ [name] : ( name.match(rnotwhite) || [] );
+ }
+ }
+
+ i = name.length;
+ while (i--) {
+ delete cache[name[i]];
+ }
+ }
+ },
+ hasData: function (owner) {
+ return !jQuery.isEmptyObject(
+ this.cache[owner[this.expando]] || {}
+ );
+ },
+ discard: function (owner) {
+ if (owner[this.expando]) {
+ delete this.cache[owner[this.expando]];
+ }
+ }
+ };
+ var data_priv = new Data();
+
+ var data_user = new Data();
+
+
+// Implementation Summary
+//
+// 1. Enforce API surface and semantic compatibility with 1.9.x branch
+// 2. Improve the module's maintainability by reducing the storage
+// paths to a single mechanism.
+// 3. Use the same single mechanism to support "private" and "user" data.
+// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+// 5. Avoid exposing implementation details on user objects (eg. expando properties)
+// 6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+ var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+ rmultiDash = /([A-Z])/g;
+
+ function dataAttr(elem, key, data) {
+ var name;
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if (data === undefined && elem.nodeType === 1) {
+ name = "data-" + key.replace(rmultiDash, "-$1").toLowerCase();
+ data = elem.getAttribute(name);
+
+ if (typeof data === "string") {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ // Only convert to a number if it doesn't change the string
+ +data + "" === data ? +data :
+ rbrace.test(data) ? jQuery.parseJSON(data) :
+ data;
+ } catch (e) {
+ }
+
+ // Make sure we set the data so it isn't changed later
+ data_user.set(elem, key, data);
+ } else {
+ data = undefined;
+ }
+ }
+ return data;
+ }
+
+ jQuery.extend({
+ hasData: function (elem) {
+ return data_user.hasData(elem) || data_priv.hasData(elem);
+ },
+
+ data: function (elem, name, data) {
+ return data_user.access(elem, name, data);
+ },
+
+ removeData: function (elem, name) {
+ data_user.remove(elem, name);
+ },
+
+ // TODO: Now that all calls to _data and _removeData have been replaced
+ // with direct calls to data_priv methods, these can be deprecated.
+ _data: function (elem, name, data) {
+ return data_priv.access(elem, name, data);
+ },
+
+ _removeData: function (elem, name) {
+ data_priv.remove(elem, name);
+ }
+ });
+
+ jQuery.fn.extend({
+ data: function (key, value) {
+ var i, name, data,
+ elem = this[0],
+ attrs = elem && elem.attributes;
+
+ // Gets all values
+ if (key === undefined) {
+ if (this.length) {
+ data = data_user.get(elem);
+
+ if (elem.nodeType === 1 && !data_priv.get(elem, "hasDataAttrs")) {
+ i = attrs.length;
+ while (i--) {
+
+ // Support: IE11+
+ // The attrs elements can be null (#14894)
+ if (attrs[i]) {
+ name = attrs[i].name;
+ if (name.indexOf("data-") === 0) {
+ name = jQuery.camelCase(name.slice(5));
+ dataAttr(elem, name, data[name]);
+ }
+ }
+ }
+ data_priv.set(elem, "hasDataAttrs", true);
+ }
+ }
+
+ return data;
+ }
+
+ // Sets multiple values
+ if (typeof key === "object") {
+ return this.each(function () {
+ data_user.set(this, key);
+ });
+ }
+
+ return access(this, function (value) {
+ var data,
+ camelKey = jQuery.camelCase(key);
+
+ // The calling jQuery object (element matches) is not empty
+ // (and therefore has an element appears at this[ 0 ]) and the
+ // `value` parameter was not undefined. An empty jQuery object
+ // will result in `undefined` for elem = this[ 0 ] which will
+ // throw an exception if an attempt to read a data cache is made.
+ if (elem && value === undefined) {
+ // Attempt to get data from the cache
+ // with the key as-is
+ data = data_user.get(elem, key);
+ if (data !== undefined) {
+ return data;
+ }
+
+ // Attempt to get data from the cache
+ // with the key camelized
+ data = data_user.get(elem, camelKey);
+ if (data !== undefined) {
+ return data;
+ }
+
+ // Attempt to "discover" the data in
+ // HTML5 custom data-* attrs
+ data = dataAttr(elem, camelKey, undefined);
+ if (data !== undefined) {
+ return data;
+ }
+
+ // We tried really hard, but the data doesn't exist.
+ return;
+ }
+
+ // Set the data...
+ this.each(function () {
+ // First, attempt to store a copy or reference of any
+ // data that might've been store with a camelCased key.
+ var data = data_user.get(this, camelKey);
+
+ // For HTML5 data-* attribute interop, we have to
+ // store property names with dashes in a camelCase form.
+ // This might not apply to all properties...*
+ data_user.set(this, camelKey, value);
+
+ // *... In the case of properties that might _actually_
+ // have dashes, we need to also store a copy of that
+ // unchanged property.
+ if (key.indexOf("-") !== -1 && data !== undefined) {
+ data_user.set(this, key, value);
+ }
+ });
+ }, null, value, arguments.length > 1, null, true);
+ },
+
+ removeData: function (key) {
+ return this.each(function () {
+ data_user.remove(this, key);
+ });
+ }
+ });
+
+
+ jQuery.extend({
+ queue: function (elem, type, data) {
+ var queue;
+
+ if (elem) {
+ type = ( type || "fx" ) + "queue";
+ queue = data_priv.get(elem, type);
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if (data) {
+ if (!queue || jQuery.isArray(data)) {
+ queue = data_priv.access(elem, type, jQuery.makeArray(data));
+ } else {
+ queue.push(data);
+ }
+ }
+ return queue || [];
+ }
+ },
+
+ dequeue: function (elem, type) {
+ type = type || "fx";
+
+ var queue = jQuery.queue(elem, type),
+ startLength = queue.length,
+ fn = queue.shift(),
+ hooks = jQuery._queueHooks(elem, type),
+ next = function () {
+ jQuery.dequeue(elem, type);
+ };
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if (fn === "inprogress") {
+ fn = queue.shift();
+ startLength--;
+ }
+
+ if (fn) {
+
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if (type === "fx") {
+ queue.unshift("inprogress");
+ }
+
+ // Clear up the last queue stop function
+ delete hooks.stop;
+ fn.call(elem, next, hooks);
+ }
+
+ if (!startLength && hooks) {
+ hooks.empty.fire();
+ }
+ },
+
+ // Not public - generate a queueHooks object, or return the current one
+ _queueHooks: function (elem, type) {
+ var key = type + "queueHooks";
+ return data_priv.get(elem, key) || data_priv.access(elem, key, {
+ empty: jQuery.Callbacks("once memory").add(function () {
+ data_priv.remove(elem, [type + "queue", key]);
+ })
+ });
+ }
+ });
+
+ jQuery.fn.extend({
+ queue: function (type, data) {
+ var setter = 2;
+
+ if (typeof type !== "string") {
+ data = type;
+ type = "fx";
+ setter--;
+ }
+
+ if (arguments.length < setter) {
+ return jQuery.queue(this[0], type);
+ }
+
+ return data === undefined ?
+ this :
+ this.each(function () {
+ var queue = jQuery.queue(this, type, data);
+
+ // Ensure a hooks for this queue
+ jQuery._queueHooks(this, type);
+
+ if (type === "fx" && queue[0] !== "inprogress") {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ dequeue: function (type) {
+ return this.each(function () {
+ jQuery.dequeue(this, type);
+ });
+ },
+ clearQueue: function (type) {
+ return this.queue(type || "fx", []);
+ },
+ // Get a promise resolved when queues of a certain type
+ // are emptied (fx is the type by default)
+ promise: function (type, obj) {
+ var tmp,
+ count = 1,
+ defer = jQuery.Deferred(),
+ elements = this,
+ i = this.length,
+ resolve = function () {
+ if (!( --count )) {
+ defer.resolveWith(elements, [elements]);
+ }
+ };
+
+ if (typeof type !== "string") {
+ obj = type;
+ type = undefined;
+ }
+ type = type || "fx";
+
+ while (i--) {
+ tmp = data_priv.get(elements[i], type + "queueHooks");
+ if (tmp && tmp.empty) {
+ count++;
+ tmp.empty.add(resolve);
+ }
+ }
+ resolve();
+ return defer.promise(obj);
+ }
+ });
+ var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+ var cssExpand = ["Top", "Right", "Bottom", "Left"];
+
+ var isHidden = function (elem, el) {
+ // isHidden might be called from jQuery#filter function;
+ // in that case, element will be second argument
+ elem = el || elem;
+ return jQuery.css(elem, "display") === "none" || !jQuery.contains(elem.ownerDocument, elem);
+ };
+
+ var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+ (function () {
+ var fragment = document.createDocumentFragment(),
+ div = fragment.appendChild(document.createElement("div")),
+ input = document.createElement("input");
+
+ // Support: Safari<=5.1
+ // Check state lost if the name is set (#11217)
+ // Support: Windows Web Apps (WWA)
+ // `name` and `type` must use .setAttribute for WWA (#14901)
+ input.setAttribute("type", "radio");
+ input.setAttribute("checked", "checked");
+ input.setAttribute("name", "t");
+
+ div.appendChild(input);
+
+ // Support: Safari<=5.1, Android<4.2
+ // Older WebKit doesn't clone checked state correctly in fragments
+ support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked;
+
+ // Support: IE<=11+
+ // Make sure textarea (and checkbox) defaultValue is properly cloned
+ div.innerHTML = "<textarea>x</textarea>";
+ support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;
+ })();
+ var strundefined = typeof undefined;
+
+
+ support.focusinBubbles = "onfocusin" in window;
+
+
+ var
+ rkeyEvent = /^key/,
+ rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+ rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+ rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+ function returnTrue() {
+ return true;
+ }
+
+ function returnFalse() {
+ return false;
+ }
+
+ function safeActiveElement() {
+ try {
+ return document.activeElement;
+ } catch (err) {
+ }
+ }
+
+ /*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+ jQuery.event = {
+
+ global: {},
+
+ add: function (elem, types, handler, data, selector) {
+
+ var handleObjIn, eventHandle, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.get(elem);
+
+ // Don't attach events to noData or text/comment nodes (but allow plain objects)
+ if (!elemData) {
+ return;
+ }
+
+ // Caller can pass in an object of custom data in lieu of the handler
+ if (handler.handler) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ selector = handleObjIn.selector;
+ }
+
+ // Make sure that the handler has a unique ID, used to find/remove it later
+ if (!handler.guid) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure and main handler, if this is the first
+ if (!(events = elemData.events)) {
+ events = elemData.events = {};
+ }
+ if (!(eventHandle = elemData.handle)) {
+ eventHandle = elemData.handle = function (e) {
+ // Discard the second event of a jQuery.event.trigger() and
+ // when an event is called after a page has unloaded
+ return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
+ jQuery.event.dispatch.apply(elem, arguments) : undefined;
+ };
+ }
+
+ // Handle multiple events separated by a space
+ types = ( types || "" ).match(rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // There *must* be a type, no attaching namespace-only handlers
+ if (!type) {
+ continue;
+ }
+
+ // If event changes its type, use the special event handlers for the changed type
+ special = jQuery.event.special[type] || {};
+
+ // If selector defined, determine special event api type, otherwise given type
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+
+ // Update special based on newly reset type
+ special = jQuery.event.special[type] || {};
+
+ // handleObj is passed to all event handlers
+ handleObj = jQuery.extend({
+ type: type,
+ origType: origType,
+ data: data,
+ handler: handler,
+ guid: handler.guid,
+ selector: selector,
+ needsContext: selector && jQuery.expr.match.needsContext.test(selector),
+ namespace: namespaces.join(".")
+ }, handleObjIn);
+
+ // Init the event handler queue if we're the first
+ if (!(handlers = events[type])) {
+ handlers = events[type] = [];
+ handlers.delegateCount = 0;
+
+ // Only use addEventListener if the special events handler returns false
+ if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
+ if (elem.addEventListener) {
+ elem.addEventListener(type, eventHandle, false);
+ }
+ }
+ }
+
+ if (special.add) {
+ special.add.call(elem, handleObj);
+
+ if (!handleObj.handler.guid) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add to the element's handler list, delegates in front
+ if (selector) {
+ handlers.splice(handlers.delegateCount++, 0, handleObj);
+ } else {
+ handlers.push(handleObj);
+ }
+
+ // Keep track of which events have ever been used, for event optimization
+ jQuery.event.global[type] = true;
+ }
+
+ },
+
+ // Detach an event or set of events from an element
+ remove: function (elem, types, handler, selector, mappedTypes) {
+
+ var j, origCount, tmp,
+ events, t, handleObj,
+ special, handlers, type, namespaces, origType,
+ elemData = data_priv.hasData(elem) && data_priv.get(elem);
+
+ if (!elemData || !(events = elemData.events)) {
+ return;
+ }
+
+ // Once for each type.namespace in types; type may be omitted
+ types = ( types || "" ).match(rnotwhite) || [""];
+ t = types.length;
+ while (t--) {
+ tmp = rtypenamespace.exec(types[t]) || [];
+ type = origType = tmp[1];
+ namespaces = ( tmp[2] || "" ).split(".").sort();
+
+ // Unbind all events (on this namespace, if provided) for the element
+ if (!type) {
+ for (type in events) {
+ jQuery.event.remove(elem, type + types[t], handler, selector, true);
+ }
+ continue;
+ }
+
+ special = jQuery.event.special[type] || {};
+ type = ( selector ? special.delegateType : special.bindType ) || type;
+ handlers = events[type] || [];
+ tmp = tmp[2] && new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)");
+
+ // Remove matching events
+ origCount = j = handlers.length;
+ while (j--) {
+ handleObj = handlers[j];
+
+ if (( mappedTypes || origType === handleObj.origType ) &&
+ ( !handler || handler.guid === handleObj.guid ) &&
+ ( !tmp || tmp.test(handleObj.namespace) ) &&
+ ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector )) {
+ handlers.splice(j, 1);
+
+ if (handleObj.selector) {
+ handlers.delegateCount--;
+ }
+ if (special.remove) {
+ special.remove.call(elem, handleObj);
+ }
+ }
+ }
+
+ // Remove generic event handler if we removed something and no more handlers exist
+ // (avoids potential for endless recursion during removal of special event handlers)
+ if (origCount && !handlers.length) {
+ if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
+ jQuery.removeEvent(elem, type, elemData.handle);
+ }
+
+ delete events[type];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if (jQuery.isEmptyObject(events)) {
+ delete elemData.handle;
+ data_priv.remove(elem, "events");
+ }
+ },
+
+ trigger: function (event, data, elem, onlyHandlers) {
+
+ var i, cur, tmp, bubbleType, ontype, handle, special,
+ eventPath = [elem || document],
+ type = hasOwn.call(event, "type") ? event.type : event,
+ namespaces = hasOwn.call(event, "namespace") ? event.namespace.split(".") : [];
+
+ cur = tmp = elem = elem || document;
+
+ // Don't do events on text and comment nodes
+ if (elem.nodeType === 3 || elem.nodeType === 8) {
+ return;
+ }
+
+ // focus/blur morphs to focusin/out; ensure we're not firing them right now
+ if (rfocusMorph.test(type + jQuery.event.triggered)) {
+ return;
+ }
+
+ if (type.indexOf(".") >= 0) {
+ // Namespaced trigger; create a regexp to match event type in handle()
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ namespaces.sort();
+ }
+ ontype = type.indexOf(":") < 0 && "on" + type;
+
+ // Caller can pass in a jQuery.Event object, Object, or just an event type string
+ event = event[jQuery.expando] ?
+ event :
+ new jQuery.Event(type, typeof event === "object" && event);
+
+ // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+ event.isTrigger = onlyHandlers ? 2 : 3;
+ event.namespace = namespaces.join(".");
+ event.namespace_re = event.namespace ?
+ new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") :
+ null;
+
+ // Clean up the event in case it is being reused
+ event.result = undefined;
+ if (!event.target) {
+ event.target = elem;
+ }
+
+ // Clone any incoming data and prepend the event, creating the handler arg list
+ data = data == null ?
+ [event] :
+ jQuery.makeArray(data, [event]);
+
+ // Allow special events to draw outside the lines
+ special = jQuery.event.special[type] || {};
+ if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {
+ return;
+ }
+
+ // Determine event propagation path in advance, per W3C events spec (#9951)
+ // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+ if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) {
+
+ bubbleType = special.delegateType || type;
+ if (!rfocusMorph.test(bubbleType + type)) {
+ cur = cur.parentNode;
+ }
+ for (; cur; cur = cur.parentNode) {
+ eventPath.push(cur);
+ tmp = cur;
+ }
+
+ // Only add window if we got to document (e.g., not plain obj or detached DOM)
+ if (tmp === (elem.ownerDocument || document)) {
+ eventPath.push(tmp.defaultView || tmp.parentWindow || window);
+ }
+ }
+
+ // Fire handlers on the event path
+ i = 0;
+ while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {
+
+ event.type = i > 1 ?
+ bubbleType :
+ special.bindType || type;
+
+ // jQuery handler
+ handle = ( data_priv.get(cur, "events") || {} )[event.type] && data_priv.get(cur, "handle");
+ if (handle) {
+ handle.apply(cur, data);
+ }
+
+ // Native handler
+ handle = ontype && cur[ontype];
+ if (handle && handle.apply && jQuery.acceptData(cur)) {
+ event.result = handle.apply(cur, data);
+ if (event.result === false) {
+ event.preventDefault();
+ }
+ }
+ }
+ event.type = type;
+
+ // If nobody prevented the default action, do it now
+ if (!onlyHandlers && !event.isDefaultPrevented()) {
+
+ if ((!special._default || special._default.apply(eventPath.pop(), data) === false) &&
+ jQuery.acceptData(elem)) {
+
+ // Call a native DOM method on the target with the same name name as the event.
+ // Don't do default actions on window, that's where global variables be (#6170)
+ if (ontype && jQuery.isFunction(elem[type]) && !jQuery.isWindow(elem)) {
+
+ // Don't re-trigger an onFOO event when we call its FOO() method
+ tmp = elem[ontype];
+
+ if (tmp) {
+ elem[ontype] = null;
+ }
+
+ // Prevent re-triggering of the same event, since we already bubbled it above
+ jQuery.event.triggered = type;
+ elem[type]();
+ jQuery.event.triggered = undefined;
+
+ if (tmp) {
+ elem[ontype] = tmp;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ dispatch: function (event) {
+
+ // Make a writable jQuery.Event from the native event object
+ event = jQuery.event.fix(event);
+
+ var i, j, ret, matched, handleObj,
+ handlerQueue = [],
+ args = slice.call(arguments),
+ handlers = ( data_priv.get(this, "events") || {} )[event.type] || [],
+ special = jQuery.event.special[event.type] || {};
+
+ // Use the fix-ed jQuery.Event rather than the (read-only) native event
+ args[0] = event;
+ event.delegateTarget = this;
+
+ // Call the preDispatch hook for the mapped type, and let it bail if desired
+ if (special.preDispatch && special.preDispatch.call(this, event) === false) {
+ return;
+ }
+
+ // Determine handlers
+ handlerQueue = jQuery.event.handlers.call(this, event, handlers);
+
+ // Run delegates first; they may want to stop propagation beneath us
+ i = 0;
+ while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {
+ event.currentTarget = matched.elem;
+
+ j = 0;
+ while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {
+
+ // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+ // a subset or equal to those in the bound event (both can have no namespace).
+ if (!event.namespace_re || event.namespace_re.test(handleObj.namespace)) {
+
+ event.handleObj = handleObj;
+ event.data = handleObj.data;
+
+ ret = ( (jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler )
+ .apply(matched.elem, args);
+
+ if (ret !== undefined) {
+ if ((event.result = ret) === false) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+ }
+ }
+ }
+
+ // Call the postDispatch hook for the mapped type
+ if (special.postDispatch) {
+ special.postDispatch.call(this, event);
+ }
+
+ return event.result;
+ },
+
+ handlers: function (event, handlers) {
+ var i, matches, sel, handleObj,
+ handlerQueue = [],
+ delegateCount = handlers.delegateCount,
+ cur = event.target;
+
+ // Find delegate handlers
+ // Black-hole SVG <use> instance trees (#13180)
+ // Avoid non-left-click bubbling in Firefox (#3861)
+ if (delegateCount && cur.nodeType && (!event.button || event.type !== "click")) {
+
+ for (; cur !== this; cur = cur.parentNode || this) {
+
+ // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+ if (cur.disabled !== true || event.type !== "click") {
+ matches = [];
+ for (i = 0; i < delegateCount; i++) {
+ handleObj = handlers[i];
+
+ // Don't conflict with Object.prototype properties (#13203)
+ sel = handleObj.selector + " ";
+
+ if (matches[sel] === undefined) {
+ matches[sel] = handleObj.needsContext ?
+ jQuery(sel, this).index(cur) >= 0 :
+ jQuery.find(sel, this, null, [cur]).length;
+ }
+ if (matches[sel]) {
+ matches.push(handleObj);
+ }
+ }
+ if (matches.length) {
+ handlerQueue.push({elem: cur, handlers: matches});
+ }
+ }
+ }
+ }
+
+ // Add the remaining (directly-bound) handlers
+ if (delegateCount < handlers.length) {
+ handlerQueue.push({elem: this, handlers: handlers.slice(delegateCount)});
+ }
+
+ return handlerQueue;
+ },
+
+ // Includes some event props shared by KeyEvent and MouseEvent
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+ fixHooks: {},
+
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "),
+ filter: function (event, original) {
+
+ // Add which for key events
+ if (event.which == null) {
+ event.which = original.charCode != null ? original.charCode : original.keyCode;
+ }
+
+ return event;
+ }
+ },
+
+ mouseHooks: {
+ props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (event, original) {
+ var eventDoc, doc, body,
+ button = original.button;
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if (event.pageX == null && original.clientX != null) {
+ eventDoc = event.target.ownerDocument || document;
+ doc = eventDoc.documentElement;
+ body = eventDoc.body;
+
+ event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+ event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if (!event.which && button !== undefined) {
+ event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+ }
+
+ return event;
+ }
+ },
+
+ fix: function (event) {
+ if (event[jQuery.expando]) {
+ return event;
+ }
+
+ // Create a writable copy of the event object and normalize some properties
+ var i, prop, copy,
+ type = event.type,
+ originalEvent = event,
+ fixHook = this.fixHooks[type];
+
+ if (!fixHook) {
+ this.fixHooks[type] = fixHook =
+ rmouseEvent.test(type) ? this.mouseHooks :
+ rkeyEvent.test(type) ? this.keyHooks :
+ {};
+ }
+ copy = fixHook.props ? this.props.concat(fixHook.props) : this.props;
+
+ event = new jQuery.Event(originalEvent);
+
+ i = copy.length;
+ while (i--) {
+ prop = copy[i];
+ event[prop] = originalEvent[prop];
+ }
+
+ // Support: Cordova 2.5 (WebKit) (#13255)
+ // All events should have a target; Cordova deviceready doesn't
+ if (!event.target) {
+ event.target = document;
+ }
+
+ // Support: Safari 6.0+, Chrome<28
+ // Target should not be a text node (#504, #13143)
+ if (event.target.nodeType === 3) {
+ event.target = event.target.parentNode;
+ }
+
+ return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
+ },
+
+ special: {
+ load: {
+ // Prevent triggered image.load events from bubbling to window.load
+ noBubble: true
+ },
+ focus: {
+ // Fire native event if possible so blur/focus sequence is correct
+ trigger: function () {
+ if (this !== safeActiveElement() && this.focus) {
+ this.focus();
+ return false;
+ }
+ },
+ delegateType: "focusin"
+ },
+ blur: {
+ trigger: function () {
+ if (this === safeActiveElement() && this.blur) {
+ this.blur();
+ return false;
+ }
+ },
+ delegateType: "focusout"
+ },
+ click: {
+ // For checkbox, fire native event so checked state will be right
+ trigger: function () {
+ if (this.type === "checkbox" && this.click && jQuery.nodeName(this, "input")) {
+ this.click();
+ return false;
+ }
+ },
+
+ // For cross-browser consistency, don't fire native .click() on links
+ _default: function (event) {
+ return jQuery.nodeName(event.target, "a");
+ }
+ },
+
+ beforeunload: {
+ postDispatch: function (event) {
+
+ // Support: Firefox 20+
+ // Firefox doesn't alert if the returnValue field is not set.
+ if (event.result !== undefined && event.originalEvent) {
+ event.originalEvent.returnValue = event.result;
+ }
+ }
+ }
+ },
+
+ simulate: function (type, elem, event, bubble) {
+ // Piggyback on a donor event to simulate a different one.
+ // Fake originalEvent to avoid donor's stopPropagation, but if the
+ // simulated event prevents default then we do the same on the donor.
+ var e = jQuery.extend(
+ new jQuery.Event(),
+ event,
+ {
+ type: type,
+ isSimulated: true,
+ originalEvent: {}
+ }
+ );
+ if (bubble) {
+ jQuery.event.trigger(e, null, elem);
+ } else {
+ jQuery.event.dispatch.call(elem, e);
+ }
+ if (e.isDefaultPrevented()) {
+ event.preventDefault();
+ }
+ }
+ };
+
+ jQuery.removeEvent = function (elem, type, handle) {
+ if (elem.removeEventListener) {
+ elem.removeEventListener(type, handle, false);
+ }
+ };
+
+ jQuery.Event = function (src, props) {
+ // Allow instantiation without the 'new' keyword
+ if (!(this instanceof jQuery.Event)) {
+ return new jQuery.Event(src, props);
+ }
+
+ // Event object
+ if (src && src.type) {
+ this.originalEvent = src;
+ this.type = src.type;
+
+ // Events bubbling up the document may have been marked as prevented
+ // by a handler lower down the tree; reflect the correct value.
+ this.isDefaultPrevented = src.defaultPrevented ||
+ src.defaultPrevented === undefined &&
+ // Support: Android<4.0
+ src.returnValue === false ?
+ returnTrue :
+ returnFalse;
+
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // Put explicitly provided properties onto the event object
+ if (props) {
+ jQuery.extend(this, props);
+ }
+
+ // Create a timestamp if incoming event doesn't have one
+ this.timeStamp = src && src.timeStamp || jQuery.now();
+
+ // Mark it as fixed
+ this[jQuery.expando] = true;
+ };
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+ jQuery.Event.prototype = {
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse,
+
+ preventDefault: function () {
+ var e = this.originalEvent;
+
+ this.isDefaultPrevented = returnTrue;
+
+ if (e && e.preventDefault) {
+ e.preventDefault();
+ }
+ },
+ stopPropagation: function () {
+ var e = this.originalEvent;
+
+ this.isPropagationStopped = returnTrue;
+
+ if (e && e.stopPropagation) {
+ e.stopPropagation();
+ }
+ },
+ stopImmediatePropagation: function () {
+ var e = this.originalEvent;
+
+ this.isImmediatePropagationStopped = returnTrue;
+
+ if (e && e.stopImmediatePropagation) {
+ e.stopImmediatePropagation();
+ }
+
+ this.stopPropagation();
+ }
+ };
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// Support: Chrome 15+
+ jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function (orig, fix) {
+ jQuery.event.special[orig] = {
+ delegateType: fix,
+ bindType: fix,
+
+ handle: function (event) {
+ var ret,
+ target = this,
+ related = event.relatedTarget,
+ handleObj = event.handleObj;
+
+ // For mousenter/leave call the handler if related is outside the target.
+ // NB: No relatedTarget if the mouse left/entered the browser window
+ if (!related || (related !== target && !jQuery.contains(target, related))) {
+ event.type = handleObj.origType;
+ ret = handleObj.handler.apply(this, arguments);
+ event.type = fix;
+ }
+ return ret;
+ }
+ };
+ });
+
+// Support: Firefox, Chrome, Safari
+// Create "bubbling" focus and blur events
+ if (!support.focusinBubbles) {
+ jQuery.each({focus: "focusin", blur: "focusout"}, function (orig, fix) {
+
+ // Attach a single capturing handler on the document while someone wants focusin/focusout
+ var handler = function (event) {
+ jQuery.event.simulate(fix, event.target, jQuery.event.fix(event), true);
+ };
+
+ jQuery.event.special[fix] = {
+ setup: function () {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access(doc, fix);
+
+ if (!attaches) {
+ doc.addEventListener(orig, handler, true);
+ }
+ data_priv.access(doc, fix, ( attaches || 0 ) + 1);
+ },
+ teardown: function () {
+ var doc = this.ownerDocument || this,
+ attaches = data_priv.access(doc, fix) - 1;
+
+ if (!attaches) {
+ doc.removeEventListener(orig, handler, true);
+ data_priv.remove(doc, fix);
+
+ } else {
+ data_priv.access(doc, fix, attaches);
+ }
+ }
+ };
+ });
+ }
+
+ jQuery.fn.extend({
+
+ on: function (types, selector, data, fn, /*INTERNAL*/ one) {
+ var origFn, type;
+
+ // Types can be a map of types/handlers
+ if (typeof types === "object") {
+ // ( types-Object, selector, data )
+ if (typeof selector !== "string") {
+ // ( types-Object, data )
+ data = data || selector;
+ selector = undefined;
+ }
+ for (type in types) {
+ this.on(type, selector, data, types[type], one);
+ }
+ return this;
+ }
+
+ if (data == null && fn == null) {
+ // ( types, fn )
+ fn = selector;
+ data = selector = undefined;
+ } else if (fn == null) {
+ if (typeof selector === "string") {
+ // ( types, selector, fn )
+ fn = data;
+ data = undefined;
+ } else {
+ // ( types, data, fn )
+ fn = data;
+ data = selector;
+ selector = undefined;
+ }
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ } else if (!fn) {
+ return this;
+ }
+
+ if (one === 1) {
+ origFn = fn;
+ fn = function (event) {
+ // Can use an empty set, since event contains the info
+ jQuery().off(event);
+ return origFn.apply(this, arguments);
+ };
+ // Use same guid so caller can remove using origFn
+ fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+ }
+ return this.each(function () {
+ jQuery.event.add(this, types, fn, data, selector);
+ });
+ },
+ one: function (types, selector, data, fn) {
+ return this.on(types, selector, data, fn, 1);
+ },
+ off: function (types, selector, fn) {
+ var handleObj, type;
+ if (types && types.preventDefault && types.handleObj) {
+ // ( event ) dispatched jQuery.Event
+ handleObj = types.handleObj;
+ jQuery(types.delegateTarget).off(
+ handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+ handleObj.selector,
+ handleObj.handler
+ );
+ return this;
+ }
+ if (typeof types === "object") {
+ // ( types-object [, selector] )
+ for (type in types) {
+ this.off(type, selector, types[type]);
+ }
+ return this;
+ }
+ if (selector === false || typeof selector === "function") {
+ // ( types [, fn] )
+ fn = selector;
+ selector = undefined;
+ }
+ if (fn === false) {
+ fn = returnFalse;
+ }
+ return this.each(function () {
+ jQuery.event.remove(this, types, fn, selector);
+ });
+ },
+
+ trigger: function (type, data) {
+ return this.each(function () {
+ jQuery.event.trigger(type, data, this);
+ });
+ },
+ triggerHandler: function (type, data) {
+ var elem = this[0];
+ if (elem) {
+ return jQuery.event.trigger(type, data, elem, true);
+ }
+ }
+ });
+
+
+ var
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ rtagName = /<([\w:]+)/,
+ rhtml = /<|&#?\w+;/,
+ rnoInnerhtml = /<(?:script|style|link)/i,
+ // checked="checked" or checked
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+ rscriptType = /^$|\/(?:java|ecma)script/i,
+ rscriptTypeMasked = /^true\/(.*)/,
+ rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+ // We have to close these tags to support XHTML (#13200)
+ wrapMap = {
+
+ // Support: IE9
+ 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, "", ""]
+ };
+
+// Support: IE9
+ wrapMap.optgroup = wrapMap.option;
+
+ wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+ wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// Manipulating tables requires a tbody
+ function manipulationTarget(elem, content) {
+ return jQuery.nodeName(elem, "table") &&
+ jQuery.nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr") ?
+
+ elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody")) :
+ elem;
+ }
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+ function disableScript(elem) {
+ elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+ return elem;
+ }
+
+ function restoreScript(elem) {
+ var match = rscriptTypeMasked.exec(elem.type);
+
+ if (match) {
+ elem.type = match[1];
+ } else {
+ elem.removeAttribute("type");
+ }
+
+ return elem;
+ }
+
+// Mark scripts as having already been evaluated
+ function setGlobalEval(elems, refElements) {
+ var i = 0,
+ l = elems.length;
+
+ for (; i < l; i++) {
+ data_priv.set(
+ elems[i], "globalEval", !refElements || data_priv.get(refElements[i], "globalEval")
+ );
+ }
+ }
+
+ function cloneCopyEvent(src, dest) {
+ var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+ if (dest.nodeType !== 1) {
+ return;
+ }
+
+ // 1. Copy private data: events, handlers, etc.
+ if (data_priv.hasData(src)) {
+ pdataOld = data_priv.access(src);
+ pdataCur = data_priv.set(dest, pdataOld);
+ events = pdataOld.events;
+
+ if (events) {
+ delete pdataCur.handle;
+ pdataCur.events = {};
+
+ for (type in events) {
+ for (i = 0, l = events[type].length; i < l; i++) {
+ jQuery.event.add(dest, type, events[type][i]);
+ }
+ }
+ }
+ }
+
+ // 2. Copy user data
+ if (data_user.hasData(src)) {
+ udataOld = data_user.access(src);
+ udataCur = jQuery.extend({}, udataOld);
+
+ data_user.set(dest, udataCur);
+ }
+ }
+
+ function getAll(context, tag) {
+ var ret = context.getElementsByTagName ? context.getElementsByTagName(tag || "*") :
+ context.querySelectorAll ? context.querySelectorAll(tag || "*") :
+ [];
+
+ return tag === undefined || tag && jQuery.nodeName(context, tag) ?
+ jQuery.merge([context], ret) :
+ ret;
+ }
+
+// Fix IE bugs, see support tests
+ function fixInput(src, dest) {
+ var nodeName = dest.nodeName.toLowerCase();
+
+ // Fails to persist the checked state of a cloned checkbox or radio button.
+ if (nodeName === "input" && rcheckableType.test(src.type)) {
+ dest.checked = src.checked;
+
+ // Fails to return the selected option to the default selected state when cloning options
+ } else if (nodeName === "input" || nodeName === "textarea") {
+ dest.defaultValue = src.defaultValue;
+ }
+ }
+
+ jQuery.extend({
+ clone: function (elem, dataAndEvents, deepDataAndEvents) {
+ var i, l, srcElements, destElements,
+ clone = elem.cloneNode(true),
+ inPage = jQuery.contains(elem.ownerDocument, elem);
+
+ // Fix IE cloning issues
+ if (!support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc(elem)) {
+
+ // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+ destElements = getAll(clone);
+ srcElements = getAll(elem);
+
+ for (i = 0, l = srcElements.length; i < l; i++) {
+ fixInput(srcElements[i], destElements[i]);
+ }
+ }
+
+ // Copy the events from the original to the clone
+ if (dataAndEvents) {
+ if (deepDataAndEvents) {
+ srcElements = srcElements || getAll(elem);
+ destElements = destElements || getAll(clone);
+
+ for (i = 0, l = srcElements.length; i < l; i++) {
+ cloneCopyEvent(srcElements[i], destElements[i]);
+ }
+ } else {
+ cloneCopyEvent(elem, clone);
+ }
+ }
+
+ // Preserve script evaluation history
+ destElements = getAll(clone, "script");
+ if (destElements.length > 0) {
+ setGlobalEval(destElements, !inPage && getAll(elem, "script"));
+ }
+
+ // Return the cloned set
+ return clone;
+ },
+
+ buildFragment: function (elems, context, scripts, selection) {
+ var elem, tmp, tag, wrap, contains, j,
+ fragment = context.createDocumentFragment(),
+ nodes = [],
+ i = 0,
+ l = elems.length;
+
+ for (; i < l; i++) {
+ elem = elems[i];
+
+ if (elem || elem === 0) {
+
+ // Add nodes directly
+ if (jQuery.type(elem) === "object") {
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge(nodes, elem.nodeType ? [elem] : elem);
+
+ // Convert non-html into a text node
+ } else if (!rhtml.test(elem)) {
+ nodes.push(context.createTextNode(elem));
+
+ // Convert html into DOM nodes
+ } else {
+ tmp = tmp || fragment.appendChild(context.createElement("div"));
+
+ // Deserialize a standard representation
+ tag = ( rtagName.exec(elem) || ["", ""] )[1].toLowerCase();
+ wrap = wrapMap[tag] || wrapMap._default;
+ tmp.innerHTML = wrap[1] + elem.replace(rxhtmlTag, "<$1></$2>") + wrap[2];
+
+ // Descend through wrappers to the right content
+ j = wrap[0];
+ while (j--) {
+ tmp = tmp.lastChild;
+ }
+
+ // Support: QtWebKit, PhantomJS
+ // push.apply(_, arraylike) throws on ancient WebKit
+ jQuery.merge(nodes, tmp.childNodes);
+
+ // Remember the top-level container
+ tmp = fragment.firstChild;
+
+ // Ensure the created nodes are orphaned (#12392)
+ tmp.textContent = "";
+ }
+ }
+ }
+
+ // Remove wrapper from fragment
+ fragment.textContent = "";
+
+ i = 0;
+ while ((elem = nodes[i++])) {
+
+ // #4087 - If origin and destination elements are the same, and this is
+ // that element, do not do anything
+ if (selection && jQuery.inArray(elem, selection) !== -1) {
+ continue;
+ }
+
+ contains = jQuery.contains(elem.ownerDocument, elem);
+
+ // Append to fragment
+ tmp = getAll(fragment.appendChild(elem), "script");
+
+ // Preserve script evaluation history
+ if (contains) {
+ setGlobalEval(tmp);
+ }
+
+ // Capture executables
+ if (scripts) {
+ j = 0;
+ while ((elem = tmp[j++])) {
+ if (rscriptType.test(elem.type || "")) {
+ scripts.push(elem);
+ }
+ }
+ }
+ }
+
+ return fragment;
+ },
+
+ cleanData: function (elems) {
+ var data, elem, type, key,
+ special = jQuery.event.special,
+ i = 0;
+
+ for (; (elem = elems[i]) !== undefined; i++) {
+ if (jQuery.acceptData(elem)) {
+ key = elem[data_priv.expando];
+
+ if (key && (data = data_priv.cache[key])) {
+ if (data.events) {
+ for (type in data.events) {
+ if (special[type]) {
+ jQuery.event.remove(elem, type);
+
+ // This is a shortcut to avoid jQuery.event.remove's overhead
+ } else {
+ jQuery.removeEvent(elem, type, data.handle);
+ }
+ }
+ }
+ if (data_priv.cache[key]) {
+ // Discard any remaining `private` data
+ delete data_priv.cache[key];
+ }
+ }
+ }
+ // Discard any remaining `user` data
+ delete data_user.cache[elem[data_user.expando]];
+ }
+ }
+ });
+
+ jQuery.fn.extend({
+ text: function (value) {
+ return access(this, function (value) {
+ return value === undefined ?
+ jQuery.text(this) :
+ this.empty().each(function () {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ this.textContent = value;
+ }
+ });
+ }, null, value, arguments.length);
+ },
+
+ append: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.appendChild(elem);
+ }
+ });
+ },
+
+ prepend: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {
+ var target = manipulationTarget(this, elem);
+ target.insertBefore(elem, target.firstChild);
+ }
+ });
+ },
+
+ before: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this);
+ }
+ });
+ },
+
+ after: function () {
+ return this.domManip(arguments, function (elem) {
+ if (this.parentNode) {
+ this.parentNode.insertBefore(elem, this.nextSibling);
+ }
+ });
+ },
+
+ remove: function (selector, keepData /* Internal Use Only */) {
+ var elem,
+ elems = selector ? jQuery.filter(selector, this) : this,
+ i = 0;
+
+ for (; (elem = elems[i]) != null; i++) {
+ if (!keepData && elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem));
+ }
+
+ if (elem.parentNode) {
+ if (keepData && jQuery.contains(elem.ownerDocument, elem)) {
+ setGlobalEval(getAll(elem, "script"));
+ }
+ elem.parentNode.removeChild(elem);
+ }
+ }
+
+ return this;
+ },
+
+ empty: function () {
+ var elem,
+ i = 0;
+
+ for (; (elem = this[i]) != null; i++) {
+ if (elem.nodeType === 1) {
+
+ // Prevent memory leaks
+ jQuery.cleanData(getAll(elem, false));
+
+ // Remove any remaining nodes
+ elem.textContent = "";
+ }
+ }
+
+ return this;
+ },
+
+ clone: function (dataAndEvents, deepDataAndEvents) {
+ dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+ deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+ return this.map(function () {
+ return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
+ });
+ },
+
+ html: function (value) {
+ return access(this, function (value) {
+ var elem = this[0] || {},
+ i = 0,
+ l = this.length;
+
+ if (value === undefined && elem.nodeType === 1) {
+ return elem.innerHTML;
+ }
+
+ // See if we can take a shortcut and just use innerHTML
+ if (typeof value === "string" && !rnoInnerhtml.test(value) && !wrapMap[( rtagName.exec(value) || ["", ""] )[1].toLowerCase()]) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for (; i < l; i++) {
+ elem = this[i] || {};
+
+ // Remove element nodes and prevent memory leaks
+ if (elem.nodeType === 1) {
+ jQuery.cleanData(getAll(elem, false));
+ elem.innerHTML = value;
+ }
+ }
+
+ elem = 0;
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch (e) {
+ }
+ }
+
+ if (elem) {
+ this.empty().append(value);
+ }
+ }, null, value, arguments.length);
+ },
+
+ replaceWith: function () {
+ var arg = arguments[0];
+
+ // Make the changes, replacing each context element with the new content
+ this.domManip(arguments, function (elem) {
+ arg = this.parentNode;
+
+ jQuery.cleanData(getAll(this));
+
+ if (arg) {
+ arg.replaceChild(elem, this);
+ }
+ });
+
+ // Force removal if there was no new content (e.g., from empty arguments)
+ return arg && (arg.length || arg.nodeType) ? this : this.remove();
+ },
+
+ detach: function (selector) {
+ return this.remove(selector, true);
+ },
+
+ domManip: function (args, callback) {
+
+ // Flatten any nested arrays
+ args = concat.apply([], args);
+
+ var fragment, first, scripts, hasScripts, node, doc,
+ i = 0,
+ l = this.length,
+ set = this,
+ iNoClone = l - 1,
+ value = args[0],
+ isFunction = jQuery.isFunction(value);
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if (isFunction ||
+ ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test(value) )) {
+ return this.each(function (index) {
+ var self = set.eq(index);
+ if (isFunction) {
+ args[0] = value.call(this, index, self.html());
+ }
+ self.domManip(args, callback);
+ });
+ }
+
+ if (l) {
+ fragment = jQuery.buildFragment(args, this[0].ownerDocument, false, this);
+ first = fragment.firstChild;
+
+ if (fragment.childNodes.length === 1) {
+ fragment = first;
+ }
+
+ if (first) {
+ scripts = jQuery.map(getAll(fragment, "script"), disableScript);
+ hasScripts = scripts.length;
+
+ // Use the original fragment for the last item instead of the first because it can end up
+ // being emptied incorrectly in certain situations (#8070).
+ for (; i < l; i++) {
+ node = fragment;
+
+ if (i !== iNoClone) {
+ node = jQuery.clone(node, true, true);
+
+ // Keep references to cloned scripts for later restoration
+ if (hasScripts) {
+ // Support: QtWebKit
+ // jQuery.merge because push.apply(_, arraylike) throws
+ jQuery.merge(scripts, getAll(node, "script"));
+ }
+ }
+
+ callback.call(this[i], node, i);
+ }
+
+ if (hasScripts) {
+ doc = scripts[scripts.length - 1].ownerDocument;
+
+ // Reenable scripts
+ jQuery.map(scripts, restoreScript);
+
+ // Evaluate executable scripts on first document insertion
+ for (i = 0; i < hasScripts; i++) {
+ node = scripts[i];
+ if (rscriptType.test(node.type || "") && !data_priv.access(node, "globalEval") && jQuery.contains(doc, node)) {
+
+ if (node.src) {
+ // Optional AJAX dependency, but won't run scripts if not present
+ if (jQuery._evalUrl) {
+ jQuery._evalUrl(node.src);
+ }
+ } else {
+ jQuery.globalEval(node.textContent.replace(rcleanScript, ""));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return this;
+ }
+ });
+
+ jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (name, original) {
+ jQuery.fn[name] = function (selector) {
+ var elems,
+ ret = [],
+ insert = jQuery(selector),
+ last = insert.length - 1,
+ i = 0;
+
+ for (; i <= last; i++) {
+ elems = i === last ? this : this.clone(true);
+ jQuery(insert[i])[original](elems);
+
+ // Support: QtWebKit
+ // .get() because push.apply(_, arraylike) throws
+ push.apply(ret, elems.get());
+ }
+
+ return this.pushStack(ret);
+ };
+ });
+
+
+ var iframe,
+ elemdisplay = {};
+
+ /**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+ function actualDisplay(name, doc) {
+ var style,
+ elem = jQuery(doc.createElement(name)).appendTo(doc.body),
+
+ // getDefaultComputedStyle might be reliably used only on attached element
+ display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle(elem[0]) ) ?
+
+ // Use of this method is a temporary fix (more like optimization) until something better comes along,
+ // since it was removed from specification and supported only in FF
+ style.display : jQuery.css(elem[0], "display");
+
+ // We don't have any data stored on the element,
+ // so use "detach" method as fast way to get rid of the element
+ elem.detach();
+
+ return display;
+ }
+
+ /**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+ function defaultDisplay(nodeName) {
+ var doc = document,
+ display = elemdisplay[nodeName];
+
+ if (!display) {
+ display = actualDisplay(nodeName, doc);
+
+ // If the simple way fails, read from inside an iframe
+ if (display === "none" || !display) {
+
+ // Use the already-created iframe if possible
+ iframe = (iframe || jQuery("<iframe frameborder='0' width='0' height='0'/>")).appendTo(doc.documentElement);
+
+ // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+ doc = iframe[0].contentDocument;
+
+ // Support: IE
+ doc.write();
+ doc.close();
+
+ display = actualDisplay(nodeName, doc);
+ iframe.detach();
+ }
+
+ // Store the correct default display
+ elemdisplay[nodeName] = display;
+ }
+
+ return display;
+ }
+
+ var rmargin = (/^margin/);
+
+ var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
+
+ var getStyles = function (elem) {
+ // Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+ // IE throws on elements created in popups
+ // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+ if (elem.ownerDocument.defaultView.opener) {
+ return elem.ownerDocument.defaultView.getComputedStyle(elem, null);
+ }
+
+ return window.getComputedStyle(elem, null);
+ };
+
+
+ function curCSS(elem, name, computed) {
+ var width, minWidth, maxWidth, ret,
+ style = elem.style;
+
+ computed = computed || getStyles(elem);
+
+ // Support: IE9
+ // getPropertyValue is only needed for .css('filter') (#12537)
+ if (computed) {
+ ret = computed.getPropertyValue(name) || computed[name];
+ }
+
+ if (computed) {
+
+ if (ret === "" && !jQuery.contains(elem.ownerDocument, elem)) {
+ ret = jQuery.style(elem, name);
+ }
+
+ // Support: iOS < 6
+ // A tribute to the "awesome hack by Dean Edwards"
+ // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+ // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+ if (rnumnonpx.test(ret) && rmargin.test(name)) {
+
+ // Remember the original values
+ width = style.width;
+ minWidth = style.minWidth;
+ maxWidth = style.maxWidth;
+
+ // Put in the new values to get a computed value out
+ style.minWidth = style.maxWidth = style.width = ret;
+ ret = computed.width;
+
+ // Revert the changed values
+ style.width = width;
+ style.minWidth = minWidth;
+ style.maxWidth = maxWidth;
+ }
+ }
+
+ return ret !== undefined ?
+ // Support: IE
+ // IE returns zIndex value as an integer.
+ ret + "" :
+ ret;
+ }
+
+
+ function addGetHookIf(conditionFn, hookFn) {
+ // Define the hook, we'll check on the first run if it's really needed.
+ return {
+ get: function () {
+ if (conditionFn()) {
+ // Hook not needed (or it's not possible to use it due
+ // to missing dependency), remove it.
+ delete this.get;
+ return;
+ }
+
+ // Hook needed; redefine it so that the support test is not executed again.
+ return (this.get = hookFn).apply(this, arguments);
+ }
+ };
+ }
+
+
+ (function () {
+ var pixelPositionVal, boxSizingReliableVal,
+ docElem = document.documentElement,
+ container = document.createElement("div"),
+ div = document.createElement("div");
+
+ if (!div.style) {
+ return;
+ }
+
+ // Support: IE9-11+
+ // Style of cloned element affects source element cloned (#8908)
+ div.style.backgroundClip = "content-box";
+ div.cloneNode(true).style.backgroundClip = "";
+ support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+ container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+ "position:absolute";
+ container.appendChild(div);
+
+ // Executing both pixelPosition & boxSizingReliable tests require only one layout
+ // so they're executed at the same time to save the second computation.
+ function computePixelPositionAndBoxSizingReliable() {
+ div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
+ "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
+ "border:1px;padding:1px;width:4px;position:absolute";
+ div.innerHTML = "";
+ docElem.appendChild(container);
+
+ var divStyle = window.getComputedStyle(div, null);
+ pixelPositionVal = divStyle.top !== "1%";
+ boxSizingReliableVal = divStyle.width === "4px";
+
+ docElem.removeChild(container);
+ }
+
+ // Support: node.js jsdom
+ // Don't assume that getComputedStyle is a property of the global object
+ if (window.getComputedStyle) {
+ jQuery.extend(support, {
+ pixelPosition: function () {
+
+ // This test is executed only once but we still do memoizing
+ // since we can use the boxSizingReliable pre-computing.
+ // No need to check if the test was already performed, though.
+ computePixelPositionAndBoxSizingReliable();
+ return pixelPositionVal;
+ },
+ boxSizingReliable: function () {
+ if (boxSizingReliableVal == null) {
+ computePixelPositionAndBoxSizingReliable();
+ }
+ return boxSizingReliableVal;
+ },
+ reliableMarginRight: function () {
+
+ // Support: Android 2.3
+ // Check if div with explicit width and no margin-right incorrectly
+ // gets computed margin-right based on width of container. (#3333)
+ // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+ // This support function is only executed once so no memoizing is needed.
+ var ret,
+ marginDiv = div.appendChild(document.createElement("div"));
+
+ // Reset CSS: box-sizing; display; margin; border; padding
+ marginDiv.style.cssText = div.style.cssText =
+ // Support: Firefox<29, Android 2.3
+ // Vendor-prefix box-sizing
+ "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+ "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+ marginDiv.style.marginRight = marginDiv.style.width = "0";
+ div.style.width = "1px";
+ docElem.appendChild(container);
+
+ ret = !parseFloat(window.getComputedStyle(marginDiv, null).marginRight);
+
+ docElem.removeChild(container);
+ div.removeChild(marginDiv);
+
+ return ret;
+ }
+ });
+ }
+ })();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+ jQuery.swap = function (elem, options, callback, args) {
+ var ret, name,
+ old = {};
+
+ // Remember the old values, and insert the new ones
+ for (name in options) {
+ old[name] = elem.style[name];
+ elem.style[name] = options[name];
+ }
+
+ ret = callback.apply(elem, args || []);
+
+ // Revert the old values
+ for (name in options) {
+ elem.style[name] = old[name];
+ }
+
+ return ret;
+ };
+
+
+ var
+ // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+ // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+ rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+ rnumsplit = new RegExp("^(" + pnum + ")(.*)$", "i"),
+ rrelNum = new RegExp("^([+-])=(" + pnum + ")", "i"),
+
+ cssShow = {position: "absolute", visibility: "hidden", display: "block"},
+ cssNormalTransform = {
+ letterSpacing: "0",
+ fontWeight: "400"
+ },
+
+ cssPrefixes = ["Webkit", "O", "Moz", "ms"];
+
+// Return a css property mapped to a potentially vendor prefixed property
+ function vendorPropName(style, name) {
+
+ // Shortcut for names that are not vendor prefixed
+ if (name in style) {
+ return name;
+ }
+
+ // Check for vendor prefixed names
+ var capName = name[0].toUpperCase() + name.slice(1),
+ origName = name,
+ i = cssPrefixes.length;
+
+ while (i--) {
+ name = cssPrefixes[i] + capName;
+ if (name in style) {
+ return name;
+ }
+ }
+
+ return origName;
+ }
+
+ function setPositiveNumber(elem, value, subtract) {
+ var matches = rnumsplit.exec(value);
+ return matches ?
+ // Guard against undefined "subtract", e.g., when used as in cssHooks
+ Math.max(0, matches[1] - ( subtract || 0 )) + ( matches[2] || "px" ) :
+ value;
+ }
+
+ function augmentWidthOrHeight(elem, name, extra, isBorderBox, styles) {
+ var i = extra === ( isBorderBox ? "border" : "content" ) ?
+ // If we already have the right measurement, avoid augmentation
+ 4 :
+ // Otherwise initialize for horizontal or vertical properties
+ name === "width" ? 1 : 0,
+
+ val = 0;
+
+ for (; i < 4; i += 2) {
+ // Both box models exclude margin, so add it if we want it
+ if (extra === "margin") {
+ val += jQuery.css(elem, extra + cssExpand[i], true, styles);
+ }
+
+ if (isBorderBox) {
+ // border-box includes padding, so remove it if we want content
+ if (extra === "content") {
+ val -= jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+ }
+
+ // At this point, extra isn't border nor margin, so remove border
+ if (extra !== "margin") {
+ val -= jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ } else {
+ // At this point, extra isn't content, so add padding
+ val += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
+
+ // At this point, extra isn't content nor padding, so add border
+ if (extra !== "padding") {
+ val += jQuery.css(elem, "border" + cssExpand[i] + "Width", true, styles);
+ }
+ }
+ }
+
+ return val;
+ }
+
+ function getWidthOrHeight(elem, name, extra) {
+
+ // Start with offset property, which is equivalent to the border-box value
+ var valueIsBorderBox = true,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+ styles = getStyles(elem),
+ isBorderBox = jQuery.css(elem, "boxSizing", false, styles) === "border-box";
+
+ // Some non-html elements return undefined for offsetWidth, so check for null/undefined
+ // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+ // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+ if (val <= 0 || val == null) {
+ // Fall back to computed then uncomputed css if necessary
+ val = curCSS(elem, name, styles);
+ if (val < 0 || val == null) {
+ val = elem.style[name];
+ }
+
+ // Computed unit is not pixels. Stop here and return.
+ if (rnumnonpx.test(val)) {
+ return val;
+ }
+
+ // Check for style in case a browser which returns unreliable values
+ // for getComputedStyle silently falls back to the reliable elem.style
+ valueIsBorderBox = isBorderBox &&
+ ( support.boxSizingReliable() || val === elem.style[name] );
+
+ // Normalize "", auto, and prepare for extra
+ val = parseFloat(val) || 0;
+ }
+
+ // Use the active box-sizing model to add/subtract irrelevant styles
+ return ( val +
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra || ( isBorderBox ? "border" : "content" ),
+ valueIsBorderBox,
+ styles
+ )
+ ) + "px";
+ }
+
+ function showHide(elements, show) {
+ var display, elem, hidden,
+ values = [],
+ index = 0,
+ length = elements.length;
+
+ for (; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+
+ values[index] = data_priv.get(elem, "olddisplay");
+ display = elem.style.display;
+ if (show) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if (!values[index] && display === "none") {
+ elem.style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if (elem.style.display === "" && isHidden(elem)) {
+ values[index] = data_priv.access(elem, "olddisplay", defaultDisplay(elem.nodeName));
+ }
+ } else {
+ hidden = isHidden(elem);
+
+ if (display !== "none" || !hidden) {
+ data_priv.set(elem, "olddisplay", hidden ? display : jQuery.css(elem, "display"));
+ }
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for (index = 0; index < length; index++) {
+ elem = elements[index];
+ if (!elem.style) {
+ continue;
+ }
+ if (!show || elem.style.display === "none" || elem.style.display === "") {
+ elem.style.display = show ? values[index] || "" : "none";
+ }
+ }
+
+ return elements;
+ }
+
+ jQuery.extend({
+
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function (elem, computed) {
+ if (computed) {
+
+ // We should always get a number back from opacity
+ var ret = curCSS(elem, "opacity");
+ return ret === "" ? "1" : ret;
+ }
+ }
+ }
+ },
+
+ // Don't automatically add "px" to these possibly-unitless properties
+ cssNumber: {
+ "columnCount": true,
+ "fillOpacity": true,
+ "flexGrow": true,
+ "flexShrink": true,
+ "fontWeight": true,
+ "lineHeight": true,
+ "opacity": true,
+ "order": true,
+ "orphans": true,
+ "widows": true,
+ "zIndex": true,
+ "zoom": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ "float": "cssFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function (elem, name, value, extra) {
+
+ // Don't set styles on text and comment nodes
+ if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, type, hooks,
+ origName = jQuery.camelCase(name),
+ style = elem.style;
+
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(style, origName) );
+
+ // Gets hook for the prefixed version, then unprefixed version
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // Check if we're setting a value
+ if (value !== undefined) {
+ type = typeof value;
+
+ // Convert "+=" or "-=" to relative numbers (#7345)
+ if (type === "string" && (ret = rrelNum.exec(value))) {
+ value = ( ret[1] + 1 ) * ret[2] + parseFloat(jQuery.css(elem, name));
+ // Fixes bug #9237
+ type = "number";
+ }
+
+ // Make sure that null and NaN values aren't set (#7116)
+ if (value == null || value !== value) {
+ return;
+ }
+
+ // If a number, add 'px' to the (except for certain CSS properties)
+ if (type === "number" && !jQuery.cssNumber[origName]) {
+ value += "px";
+ }
+
+ // Support: IE9-11+
+ // background-* props affect original clone's values
+ if (!support.clearCloneStyle && value === "" && name.indexOf("background") === 0) {
+ style[name] = "inherit";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
+ style[name] = value;
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[name];
+ }
+ },
+
+ css: function (elem, name, extra, styles) {
+ var val, num, hooks,
+ origName = jQuery.camelCase(name);
+
+ // Make sure that we're working with the right name
+ name = jQuery.cssProps[origName] || ( jQuery.cssProps[origName] = vendorPropName(elem.style, origName) );
+
+ // Try prefixed name followed by the unprefixed name
+ hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
+
+ // If a hook was provided get the computed value from there
+ if (hooks && "get" in hooks) {
+ val = hooks.get(elem, true, extra);
+ }
+
+ // Otherwise, if a way to get the computed value exists, use that
+ if (val === undefined) {
+ val = curCSS(elem, name, styles);
+ }
+
+ // Convert "normal" to computed value
+ if (val === "normal" && name in cssNormalTransform) {
+ val = cssNormalTransform[name];
+ }
+
+ // Make numeric if forced or a qualifier was provided and val looks numeric
+ if (extra === "" || extra) {
+ num = parseFloat(val);
+ return extra === true || jQuery.isNumeric(num) ? num || 0 : val;
+ }
+ return val;
+ }
+ });
+
+ jQuery.each(["height", "width"], function (i, name) {
+ jQuery.cssHooks[name] = {
+ get: function (elem, computed, extra) {
+ if (computed) {
+
+ // Certain elements can have dimension info if we invisibly show them
+ // but it must have a current display style that would benefit
+ return rdisplayswap.test(jQuery.css(elem, "display")) && elem.offsetWidth === 0 ?
+ jQuery.swap(elem, cssShow, function () {
+ return getWidthOrHeight(elem, name, extra);
+ }) :
+ getWidthOrHeight(elem, name, extra);
+ }
+ },
+
+ set: function (elem, value, extra) {
+ var styles = extra && getStyles(elem);
+ return setPositiveNumber(elem, value, extra ?
+ augmentWidthOrHeight(
+ elem,
+ name,
+ extra,
+ jQuery.css(elem, "boxSizing", false, styles) === "border-box",
+ styles
+ ) : 0
+ );
+ }
+ };
+ });
+
+// Support: Android 2.3
+ jQuery.cssHooks.marginRight = addGetHookIf(support.reliableMarginRight,
+ function (elem, computed) {
+ if (computed) {
+ return jQuery.swap(elem, {"display": "inline-block"},
+ curCSS, [elem, "marginRight"]);
+ }
+ }
+ );
+
+// These hooks are used by animate to expand properties
+ jQuery.each({
+ margin: "",
+ padding: "",
+ border: "Width"
+ }, function (prefix, suffix) {
+ jQuery.cssHooks[prefix + suffix] = {
+ expand: function (value) {
+ var i = 0,
+ expanded = {},
+
+ // Assumes a single number if not a string
+ parts = typeof value === "string" ? value.split(" ") : [value];
+
+ for (; i < 4; i++) {
+ expanded[prefix + cssExpand[i] + suffix] =
+ parts[i] || parts[i - 2] || parts[0];
+ }
+
+ return expanded;
+ }
+ };
+
+ if (!rmargin.test(prefix)) {
+ jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
+ }
+ });
+
+ jQuery.fn.extend({
+ css: function (name, value) {
+ return access(this, function (elem, name, value) {
+ var styles, len,
+ map = {},
+ i = 0;
+
+ if (jQuery.isArray(name)) {
+ styles = getStyles(elem);
+ len = name.length;
+
+ for (; i < len; i++) {
+ map[name[i]] = jQuery.css(elem, name[i], false, styles);
+ }
+
+ return map;
+ }
+
+ return value !== undefined ?
+ jQuery.style(elem, name, value) :
+ jQuery.css(elem, name);
+ }, name, value, arguments.length > 1);
+ },
+ show: function () {
+ return showHide(this, true);
+ },
+ hide: function () {
+ return showHide(this);
+ },
+ toggle: function (state) {
+ if (typeof state === "boolean") {
+ return state ? this.show() : this.hide();
+ }
+
+ return this.each(function () {
+ if (isHidden(this)) {
+ jQuery(this).show();
+ } else {
+ jQuery(this).hide();
+ }
+ });
+ }
+ });
+
+
+ function Tween(elem, options, prop, end, easing) {
+ return new Tween.prototype.init(elem, options, prop, end, easing);
+ }
+
+ jQuery.Tween = Tween;
+
+ Tween.prototype = {
+ constructor: Tween,
+ init: function (elem, options, prop, end, easing, unit) {
+ this.elem = elem;
+ this.prop = prop;
+ this.easing = easing || "swing";
+ this.options = options;
+ this.start = this.now = this.cur();
+ this.end = end;
+ this.unit = unit || ( jQuery.cssNumber[prop] ? "" : "px" );
+ },
+ cur: function () {
+ var hooks = Tween.propHooks[this.prop];
+
+ return hooks && hooks.get ?
+ hooks.get(this) :
+ Tween.propHooks._default.get(this);
+ },
+ run: function (percent) {
+ var eased,
+ hooks = Tween.propHooks[this.prop];
+
+ if (this.options.duration) {
+ this.pos = eased = jQuery.easing[this.easing](
+ percent, this.options.duration * percent, 0, 1, this.options.duration
+ );
+ } else {
+ this.pos = eased = percent;
+ }
+ this.now = ( this.end - this.start ) * eased + this.start;
+
+ if (this.options.step) {
+ this.options.step.call(this.elem, this.now, this);
+ }
+
+ if (hooks && hooks.set) {
+ hooks.set(this);
+ } else {
+ Tween.propHooks._default.set(this);
+ }
+ return this;
+ }
+ };
+
+ Tween.prototype.init.prototype = Tween.prototype;
+
+ Tween.propHooks = {
+ _default: {
+ get: function (tween) {
+ var result;
+
+ if (tween.elem[tween.prop] != null &&
+ (!tween.elem.style || tween.elem.style[tween.prop] == null)) {
+ return tween.elem[tween.prop];
+ }
+
+ // Passing an empty string as a 3rd parameter to .css will automatically
+ // attempt a parseFloat and fallback to a string if the parse fails.
+ // Simple values such as "10px" are parsed to Float;
+ // complex values such as "rotate(1rad)" are returned as-is.
+ result = jQuery.css(tween.elem, tween.prop, "");
+ // Empty strings, null, undefined and "auto" are converted to 0.
+ return !result || result === "auto" ? 0 : result;
+ },
+ set: function (tween) {
+ // Use step hook for back compat.
+ // Use cssHook if its there.
+ // Use .style if available and use plain properties where available.
+ if (jQuery.fx.step[tween.prop]) {
+ jQuery.fx.step[tween.prop](tween);
+ } else if (tween.elem.style && ( tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop] )) {
+ jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
+ } else {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ }
+ };
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+ Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+ set: function (tween) {
+ if (tween.elem.nodeType && tween.elem.parentNode) {
+ tween.elem[tween.prop] = tween.now;
+ }
+ }
+ };
+
+ jQuery.easing = {
+ linear: function (p) {
+ return p;
+ },
+ swing: function (p) {
+ return 0.5 - Math.cos(p * Math.PI) / 2;
+ }
+ };
+
+ jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+ jQuery.fx.step = {};
+
+
+ var
+ fxNow, timerId,
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i"),
+ rrun = /queueHooks$/,
+ animationPrefilters = [defaultPrefilter],
+ tweeners = {
+ "*": [function (prop, value) {
+ var tween = this.createTween(prop, value),
+ target = tween.cur(),
+ parts = rfxnum.exec(value),
+ unit = parts && parts[3] || ( jQuery.cssNumber[prop] ? "" : "px" ),
+
+ // Starting value computation is required for potential unit mismatches
+ start = ( jQuery.cssNumber[prop] || unit !== "px" && +target ) &&
+ rfxnum.exec(jQuery.css(tween.elem, prop)),
+ scale = 1,
+ maxIterations = 20;
+
+ if (start && start[3] !== unit) {
+ // Trust units reported by jQuery.css
+ unit = unit || start[3];
+
+ // Make sure we update the tween properties later on
+ parts = parts || [];
+
+ // Iteratively approximate from a nonzero starting point
+ start = +target || 1;
+
+ do {
+ // If previous iteration zeroed out, double until we get *something*.
+ // Use string for doubling so we don't accidentally see scale as unchanged below
+ scale = scale || ".5";
+
+ // Adjust and apply
+ start = start / scale;
+ jQuery.style(tween.elem, prop, start + unit);
+
+ // Update scale, tolerating zero or NaN from tween.cur(),
+ // break the loop if scale is unchanged or perfect, or if we've just had enough
+ } while (scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations);
+ }
+
+ // Update tween properties
+ if (parts) {
+ start = tween.start = +start || +target || 0;
+ tween.unit = unit;
+ // If a +=/-= token was provided, we're doing a relative animation
+ tween.end = parts[1] ?
+ start + ( parts[1] + 1 ) * parts[2] :
+ +parts[2];
+ }
+
+ return tween;
+ }]
+ };
+
+// Animations created synchronously will run synchronously
+ function createFxNow() {
+ setTimeout(function () {
+ fxNow = undefined;
+ });
+ return ( fxNow = jQuery.now() );
+ }
+
+// Generate parameters to create a standard animation
+ function genFx(type, includeWidth) {
+ var which,
+ i = 0,
+ attrs = {height: type};
+
+ // If we include width, step value is 1 to do all cssExpand values,
+ // otherwise step value is 2 to skip over Left and Right
+ includeWidth = includeWidth ? 1 : 0;
+ for (; i < 4; i += 2 - includeWidth) {
+ which = cssExpand[i];
+ attrs["margin" + which] = attrs["padding" + which] = type;
+ }
+
+ if (includeWidth) {
+ attrs.opacity = attrs.width = type;
+ }
+
+ return attrs;
+ }
+
+ function createTween(value, prop, animation) {
+ var tween,
+ collection = ( tweeners[prop] || [] ).concat(tweeners["*"]),
+ index = 0,
+ length = collection.length;
+ for (; index < length; index++) {
+ if ((tween = collection[index].call(animation, prop, value))) {
+
+ // We're done with this property
+ return tween;
+ }
+ }
+ }
+
+ function defaultPrefilter(elem, props, opts) {
+ /* jshint validthis: true */
+ var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+ anim = this,
+ orig = {},
+ style = elem.style,
+ hidden = elem.nodeType && isHidden(elem),
+ dataShow = data_priv.get(elem, "fxshow");
+
+ // Handle queue: false promises
+ if (!opts.queue) {
+ hooks = jQuery._queueHooks(elem, "fx");
+ if (hooks.unqueued == null) {
+ hooks.unqueued = 0;
+ oldfire = hooks.empty.fire;
+ hooks.empty.fire = function () {
+ if (!hooks.unqueued) {
+ oldfire();
+ }
+ };
+ }
+ hooks.unqueued++;
+
+ anim.always(function () {
+ // Ensure the complete handler is called before this completes
+ anim.always(function () {
+ hooks.unqueued--;
+ if (!jQuery.queue(elem, "fx").length) {
+ hooks.empty.fire();
+ }
+ });
+ });
+ }
+
+ // Height/width overflow pass
+ if (elem.nodeType === 1 && ( "height" in props || "width" in props )) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE9-10 do not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opts.overflow = [style.overflow, style.overflowX, style.overflowY];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height animated
+ display = jQuery.css(elem, "display");
+
+ // Test default display if display is currently "none"
+ checkDisplay = display === "none" ?
+ data_priv.get(elem, "olddisplay") || defaultDisplay(elem.nodeName) : display;
+
+ if (checkDisplay === "inline" && jQuery.css(elem, "float") === "none") {
+ style.display = "inline-block";
+ }
+ }
+
+ if (opts.overflow) {
+ style.overflow = "hidden";
+ anim.always(function () {
+ style.overflow = opts.overflow[0];
+ style.overflowX = opts.overflow[1];
+ style.overflowY = opts.overflow[2];
+ });
+ }
+
+ // show/hide pass
+ for (prop in props) {
+ value = props[prop];
+ if (rfxtypes.exec(value)) {
+ delete props[prop];
+ toggle = toggle || value === "toggle";
+ if (value === ( hidden ? "hide" : "show" )) {
+
+ // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+ if (value === "show" && dataShow && dataShow[prop] !== undefined) {
+ hidden = true;
+ } else {
+ continue;
+ }
+ }
+ orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);
+
+ // Any non-fx value stops us from restoring the original display value
+ } else {
+ display = undefined;
+ }
+ }
+
+ if (!jQuery.isEmptyObject(orig)) {
+ if (dataShow) {
+ if ("hidden" in dataShow) {
+ hidden = dataShow.hidden;
+ }
+ } else {
+ dataShow = data_priv.access(elem, "fxshow", {});
+ }
+
+ // Store state if its toggle - enables .stop().toggle() to "reverse"
+ if (toggle) {
+ dataShow.hidden = !hidden;
+ }
+ if (hidden) {
+ jQuery(elem).show();
+ } else {
+ anim.done(function () {
+ jQuery(elem).hide();
+ });
+ }
+ anim.done(function () {
+ var prop;
+
+ data_priv.remove(elem, "fxshow");
+ for (prop in orig) {
+ jQuery.style(elem, prop, orig[prop]);
+ }
+ });
+ for (prop in orig) {
+ tween = createTween(hidden ? dataShow[prop] : 0, prop, anim);
+
+ if (!( prop in dataShow )) {
+ dataShow[prop] = tween.start;
+ if (hidden) {
+ tween.end = tween.start;
+ tween.start = prop === "width" || prop === "height" ? 1 : 0;
+ }
+ }
+ }
+
+ // If this is a noop like .hide().hide(), restore an overwritten display value
+ } else if ((display === "none" ? defaultDisplay(elem.nodeName) : display) === "inline") {
+ style.display = display;
+ }
+ }
+
+ function propFilter(props, specialEasing) {
+ var index, name, easing, value, hooks;
+
+ // camelCase, specialEasing and expand cssHook pass
+ for (index in props) {
+ name = jQuery.camelCase(index);
+ easing = specialEasing[name];
+ value = props[index];
+ if (jQuery.isArray(value)) {
+ easing = value[1];
+ value = props[index] = value[0];
+ }
+
+ if (index !== name) {
+ props[name] = value;
+ delete props[index];
+ }
+
+ hooks = jQuery.cssHooks[name];
+ if (hooks && "expand" in hooks) {
+ value = hooks.expand(value);
+ delete props[name];
+
+ // Not quite $.extend, this won't overwrite existing keys.
+ // Reusing 'index' because we have the correct "name"
+ for (index in value) {
+ if (!( index in props )) {
+ props[index] = value[index];
+ specialEasing[index] = easing;
+ }
+ }
+ } else {
+ specialEasing[name] = easing;
+ }
+ }
+ }
+
+ function Animation(elem, properties, options) {
+ var result,
+ stopped,
+ index = 0,
+ length = animationPrefilters.length,
+ deferred = jQuery.Deferred().always(function () {
+ // Don't match elem in the :animated selector
+ delete tick.elem;
+ }),
+ tick = function () {
+ if (stopped) {
+ return false;
+ }
+ var currentTime = fxNow || createFxNow(),
+ remaining = Math.max(0, animation.startTime + animation.duration - currentTime),
+ // Support: Android 2.3
+ // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+ temp = remaining / animation.duration || 0,
+ percent = 1 - temp,
+ index = 0,
+ length = animation.tweens.length;
+
+ for (; index < length; index++) {
+ animation.tweens[index].run(percent);
+ }
+
+ deferred.notifyWith(elem, [animation, percent, remaining]);
+
+ if (percent < 1 && length) {
+ return remaining;
+ } else {
+ deferred.resolveWith(elem, [animation]);
+ return false;
+ }
+ },
+ animation = deferred.promise({
+ elem: elem,
+ props: jQuery.extend({}, properties),
+ opts: jQuery.extend(true, {specialEasing: {}}, options),
+ originalProperties: properties,
+ originalOptions: options,
+ startTime: fxNow || createFxNow(),
+ duration: options.duration,
+ tweens: [],
+ createTween: function (prop, end) {
+ var tween = jQuery.Tween(elem, animation.opts, prop, end,
+ animation.opts.specialEasing[prop] || animation.opts.easing);
+ animation.tweens.push(tween);
+ return tween;
+ },
+ stop: function (gotoEnd) {
+ var index = 0,
+ // If we are going to the end, we want to run all the tweens
+ // otherwise we skip this part
+ length = gotoEnd ? animation.tweens.length : 0;
+ if (stopped) {
+ return this;
+ }
+ stopped = true;
+ for (; index < length; index++) {
+ animation.tweens[index].run(1);
+ }
+
+ // Resolve when we played the last frame; otherwise, reject
+ if (gotoEnd) {
+ deferred.resolveWith(elem, [animation, gotoEnd]);
+ } else {
+ deferred.rejectWith(elem, [animation, gotoEnd]);
+ }
+ return this;
+ }
+ }),
+ props = animation.props;
+
+ propFilter(props, animation.opts.specialEasing);
+
+ for (; index < length; index++) {
+ result = animationPrefilters[index].call(animation, elem, props, animation.opts);
+ if (result) {
+ return result;
+ }
+ }
+
+ jQuery.map(props, createTween, animation);
+
+ if (jQuery.isFunction(animation.opts.start)) {
+ animation.opts.start.call(elem, animation);
+ }
+
+ jQuery.fx.timer(
+ jQuery.extend(tick, {
+ elem: elem,
+ anim: animation,
+ queue: animation.opts.queue
+ })
+ );
+
+ // attach callbacks from options
+ return animation.progress(animation.opts.progress)
+ .done(animation.opts.done, animation.opts.complete)
+ .fail(animation.opts.fail)
+ .always(animation.opts.always);
+ }
+
+ jQuery.Animation = jQuery.extend(Animation, {
+
+ tweener: function (props, callback) {
+ if (jQuery.isFunction(props)) {
+ callback = props;
+ props = ["*"];
+ } else {
+ props = props.split(" ");
+ }
+
+ var prop,
+ index = 0,
+ length = props.length;
+
+ for (; index < length; index++) {
+ prop = props[index];
+ tweeners[prop] = tweeners[prop] || [];
+ tweeners[prop].unshift(callback);
+ }
+ },
+
+ prefilter: function (callback, prepend) {
+ if (prepend) {
+ animationPrefilters.unshift(callback);
+ } else {
+ animationPrefilters.push(callback);
+ }
+ }
+ });
+
+ jQuery.speed = function (speed, easing, fn) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction(speed) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // Normalize opt.queue - true/undefined/null -> "fx"
+ if (opt.queue == null || opt.queue === true) {
+ opt.queue = "fx";
+ }
+
+ // Queueing
+ opt.old = opt.complete;
+
+ opt.complete = function () {
+ if (jQuery.isFunction(opt.old)) {
+ opt.old.call(this);
+ }
+
+ if (opt.queue) {
+ jQuery.dequeue(this, opt.queue);
+ }
+ };
+
+ return opt;
+ };
+
+ jQuery.fn.extend({
+ fadeTo: function (speed, to, easing, callback) {
+
+ // Show any hidden elements after setting opacity to 0
+ return this.filter(isHidden).css("opacity", 0).show()
+
+ // Animate to the value specified
+ .end().animate({opacity: to}, speed, easing, callback);
+ },
+ animate: function (prop, speed, easing, callback) {
+ var empty = jQuery.isEmptyObject(prop),
+ optall = jQuery.speed(speed, easing, callback),
+ doAnimation = function () {
+ // Operate on a copy of prop so per-property easing won't be lost
+ var anim = Animation(this, jQuery.extend({}, prop), optall);
+
+ // Empty animations, or finishing resolves immediately
+ if (empty || data_priv.get(this, "finish")) {
+ anim.stop(true);
+ }
+ };
+ doAnimation.finish = doAnimation;
+
+ return empty || optall.queue === false ?
+ this.each(doAnimation) :
+ this.queue(optall.queue, doAnimation);
+ },
+ stop: function (type, clearQueue, gotoEnd) {
+ var stopQueue = function (hooks) {
+ var stop = hooks.stop;
+ delete hooks.stop;
+ stop(gotoEnd);
+ };
+
+ if (typeof type !== "string") {
+ gotoEnd = clearQueue;
+ clearQueue = type;
+ type = undefined;
+ }
+ if (clearQueue && type !== false) {
+ this.queue(type || "fx", []);
+ }
+
+ return this.each(function () {
+ var dequeue = true,
+ index = type != null && type + "queueHooks",
+ timers = jQuery.timers,
+ data = data_priv.get(this);
+
+ if (index) {
+ if (data[index] && data[index].stop) {
+ stopQueue(data[index]);
+ }
+ } else {
+ for (index in data) {
+ if (data[index] && data[index].stop && rrun.test(index)) {
+ stopQueue(data[index]);
+ }
+ }
+ }
+
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
+ timers[index].anim.stop(gotoEnd);
+ dequeue = false;
+ timers.splice(index, 1);
+ }
+ }
+
+ // Start the next in the queue if the last step wasn't forced.
+ // Timers currently will call their complete callbacks, which
+ // will dequeue but only if they were gotoEnd.
+ if (dequeue || !gotoEnd) {
+ jQuery.dequeue(this, type);
+ }
+ });
+ },
+ finish: function (type) {
+ if (type !== false) {
+ type = type || "fx";
+ }
+ return this.each(function () {
+ var index,
+ data = data_priv.get(this),
+ queue = data[type + "queue"],
+ hooks = data[type + "queueHooks"],
+ timers = jQuery.timers,
+ length = queue ? queue.length : 0;
+
+ // Enable finishing flag on private data
+ data.finish = true;
+
+ // Empty the queue first
+ jQuery.queue(this, type, []);
+
+ if (hooks && hooks.stop) {
+ hooks.stop.call(this, true);
+ }
+
+ // Look for any active animations, and finish them
+ for (index = timers.length; index--;) {
+ if (timers[index].elem === this && timers[index].queue === type) {
+ timers[index].anim.stop(true);
+ timers.splice(index, 1);
+ }
+ }
+
+ // Look for any animations in the old queue and finish them
+ for (index = 0; index < length; index++) {
+ if (queue[index] && queue[index].finish) {
+ queue[index].finish.call(this);
+ }
+ }
+
+ // Turn off finishing flag
+ delete data.finish;
+ });
+ }
+ });
+
+ jQuery.each(["toggle", "show", "hide"], function (i, name) {
+ var cssFn = jQuery.fn[name];
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return speed == null || typeof speed === "boolean" ?
+ cssFn.apply(this, arguments) :
+ this.animate(genFx(name, true), speed, easing, callback);
+ };
+ });
+
+// Generate shortcuts for custom animations
+ jQuery.each({
+ slideDown: genFx("show"),
+ slideUp: genFx("hide"),
+ slideToggle: genFx("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (name, props) {
+ jQuery.fn[name] = function (speed, easing, callback) {
+ return this.animate(props, speed, easing, callback);
+ };
+ });
+
+ jQuery.timers = [];
+ jQuery.fx.tick = function () {
+ var timer,
+ i = 0,
+ timers = jQuery.timers;
+
+ fxNow = jQuery.now();
+
+ for (; i < timers.length; i++) {
+ timer = timers[i];
+ // Checks the timer has not already been removed
+ if (!timer() && timers[i] === timer) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if (!timers.length) {
+ jQuery.fx.stop();
+ }
+ fxNow = undefined;
+ };
+
+ jQuery.fx.timer = function (timer) {
+ jQuery.timers.push(timer);
+ if (timer()) {
+ jQuery.fx.start();
+ } else {
+ jQuery.timers.pop();
+ }
+ };
+
+ jQuery.fx.interval = 13;
+
+ jQuery.fx.start = function () {
+ if (!timerId) {
+ timerId = setInterval(jQuery.fx.tick, jQuery.fx.interval);
+ }
+ };
+
+ jQuery.fx.stop = function () {
+ clearInterval(timerId);
+ timerId = null;
+ };
+
+ jQuery.fx.speeds = {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ };
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+ jQuery.fn.delay = function (time, type) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue(type, function (next, hooks) {
+ var timeout = setTimeout(next, time);
+ hooks.stop = function () {
+ clearTimeout(timeout);
+ };
+ });
+ };
+
+
+ (function () {
+ var input = document.createElement("input"),
+ select = document.createElement("select"),
+ opt = select.appendChild(document.createElement("option"));
+
+ input.type = "checkbox";
+
+ // Support: iOS<=5.1, Android<=4.2+
+ // Default value for a checkbox should be "on"
+ support.checkOn = input.value !== "";
+
+ // Support: IE<=11+
+ // Must access selectedIndex to make default options select
+ support.optSelected = opt.selected;
+
+ // Support: Android<=2.3
+ // Options inside disabled selects are incorrectly marked as disabled
+ select.disabled = true;
+ support.optDisabled = !opt.disabled;
+
+ // Support: IE<=11+
+ // An input loses its value after becoming a radio
+ input = document.createElement("input");
+ input.value = "t";
+ input.type = "radio";
+ support.radioValue = input.value === "t";
+ })();
+
+
+ var nodeHook, boolHook,
+ attrHandle = jQuery.expr.attrHandle;
+
+ jQuery.fn.extend({
+ attr: function (name, value) {
+ return access(this, jQuery.attr, name, value, arguments.length > 1);
+ },
+
+ removeAttr: function (name) {
+ return this.each(function () {
+ jQuery.removeAttr(this, name);
+ });
+ }
+ });
+
+ jQuery.extend({
+ attr: function (elem, name, value) {
+ var hooks, ret,
+ nType = elem.nodeType;
+
+ // don't get/set attributes on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ // Fallback to prop when attributes are not supported
+ if (typeof elem.getAttribute === strundefined) {
+ return jQuery.prop(elem, name, value);
+ }
+
+ // All attributes are lowercase
+ // Grab necessary hook if one is defined
+ if (nType !== 1 || !jQuery.isXMLDoc(elem)) {
+ name = name.toLowerCase();
+ hooks = jQuery.attrHooks[name] ||
+ ( jQuery.expr.match.bool.test(name) ? boolHook : nodeHook );
+ }
+
+ if (value !== undefined) {
+
+ if (value === null) {
+ jQuery.removeAttr(elem, name);
+
+ } else if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
+ return ret;
+
+ } else {
+ elem.setAttribute(name, value + "");
+ return value;
+ }
+
+ } else if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) {
+ return ret;
+
+ } else {
+ ret = jQuery.find.attr(elem, name);
+
+ // Non-existent attributes return null, we normalize to undefined
+ return ret == null ?
+ undefined :
+ ret;
+ }
+ },
+
+ removeAttr: function (elem, value) {
+ var name, propName,
+ i = 0,
+ attrNames = value && value.match(rnotwhite);
+
+ if (attrNames && elem.nodeType === 1) {
+ while ((name = attrNames[i++])) {
+ propName = jQuery.propFix[name] || name;
+
+ // Boolean attributes get special treatment (#10870)
+ if (jQuery.expr.match.bool.test(name)) {
+ // Set corresponding property to false
+ elem[propName] = false;
+ }
+
+ elem.removeAttribute(name);
+ }
+ }
+ },
+
+ attrHooks: {
+ type: {
+ set: function (elem, value) {
+ if (!support.radioValue && value === "radio" &&
+ jQuery.nodeName(elem, "input")) {
+ var val = elem.value;
+ elem.setAttribute("type", value);
+ if (val) {
+ elem.value = val;
+ }
+ return value;
+ }
+ }
+ }
+ }
+ });
+
+// Hooks for boolean attributes
+ boolHook = {
+ set: function (elem, value, name) {
+ if (value === false) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr(elem, name);
+ } else {
+ elem.setAttribute(name, name);
+ }
+ return name;
+ }
+ };
+ jQuery.each(jQuery.expr.match.bool.source.match(/\w+/g), function (i, name) {
+ var getter = attrHandle[name] || jQuery.find.attr;
+
+ attrHandle[name] = function (elem, name, isXML) {
+ var ret, handle;
+ if (!isXML) {
+ // Avoid an infinite loop by temporarily removing this function from the getter
+ handle = attrHandle[name];
+ attrHandle[name] = ret;
+ ret = getter(elem, name, isXML) != null ?
+ name.toLowerCase() :
+ null;
+ attrHandle[name] = handle;
+ }
+ return ret;
+ };
+ });
+
+
+ var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+ jQuery.fn.extend({
+ prop: function (name, value) {
+ return access(this, jQuery.prop, name, value, arguments.length > 1);
+ },
+
+ removeProp: function (name) {
+ return this.each(function () {
+ delete this[jQuery.propFix[name] || name];
+ });
+ }
+ });
+
+ jQuery.extend({
+ propFix: {
+ "for": "htmlFor",
+ "class": "className"
+ },
+
+ prop: function (elem, name, value) {
+ var ret, hooks, notxml,
+ nType = elem.nodeType;
+
+ // Don't get/set properties on text, comment and attribute nodes
+ if (!elem || nType === 3 || nType === 8 || nType === 2) {
+ return;
+ }
+
+ notxml = nType !== 1 || !jQuery.isXMLDoc(elem);
+
+ if (notxml) {
+ // Fix name and attach hooks
+ name = jQuery.propFix[name] || name;
+ hooks = jQuery.propHooks[name];
+ }
+
+ if (value !== undefined) {
+ return hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined ?
+ ret :
+ ( elem[name] = value );
+
+ } else {
+ return hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null ?
+ ret :
+ elem[name];
+ }
+ },
+
+ propHooks: {
+ tabIndex: {
+ get: function (elem) {
+ return elem.hasAttribute("tabindex") || rfocusable.test(elem.nodeName) || elem.href ?
+ elem.tabIndex :
+ -1;
+ }
+ }
+ }
+ });
+
+ if (!support.optSelected) {
+ jQuery.propHooks.selected = {
+ get: function (elem) {
+ var parent = elem.parentNode;
+ if (parent && parent.parentNode) {
+ parent.parentNode.selectedIndex;
+ }
+ return null;
+ }
+ };
+ }
+
+ jQuery.each([
+ "tabIndex",
+ "readOnly",
+ "maxLength",
+ "cellSpacing",
+ "cellPadding",
+ "rowSpan",
+ "colSpan",
+ "useMap",
+ "frameBorder",
+ "contentEditable"
+ ], function () {
+ jQuery.propFix[this.toLowerCase()] = this;
+ });
+
+
+ var rclass = /[\t\r\n\f]/g;
+
+ jQuery.fn.extend({
+ addClass: function (value) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).addClass(value.call(this, j, this.className));
+ });
+ }
+
+ if (proceed) {
+ // The disjunction here is for better compressibility (see removeClass)
+ classes = ( value || "" ).match(rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ " "
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ if (cur.indexOf(" " + clazz + " ") < 0) {
+ cur += clazz + " ";
+ }
+ }
+
+ // only assign if different to avoid unneeded rendering.
+ finalValue = jQuery.trim(cur);
+ if (elem.className !== finalValue) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function (value) {
+ var classes, elem, cur, clazz, j, finalValue,
+ proceed = arguments.length === 0 || typeof value === "string" && value,
+ i = 0,
+ len = this.length;
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (j) {
+ jQuery(this).removeClass(value.call(this, j, this.className));
+ });
+ }
+ if (proceed) {
+ classes = ( value || "" ).match(rnotwhite) || [];
+
+ for (; i < len; i++) {
+ elem = this[i];
+ // This expression is here for better compressibility (see addClass)
+ cur = elem.nodeType === 1 && ( elem.className ?
+ ( " " + elem.className + " " ).replace(rclass, " ") :
+ ""
+ );
+
+ if (cur) {
+ j = 0;
+ while ((clazz = classes[j++])) {
+ // Remove *all* instances
+ while (cur.indexOf(" " + clazz + " ") >= 0) {
+ cur = cur.replace(" " + clazz + " ", " ");
+ }
+ }
+
+ // Only assign if different to avoid unneeded rendering.
+ finalValue = value ? jQuery.trim(cur) : "";
+ if (elem.className !== finalValue) {
+ elem.className = finalValue;
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function (value, stateVal) {
+ var type = typeof value;
+
+ if (typeof stateVal === "boolean" && type === "string") {
+ return stateVal ? this.addClass(value) : this.removeClass(value);
+ }
+
+ if (jQuery.isFunction(value)) {
+ return this.each(function (i) {
+ jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal);
+ });
+ }
+
+ return this.each(function () {
+ if (type === "string") {
+ // Toggle individual class names
+ var className,
+ i = 0,
+ self = jQuery(this),
+ classNames = value.match(rnotwhite) || [];
+
+ while ((className = classNames[i++])) {
+ // Check each className given, space separated list
+ if (self.hasClass(className)) {
+ self.removeClass(className);
+ } else {
+ self.addClass(className);
+ }
+ }
+
+ // Toggle whole class name
+ } else if (type === strundefined || type === "boolean") {
+ if (this.className) {
+ // store className if set
+ data_priv.set(this, "__className__", this.className);
+ }
+
+ // If the element has a class name or if we're passed `false`,
+ // then remove the whole classname (if there was one, the above saved it).
+ // Otherwise bring back whatever was previously saved (if anything),
+ // falling back to the empty string if nothing was stored.
+ this.className = this.className || value === false ? "" : data_priv.get(this, "__className__") || "";
+ }
+ });
+ },
+
+ hasClass: function (selector) {
+ var className = " " + selector + " ",
+ i = 0,
+ l = this.length;
+ for (; i < l; i++) {
+ if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) >= 0) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ });
+
+
+ var rreturn = /\r/g;
+
+ jQuery.fn.extend({
+ val: function (value) {
+ var hooks, ret, isFunction,
+ elem = this[0];
+
+ if (!arguments.length) {
+ if (elem) {
+ hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
+
+ if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) {
+ return ret;
+ }
+
+ ret = elem.value;
+
+ return typeof ret === "string" ?
+ // Handle most common string cases
+ ret.replace(rreturn, "") :
+ // Handle cases where value is null/undef or number
+ ret == null ? "" : ret;
+ }
+
+ return;
+ }
+
+ isFunction = jQuery.isFunction(value);
+
+ return this.each(function (i) {
+ var val;
+
+ if (this.nodeType !== 1) {
+ return;
+ }
+
+ if (isFunction) {
+ val = value.call(this, i, jQuery(this).val());
+ } else {
+ val = value;
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if (val == null) {
+ val = "";
+
+ } else if (typeof val === "number") {
+ val += "";
+
+ } else if (jQuery.isArray(val)) {
+ val = jQuery.map(val, function (value) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
+
+ // If set returns undefined, fall back to normal setting
+ if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) {
+ this.value = val;
+ }
+ });
+ }
+ });
+
+ jQuery.extend({
+ valHooks: {
+ option: {
+ get: function (elem) {
+ var val = jQuery.find.attr(elem, "value");
+ return val != null ?
+ val :
+ // Support: IE10-11+
+ // option.text throws exceptions (#14686, #14858)
+ jQuery.trim(jQuery.text(elem));
+ }
+ },
+ select: {
+ get: function (elem) {
+ var value, option,
+ options = elem.options,
+ index = elem.selectedIndex,
+ one = elem.type === "select-one" || index < 0,
+ values = one ? null : [],
+ max = one ? index + 1 : options.length,
+ i = index < 0 ?
+ max :
+ one ? index : 0;
+
+ // Loop through all the selected options
+ for (; i < max; i++) {
+ option = options[i];
+
+ // IE6-9 doesn't update selected after form reset (#2551)
+ if (( option.selected || i === index ) &&
+ // Don't return options that are disabled or in a disabled optgroup
+ ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+ ( !option.parentNode.disabled || !jQuery.nodeName(option.parentNode, "optgroup") )) {
+
+ // Get the specific value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if (one) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push(value);
+ }
+ }
+
+ return values;
+ },
+
+ set: function (elem, value) {
+ var optionSet, option,
+ options = elem.options,
+ values = jQuery.makeArray(value),
+ i = options.length;
+
+ while (i--) {
+ option = options[i];
+ if ((option.selected = jQuery.inArray(option.value, values) >= 0)) {
+ optionSet = true;
+ }
+ }
+
+ // Force browsers to behave consistently when non-matching value is set
+ if (!optionSet) {
+ elem.selectedIndex = -1;
+ }
+ return values;
+ }
+ }
+ }
+ });
+
+// Radios and checkboxes getter/setter
+ jQuery.each(["radio", "checkbox"], function () {
+ jQuery.valHooks[this] = {
+ set: function (elem, value) {
+ if (jQuery.isArray(value)) {
+ return ( elem.checked = jQuery.inArray(jQuery(elem).val(), value) >= 0 );
+ }
+ }
+ };
+ if (!support.checkOn) {
+ jQuery.valHooks[this].get = function (elem) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ };
+ }
+ });
+
+
+// Return jQuery for attributes-only inclusion
+
+
+ jQuery.each(("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error contextmenu").split(" "), function (i, name) {
+
+ // Handle event binding
+ jQuery.fn[name] = function (data, fn) {
+ return arguments.length > 0 ?
+ this.on(name, null, data, fn) :
+ this.trigger(name);
+ };
+ });
+
+ jQuery.fn.extend({
+ hover: function (fnOver, fnOut) {
+ return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
+ },
+
+ bind: function (types, data, fn) {
+ return this.on(types, null, data, fn);
+ },
+ unbind: function (types, fn) {
+ return this.off(types, null, fn);
+ },
+
+ delegate: function (selector, types, data, fn) {
+ return this.on(types, selector, data, fn);
+ },
+ undelegate: function (selector, types, fn) {
+ // ( namespace ) or ( selector, types [, fn] )
+ return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn);
+ }
+ });
+
+
+ var nonce = jQuery.now();
+
+ var rquery = (/\?/);
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+ jQuery.parseJSON = function (data) {
+ return JSON.parse(data + "");
+ };
+
+
+// Cross-browser xml parsing
+ jQuery.parseXML = function (data) {
+ var xml, tmp;
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+
+ // Support: IE9
+ try {
+ tmp = new DOMParser();
+ xml = tmp.parseFromString(data, "text/xml");
+ } catch (e) {
+ xml = undefined;
+ }
+
+ if (!xml || xml.getElementsByTagName("parsererror").length) {
+ jQuery.error("Invalid XML: " + data);
+ }
+ return xml;
+ };
+
+
+ var
+ rhash = /#.*$/,
+ rts = /([?&])_=[^&]*/,
+ rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+ // #7653, #8125, #8152: local protocol detection
+ rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+ rnoContent = /^(?:GET|HEAD)$/,
+ rprotocol = /^\/\//,
+ rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+ /* Prefilters
+ * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+ * 2) These are called:
+ * - BEFORE asking for a transport
+ * - AFTER param serialization (s.data is a string if s.processData is true)
+ * 3) key is the dataType
+ * 4) the catchall symbol "*" can be used
+ * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+ */
+ prefilters = {},
+
+ /* Transports bindings
+ * 1) key is the dataType
+ * 2) the catchall symbol "*" can be used
+ * 3) selection will start with transport dataType and THEN go to "*" if needed
+ */
+ transports = {},
+
+ // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+ allTypes = "*/".concat("*"),
+
+ // Document location
+ ajaxLocation = window.location.href,
+
+ // Segment location into parts
+ ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+ function addToPrefiltersOrTransports(structure) {
+
+ // dataTypeExpression is optional and defaults to "*"
+ return function (dataTypeExpression, func) {
+
+ if (typeof dataTypeExpression !== "string") {
+ func = dataTypeExpression;
+ dataTypeExpression = "*";
+ }
+
+ var dataType,
+ i = 0,
+ dataTypes = dataTypeExpression.toLowerCase().match(rnotwhite) || [];
+
+ if (jQuery.isFunction(func)) {
+ // For each dataType in the dataTypeExpression
+ while ((dataType = dataTypes[i++])) {
+ // Prepend if requested
+ if (dataType[0] === "+") {
+ dataType = dataType.slice(1) || "*";
+ (structure[dataType] = structure[dataType] || []).unshift(func);
+
+ // Otherwise append
+ } else {
+ (structure[dataType] = structure[dataType] || []).push(func);
+ }
+ }
+ }
+ };
+ }
+
+// Base inspection function for prefilters and transports
+ function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {
+
+ var inspected = {},
+ seekingTransport = ( structure === transports );
+
+ function inspect(dataType) {
+ var selected;
+ inspected[dataType] = true;
+ jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {
+ var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);
+ if (typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[dataTypeOrTransport]) {
+ options.dataTypes.unshift(dataTypeOrTransport);
+ inspect(dataTypeOrTransport);
+ return false;
+ } else if (seekingTransport) {
+ return !( selected = dataTypeOrTransport );
+ }
+ });
+ return selected;
+ }
+
+ return inspect(options.dataTypes[0]) || !inspected["*"] && inspect("*");
+ }
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+ function ajaxExtend(target, src) {
+ var key, deep,
+ flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+ for (key in src) {
+ if (src[key] !== undefined) {
+ ( flatOptions[key] ? target : ( deep || (deep = {}) ) )[key] = src[key];
+ }
+ }
+ if (deep) {
+ jQuery.extend(true, target, deep);
+ }
+
+ return target;
+ }
+
+ /* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+ function ajaxHandleResponses(s, jqXHR, responses) {
+
+ var ct, type, finalDataType, firstDataType,
+ contents = s.contents,
+ dataTypes = s.dataTypes;
+
+ // Remove auto dataType and get content-type in the process
+ while (dataTypes[0] === "*") {
+ dataTypes.shift();
+ if (ct === undefined) {
+ ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+ }
+ }
+
+ // Check if we're dealing with a known content-type
+ if (ct) {
+ for (type in contents) {
+ if (contents[type] && contents[type].test(ct)) {
+ dataTypes.unshift(type);
+ break;
+ }
+ }
+ }
+
+ // Check to see if we have a response for the expected dataType
+ if (dataTypes[0] in responses) {
+ finalDataType = dataTypes[0];
+ } else {
+ // Try convertible dataTypes
+ for (type in responses) {
+ if (!dataTypes[0] || s.converters[type + " " + dataTypes[0]]) {
+ finalDataType = type;
+ break;
+ }
+ if (!firstDataType) {
+ firstDataType = type;
+ }
+ }
+ // Or just use first one
+ finalDataType = finalDataType || firstDataType;
+ }
+
+ // If we found a dataType
+ // We add the dataType to the list if needed
+ // and return the corresponding response
+ if (finalDataType) {
+ if (finalDataType !== dataTypes[0]) {
+ dataTypes.unshift(finalDataType);
+ }
+ return responses[finalDataType];
+ }
+ }
+
+ /* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+ function ajaxConvert(s, response, jqXHR, isSuccess) {
+ var conv2, current, conv, tmp, prev,
+ converters = {},
+ // Work with a copy of dataTypes in case we need to modify it for conversion
+ dataTypes = s.dataTypes.slice();
+
+ // Create converters map with lowercased keys
+ if (dataTypes[1]) {
+ for (conv in s.converters) {
+ converters[conv.toLowerCase()] = s.converters[conv];
+ }
+ }
+
+ current = dataTypes.shift();
+
+ // Convert to each sequential dataType
+ while (current) {
+
+ if (s.responseFields[current]) {
+ jqXHR[s.responseFields[current]] = response;
+ }
+
+ // Apply the dataFilter if provided
+ if (!prev && isSuccess && s.dataFilter) {
+ response = s.dataFilter(response, s.dataType);
+ }
+
+ prev = current;
+ current = dataTypes.shift();
+
+ if (current) {
+
+ // There's only work to do if current dataType is non-auto
+ if (current === "*") {
+
+ current = prev;
+
+ // Convert response if prev dataType is non-auto and differs from current
+ } else if (prev !== "*" && prev !== current) {
+
+ // Seek a direct converter
+ conv = converters[prev + " " + current] || converters["* " + current];
+
+ // If none found, seek a pair
+ if (!conv) {
+ for (conv2 in converters) {
+
+ // If conv2 outputs current
+ tmp = conv2.split(" ");
+ if (tmp[1] === current) {
+
+ // If prev can be converted to accepted input
+ conv = converters[prev + " " + tmp[0]] ||
+ converters["* " + tmp[0]];
+ if (conv) {
+ // Condense equivalence converters
+ if (conv === true) {
+ conv = converters[conv2];
+
+ // Otherwise, insert the intermediate dataType
+ } else if (converters[conv2] !== true) {
+ current = tmp[0];
+ dataTypes.unshift(tmp[1]);
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ // Apply converter (if not an equivalence)
+ if (conv !== true) {
+
+ // Unless errors are allowed to bubble, catch and return them
+ if (conv && s["throws"]) {
+ response = conv(response);
+ } else {
+ try {
+ response = conv(response);
+ } catch (e) {
+ return {
+ state: "parsererror",
+ error: conv ? e : "No conversion from " + prev + " to " + current
+ };
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return {state: "success", data: response};
+ }
+
+ jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ ajaxSettings: {
+ url: ajaxLocation,
+ type: "GET",
+ isLocal: rlocalProtocol.test(ajaxLocParts[1]),
+ global: true,
+ processData: true,
+ async: true,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ /*
+ timeout: 0,
+ data: null,
+ dataType: null,
+ username: null,
+ password: null,
+ cache: null,
+ throws: false,
+ traditional: false,
+ headers: {},
+ */
+
+ accepts: {
+ "*": allTypes,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+
+ contents: {
+ xml: /xml/,
+ html: /html/,
+ json: /json/
+ },
+
+ responseFields: {
+ xml: "responseXML",
+ text: "responseText",
+ json: "responseJSON"
+ },
+
+ // Data converters
+ // Keys separate source (or catchall "*") and destination types with a single space
+ converters: {
+
+ // Convert anything to text
+ "* text": String,
+
+ // Text to html (true = no transformation)
+ "text html": true,
+
+ // Evaluate text as a json expression
+ "text json": jQuery.parseJSON,
+
+ // Parse text as xml
+ "text xml": jQuery.parseXML
+ },
+
+ // For options that shouldn't be deep extended:
+ // you can add your own custom options here if
+ // and when you create one that shouldn't be
+ // deep extended (see ajaxExtend)
+ flatOptions: {
+ url: true,
+ context: true
+ }
+ },
+
+ // Creates a full fledged settings object into target
+ // with both ajaxSettings and settings fields.
+ // If target is omitted, writes into ajaxSettings.
+ ajaxSetup: function (target, settings) {
+ return settings ?
+
+ // Building a settings object
+ ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) :
+
+ // Extending ajaxSettings
+ ajaxExtend(jQuery.ajaxSettings, target);
+ },
+
+ ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
+ ajaxTransport: addToPrefiltersOrTransports(transports),
+
+ // Main method
+ ajax: function (url, options) {
+
+ // If url is an object, simulate pre-1.5 signature
+ if (typeof url === "object") {
+ options = url;
+ url = undefined;
+ }
+
+ // Force options to be an object
+ options = options || {};
+
+ var transport,
+ // URL without anti-cache param
+ cacheURL,
+ // Response headers
+ responseHeadersString,
+ responseHeaders,
+ // timeout handle
+ timeoutTimer,
+ // Cross-domain detection vars
+ parts,
+ // To know if global events are to be dispatched
+ fireGlobals,
+ // Loop variable
+ i,
+ // Create the final options object
+ s = jQuery.ajaxSetup({}, options),
+ // Callbacks context
+ callbackContext = s.context || s,
+ // Context for global events is callbackContext if it is a DOM node or jQuery collection
+ globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+ jQuery(callbackContext) :
+ jQuery.event,
+ // Deferreds
+ deferred = jQuery.Deferred(),
+ completeDeferred = jQuery.Callbacks("once memory"),
+ // Status-dependent callbacks
+ statusCode = s.statusCode || {},
+ // Headers (they are sent all at once)
+ requestHeaders = {},
+ requestHeadersNames = {},
+ // The jqXHR state
+ state = 0,
+ // Default abort message
+ strAbort = "canceled",
+ // Fake xhr
+ jqXHR = {
+ readyState: 0,
+
+ // Builds headers hashtable if needed
+ getResponseHeader: function (key) {
+ var match;
+ if (state === 2) {
+ if (!responseHeaders) {
+ responseHeaders = {};
+ while ((match = rheaders.exec(responseHeadersString))) {
+ responseHeaders[match[1].toLowerCase()] = match[2];
+ }
+ }
+ match = responseHeaders[key.toLowerCase()];
+ }
+ return match == null ? null : match;
+ },
+
+ // Raw string
+ getAllResponseHeaders: function () {
+ return state === 2 ? responseHeadersString : null;
+ },
+
+ // Caches the header
+ setRequestHeader: function (name, value) {
+ var lname = name.toLowerCase();
+ if (!state) {
+ name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;
+ requestHeaders[name] = value;
+ }
+ return this;
+ },
+
+ // Overrides response content-type header
+ overrideMimeType: function (type) {
+ if (!state) {
+ s.mimeType = type;
+ }
+ return this;
+ },
+
+ // Status-dependent callbacks
+ statusCode: function (map) {
+ var code;
+ if (map) {
+ if (state < 2) {
+ for (code in map) {
+ // Lazy-add the new callback in a way that preserves old ones
+ statusCode[code] = [statusCode[code], map[code]];
+ }
+ } else {
+ // Execute the appropriate callbacks
+ jqXHR.always(map[jqXHR.status]);
+ }
+ }
+ return this;
+ },
+
+ // Cancel the request
+ abort: function (statusText) {
+ var finalText = statusText || strAbort;
+ if (transport) {
+ transport.abort(finalText);
+ }
+ done(0, finalText);
+ return this;
+ }
+ };
+
+ // Attach deferreds
+ deferred.promise(jqXHR).complete = completeDeferred.add;
+ jqXHR.success = jqXHR.done;
+ jqXHR.error = jqXHR.fail;
+
+ // Remove hash character (#7531: and string promotion)
+ // Add protocol if not provided (prefilters might expect it)
+ // Handle falsy url in the settings object (#10093: consistency with old signature)
+ // We also use the url parameter if available
+ s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace(rhash, "")
+ .replace(rprotocol, ajaxLocParts[1] + "//");
+
+ // Alias method option to type as per ticket #12004
+ s.type = options.method || options.type || s.method || s.type;
+
+ // Extract dataTypes list
+ s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().match(rnotwhite) || [""];
+
+ // A cross-domain request is in order when we have a protocol:host:port mismatch
+ if (s.crossDomain == null) {
+ parts = rurl.exec(s.url.toLowerCase());
+ s.crossDomain = !!( parts &&
+ ( parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] ||
+ ( parts[3] || ( parts[1] === "http:" ? "80" : "443" ) ) !==
+ ( ajaxLocParts[3] || ( ajaxLocParts[1] === "http:" ? "80" : "443" ) ) )
+ );
+ }
+
+ // Convert data if not already a string
+ if (s.data && s.processData && typeof s.data !== "string") {
+ s.data = jQuery.param(s.data, s.traditional);
+ }
+
+ // Apply prefilters
+ inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
+
+ // If request was aborted inside a prefilter, stop there
+ if (state === 2) {
+ return jqXHR;
+ }
+
+ // We can fire global events as of now if asked to
+ // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+ fireGlobals = jQuery.event && s.global;
+
+ // Watch for a new set of requests
+ if (fireGlobals && jQuery.active++ === 0) {
+ jQuery.event.trigger("ajaxStart");
+ }
+
+ // Uppercase the type
+ s.type = s.type.toUpperCase();
+
+ // Determine if request has content
+ s.hasContent = !rnoContent.test(s.type);
+
+ // Save the URL in case we're toying with the If-Modified-Since
+ // and/or If-None-Match header later on
+ cacheURL = s.url;
+
+ // More options handling for requests with no content
+ if (!s.hasContent) {
+
+ // If data is available, append data to url
+ if (s.data) {
+ cacheURL = ( s.url += ( rquery.test(cacheURL) ? "&" : "?" ) + s.data );
+ // #9682: remove data so that it's not used in an eventual retry
+ delete s.data;
+ }
+
+ // Add anti-cache in url if needed
+ if (s.cache === false) {
+ s.url = rts.test(cacheURL) ?
+
+ // If there is already a '_' parameter, set its value
+ cacheURL.replace(rts, "$1_=" + nonce++) :
+
+ // Otherwise add one to the end
+ cacheURL + ( rquery.test(cacheURL) ? "&" : "?" ) + "_=" + nonce++;
+ }
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ if (jQuery.lastModified[cacheURL]) {
+ jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[cacheURL]);
+ }
+ if (jQuery.etag[cacheURL]) {
+ jqXHR.setRequestHeader("If-None-Match", jQuery.etag[cacheURL]);
+ }
+ }
+
+ // Set the correct header, if data is being sent
+ if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
+ jqXHR.setRequestHeader("Content-Type", s.contentType);
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ jqXHR.setRequestHeader(
+ "Accept",
+ s.dataTypes[0] && s.accepts[s.dataTypes[0]] ?
+ s.accepts[s.dataTypes[0]] + ( s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+ s.accepts["*"]
+ );
+
+ // Check for headers option
+ for (i in s.headers) {
+ jqXHR.setRequestHeader(i, s.headers[i]);
+ }
+
+ // Allow custom headers/mimetypes and early abort
+ if (s.beforeSend && ( s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2 )) {
+ // Abort if not done already and return
+ return jqXHR.abort();
+ }
+
+ // Aborting is no longer a cancellation
+ strAbort = "abort";
+
+ // Install callbacks on deferreds
+ for (i in {success: 1, error: 1, complete: 1}) {
+ jqXHR[i](s[i]);
+ }
+
+ // Get transport
+ transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
+
+ // If no transport, we auto-abort
+ if (!transport) {
+ done(-1, "No Transport");
+ } else {
+ jqXHR.readyState = 1;
+
+ // Send global event
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxSend", [jqXHR, s]);
+ }
+ // Timeout
+ if (s.async && s.timeout > 0) {
+ timeoutTimer = setTimeout(function () {
+ jqXHR.abort("timeout");
+ }, s.timeout);
+ }
+
+ try {
+ state = 1;
+ transport.send(requestHeaders, done);
+ } catch (e) {
+ // Propagate exception as error if not done
+ if (state < 2) {
+ done(-1, e);
+ // Simply rethrow otherwise
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ // Callback for when everything is done
+ function done(status, nativeStatusText, responses, headers) {
+ var isSuccess, success, error, response, modified,
+ statusText = nativeStatusText;
+
+ // Called once
+ if (state === 2) {
+ return;
+ }
+
+ // State is "done" now
+ state = 2;
+
+ // Clear timeout if it exists
+ if (timeoutTimer) {
+ clearTimeout(timeoutTimer);
+ }
+
+ // Dereference transport for early garbage collection
+ // (no matter how long the jqXHR object will be used)
+ transport = undefined;
+
+ // Cache response headers
+ responseHeadersString = headers || "";
+
+ // Set readyState
+ jqXHR.readyState = status > 0 ? 4 : 0;
+
+ // Determine if successful
+ isSuccess = status >= 200 && status < 300 || status === 304;
+
+ // Get response data
+ if (responses) {
+ response = ajaxHandleResponses(s, jqXHR, responses);
+ }
+
+ // Convert no matter what (that way responseXXX fields are always set)
+ response = ajaxConvert(s, response, jqXHR, isSuccess);
+
+ // If successful, handle type chaining
+ if (isSuccess) {
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if (s.ifModified) {
+ modified = jqXHR.getResponseHeader("Last-Modified");
+ if (modified) {
+ jQuery.lastModified[cacheURL] = modified;
+ }
+ modified = jqXHR.getResponseHeader("etag");
+ if (modified) {
+ jQuery.etag[cacheURL] = modified;
+ }
+ }
+
+ // if no content
+ if (status === 204 || s.type === "HEAD") {
+ statusText = "nocontent";
+
+ // if not modified
+ } else if (status === 304) {
+ statusText = "notmodified";
+
+ // If we have data, let's convert it
+ } else {
+ statusText = response.state;
+ success = response.data;
+ error = response.error;
+ isSuccess = !error;
+ }
+ } else {
+ // Extract error from statusText and normalize for non-aborts
+ error = statusText;
+ if (status || !statusText) {
+ statusText = "error";
+ if (status < 0) {
+ status = 0;
+ }
+ }
+ }
+
+ // Set data for the fake xhr object
+ jqXHR.status = status;
+ jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+ // Success/Error
+ if (isSuccess) {
+ deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);
+ } else {
+ deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);
+ }
+
+ // Status-dependent callbacks
+ jqXHR.statusCode(statusCode);
+ statusCode = undefined;
+
+ if (fireGlobals) {
+ globalEventContext.trigger(isSuccess ? "ajaxSuccess" : "ajaxError",
+ [jqXHR, s, isSuccess ? success : error]);
+ }
+
+ // Complete
+ completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);
+
+ if (fireGlobals) {
+ globalEventContext.trigger("ajaxComplete", [jqXHR, s]);
+ // Handle the global AJAX counter
+ if (!( --jQuery.active )) {
+ jQuery.event.trigger("ajaxStop");
+ }
+ }
+ }
+
+ return jqXHR;
+ },
+
+ getJSON: function (url, data, callback) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ getScript: function (url, callback) {
+ return jQuery.get(url, undefined, callback, "script");
+ }
+ });
+
+ jQuery.each(["get", "post"], function (i, method) {
+ jQuery[method] = function (url, data, callback, type) {
+ // Shift arguments if data argument was omitted
+ if (jQuery.isFunction(data)) {
+ type = type || callback;
+ callback = data;
+ data = undefined;
+ }
+
+ return jQuery.ajax({
+ url: url,
+ type: method,
+ dataType: type,
+ data: data,
+ success: callback
+ });
+ };
+ });
+
+
+ jQuery._evalUrl = function (url) {
+ return jQuery.ajax({
+ url: url,
+ type: "GET",
+ dataType: "script",
+ async: false,
+ global: false,
+ "throws": true
+ });
+ };
+
+
+ jQuery.fn.extend({
+ wrapAll: function (html) {
+ var wrap;
+
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapAll(html.call(this, i));
+ });
+ }
+
+ if (this[0]) {
+
+ // The elements to wrap the target around
+ wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
+
+ if (this[0].parentNode) {
+ wrap.insertBefore(this[0]);
+ }
+
+ wrap.map(function () {
+ var elem = this;
+
+ while (elem.firstElementChild) {
+ elem = elem.firstElementChild;
+ }
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function (html) {
+ if (jQuery.isFunction(html)) {
+ return this.each(function (i) {
+ jQuery(this).wrapInner(html.call(this, i));
+ });
+ }
+
+ return this.each(function () {
+ var self = jQuery(this),
+ contents = self.contents();
+
+ if (contents.length) {
+ contents.wrapAll(html);
+
+ } else {
+ self.append(html);
+ }
+ });
+ },
+
+ wrap: function (html) {
+ var isFunction = jQuery.isFunction(html);
+
+ return this.each(function (i) {
+ jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
+ });
+ },
+
+ unwrap: function () {
+ return this.parent().each(function () {
+ if (!jQuery.nodeName(this, "body")) {
+ jQuery(this).replaceWith(this.childNodes);
+ }
+ }).end();
+ }
+ });
+
+
+ jQuery.expr.filters.hidden = function (elem) {
+ // Support: Opera <= 12.12
+ // Opera reports offsetWidths and offsetHeights less than zero on some elements
+ return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+ };
+ jQuery.expr.filters.visible = function (elem) {
+ return !jQuery.expr.filters.hidden(elem);
+ };
+
+
+ var r20 = /%20/g,
+ rbracket = /\[\]$/,
+ rCRLF = /\r?\n/g,
+ rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+ rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+ function buildParams(prefix, obj, traditional, add) {
+ var name;
+
+ if (jQuery.isArray(obj)) {
+ // Serialize array item.
+ jQuery.each(obj, function (i, v) {
+ if (traditional || rbracket.test(prefix)) {
+ // Treat each array item as a scalar.
+ add(prefix, v);
+
+ } else {
+ // Item is non-scalar (array or object), encode its numeric index.
+ buildParams(prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add);
+ }
+ });
+
+ } else if (!traditional && jQuery.type(obj) === "object") {
+ // Serialize object item.
+ for (name in obj) {
+ buildParams(prefix + "[" + name + "]", obj[name], traditional, add);
+ }
+
+ } else {
+ // Serialize scalar item.
+ add(prefix, obj);
+ }
+ }
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+ jQuery.param = function (a, traditional) {
+ var prefix,
+ s = [],
+ add = function (key, value) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction(value) ? value() : ( value == null ? "" : value );
+ s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if (traditional === undefined) {
+ traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if (jQuery.isArray(a) || ( a.jquery && !jQuery.isPlainObject(a) )) {
+ // Serialize the form elements
+ jQuery.each(a, function () {
+ add(this.name, this.value);
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for (prefix in a) {
+ buildParams(prefix, a[prefix], traditional, add);
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join("&").replace(r20, "+");
+ };
+
+ jQuery.fn.extend({
+ serialize: function () {
+ return jQuery.param(this.serializeArray());
+ },
+ serializeArray: function () {
+ return this.map(function () {
+ // Can add propHook for "elements" to filter or add form elements
+ var elements = jQuery.prop(this, "elements");
+ return elements ? jQuery.makeArray(elements) : this;
+ })
+ .filter(function () {
+ var type = this.type;
+
+ // Use .is( ":disabled" ) so that fieldset[disabled] works
+ return this.name && !jQuery(this).is(":disabled") &&
+ rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) &&
+ ( this.checked || !rcheckableType.test(type) );
+ })
+ .map(function (i, elem) {
+ var val = jQuery(this).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray(val) ?
+ jQuery.map(val, function (val) {
+ return {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }) :
+ {name: elem.name, value: val.replace(rCRLF, "\r\n")};
+ }).get();
+ }
+ });
+
+
+ jQuery.ajaxSettings.xhr = function () {
+ try {
+ return new XMLHttpRequest();
+ } catch (e) {
+ }
+ };
+
+ var xhrId = 0,
+ xhrCallbacks = {},
+ xhrSuccessStatus = {
+ // file protocol always yields status code 0, assume 200
+ 0: 200,
+ // Support: IE9
+ // #1450: sometimes IE returns 1223 when it should be 204
+ 1223: 204
+ },
+ xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+ if (window.attachEvent) {
+ window.attachEvent("onunload", function () {
+ for (var key in xhrCallbacks) {
+ xhrCallbacks[key]();
+ }
+ });
+ }
+
+ support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+ support.ajax = xhrSupported = !!xhrSupported;
+
+ jQuery.ajaxTransport(function (options) {
+ var callback;
+
+ // Cross domain only allowed if supported through XMLHttpRequest
+ if (support.cors || xhrSupported && !options.crossDomain) {
+ return {
+ send: function (headers, complete) {
+ var i,
+ xhr = options.xhr(),
+ id = ++xhrId;
+
+ xhr.open(options.type, options.url, options.async, options.username, options.password);
+
+ // Apply custom fields if provided
+ if (options.xhrFields) {
+ for (i in options.xhrFields) {
+ xhr[i] = options.xhrFields[i];
+ }
+ }
+
+ // Override mime type if needed
+ if (options.mimeType && xhr.overrideMimeType) {
+ xhr.overrideMimeType(options.mimeType);
+ }
+
+ // X-Requested-With header
+ // For cross-domain requests, seeing as conditions for a preflight are
+ // akin to a jigsaw puzzle, we simply never set it to be sure.
+ // (it can always be set on a per-request basis or even using ajaxSetup)
+ // For same-domain requests, won't change header if already provided.
+ if (!options.crossDomain && !headers["X-Requested-With"]) {
+ headers["X-Requested-With"] = "XMLHttpRequest";
+ }
+
+ // Set headers
+ for (i in headers) {
+ xhr.setRequestHeader(i, headers[i]);
+ }
+
+ // Callback
+ callback = function (type) {
+ return function () {
+ if (callback) {
+ delete xhrCallbacks[id];
+ callback = xhr.onload = xhr.onerror = null;
+
+ if (type === "abort") {
+ xhr.abort();
+ } else if (type === "error") {
+ complete(
+ // file: protocol always yields status 0; see #8605, #14207
+ xhr.status,
+ xhr.statusText
+ );
+ } else {
+ complete(
+ xhrSuccessStatus[xhr.status] || xhr.status,
+ xhr.statusText,
+ // Support: IE9
+ // Accessing binary-data responseText throws an exception
+ // (#11426)
+ typeof xhr.responseText === "string" ? {
+ text: xhr.responseText
+ } : undefined,
+ xhr.getAllResponseHeaders()
+ );
+ }
+ }
+ };
+ };
+
+ // Listen to events
+ xhr.onload = callback();
+ xhr.onerror = callback("error");
+
+ // Create the abort callback
+ callback = xhrCallbacks[id] = callback("abort");
+
+ try {
+ // Do send the request (this may raise an exception)
+ xhr.send(options.hasContent && options.data || null);
+ } catch (e) {
+ // #14683: Only rethrow if this hasn't been notified as an error yet
+ if (callback) {
+ throw e;
+ }
+ }
+ },
+
+ abort: function () {
+ if (callback) {
+ callback();
+ }
+ }
+ };
+ }
+ });
+
+
+// Install script dataType
+ jQuery.ajaxSetup({
+ accepts: {
+ script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+ },
+ contents: {
+ script: /(?:java|ecma)script/
+ },
+ converters: {
+ "text script": function (text) {
+ jQuery.globalEval(text);
+ return text;
+ }
+ }
+ });
+
+// Handle cache's special case and crossDomain
+ jQuery.ajaxPrefilter("script", function (s) {
+ if (s.cache === undefined) {
+ s.cache = false;
+ }
+ if (s.crossDomain) {
+ s.type = "GET";
+ }
+ });
+
+// Bind script tag hack transport
+ jQuery.ajaxTransport("script", function (s) {
+ // This transport only deals with cross domain requests
+ if (s.crossDomain) {
+ var script, callback;
+ return {
+ send: function (_, complete) {
+ script = jQuery("<script>").prop({
+ async: true,
+ charset: s.scriptCharset,
+ src: s.url
+ }).on(
+ "load error",
+ callback = function (evt) {
+ script.remove();
+ callback = null;
+ if (evt) {
+ complete(evt.type === "error" ? 404 : 200, evt.type);
+ }
+ }
+ );
+ document.head.appendChild(script[0]);
+ },
+ abort: function () {
+ if (callback) {
+ callback();
+ }
+ }
+ };
+ }
+ });
+
+
+ var oldCallbacks = [],
+ rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+ jQuery.ajaxSetup({
+ jsonp: "callback",
+ jsonpCallback: function () {
+ var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+ this[callback] = true;
+ return callback;
+ }
+ });
+
+// Detect, normalize options and install callbacks for jsonp requests
+ jQuery.ajaxPrefilter("json jsonp", function (s, originalSettings, jqXHR) {
+
+ var callbackName, overwritten, responseContainer,
+ jsonProp = s.jsonp !== false && ( rjsonp.test(s.url) ?
+ "url" :
+ typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test(s.data) && "data"
+ );
+
+ // Handle iff the expected data type is "jsonp" or we have a parameter to set
+ if (jsonProp || s.dataTypes[0] === "jsonp") {
+
+ // Get callback name, remembering preexisting value associated with it
+ callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ?
+ s.jsonpCallback() :
+ s.jsonpCallback;
+
+ // Insert callback into url or form data
+ if (jsonProp) {
+ s[jsonProp] = s[jsonProp].replace(rjsonp, "$1" + callbackName);
+ } else if (s.jsonp !== false) {
+ s.url += ( rquery.test(s.url) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+ }
+
+ // Use data converter to retrieve json after script execution
+ s.converters["script json"] = function () {
+ if (!responseContainer) {
+ jQuery.error(callbackName + " was not called");
+ }
+ return responseContainer[0];
+ };
+
+ // force json dataType
+ s.dataTypes[0] = "json";
+
+ // Install callback
+ overwritten = window[callbackName];
+ window[callbackName] = function () {
+ responseContainer = arguments;
+ };
+
+ // Clean-up function (fires after converters)
+ jqXHR.always(function () {
+ // Restore preexisting value
+ window[callbackName] = overwritten;
+
+ // Save back as free
+ if (s[callbackName]) {
+ // make sure that re-using the options doesn't screw things around
+ s.jsonpCallback = originalSettings.jsonpCallback;
+
+ // save the callback name for future use
+ oldCallbacks.push(callbackName);
+ }
+
+ // Call if it was a function and we have a response
+ if (responseContainer && jQuery.isFunction(overwritten)) {
+ overwritten(responseContainer[0]);
+ }
+
+ responseContainer = overwritten = undefined;
+ });
+
+ // Delegate to script
+ return "script";
+ }
+ });
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+ jQuery.parseHTML = function (data, context, keepScripts) {
+ if (!data || typeof data !== "string") {
+ return null;
+ }
+ if (typeof context === "boolean") {
+ keepScripts = context;
+ context = false;
+ }
+ context = context || document;
+
+ var parsed = rsingleTag.exec(data),
+ scripts = !keepScripts && [];
+
+ // Single tag
+ if (parsed) {
+ return [context.createElement(parsed[1])];
+ }
+
+ parsed = jQuery.buildFragment([data], context, scripts);
+
+ if (scripts && scripts.length) {
+ jQuery(scripts).remove();
+ }
+
+ return jQuery.merge([], parsed.childNodes);
+ };
+
+
+// Keep a copy of the old load method
+ var _load = jQuery.fn.load;
+
+ /**
+ * Load a url into a page
+ */
+ jQuery.fn.load = function (url, params, callback) {
+ if (typeof url !== "string" && _load) {
+ return _load.apply(this, arguments);
+ }
+
+ var selector, type, response,
+ self = this,
+ off = url.indexOf(" ");
+
+ if (off >= 0) {
+ selector = jQuery.trim(url.slice(off));
+ url = url.slice(0, off);
+ }
+
+ // If it's a function
+ if (jQuery.isFunction(params)) {
+
+ // We assume that it's the callback
+ callback = params;
+ params = undefined;
+
+ // Otherwise, build a param string
+ } else if (params && typeof params === "object") {
+ type = "POST";
+ }
+
+ // If we have elements to modify, make the request
+ if (self.length > 0) {
+ jQuery.ajax({
+ url: url,
+
+ // if "type" variable is undefined, then "GET" method will be used
+ type: type,
+ dataType: "html",
+ data: params
+ }).done(function (responseText) {
+
+ // Save response for use in complete callback
+ response = arguments;
+
+ self.html(selector ?
+
+ // If a selector was specified, locate the right elements in a dummy div
+ // Exclude scripts to avoid IE 'Permission Denied' errors
+ jQuery("<div>").append(jQuery.parseHTML(responseText)).find(selector) :
+
+ // Otherwise use the full result
+ responseText);
+
+ }).complete(callback && function (jqXHR, status) {
+ self.each(callback, response || [jqXHR.responseText, status, jqXHR]);
+ });
+ }
+
+ return this;
+ };
+
+
+// Attach a bunch of functions for handling common AJAX events
+ jQuery.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (i, type) {
+ jQuery.fn[type] = function (fn) {
+ return this.on(type, fn);
+ };
+ });
+
+
+ jQuery.expr.filters.animated = function (elem) {
+ return jQuery.grep(jQuery.timers, function (fn) {
+ return elem === fn.elem;
+ }).length;
+ };
+
+
+ var docElem = window.document.documentElement;
+
+ /**
+ * Gets a window from an element
+ */
+ function getWindow(elem) {
+ return jQuery.isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
+ }
+
+ jQuery.offset = {
+ setOffset: function (elem, options, i) {
+ var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+ position = jQuery.css(elem, "position"),
+ curElem = jQuery(elem),
+ props = {};
+
+ // Set position first, in-case top/left are set even on static elem
+ if (position === "static") {
+ elem.style.position = "relative";
+ }
+
+ curOffset = curElem.offset();
+ curCSSTop = jQuery.css(elem, "top");
+ curCSSLeft = jQuery.css(elem, "left");
+ calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+ ( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
+
+ // Need to be able to calculate position if either
+ // top or left is auto and position is either absolute or fixed
+ if (calculatePosition) {
+ curPosition = curElem.position();
+ curTop = curPosition.top;
+ curLeft = curPosition.left;
+
+ } else {
+ curTop = parseFloat(curCSSTop) || 0;
+ curLeft = parseFloat(curCSSLeft) || 0;
+ }
+
+ if (jQuery.isFunction(options)) {
+ options = options.call(elem, i, curOffset);
+ }
+
+ if (options.top != null) {
+ props.top = ( options.top - curOffset.top ) + curTop;
+ }
+ if (options.left != null) {
+ props.left = ( options.left - curOffset.left ) + curLeft;
+ }
+
+ if ("using" in options) {
+ options.using.call(elem, props);
+
+ } else {
+ curElem.css(props);
+ }
+ }
+ };
+
+ jQuery.fn.extend({
+ offset: function (options) {
+ if (arguments.length) {
+ return options === undefined ?
+ this :
+ this.each(function (i) {
+ jQuery.offset.setOffset(this, options, i);
+ });
+ }
+
+ var docElem, win,
+ elem = this[0],
+ box = {top: 0, left: 0},
+ doc = elem && elem.ownerDocument;
+
+ if (!doc) {
+ return;
+ }
+
+ docElem = doc.documentElement;
+
+ // Make sure it's not a disconnected DOM node
+ if (!jQuery.contains(docElem, elem)) {
+ return box;
+ }
+
+ // Support: BlackBerry 5, iOS 3 (original iPhone)
+ // If we don't have gBCR, just use 0,0 rather than error
+ if (typeof elem.getBoundingClientRect !== strundefined) {
+ box = elem.getBoundingClientRect();
+ }
+ win = getWindow(doc);
+ return {
+ top: box.top + win.pageYOffset - docElem.clientTop,
+ left: box.left + win.pageXOffset - docElem.clientLeft
+ };
+ },
+
+ position: function () {
+ if (!this[0]) {
+ return;
+ }
+
+ var offsetParent, offset,
+ elem = this[0],
+ parentOffset = {top: 0, left: 0};
+
+ // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+ if (jQuery.css(elem, "position") === "fixed") {
+ // Assume getBoundingClientRect is there when computed position is fixed
+ offset = elem.getBoundingClientRect();
+
+ } else {
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent();
+
+ // Get correct offsets
+ offset = this.offset();
+ if (!jQuery.nodeName(offsetParent[0], "html")) {
+ parentOffset = offsetParent.offset();
+ }
+
+ // Add offsetParent borders
+ parentOffset.top += jQuery.css(offsetParent[0], "borderTopWidth", true);
+ parentOffset.left += jQuery.css(offsetParent[0], "borderLeftWidth", true);
+ }
+
+ // Subtract parent offsets and element margins
+ return {
+ top: offset.top - parentOffset.top - jQuery.css(elem, "marginTop", true),
+ left: offset.left - parentOffset.left - jQuery.css(elem, "marginLeft", true)
+ };
+ },
+
+ offsetParent: function () {
+ return this.map(function () {
+ var offsetParent = this.offsetParent || docElem;
+
+ while (offsetParent && ( !jQuery.nodeName(offsetParent, "html") && jQuery.css(offsetParent, "position") === "static" )) {
+ offsetParent = offsetParent.offsetParent;
+ }
+
+ return offsetParent || docElem;
+ });
+ }
+ });
+
+// Create scrollLeft and scrollTop methods
+ jQuery.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (method, prop) {
+ var top = "pageYOffset" === prop;
+
+ jQuery.fn[method] = function (val) {
+ return access(this, function (elem, method, val) {
+ var win = getWindow(elem);
+
+ if (val === undefined) {
+ return win ? win[prop] : elem[method];
+ }
+
+ if (win) {
+ win.scrollTo(
+ !top ? val : window.pageXOffset,
+ top ? val : window.pageYOffset
+ );
+
+ } else {
+ elem[method] = val;
+ }
+ }, method, val, arguments.length, null);
+ };
+ });
+
+// Support: Safari<7+, Chrome<37+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+ jQuery.each(["top", "left"], function (i, prop) {
+ jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition,
+ function (elem, computed) {
+ if (computed) {
+ computed = curCSS(elem, prop);
+ // If curCSS returns percentage, fallback to offset
+ return rnumnonpx.test(computed) ?
+ jQuery(elem).position()[prop] + "px" :
+ computed;
+ }
+ }
+ );
+ });
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+ jQuery.each({Height: "height", Width: "width"}, function (name, type) {
+ jQuery.each({padding: "inner" + name, content: type, "": "outer" + name}, function (defaultExtra, funcName) {
+ // Margin is only for outerHeight, outerWidth
+ jQuery.fn[funcName] = function (margin, value) {
+ var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+ extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+ return access(this, function (elem, type, value) {
+ var doc;
+
+ if (jQuery.isWindow(elem)) {
+ // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+ // isn't a whole lot we can do. See pull request at this URL for discussion:
+ // https://github.com/jquery/jquery/pull/764
+ return elem.document.documentElement["client" + name];
+ }
+
+ // Get document width or height
+ if (elem.nodeType === 9) {
+ doc = elem.documentElement;
+
+ // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+ // whichever is greatest
+ return Math.max(
+ elem.body["scroll" + name], doc["scroll" + name],
+ elem.body["offset" + name], doc["offset" + name],
+ doc["client" + name]
+ );
+ }
+
+ return value === undefined ?
+ // Get width or height on the element, requesting but not forcing parseFloat
+ jQuery.css(elem, type, extra) :
+
+ // Set width or height on the element
+ jQuery.style(elem, type, value, extra);
+ }, type, chainable ? margin : undefined, chainable, null);
+ };
+ });
+ });
+
+
+// The number of elements contained in the matched element set
+ jQuery.fn.size = function () {
+ return this.length;
+ };
+
+ jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+ if (typeof define === "function" && define.amd) {
+ define("jquery", [], function () {
+ return jQuery;
+ });
+ }
+
+
+ var
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$;
+
+ jQuery.noConflict = function (deep) {
+ if (window.$ === jQuery) {
+ window.$ = _$;
+ }
+
+ if (deep && window.jQuery === jQuery) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ };
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+ if (typeof noGlobal === strundefined) {
+ window.jQuery = window.$ = jQuery;
+ }
+
+
+ return jQuery;
+
+}));
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.js
new file mode 100644
index 00000000..7ceee0cd
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.js
@@ -0,0 +1,2393 @@
+/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function (a, b) {
+ "object" == typeof module && "object" == typeof module.exports ? module.exports = a.document ? b(a, !0) : function (a) {
+ if (!a.document)throw new Error("jQuery requires a window with a document");
+ return b(a)
+ } : b(a)
+}("undefined" != typeof window ? window : this, function (a, b) {
+ var c = [], d = c.slice, e = c.concat, f = c.push, g = c.indexOf, h = {}, i = h.toString, j = h.hasOwnProperty, k = {}, l = a.document, m = "2.1.3", n = function (a, b) {
+ return new n.fn.init(a, b)
+ }, o = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, p = /^-ms-/, q = /-([\da-z])/gi, r = function (a, b) {
+ return b.toUpperCase()
+ };
+ n.fn = n.prototype = {
+ jquery: m, constructor: n, selector: "", length: 0, toArray: function () {
+ return d.call(this)
+ }, get: function (a) {
+ return null != a ? 0 > a ? this[a + this.length] : this[a] : d.call(this)
+ }, pushStack: function (a) {
+ var b = n.merge(this.constructor(), a);
+ return b.prevObject = this, b.context = this.context, b
+ }, each: function (a, b) {
+ return n.each(this, a, b)
+ }, map: function (a) {
+ return this.pushStack(n.map(this, function (b, c) {
+ return a.call(b, c, b)
+ }))
+ }, slice: function () {
+ return this.pushStack(d.apply(this, arguments))
+ }, first: function () {
+ return this.eq(0)
+ }, last: function () {
+ return this.eq(-1)
+ }, eq: function (a) {
+ var b = this.length, c = +a + (0 > a ? b : 0);
+ return this.pushStack(c >= 0 && b > c ? [this[c]] : [])
+ }, end: function () {
+ return this.prevObject || this.constructor(null)
+ }, push: f, sort: c.sort, splice: c.splice
+ }, n.extend = n.fn.extend = function () {
+ var a, b, c, d, e, f, g = arguments[0] || {}, h = 1, i = arguments.length, j = !1;
+ for ("boolean" == typeof g && (j = g, g = arguments[h] || {}, h++), "object" == typeof g || n.isFunction(g) || (g = {}), h === i && (g = this, h--); i > h; h++)if (null != (a = arguments[h]))for (b in a)c = g[b], d = a[b], g !== d && (j && d && (n.isPlainObject(d) || (e = n.isArray(d))) ? (e ? (e = !1, f = c && n.isArray(c) ? c : []) : f = c && n.isPlainObject(c) ? c : {}, g[b] = n.extend(j, f, d)) : void 0 !== d && (g[b] = d));
+ return g
+ }, n.extend({
+ expando: "jQuery" + (m + Math.random()).replace(/\D/g, ""), isReady: !0, error: function (a) {
+ throw new Error(a)
+ }, noop: function () {
+ }, isFunction: function (a) {
+ return "function" === n.type(a)
+ }, isArray: Array.isArray, isWindow: function (a) {
+ return null != a && a === a.window
+ }, isNumeric: function (a) {
+ return !n.isArray(a) && a - parseFloat(a) + 1 >= 0
+ }, isPlainObject: function (a) {
+ return "object" !== n.type(a) || a.nodeType || n.isWindow(a) ? !1 : a.constructor && !j.call(a.constructor.prototype, "isPrototypeOf") ? !1 : !0
+ }, isEmptyObject: function (a) {
+ var b;
+ for (b in a)return !1;
+ return !0
+ }, type: function (a) {
+ return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
+ }, globalEval: function (a) {
+ var b, c = eval;
+ a = n.trim(a), a && (1 === a.indexOf("use strict") ? (b = l.createElement("script"), b.text = a, l.head.appendChild(b).parentNode.removeChild(b)) : c(a))
+ }, camelCase: function (a) {
+ return a.replace(p, "ms-").replace(q, r)
+ }, nodeName: function (a, b) {
+ return a.nodeName && a.nodeName.toLowerCase() === b.toLowerCase()
+ }, each: function (a, b, c) {
+ var d, e = 0, f = a.length, g = s(a);
+ if (c) {
+ if (g) {
+ for (; f > e; e++)if (d = b.apply(a[e], c), d === !1)break
+ } else for (e in a)if (d = b.apply(a[e], c), d === !1)break
+ } else if (g) {
+ for (; f > e; e++)if (d = b.call(a[e], e, a[e]), d === !1)break
+ } else for (e in a)if (d = b.call(a[e], e, a[e]), d === !1)break;
+ return a
+ }, trim: function (a) {
+ return null == a ? "" : (a + "").replace(o, "")
+ }, makeArray: function (a, b) {
+ var c = b || [];
+ return null != a && (s(Object(a)) ? n.merge(c, "string" == typeof a ? [a] : a) : f.call(c, a)), c
+ }, inArray: function (a, b, c) {
+ return null == b ? -1 : g.call(b, a, c)
+ }, merge: function (a, b) {
+ for (var c = +b.length, d = 0, e = a.length; c > d; d++)a[e++] = b[d];
+ return a.length = e, a
+ }, grep: function (a, b, c) {
+ for (var d, e = [], f = 0, g = a.length, h = !c; g > f; f++)d = !b(a[f], f), d !== h && e.push(a[f]);
+ return e
+ }, map: function (a, b, c) {
+ var d, f = 0, g = a.length, h = s(a), i = [];
+ if (h)for (; g > f; f++)d = b(a[f], f, c), null != d && i.push(d); else for (f in a)d = b(a[f], f, c), null != d && i.push(d);
+ return e.apply([], i)
+ }, guid: 1, proxy: function (a, b) {
+ var c, e, f;
+ return "string" == typeof b && (c = a[b], b = a, a = c), n.isFunction(a) ? (e = d.call(arguments, 2), f = function () {
+ return a.apply(b || this, e.concat(d.call(arguments)))
+ }, f.guid = a.guid = a.guid || n.guid++, f) : void 0
+ }, now: Date.now, support: k
+ }), n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (a, b) {
+ h["[object " + b + "]"] = b.toLowerCase()
+ });
+ function s(a) {
+ var b = a.length, c = n.type(a);
+ return "function" === c || n.isWindow(a) ? !1 : 1 === a.nodeType && b ? !0 : "array" === c || 0 === b || "number" == typeof b && b > 0 && b - 1 in a
+ }
+
+ var t = function (a) {
+ var b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u = "sizzle" + 1 * new Date, v = a.document, w = 0, x = 0, y = hb(), z = hb(), A = hb(), B = function (a, b) {
+ return a === b && (l = !0), 0
+ }, C = 1 << 31, D = {}.hasOwnProperty, E = [], F = E.pop, G = E.push, H = E.push, I = E.slice, J = function (a, b) {
+ for (var c = 0, d = a.length; d > c; c++)if (a[c] === b)return c;
+ return -1
+ }, K = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", L = "[\\x20\\t\\r\\n\\f]", M = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", N = M.replace("w", "w#"), O = "\\[" + L + "*(" + M + ")(?:" + L + "*([*^$|!~]?=)" + L + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + N + "))|)" + L + "*\\]", P = ":(" + M + ")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|" + O + ")*)|.*)\\)|)", Q = new RegExp(L + "+", "g"), R = new RegExp("^" + L + "+|((?:^|[^\\\\])(?:\\\\.)*)" + L + "+$", "g"), S = new RegExp("^" + L + "*," + L + "*"), T = new RegExp("^" + L + "*([>+~]|" + L + ")" + L + "*"), U = new RegExp("=" + L + "*([^\\]'\"]*?)" + L + "*\\]", "g"), V = new RegExp(P), W = new RegExp("^" + N + "$"), X = {
+ ID: new RegExp("^#(" + M + ")"),
+ CLASS: new RegExp("^\\.(" + M + ")"),
+ TAG: new RegExp("^(" + M.replace("w", "w*") + ")"),
+ ATTR: new RegExp("^" + O),
+ PSEUDO: new RegExp("^" + P),
+ CHILD: new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + L + "*(even|odd|(([+-]|)(\\d*)n|)" + L + "*(?:([+-]|)" + L + "*(\\d+)|))" + L + "*\\)|)", "i"),
+ bool: new RegExp("^(?:" + K + ")$", "i"),
+ needsContext: new RegExp("^" + L + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + L + "*((?:-\\d)?\\d*)" + L + "*\\)|)(?=[^-]|$)", "i")
+ }, Y = /^(?:input|select|textarea|button)$/i, Z = /^h\d$/i, $ = /^[^{]+\{\s*\[native \w/, _ = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, ab = /[+~]/, bb = /'|\\/g, cb = new RegExp("\\\\([\\da-f]{1,6}" + L + "?|(" + L + ")|.)", "ig"), db = function (a, b, c) {
+ var d = "0x" + b - 65536;
+ return d !== d || c ? b : 0 > d ? String.fromCharCode(d + 65536) : String.fromCharCode(d >> 10 | 55296, 1023 & d | 56320)
+ }, eb = function () {
+ m()
+ };
+ try {
+ H.apply(E = I.call(v.childNodes), v.childNodes), E[v.childNodes.length].nodeType
+ } catch (fb) {
+ H = {
+ apply: E.length ? function (a, b) {
+ G.apply(a, I.call(b))
+ } : function (a, b) {
+ var c = a.length, d = 0;
+ while (a[c++] = b[d++]);
+ a.length = c - 1
+ }
+ }
+ }
+ function gb(a, b, d, e) {
+ var f, h, j, k, l, o, r, s, w, x;
+ if ((b ? b.ownerDocument || b : v) !== n && m(b), b = b || n, d = d || [], k = b.nodeType, "string" != typeof a || !a || 1 !== k && 9 !== k && 11 !== k)return d;
+ if (!e && p) {
+ if (11 !== k && (f = _.exec(a)))if (j = f[1]) {
+ if (9 === k) {
+ if (h = b.getElementById(j), !h || !h.parentNode)return d;
+ if (h.id === j)return d.push(h), d
+ } else if (b.ownerDocument && (h = b.ownerDocument.getElementById(j)) && t(b, h) && h.id === j)return d.push(h), d
+ } else {
+ if (f[2])return H.apply(d, b.getElementsByTagName(a)), d;
+ if ((j = f[3]) && c.getElementsByClassName)return H.apply(d, b.getElementsByClassName(j)), d
+ }
+ if (c.qsa && (!q || !q.test(a))) {
+ if (s = r = u, w = b, x = 1 !== k && a, 1 === k && "object" !== b.nodeName.toLowerCase()) {
+ o = g(a), (r = b.getAttribute("id")) ? s = r.replace(bb, "\\$&") : b.setAttribute("id", s), s = "[id='" + s + "'] ", l = o.length;
+ while (l--)o[l] = s + rb(o[l]);
+ w = ab.test(a) && pb(b.parentNode) || b, x = o.join(",")
+ }
+ if (x)try {
+ return H.apply(d, w.querySelectorAll(x)), d
+ } catch (y) {
+ } finally {
+ r || b.removeAttribute("id")
+ }
+ }
+ }
+ return i(a.replace(R, "$1"), b, d, e)
+ }
+
+ function hb() {
+ var a = [];
+
+ function b(c, e) {
+ return a.push(c + " ") > d.cacheLength && delete b[a.shift()], b[c + " "] = e
+ }
+
+ return b
+ }
+
+ function ib(a) {
+ return a[u] = !0, a
+ }
+
+ function jb(a) {
+ var b = n.createElement("div");
+ try {
+ return !!a(b)
+ } catch (c) {
+ return !1
+ } finally {
+ b.parentNode && b.parentNode.removeChild(b), b = null
+ }
+ }
+
+ function kb(a, b) {
+ var c = a.split("|"), e = a.length;
+ while (e--)d.attrHandle[c[e]] = b
+ }
+
+ function lb(a, b) {
+ var c = b && a, d = c && 1 === a.nodeType && 1 === b.nodeType && (~b.sourceIndex || C) - (~a.sourceIndex || C);
+ if (d)return d;
+ if (c)while (c = c.nextSibling)if (c === b)return -1;
+ return a ? 1 : -1
+ }
+
+ function mb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return "input" === c && b.type === a
+ }
+ }
+
+ function nb(a) {
+ return function (b) {
+ var c = b.nodeName.toLowerCase();
+ return ("input" === c || "button" === c) && b.type === a
+ }
+ }
+
+ function ob(a) {
+ return ib(function (b) {
+ return b = +b, ib(function (c, d) {
+ var e, f = a([], c.length, b), g = f.length;
+ while (g--)c[e = f[g]] && (c[e] = !(d[e] = c[e]))
+ })
+ })
+ }
+
+ function pb(a) {
+ return a && "undefined" != typeof a.getElementsByTagName && a
+ }
+
+ c = gb.support = {}, f = gb.isXML = function (a) {
+ var b = a && (a.ownerDocument || a).documentElement;
+ return b ? "HTML" !== b.nodeName : !1
+ }, m = gb.setDocument = function (a) {
+ var b, e, g = a ? a.ownerDocument || a : v;
+ return g !== n && 9 === g.nodeType && g.documentElement ? (n = g, o = g.documentElement, e = g.defaultView, e && e !== e.top && (e.addEventListener ? e.addEventListener("unload", eb, !1) : e.attachEvent && e.attachEvent("onunload", eb)), p = !f(g), c.attributes = jb(function (a) {
+ return a.className = "i", !a.getAttribute("className")
+ }), c.getElementsByTagName = jb(function (a) {
+ return a.appendChild(g.createComment("")), !a.getElementsByTagName("*").length
+ }), c.getElementsByClassName = $.test(g.getElementsByClassName), c.getById = jb(function (a) {
+ return o.appendChild(a).id = u, !g.getElementsByName || !g.getElementsByName(u).length
+ }), c.getById ? (d.find.ID = function (a, b) {
+ if ("undefined" != typeof b.getElementById && p) {
+ var c = b.getElementById(a);
+ return c && c.parentNode ? [c] : []
+ }
+ }, d.filter.ID = function (a) {
+ var b = a.replace(cb, db);
+ return function (a) {
+ return a.getAttribute("id") === b
+ }
+ }) : (delete d.find.ID, d.filter.ID = function (a) {
+ var b = a.replace(cb, db);
+ return function (a) {
+ var c = "undefined" != typeof a.getAttributeNode && a.getAttributeNode("id");
+ return c && c.value === b
+ }
+ }), d.find.TAG = c.getElementsByTagName ? function (a, b) {
+ return "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(a) : c.qsa ? b.querySelectorAll(a) : void 0
+ } : function (a, b) {
+ var c, d = [], e = 0, f = b.getElementsByTagName(a);
+ if ("*" === a) {
+ while (c = f[e++])1 === c.nodeType && d.push(c);
+ return d
+ }
+ return f
+ }, d.find.CLASS = c.getElementsByClassName && function (a, b) {
+ return p ? b.getElementsByClassName(a) : void 0
+ }, r = [], q = [], (c.qsa = $.test(g.querySelectorAll)) && (jb(function (a) {
+ o.appendChild(a).innerHTML = "<a id='" + u + "'></a><select id='" + u + "-\f]' msallowcapture=''><option selected=''></option></select>", a.querySelectorAll("[msallowcapture^='']").length && q.push("[*^$]=" + L + "*(?:''|\"\")"), a.querySelectorAll("[selected]").length || q.push("\\[" + L + "*(?:value|" + K + ")"), a.querySelectorAll("[id~=" + u + "-]").length || q.push("~="), a.querySelectorAll(":checked").length || q.push(":checked"), a.querySelectorAll("a#" + u + "+*").length || q.push(".#.+[+~]")
+ }), jb(function (a) {
+ var b = g.createElement("input");
+ b.setAttribute("type", "hidden"), a.appendChild(b).setAttribute("name", "D"), a.querySelectorAll("[name=d]").length && q.push("name" + L + "*[*^$|!~]?="), a.querySelectorAll(":enabled").length || q.push(":enabled", ":disabled"), a.querySelectorAll("*,:x"), q.push(",.*:")
+ })), (c.matchesSelector = $.test(s = o.matches || o.webkitMatchesSelector || o.mozMatchesSelector || o.oMatchesSelector || o.msMatchesSelector)) && jb(function (a) {
+ c.disconnectedMatch = s.call(a, "div"), s.call(a, "[s!='']:x"), r.push("!=", P)
+ }), q = q.length && new RegExp(q.join("|")), r = r.length && new RegExp(r.join("|")), b = $.test(o.compareDocumentPosition), t = b || $.test(o.contains) ? function (a, b) {
+ var c = 9 === a.nodeType ? a.documentElement : a, d = b && b.parentNode;
+ return a === d || !(!d || 1 !== d.nodeType || !(c.contains ? c.contains(d) : a.compareDocumentPosition && 16 & a.compareDocumentPosition(d)))
+ } : function (a, b) {
+ if (b)while (b = b.parentNode)if (b === a)return !0;
+ return !1
+ }, B = b ? function (a, b) {
+ if (a === b)return l = !0, 0;
+ var d = !a.compareDocumentPosition - !b.compareDocumentPosition;
+ return d ? d : (d = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : 1, 1 & d || !c.sortDetached && b.compareDocumentPosition(a) === d ? a === g || a.ownerDocument === v && t(v, a) ? -1 : b === g || b.ownerDocument === v && t(v, b) ? 1 : k ? J(k, a) - J(k, b) : 0 : 4 & d ? -1 : 1)
+ } : function (a, b) {
+ if (a === b)return l = !0, 0;
+ var c, d = 0, e = a.parentNode, f = b.parentNode, h = [a], i = [b];
+ if (!e || !f)return a === g ? -1 : b === g ? 1 : e ? -1 : f ? 1 : k ? J(k, a) - J(k, b) : 0;
+ if (e === f)return lb(a, b);
+ c = a;
+ while (c = c.parentNode)h.unshift(c);
+ c = b;
+ while (c = c.parentNode)i.unshift(c);
+ while (h[d] === i[d])d++;
+ return d ? lb(h[d], i[d]) : h[d] === v ? -1 : i[d] === v ? 1 : 0
+ }, g) : n
+ }, gb.matches = function (a, b) {
+ return gb(a, null, null, b)
+ }, gb.matchesSelector = function (a, b) {
+ if ((a.ownerDocument || a) !== n && m(a), b = b.replace(U, "='$1']"), !(!c.matchesSelector || !p || r && r.test(b) || q && q.test(b)))try {
+ var d = s.call(a, b);
+ if (d || c.disconnectedMatch || a.document && 11 !== a.document.nodeType)return d
+ } catch (e) {
+ }
+ return gb(b, n, null, [a]).length > 0
+ }, gb.contains = function (a, b) {
+ return (a.ownerDocument || a) !== n && m(a), t(a, b)
+ }, gb.attr = function (a, b) {
+ (a.ownerDocument || a) !== n && m(a);
+ var e = d.attrHandle[b.toLowerCase()], f = e && D.call(d.attrHandle, b.toLowerCase()) ? e(a, b, !p) : void 0;
+ return void 0 !== f ? f : c.attributes || !p ? a.getAttribute(b) : (f = a.getAttributeNode(b)) && f.specified ? f.value : null
+ }, gb.error = function (a) {
+ throw new Error("Syntax error, unrecognized expression: " + a)
+ }, gb.uniqueSort = function (a) {
+ var b, d = [], e = 0, f = 0;
+ if (l = !c.detectDuplicates, k = !c.sortStable && a.slice(0), a.sort(B), l) {
+ while (b = a[f++])b === a[f] && (e = d.push(f));
+ while (e--)a.splice(d[e], 1)
+ }
+ return k = null, a
+ }, e = gb.getText = function (a) {
+ var b, c = "", d = 0, f = a.nodeType;
+ if (f) {
+ if (1 === f || 9 === f || 11 === f) {
+ if ("string" == typeof a.textContent)return a.textContent;
+ for (a = a.firstChild; a; a = a.nextSibling)c += e(a)
+ } else if (3 === f || 4 === f)return a.nodeValue
+ } else while (b = a[d++])c += e(b);
+ return c
+ }, d = gb.selectors = {
+ cacheLength: 50,
+ createPseudo: ib,
+ match: X,
+ attrHandle: {},
+ find: {},
+ relative: {
+ ">": {dir: "parentNode", first: !0},
+ " ": {dir: "parentNode"},
+ "+": {dir: "previousSibling", first: !0},
+ "~": {dir: "previousSibling"}
+ },
+ preFilter: {
+ ATTR: function (a) {
+ return a[1] = a[1].replace(cb, db), a[3] = (a[3] || a[4] || a[5] || "").replace(cb, db), "~=" === a[2] && (a[3] = " " + a[3] + " "), a.slice(0, 4)
+ }, CHILD: function (a) {
+ return a[1] = a[1].toLowerCase(), "nth" === a[1].slice(0, 3) ? (a[3] || gb.error(a[0]), a[4] = +(a[4] ? a[5] + (a[6] || 1) : 2 * ("even" === a[3] || "odd" === a[3])), a[5] = +(a[7] + a[8] || "odd" === a[3])) : a[3] && gb.error(a[0]), a
+ }, PSEUDO: function (a) {
+ var b, c = !a[6] && a[2];
+ return X.CHILD.test(a[0]) ? null : (a[3] ? a[2] = a[4] || a[5] || "" : c && V.test(c) && (b = g(c, !0)) && (b = c.indexOf(")", c.length - b) - c.length) && (a[0] = a[0].slice(0, b), a[2] = c.slice(0, b)), a.slice(0, 3))
+ }
+ },
+ filter: {
+ TAG: function (a) {
+ var b = a.replace(cb, db).toLowerCase();
+ return "*" === a ? function () {
+ return !0
+ } : function (a) {
+ return a.nodeName && a.nodeName.toLowerCase() === b
+ }
+ }, CLASS: function (a) {
+ var b = y[a + " "];
+ return b || (b = new RegExp("(^|" + L + ")" + a + "(" + L + "|$)")) && y(a, function (a) {
+ return b.test("string" == typeof a.className && a.className || "undefined" != typeof a.getAttribute && a.getAttribute("class") || "")
+ })
+ }, ATTR: function (a, b, c) {
+ return function (d) {
+ var e = gb.attr(d, a);
+ return null == e ? "!=" === b : b ? (e += "", "=" === b ? e === c : "!=" === b ? e !== c : "^=" === b ? c && 0 === e.indexOf(c) : "*=" === b ? c && e.indexOf(c) > -1 : "$=" === b ? c && e.slice(-c.length) === c : "~=" === b ? (" " + e.replace(Q, " ") + " ").indexOf(c) > -1 : "|=" === b ? e === c || e.slice(0, c.length + 1) === c + "-" : !1) : !0
+ }
+ }, CHILD: function (a, b, c, d, e) {
+ var f = "nth" !== a.slice(0, 3), g = "last" !== a.slice(-4), h = "of-type" === b;
+ return 1 === d && 0 === e ? function (a) {
+ return !!a.parentNode
+ } : function (b, c, i) {
+ var j, k, l, m, n, o, p = f !== g ? "nextSibling" : "previousSibling", q = b.parentNode, r = h && b.nodeName.toLowerCase(), s = !i && !h;
+ if (q) {
+ if (f) {
+ while (p) {
+ l = b;
+ while (l = l[p])if (h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType)return !1;
+ o = p = "only" === a && !o && "nextSibling"
+ }
+ return !0
+ }
+ if (o = [g ? q.firstChild : q.lastChild], g && s) {
+ k = q[u] || (q[u] = {}), j = k[a] || [], n = j[0] === w && j[1], m = j[0] === w && j[2], l = n && q.childNodes[n];
+ while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if (1 === l.nodeType && ++m && l === b) {
+ k[a] = [w, n, m];
+ break
+ }
+ } else if (s && (j = (b[u] || (b[u] = {}))[a]) && j[0] === w)m = j[1]; else while (l = ++n && l && l[p] || (m = n = 0) || o.pop())if ((h ? l.nodeName.toLowerCase() === r : 1 === l.nodeType) && ++m && (s && ((l[u] || (l[u] = {}))[a] = [w, m]), l === b))break;
+ return m -= e, m === d || m % d === 0 && m / d >= 0
+ }
+ }
+ }, PSEUDO: function (a, b) {
+ var c, e = d.pseudos[a] || d.setFilters[a.toLowerCase()] || gb.error("unsupported pseudo: " + a);
+ return e[u] ? e(b) : e.length > 1 ? (c = [a, a, "", b], d.setFilters.hasOwnProperty(a.toLowerCase()) ? ib(function (a, c) {
+ var d, f = e(a, b), g = f.length;
+ while (g--)d = J(a, f[g]), a[d] = !(c[d] = f[g])
+ }) : function (a) {
+ return e(a, 0, c)
+ }) : e
+ }
+ },
+ pseudos: {
+ not: ib(function (a) {
+ var b = [], c = [], d = h(a.replace(R, "$1"));
+ return d[u] ? ib(function (a, b, c, e) {
+ var f, g = d(a, null, e, []), h = a.length;
+ while (h--)(f = g[h]) && (a[h] = !(b[h] = f))
+ }) : function (a, e, f) {
+ return b[0] = a, d(b, null, f, c), b[0] = null, !c.pop()
+ }
+ }), has: ib(function (a) {
+ return function (b) {
+ return gb(a, b).length > 0
+ }
+ }), contains: ib(function (a) {
+ return a = a.replace(cb, db), function (b) {
+ return (b.textContent || b.innerText || e(b)).indexOf(a) > -1
+ }
+ }), lang: ib(function (a) {
+ return W.test(a || "") || gb.error("unsupported lang: " + a), a = a.replace(cb, db).toLowerCase(), function (b) {
+ var c;
+ do if (c = p ? b.lang : b.getAttribute("xml:lang") || b.getAttribute("lang"))return c = c.toLowerCase(), c === a || 0 === c.indexOf(a + "-"); while ((b = b.parentNode) && 1 === b.nodeType);
+ return !1
+ }
+ }), target: function (b) {
+ var c = a.location && a.location.hash;
+ return c && c.slice(1) === b.id
+ }, root: function (a) {
+ return a === o
+ }, focus: function (a) {
+ return a === n.activeElement && (!n.hasFocus || n.hasFocus()) && !!(a.type || a.href || ~a.tabIndex)
+ }, enabled: function (a) {
+ return a.disabled === !1
+ }, disabled: function (a) {
+ return a.disabled === !0
+ }, checked: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && !!a.checked || "option" === b && !!a.selected
+ }, selected: function (a) {
+ return a.parentNode && a.parentNode.selectedIndex, a.selected === !0
+ }, empty: function (a) {
+ for (a = a.firstChild; a; a = a.nextSibling)if (a.nodeType < 6)return !1;
+ return !0
+ }, parent: function (a) {
+ return !d.pseudos.empty(a)
+ }, header: function (a) {
+ return Z.test(a.nodeName)
+ }, input: function (a) {
+ return Y.test(a.nodeName)
+ }, button: function (a) {
+ var b = a.nodeName.toLowerCase();
+ return "input" === b && "button" === a.type || "button" === b
+ }, text: function (a) {
+ var b;
+ return "input" === a.nodeName.toLowerCase() && "text" === a.type && (null == (b = a.getAttribute("type")) || "text" === b.toLowerCase())
+ }, first: ob(function () {
+ return [0]
+ }), last: ob(function (a, b) {
+ return [b - 1]
+ }), eq: ob(function (a, b, c) {
+ return [0 > c ? c + b : c]
+ }), even: ob(function (a, b) {
+ for (var c = 0; b > c; c += 2)a.push(c);
+ return a
+ }), odd: ob(function (a, b) {
+ for (var c = 1; b > c; c += 2)a.push(c);
+ return a
+ }), lt: ob(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; --d >= 0;)a.push(d);
+ return a
+ }), gt: ob(function (a, b, c) {
+ for (var d = 0 > c ? c + b : c; ++d < b;)a.push(d);
+ return a
+ })
+ }
+ }, d.pseudos.nth = d.pseudos.eq;
+ for (b in{radio: !0, checkbox: !0, file: !0, password: !0, image: !0})d.pseudos[b] = mb(b);
+ for (b in{submit: !0, reset: !0})d.pseudos[b] = nb(b);
+ function qb() {
+ }
+
+ qb.prototype = d.filters = d.pseudos, d.setFilters = new qb, g = gb.tokenize = function (a, b) {
+ var c, e, f, g, h, i, j, k = z[a + " "];
+ if (k)return b ? 0 : k.slice(0);
+ h = a, i = [], j = d.preFilter;
+ while (h) {
+ (!c || (e = S.exec(h))) && (e && (h = h.slice(e[0].length) || h), i.push(f = [])), c = !1, (e = T.exec(h)) && (c = e.shift(), f.push({
+ value: c,
+ type: e[0].replace(R, " ")
+ }), h = h.slice(c.length));
+ for (g in d.filter)!(e = X[g].exec(h)) || j[g] && !(e = j[g](e)) || (c = e.shift(), f.push({
+ value: c,
+ type: g,
+ matches: e
+ }), h = h.slice(c.length));
+ if (!c)break
+ }
+ return b ? h.length : h ? gb.error(a) : z(a, i).slice(0)
+ };
+ function rb(a) {
+ for (var b = 0, c = a.length, d = ""; c > b; b++)d += a[b].value;
+ return d
+ }
+
+ function sb(a, b, c) {
+ var d = b.dir, e = c && "parentNode" === d, f = x++;
+ return b.first ? function (b, c, f) {
+ while (b = b[d])if (1 === b.nodeType || e)return a(b, c, f)
+ } : function (b, c, g) {
+ var h, i, j = [w, f];
+ if (g) {
+ while (b = b[d])if ((1 === b.nodeType || e) && a(b, c, g))return !0
+ } else while (b = b[d])if (1 === b.nodeType || e) {
+ if (i = b[u] || (b[u] = {}), (h = i[d]) && h[0] === w && h[1] === f)return j[2] = h[2];
+ if (i[d] = j, j[2] = a(b, c, g))return !0
+ }
+ }
+ }
+
+ function tb(a) {
+ return a.length > 1 ? function (b, c, d) {
+ var e = a.length;
+ while (e--)if (!a[e](b, c, d))return !1;
+ return !0
+ } : a[0]
+ }
+
+ function ub(a, b, c) {
+ for (var d = 0, e = b.length; e > d; d++)gb(a, b[d], c);
+ return c
+ }
+
+ function vb(a, b, c, d, e) {
+ for (var f, g = [], h = 0, i = a.length, j = null != b; i > h; h++)(f = a[h]) && (!c || c(f, d, e)) && (g.push(f), j && b.push(h));
+ return g
+ }
+
+ function wb(a, b, c, d, e, f) {
+ return d && !d[u] && (d = wb(d)), e && !e[u] && (e = wb(e, f)), ib(function (f, g, h, i) {
+ var j, k, l, m = [], n = [], o = g.length, p = f || ub(b || "*", h.nodeType ? [h] : h, []), q = !a || !f && b ? p : vb(p, m, a, h, i), r = c ? e || (f ? a : o || d) ? [] : g : q;
+ if (c && c(q, r, h, i), d) {
+ j = vb(r, n), d(j, [], h, i), k = j.length;
+ while (k--)(l = j[k]) && (r[n[k]] = !(q[n[k]] = l))
+ }
+ if (f) {
+ if (e || a) {
+ if (e) {
+ j = [], k = r.length;
+ while (k--)(l = r[k]) && j.push(q[k] = l);
+ e(null, r = [], j, i)
+ }
+ k = r.length;
+ while (k--)(l = r[k]) && (j = e ? J(f, l) : m[k]) > -1 && (f[j] = !(g[j] = l))
+ }
+ } else r = vb(r === g ? r.splice(o, r.length) : r), e ? e(null, g, r, i) : H.apply(g, r)
+ })
+ }
+
+ function xb(a) {
+ for (var b, c, e, f = a.length, g = d.relative[a[0].type], h = g || d.relative[" "], i = g ? 1 : 0, k = sb(function (a) {
+ return a === b
+ }, h, !0), l = sb(function (a) {
+ return J(b, a) > -1
+ }, h, !0), m = [function (a, c, d) {
+ var e = !g && (d || c !== j) || ((b = c).nodeType ? k(a, c, d) : l(a, c, d));
+ return b = null, e
+ }]; f > i; i++)if (c = d.relative[a[i].type])m = [sb(tb(m), c)]; else {
+ if (c = d.filter[a[i].type].apply(null, a[i].matches), c[u]) {
+ for (e = ++i; f > e; e++)if (d.relative[a[e].type])break;
+ return wb(i > 1 && tb(m), i > 1 && rb(a.slice(0, i - 1).concat({value: " " === a[i - 2].type ? "*" : ""})).replace(R, "$1"), c, e > i && xb(a.slice(i, e)), f > e && xb(a = a.slice(e)), f > e && rb(a))
+ }
+ m.push(c)
+ }
+ return tb(m)
+ }
+
+ function yb(a, b) {
+ var c = b.length > 0, e = a.length > 0, f = function (f, g, h, i, k) {
+ var l, m, o, p = 0, q = "0", r = f && [], s = [], t = j, u = f || e && d.find.TAG("*", k), v = w += null == t ? 1 : Math.random() || .1, x = u.length;
+ for (k && (j = g !== n && g); q !== x && null != (l = u[q]); q++) {
+ if (e && l) {
+ m = 0;
+ while (o = a[m++])if (o(l, g, h)) {
+ i.push(l);
+ break
+ }
+ k && (w = v)
+ }
+ c && ((l = !o && l) && p--, f && r.push(l))
+ }
+ if (p += q, c && q !== p) {
+ m = 0;
+ while (o = b[m++])o(r, s, g, h);
+ if (f) {
+ if (p > 0)while (q--)r[q] || s[q] || (s[q] = F.call(i));
+ s = vb(s)
+ }
+ H.apply(i, s), k && !f && s.length > 0 && p + b.length > 1 && gb.uniqueSort(i)
+ }
+ return k && (w = v, j = t), r
+ };
+ return c ? ib(f) : f
+ }
+
+ return h = gb.compile = function (a, b) {
+ var c, d = [], e = [], f = A[a + " "];
+ if (!f) {
+ b || (b = g(a)), c = b.length;
+ while (c--)f = xb(b[c]), f[u] ? d.push(f) : e.push(f);
+ f = A(a, yb(e, d)), f.selector = a
+ }
+ return f
+ }, i = gb.select = function (a, b, e, f) {
+ var i, j, k, l, m, n = "function" == typeof a && a, o = !f && g(a = n.selector || a);
+ if (e = e || [], 1 === o.length) {
+ if (j = o[0] = o[0].slice(0), j.length > 2 && "ID" === (k = j[0]).type && c.getById && 9 === b.nodeType && p && d.relative[j[1].type]) {
+ if (b = (d.find.ID(k.matches[0].replace(cb, db), b) || [])[0], !b)return e;
+ n && (b = b.parentNode), a = a.slice(j.shift().value.length)
+ }
+ i = X.needsContext.test(a) ? 0 : j.length;
+ while (i--) {
+ if (k = j[i], d.relative[l = k.type])break;
+ if ((m = d.find[l]) && (f = m(k.matches[0].replace(cb, db), ab.test(j[0].type) && pb(b.parentNode) || b))) {
+ if (j.splice(i, 1), a = f.length && rb(j), !a)return H.apply(e, f), e;
+ break
+ }
+ }
+ }
+ return (n || h(a, o))(f, b, !p, e, ab.test(a) && pb(b.parentNode) || b), e
+ }, c.sortStable = u.split("").sort(B).join("") === u, c.detectDuplicates = !!l, m(), c.sortDetached = jb(function (a) {
+ return 1 & a.compareDocumentPosition(n.createElement("div"))
+ }), jb(function (a) {
+ return a.innerHTML = "<a href='#'></a>", "#" === a.firstChild.getAttribute("href")
+ }) || kb("type|href|height|width", function (a, b, c) {
+ return c ? void 0 : a.getAttribute(b, "type" === b.toLowerCase() ? 1 : 2)
+ }), c.attributes && jb(function (a) {
+ return a.innerHTML = "<input/>", a.firstChild.setAttribute("value", ""), "" === a.firstChild.getAttribute("value")
+ }) || kb("value", function (a, b, c) {
+ return c || "input" !== a.nodeName.toLowerCase() ? void 0 : a.defaultValue
+ }), jb(function (a) {
+ return null == a.getAttribute("disabled")
+ }) || kb(K, function (a, b, c) {
+ var d;
+ return c ? void 0 : a[b] === !0 ? b.toLowerCase() : (d = a.getAttributeNode(b)) && d.specified ? d.value : null
+ }), gb
+ }(a);
+ n.find = t, n.expr = t.selectors, n.expr[":"] = n.expr.pseudos, n.unique = t.uniqueSort, n.text = t.getText, n.isXMLDoc = t.isXML, n.contains = t.contains;
+ var u = n.expr.match.needsContext, v = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, w = /^.[^:#\[\.,]*$/;
+
+ function x(a, b, c) {
+ if (n.isFunction(b))return n.grep(a, function (a, d) {
+ return !!b.call(a, d, a) !== c
+ });
+ if (b.nodeType)return n.grep(a, function (a) {
+ return a === b !== c
+ });
+ if ("string" == typeof b) {
+ if (w.test(b))return n.filter(b, a, c);
+ b = n.filter(b, a)
+ }
+ return n.grep(a, function (a) {
+ return g.call(b, a) >= 0 !== c
+ })
+ }
+
+ n.filter = function (a, b, c) {
+ var d = b[0];
+ return c && (a = ":not(" + a + ")"), 1 === b.length && 1 === d.nodeType ? n.find.matchesSelector(d, a) ? [d] : [] : n.find.matches(a, n.grep(b, function (a) {
+ return 1 === a.nodeType
+ }))
+ }, n.fn.extend({
+ find: function (a) {
+ var b, c = this.length, d = [], e = this;
+ if ("string" != typeof a)return this.pushStack(n(a).filter(function () {
+ for (b = 0; c > b; b++)if (n.contains(e[b], this))return !0
+ }));
+ for (b = 0; c > b; b++)n.find(a, e[b], d);
+ return d = this.pushStack(c > 1 ? n.unique(d) : d), d.selector = this.selector ? this.selector + " " + a : a, d
+ }, filter: function (a) {
+ return this.pushStack(x(this, a || [], !1))
+ }, not: function (a) {
+ return this.pushStack(x(this, a || [], !0))
+ }, is: function (a) {
+ return !!x(this, "string" == typeof a && u.test(a) ? n(a) : a || [], !1).length
+ }
+ });
+ var y, z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, A = n.fn.init = function (a, b) {
+ var c, d;
+ if (!a)return this;
+ if ("string" == typeof a) {
+ if (c = "<" === a[0] && ">" === a[a.length - 1] && a.length >= 3 ? [null, a, null] : z.exec(a), !c || !c[1] && b)return !b || b.jquery ? (b || y).find(a) : this.constructor(b).find(a);
+ if (c[1]) {
+ if (b = b instanceof n ? b[0] : b, n.merge(this, n.parseHTML(c[1], b && b.nodeType ? b.ownerDocument || b : l, !0)), v.test(c[1]) && n.isPlainObject(b))for (c in b)n.isFunction(this[c]) ? this[c](b[c]) : this.attr(c, b[c]);
+ return this
+ }
+ return d = l.getElementById(c[2]), d && d.parentNode && (this.length = 1, this[0] = d), this.context = l, this.selector = a, this
+ }
+ return a.nodeType ? (this.context = this[0] = a, this.length = 1, this) : n.isFunction(a) ? "undefined" != typeof y.ready ? y.ready(a) : a(n) : (void 0 !== a.selector && (this.selector = a.selector, this.context = a.context), n.makeArray(a, this))
+ };
+ A.prototype = n.fn, y = n(l);
+ var B = /^(?:parents|prev(?:Until|All))/, C = {children: !0, contents: !0, next: !0, prev: !0};
+ n.extend({
+ dir: function (a, b, c) {
+ var d = [], e = void 0 !== c;
+ while ((a = a[b]) && 9 !== a.nodeType)if (1 === a.nodeType) {
+ if (e && n(a).is(c))break;
+ d.push(a)
+ }
+ return d
+ }, sibling: function (a, b) {
+ for (var c = []; a; a = a.nextSibling)1 === a.nodeType && a !== b && c.push(a);
+ return c
+ }
+ }), n.fn.extend({
+ has: function (a) {
+ var b = n(a, this), c = b.length;
+ return this.filter(function () {
+ for (var a = 0; c > a; a++)if (n.contains(this, b[a]))return !0
+ })
+ }, closest: function (a, b) {
+ for (var c, d = 0, e = this.length, f = [], g = u.test(a) || "string" != typeof a ? n(a, b || this.context) : 0; e > d; d++)for (c = this[d]; c && c !== b; c = c.parentNode)if (c.nodeType < 11 && (g ? g.index(c) > -1 : 1 === c.nodeType && n.find.matchesSelector(c, a))) {
+ f.push(c);
+ break
+ }
+ return this.pushStack(f.length > 1 ? n.unique(f) : f)
+ }, index: function (a) {
+ return a ? "string" == typeof a ? g.call(n(a), this[0]) : g.call(this, a.jquery ? a[0] : a) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1
+ }, add: function (a, b) {
+ return this.pushStack(n.unique(n.merge(this.get(), n(a, b))))
+ }, addBack: function (a) {
+ return this.add(null == a ? this.prevObject : this.prevObject.filter(a))
+ }
+ });
+ function D(a, b) {
+ while ((a = a[b]) && 1 !== a.nodeType);
+ return a
+ }
+
+ n.each({
+ parent: function (a) {
+ var b = a.parentNode;
+ return b && 11 !== b.nodeType ? b : null
+ }, parents: function (a) {
+ return n.dir(a, "parentNode")
+ }, parentsUntil: function (a, b, c) {
+ return n.dir(a, "parentNode", c)
+ }, next: function (a) {
+ return D(a, "nextSibling")
+ }, prev: function (a) {
+ return D(a, "previousSibling")
+ }, nextAll: function (a) {
+ return n.dir(a, "nextSibling")
+ }, prevAll: function (a) {
+ return n.dir(a, "previousSibling")
+ }, nextUntil: function (a, b, c) {
+ return n.dir(a, "nextSibling", c)
+ }, prevUntil: function (a, b, c) {
+ return n.dir(a, "previousSibling", c)
+ }, siblings: function (a) {
+ return n.sibling((a.parentNode || {}).firstChild, a)
+ }, children: function (a) {
+ return n.sibling(a.firstChild)
+ }, contents: function (a) {
+ return a.contentDocument || n.merge([], a.childNodes)
+ }
+ }, function (a, b) {
+ n.fn[a] = function (c, d) {
+ var e = n.map(this, b, c);
+ return "Until" !== a.slice(-5) && (d = c), d && "string" == typeof d && (e = n.filter(d, e)), this.length > 1 && (C[a] || n.unique(e), B.test(a) && e.reverse()), this.pushStack(e)
+ }
+ });
+ var E = /\S+/g, F = {};
+
+ function G(a) {
+ var b = F[a] = {};
+ return n.each(a.match(E) || [], function (a, c) {
+ b[c] = !0
+ }), b
+ }
+
+ n.Callbacks = function (a) {
+ a = "string" == typeof a ? F[a] || G(a) : n.extend({}, a);
+ var b, c, d, e, f, g, h = [], i = !a.once && [], j = function (l) {
+ for (b = a.memory && l, c = !0, g = e || 0, e = 0, f = h.length, d = !0; h && f > g; g++)if (h[g].apply(l[0], l[1]) === !1 && a.stopOnFalse) {
+ b = !1;
+ break
+ }
+ d = !1, h && (i ? i.length && j(i.shift()) : b ? h = [] : k.disable())
+ }, k = {
+ add: function () {
+ if (h) {
+ var c = h.length;
+ !function g(b) {
+ n.each(b, function (b, c) {
+ var d = n.type(c);
+ "function" === d ? a.unique && k.has(c) || h.push(c) : c && c.length && "string" !== d && g(c)
+ })
+ }(arguments), d ? f = h.length : b && (e = c, j(b))
+ }
+ return this
+ }, remove: function () {
+ return h && n.each(arguments, function (a, b) {
+ var c;
+ while ((c = n.inArray(b, h, c)) > -1)h.splice(c, 1), d && (f >= c && f--, g >= c && g--)
+ }), this
+ }, has: function (a) {
+ return a ? n.inArray(a, h) > -1 : !(!h || !h.length)
+ }, empty: function () {
+ return h = [], f = 0, this
+ }, disable: function () {
+ return h = i = b = void 0, this
+ }, disabled: function () {
+ return !h
+ }, lock: function () {
+ return i = void 0, b || k.disable(), this
+ }, locked: function () {
+ return !i
+ }, fireWith: function (a, b) {
+ return !h || c && !i || (b = b || [], b = [a, b.slice ? b.slice() : b], d ? i.push(b) : j(b)), this
+ }, fire: function () {
+ return k.fireWith(this, arguments), this
+ }, fired: function () {
+ return !!c
+ }
+ };
+ return k
+ }, n.extend({
+ Deferred: function (a) {
+ var b = [["resolve", "done", n.Callbacks("once memory"), "resolved"], ["reject", "fail", n.Callbacks("once memory"), "rejected"], ["notify", "progress", n.Callbacks("memory")]], c = "pending", d = {
+ state: function () {
+ return c
+ }, always: function () {
+ return e.done(arguments).fail(arguments), this
+ }, then: function () {
+ var a = arguments;
+ return n.Deferred(function (c) {
+ n.each(b, function (b, f) {
+ var g = n.isFunction(a[b]) && a[b];
+ e[f[1]](function () {
+ var a = g && g.apply(this, arguments);
+ a && n.isFunction(a.promise) ? a.promise().done(c.resolve).fail(c.reject).progress(c.notify) : c[f[0] + "With"](this === d ? c.promise() : this, g ? [a] : arguments)
+ })
+ }), a = null
+ }).promise()
+ }, promise: function (a) {
+ return null != a ? n.extend(a, d) : d
+ }
+ }, e = {};
+ return d.pipe = d.then, n.each(b, function (a, f) {
+ var g = f[2], h = f[3];
+ d[f[1]] = g.add, h && g.add(function () {
+ c = h
+ }, b[1 ^ a][2].disable, b[2][2].lock), e[f[0]] = function () {
+ return e[f[0] + "With"](this === e ? d : this, arguments), this
+ }, e[f[0] + "With"] = g.fireWith
+ }), d.promise(e), a && a.call(e, e), e
+ }, when: function (a) {
+ var b = 0, c = d.call(arguments), e = c.length, f = 1 !== e || a && n.isFunction(a.promise) ? e : 0, g = 1 === f ? a : n.Deferred(), h = function (a, b, c) {
+ return function (e) {
+ b[a] = this, c[a] = arguments.length > 1 ? d.call(arguments) : e, c === i ? g.notifyWith(b, c) : --f || g.resolveWith(b, c)
+ }
+ }, i, j, k;
+ if (e > 1)for (i = new Array(e), j = new Array(e), k = new Array(e); e > b; b++)c[b] && n.isFunction(c[b].promise) ? c[b].promise().done(h(b, k, c)).fail(g.reject).progress(h(b, j, i)) : --f;
+ return f || g.resolveWith(k, c), g.promise()
+ }
+ });
+ var H;
+ n.fn.ready = function (a) {
+ return n.ready.promise().done(a), this
+ }, n.extend({
+ isReady: !1, readyWait: 1, holdReady: function (a) {
+ a ? n.readyWait++ : n.ready(!0)
+ }, ready: function (a) {
+ (a === !0 ? --n.readyWait : n.isReady) || (n.isReady = !0, a !== !0 && --n.readyWait > 0 || (H.resolveWith(l, [n]), n.fn.triggerHandler && (n(l).triggerHandler("ready"), n(l).off("ready"))))
+ }
+ });
+ function I() {
+ l.removeEventListener("DOMContentLoaded", I, !1), a.removeEventListener("load", I, !1), n.ready()
+ }
+
+ n.ready.promise = function (b) {
+ return H || (H = n.Deferred(), "complete" === l.readyState ? setTimeout(n.ready) : (l.addEventListener("DOMContentLoaded", I, !1), a.addEventListener("load", I, !1))), H.promise(b)
+ }, n.ready.promise();
+ var J = n.access = function (a, b, c, d, e, f, g) {
+ var h = 0, i = a.length, j = null == c;
+ if ("object" === n.type(c)) {
+ e = !0;
+ for (h in c)n.access(a, b, h, c[h], !0, f, g)
+ } else if (void 0 !== d && (e = !0, n.isFunction(d) || (g = !0), j && (g ? (b.call(a, d), b = null) : (j = b, b = function (a, b, c) {
+ return j.call(n(a), c)
+ })), b))for (; i > h; h++)b(a[h], c, g ? d : d.call(a[h], h, b(a[h], c)));
+ return e ? a : j ? b.call(a) : i ? b(a[0], c) : f
+ };
+ n.acceptData = function (a) {
+ return 1 === a.nodeType || 9 === a.nodeType || !+a.nodeType
+ };
+ function K() {
+ Object.defineProperty(this.cache = {}, 0, {
+ get: function () {
+ return {}
+ }
+ }), this.expando = n.expando + K.uid++
+ }
+
+ K.uid = 1, K.accepts = n.acceptData, K.prototype = {
+ key: function (a) {
+ if (!K.accepts(a))return 0;
+ var b = {}, c = a[this.expando];
+ if (!c) {
+ c = K.uid++;
+ try {
+ b[this.expando] = {value: c}, Object.defineProperties(a, b)
+ } catch (d) {
+ b[this.expando] = c, n.extend(a, b)
+ }
+ }
+ return this.cache[c] || (this.cache[c] = {}), c
+ }, set: function (a, b, c) {
+ var d, e = this.key(a), f = this.cache[e];
+ if ("string" == typeof b)f[b] = c; else if (n.isEmptyObject(f))n.extend(this.cache[e], b); else for (d in b)f[d] = b[d];
+ return f
+ }, get: function (a, b) {
+ var c = this.cache[this.key(a)];
+ return void 0 === b ? c : c[b]
+ }, access: function (a, b, c) {
+ var d;
+ return void 0 === b || b && "string" == typeof b && void 0 === c ? (d = this.get(a, b), void 0 !== d ? d : this.get(a, n.camelCase(b))) : (this.set(a, b, c), void 0 !== c ? c : b)
+ }, remove: function (a, b) {
+ var c, d, e, f = this.key(a), g = this.cache[f];
+ if (void 0 === b)this.cache[f] = {}; else {
+ n.isArray(b) ? d = b.concat(b.map(n.camelCase)) : (e = n.camelCase(b), b in g ? d = [b, e] : (d = e, d = d in g ? [d] : d.match(E) || [])), c = d.length;
+ while (c--)delete g[d[c]]
+ }
+ }, hasData: function (a) {
+ return !n.isEmptyObject(this.cache[a[this.expando]] || {})
+ }, discard: function (a) {
+ a[this.expando] && delete this.cache[a[this.expando]]
+ }
+ };
+ var L = new K, M = new K, N = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, O = /([A-Z])/g;
+
+ function P(a, b, c) {
+ var d;
+ if (void 0 === c && 1 === a.nodeType)if (d = "data-" + b.replace(O, "-$1").toLowerCase(), c = a.getAttribute(d), "string" == typeof c) {
+ try {
+ c = "true" === c ? !0 : "false" === c ? !1 : "null" === c ? null : +c + "" === c ? +c : N.test(c) ? n.parseJSON(c) : c
+ } catch (e) {
+ }
+ M.set(a, b, c)
+ } else c = void 0;
+ return c
+ }
+
+ n.extend({
+ hasData: function (a) {
+ return M.hasData(a) || L.hasData(a)
+ }, data: function (a, b, c) {
+ return M.access(a, b, c)
+ }, removeData: function (a, b) {
+ M.remove(a, b)
+ }, _data: function (a, b, c) {
+ return L.access(a, b, c)
+ }, _removeData: function (a, b) {
+ L.remove(a, b)
+ }
+ }), n.fn.extend({
+ data: function (a, b) {
+ var c, d, e, f = this[0], g = f && f.attributes;
+ if (void 0 === a) {
+ if (this.length && (e = M.get(f), 1 === f.nodeType && !L.get(f, "hasDataAttrs"))) {
+ c = g.length;
+ while (c--)g[c] && (d = g[c].name, 0 === d.indexOf("data-") && (d = n.camelCase(d.slice(5)), P(f, d, e[d])));
+ L.set(f, "hasDataAttrs", !0)
+ }
+ return e
+ }
+ return "object" == typeof a ? this.each(function () {
+ M.set(this, a)
+ }) : J(this, function (b) {
+ var c, d = n.camelCase(a);
+ if (f && void 0 === b) {
+ if (c = M.get(f, a), void 0 !== c)return c;
+ if (c = M.get(f, d), void 0 !== c)return c;
+ if (c = P(f, d, void 0), void 0 !== c)return c
+ } else this.each(function () {
+ var c = M.get(this, d);
+ M.set(this, d, b), -1 !== a.indexOf("-") && void 0 !== c && M.set(this, a, b)
+ })
+ }, null, b, arguments.length > 1, null, !0)
+ }, removeData: function (a) {
+ return this.each(function () {
+ M.remove(this, a)
+ })
+ }
+ }), n.extend({
+ queue: function (a, b, c) {
+ var d;
+ return a ? (b = (b || "fx") + "queue", d = L.get(a, b), c && (!d || n.isArray(c) ? d = L.access(a, b, n.makeArray(c)) : d.push(c)), d || []) : void 0
+ }, dequeue: function (a, b) {
+ b = b || "fx";
+ var c = n.queue(a, b), d = c.length, e = c.shift(), f = n._queueHooks(a, b), g = function () {
+ n.dequeue(a, b)
+ };
+ "inprogress" === e && (e = c.shift(), d--), e && ("fx" === b && c.unshift("inprogress"), delete f.stop, e.call(a, g, f)), !d && f && f.empty.fire()
+ }, _queueHooks: function (a, b) {
+ var c = b + "queueHooks";
+ return L.get(a, c) || L.access(a, c, {
+ empty: n.Callbacks("once memory").add(function () {
+ L.remove(a, [b + "queue", c])
+ })
+ })
+ }
+ }), n.fn.extend({
+ queue: function (a, b) {
+ var c = 2;
+ return "string" != typeof a && (b = a, a = "fx", c--), arguments.length < c ? n.queue(this[0], a) : void 0 === b ? this : this.each(function () {
+ var c = n.queue(this, a, b);
+ n._queueHooks(this, a), "fx" === a && "inprogress" !== c[0] && n.dequeue(this, a)
+ })
+ }, dequeue: function (a) {
+ return this.each(function () {
+ n.dequeue(this, a)
+ })
+ }, clearQueue: function (a) {
+ return this.queue(a || "fx", [])
+ }, promise: function (a, b) {
+ var c, d = 1, e = n.Deferred(), f = this, g = this.length, h = function () {
+ --d || e.resolveWith(f, [f])
+ };
+ "string" != typeof a && (b = a, a = void 0), a = a || "fx";
+ while (g--)c = L.get(f[g], a + "queueHooks"), c && c.empty && (d++, c.empty.add(h));
+ return h(), e.promise(b)
+ }
+ });
+ var Q = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, R = ["Top", "Right", "Bottom", "Left"], S = function (a, b) {
+ return a = b || a, "none" === n.css(a, "display") || !n.contains(a.ownerDocument, a)
+ }, T = /^(?:checkbox|radio)$/i;
+ !function () {
+ var a = l.createDocumentFragment(), b = a.appendChild(l.createElement("div")), c = l.createElement("input");
+ c.setAttribute("type", "radio"), c.setAttribute("checked", "checked"), c.setAttribute("name", "t"), b.appendChild(c), k.checkClone = b.cloneNode(!0).cloneNode(!0).lastChild.checked, b.innerHTML = "<textarea>x</textarea>", k.noCloneChecked = !!b.cloneNode(!0).lastChild.defaultValue
+ }();
+ var U = "undefined";
+ k.focusinBubbles = "onfocusin"in a;
+ var V = /^key/, W = /^(?:mouse|pointer|contextmenu)|click/, X = /^(?:focusinfocus|focusoutblur)$/, Y = /^([^.]*)(?:\.(.+)|)$/;
+
+ function Z() {
+ return !0
+ }
+
+ function $() {
+ return !1
+ }
+
+ function _() {
+ try {
+ return l.activeElement
+ } catch (a) {
+ }
+ }
+
+ n.event = {
+ global: {},
+ add: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = L.get(a);
+ if (r) {
+ c.handler && (f = c, c = f.handler, e = f.selector), c.guid || (c.guid = n.guid++), (i = r.events) || (i = r.events = {}), (g = r.handle) || (g = r.handle = function (b) {
+ return typeof n !== U && n.event.triggered !== b.type ? n.event.dispatch.apply(a, arguments) : void 0
+ }), b = (b || "").match(E) || [""], j = b.length;
+ while (j--)h = Y.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o && (l = n.event.special[o] || {}, o = (e ? l.delegateType : l.bindType) || o, l = n.event.special[o] || {}, k = n.extend({
+ type: o,
+ origType: q,
+ data: d,
+ handler: c,
+ guid: c.guid,
+ selector: e,
+ needsContext: e && n.expr.match.needsContext.test(e),
+ namespace: p.join(".")
+ }, f), (m = i[o]) || (m = i[o] = [], m.delegateCount = 0, l.setup && l.setup.call(a, d, p, g) !== !1 || a.addEventListener && a.addEventListener(o, g, !1)), l.add && (l.add.call(a, k), k.handler.guid || (k.handler.guid = c.guid)), e ? m.splice(m.delegateCount++, 0, k) : m.push(k), n.event.global[o] = !0)
+ }
+ },
+ remove: function (a, b, c, d, e) {
+ var f, g, h, i, j, k, l, m, o, p, q, r = L.hasData(a) && L.get(a);
+ if (r && (i = r.events)) {
+ b = (b || "").match(E) || [""], j = b.length;
+ while (j--)if (h = Y.exec(b[j]) || [], o = q = h[1], p = (h[2] || "").split(".").sort(), o) {
+ l = n.event.special[o] || {}, o = (d ? l.delegateType : l.bindType) || o, m = i[o] || [], h = h[2] && new RegExp("(^|\\.)" + p.join("\\.(?:.*\\.|)") + "(\\.|$)"), g = f = m.length;
+ while (f--)k = m[f], !e && q !== k.origType || c && c.guid !== k.guid || h && !h.test(k.namespace) || d && d !== k.selector && ("**" !== d || !k.selector) || (m.splice(f, 1), k.selector && m.delegateCount--, l.remove && l.remove.call(a, k));
+ g && !m.length && (l.teardown && l.teardown.call(a, p, r.handle) !== !1 || n.removeEvent(a, o, r.handle), delete i[o])
+ } else for (o in i)n.event.remove(a, o + b[j], c, d, !0);
+ n.isEmptyObject(i) && (delete r.handle, L.remove(a, "events"))
+ }
+ },
+ trigger: function (b, c, d, e) {
+ var f, g, h, i, k, m, o, p = [d || l], q = j.call(b, "type") ? b.type : b, r = j.call(b, "namespace") ? b.namespace.split(".") : [];
+ if (g = h = d = d || l, 3 !== d.nodeType && 8 !== d.nodeType && !X.test(q + n.event.triggered) && (q.indexOf(".") >= 0 && (r = q.split("."), q = r.shift(), r.sort()), k = q.indexOf(":") < 0 && "on" + q, b = b[n.expando] ? b : new n.Event(q, "object" == typeof b && b), b.isTrigger = e ? 2 : 3, b.namespace = r.join("."), b.namespace_re = b.namespace ? new RegExp("(^|\\.)" + r.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, b.result = void 0, b.target || (b.target = d), c = null == c ? [b] : n.makeArray(c, [b]), o = n.event.special[q] || {}, e || !o.trigger || o.trigger.apply(d, c) !== !1)) {
+ if (!e && !o.noBubble && !n.isWindow(d)) {
+ for (i = o.delegateType || q, X.test(i + q) || (g = g.parentNode); g; g = g.parentNode)p.push(g), h = g;
+ h === (d.ownerDocument || l) && p.push(h.defaultView || h.parentWindow || a)
+ }
+ f = 0;
+ while ((g = p[f++]) && !b.isPropagationStopped())b.type = f > 1 ? i : o.bindType || q, m = (L.get(g, "events") || {})[b.type] && L.get(g, "handle"), m && m.apply(g, c), m = k && g[k], m && m.apply && n.acceptData(g) && (b.result = m.apply(g, c), b.result === !1 && b.preventDefault());
+ return b.type = q, e || b.isDefaultPrevented() || o._default && o._default.apply(p.pop(), c) !== !1 || !n.acceptData(d) || k && n.isFunction(d[q]) && !n.isWindow(d) && (h = d[k], h && (d[k] = null), n.event.triggered = q, d[q](), n.event.triggered = void 0, h && (d[k] = h)), b.result
+ }
+ },
+ dispatch: function (a) {
+ a = n.event.fix(a);
+ var b, c, e, f, g, h = [], i = d.call(arguments), j = (L.get(this, "events") || {})[a.type] || [], k = n.event.special[a.type] || {};
+ if (i[0] = a, a.delegateTarget = this, !k.preDispatch || k.preDispatch.call(this, a) !== !1) {
+ h = n.event.handlers.call(this, a, j), b = 0;
+ while ((f = h[b++]) && !a.isPropagationStopped()) {
+ a.currentTarget = f.elem, c = 0;
+ while ((g = f.handlers[c++]) && !a.isImmediatePropagationStopped())(!a.namespace_re || a.namespace_re.test(g.namespace)) && (a.handleObj = g, a.data = g.data, e = ((n.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, i), void 0 !== e && (a.result = e) === !1 && (a.preventDefault(), a.stopPropagation()))
+ }
+ return k.postDispatch && k.postDispatch.call(this, a), a.result
+ }
+ },
+ handlers: function (a, b) {
+ var c, d, e, f, g = [], h = b.delegateCount, i = a.target;
+ if (h && i.nodeType && (!a.button || "click" !== a.type))for (; i !== this; i = i.parentNode || this)if (i.disabled !== !0 || "click" !== a.type) {
+ for (d = [], c = 0; h > c; c++)f = b[c], e = f.selector + " ", void 0 === d[e] && (d[e] = f.needsContext ? n(e, this).index(i) >= 0 : n.find(e, this, null, [i]).length), d[e] && d.push(f);
+ d.length && g.push({elem: i, handlers: d})
+ }
+ return h < b.length && g.push({elem: this, handlers: b.slice(h)}), g
+ },
+ props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+ fixHooks: {},
+ keyHooks: {
+ props: "char charCode key keyCode".split(" "), filter: function (a, b) {
+ return null == a.which && (a.which = null != b.charCode ? b.charCode : b.keyCode), a
+ }
+ },
+ mouseHooks: {
+ props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+ filter: function (a, b) {
+ var c, d, e, f = b.button;
+ return null == a.pageX && null != b.clientX && (c = a.target.ownerDocument || l, d = c.documentElement, e = c.body, a.pageX = b.clientX + (d && d.scrollLeft || e && e.scrollLeft || 0) - (d && d.clientLeft || e && e.clientLeft || 0), a.pageY = b.clientY + (d && d.scrollTop || e && e.scrollTop || 0) - (d && d.clientTop || e && e.clientTop || 0)), a.which || void 0 === f || (a.which = 1 & f ? 1 : 2 & f ? 3 : 4 & f ? 2 : 0), a
+ }
+ },
+ fix: function (a) {
+ if (a[n.expando])return a;
+ var b, c, d, e = a.type, f = a, g = this.fixHooks[e];
+ g || (this.fixHooks[e] = g = W.test(e) ? this.mouseHooks : V.test(e) ? this.keyHooks : {}), d = g.props ? this.props.concat(g.props) : this.props, a = new n.Event(f), b = d.length;
+ while (b--)c = d[b], a[c] = f[c];
+ return a.target || (a.target = l), 3 === a.target.nodeType && (a.target = a.target.parentNode), g.filter ? g.filter(a, f) : a
+ },
+ special: {
+ load: {noBubble: !0}, focus: {
+ trigger: function () {
+ return this !== _() && this.focus ? (this.focus(), !1) : void 0
+ }, delegateType: "focusin"
+ }, blur: {
+ trigger: function () {
+ return this === _() && this.blur ? (this.blur(), !1) : void 0
+ }, delegateType: "focusout"
+ }, click: {
+ trigger: function () {
+ return "checkbox" === this.type && this.click && n.nodeName(this, "input") ? (this.click(), !1) : void 0
+ }, _default: function (a) {
+ return n.nodeName(a.target, "a")
+ }
+ }, beforeunload: {
+ postDispatch: function (a) {
+ void 0 !== a.result && a.originalEvent && (a.originalEvent.returnValue = a.result)
+ }
+ }
+ },
+ simulate: function (a, b, c, d) {
+ var e = n.extend(new n.Event, c, {type: a, isSimulated: !0, originalEvent: {}});
+ d ? n.event.trigger(e, null, b) : n.event.dispatch.call(b, e), e.isDefaultPrevented() && c.preventDefault()
+ }
+ }, n.removeEvent = function (a, b, c) {
+ a.removeEventListener && a.removeEventListener(b, c, !1)
+ }, n.Event = function (a, b) {
+ return this instanceof n.Event ? (a && a.type ? (this.originalEvent = a, this.type = a.type, this.isDefaultPrevented = a.defaultPrevented || void 0 === a.defaultPrevented && a.returnValue === !1 ? Z : $) : this.type = a, b && n.extend(this, b), this.timeStamp = a && a.timeStamp || n.now(), void(this[n.expando] = !0)) : new n.Event(a, b)
+ }, n.Event.prototype = {
+ isDefaultPrevented: $,
+ isPropagationStopped: $,
+ isImmediatePropagationStopped: $,
+ preventDefault: function () {
+ var a = this.originalEvent;
+ this.isDefaultPrevented = Z, a && a.preventDefault && a.preventDefault()
+ },
+ stopPropagation: function () {
+ var a = this.originalEvent;
+ this.isPropagationStopped = Z, a && a.stopPropagation && a.stopPropagation()
+ },
+ stopImmediatePropagation: function () {
+ var a = this.originalEvent;
+ this.isImmediatePropagationStopped = Z, a && a.stopImmediatePropagation && a.stopImmediatePropagation(), this.stopPropagation()
+ }
+ }, n.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout",
+ pointerenter: "pointerover",
+ pointerleave: "pointerout"
+ }, function (a, b) {
+ n.event.special[a] = {
+ delegateType: b, bindType: b, handle: function (a) {
+ var c, d = this, e = a.relatedTarget, f = a.handleObj;
+ return (!e || e !== d && !n.contains(d, e)) && (a.type = f.origType, c = f.handler.apply(this, arguments), a.type = b), c
+ }
+ }
+ }), k.focusinBubbles || n.each({focus: "focusin", blur: "focusout"}, function (a, b) {
+ var c = function (a) {
+ n.event.simulate(b, a.target, n.event.fix(a), !0)
+ };
+ n.event.special[b] = {
+ setup: function () {
+ var d = this.ownerDocument || this, e = L.access(d, b);
+ e || d.addEventListener(a, c, !0), L.access(d, b, (e || 0) + 1)
+ }, teardown: function () {
+ var d = this.ownerDocument || this, e = L.access(d, b) - 1;
+ e ? L.access(d, b, e) : (d.removeEventListener(a, c, !0), L.remove(d, b))
+ }
+ }
+ }), n.fn.extend({
+ on: function (a, b, c, d, e) {
+ var f, g;
+ if ("object" == typeof a) {
+ "string" != typeof b && (c = c || b, b = void 0);
+ for (g in a)this.on(g, b, c, a[g], e);
+ return this
+ }
+ if (null == c && null == d ? (d = b, c = b = void 0) : null == d && ("string" == typeof b ? (d = c, c = void 0) : (d = c, c = b, b = void 0)), d === !1)d = $; else if (!d)return this;
+ return 1 === e && (f = d, d = function (a) {
+ return n().off(a), f.apply(this, arguments)
+ }, d.guid = f.guid || (f.guid = n.guid++)), this.each(function () {
+ n.event.add(this, a, d, c, b)
+ })
+ }, one: function (a, b, c, d) {
+ return this.on(a, b, c, d, 1)
+ }, off: function (a, b, c) {
+ var d, e;
+ if (a && a.preventDefault && a.handleObj)return d = a.handleObj, n(a.delegateTarget).off(d.namespace ? d.origType + "." + d.namespace : d.origType, d.selector, d.handler), this;
+ if ("object" == typeof a) {
+ for (e in a)this.off(e, b, a[e]);
+ return this
+ }
+ return (b === !1 || "function" == typeof b) && (c = b, b = void 0), c === !1 && (c = $), this.each(function () {
+ n.event.remove(this, a, c, b)
+ })
+ }, trigger: function (a, b) {
+ return this.each(function () {
+ n.event.trigger(a, b, this)
+ })
+ }, triggerHandler: function (a, b) {
+ var c = this[0];
+ return c ? n.event.trigger(a, b, c, !0) : void 0
+ }
+ });
+ var ab = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, bb = /<([\w:]+)/, cb = /<|&#?\w+;/, db = /<(?:script|style|link)/i, eb = /checked\s*(?:[^=]|=\s*.checked.)/i, fb = /^$|\/(?:java|ecma)script/i, gb = /^true\/(.*)/, hb = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, ib = {
+ 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, "", ""]
+ };
+ ib.optgroup = ib.option, ib.tbody = ib.tfoot = ib.colgroup = ib.caption = ib.thead, ib.th = ib.td;
+ function jb(a, b) {
+ return n.nodeName(a, "table") && n.nodeName(11 !== b.nodeType ? b : b.firstChild, "tr") ? a.getElementsByTagName("tbody")[0] || a.appendChild(a.ownerDocument.createElement("tbody")) : a
+ }
+
+ function kb(a) {
+ return a.type = (null !== a.getAttribute("type")) + "/" + a.type, a
+ }
+
+ function lb(a) {
+ var b = gb.exec(a.type);
+ return b ? a.type = b[1] : a.removeAttribute("type"), a
+ }
+
+ function mb(a, b) {
+ for (var c = 0, d = a.length; d > c; c++)L.set(a[c], "globalEval", !b || L.get(b[c], "globalEval"))
+ }
+
+ function nb(a, b) {
+ var c, d, e, f, g, h, i, j;
+ if (1 === b.nodeType) {
+ if (L.hasData(a) && (f = L.access(a), g = L.set(b, f), j = f.events)) {
+ delete g.handle, g.events = {};
+ for (e in j)for (c = 0, d = j[e].length; d > c; c++)n.event.add(b, e, j[e][c])
+ }
+ M.hasData(a) && (h = M.access(a), i = n.extend({}, h), M.set(b, i))
+ }
+ }
+
+ function ob(a, b) {
+ var c = a.getElementsByTagName ? a.getElementsByTagName(b || "*") : a.querySelectorAll ? a.querySelectorAll(b || "*") : [];
+ return void 0 === b || b && n.nodeName(a, b) ? n.merge([a], c) : c
+ }
+
+ function pb(a, b) {
+ var c = b.nodeName.toLowerCase();
+ "input" === c && T.test(a.type) ? b.checked = a.checked : ("input" === c || "textarea" === c) && (b.defaultValue = a.defaultValue)
+ }
+
+ n.extend({
+ clone: function (a, b, c) {
+ var d, e, f, g, h = a.cloneNode(!0), i = n.contains(a.ownerDocument, a);
+ if (!(k.noCloneChecked || 1 !== a.nodeType && 11 !== a.nodeType || n.isXMLDoc(a)))for (g = ob(h), f = ob(a), d = 0, e = f.length; e > d; d++)pb(f[d], g[d]);
+ if (b)if (c)for (f = f || ob(a), g = g || ob(h), d = 0, e = f.length; e > d; d++)nb(f[d], g[d]); else nb(a, h);
+ return g = ob(h, "script"), g.length > 0 && mb(g, !i && ob(a, "script")), h
+ }, buildFragment: function (a, b, c, d) {
+ for (var e, f, g, h, i, j, k = b.createDocumentFragment(), l = [], m = 0, o = a.length; o > m; m++)if (e = a[m], e || 0 === e)if ("object" === n.type(e))n.merge(l, e.nodeType ? [e] : e); else if (cb.test(e)) {
+ f = f || k.appendChild(b.createElement("div")), g = (bb.exec(e) || ["", ""])[1].toLowerCase(), h = ib[g] || ib._default, f.innerHTML = h[1] + e.replace(ab, "<$1></$2>") + h[2], j = h[0];
+ while (j--)f = f.lastChild;
+ n.merge(l, f.childNodes), f = k.firstChild, f.textContent = ""
+ } else l.push(b.createTextNode(e));
+ k.textContent = "", m = 0;
+ while (e = l[m++])if ((!d || -1 === n.inArray(e, d)) && (i = n.contains(e.ownerDocument, e), f = ob(k.appendChild(e), "script"), i && mb(f), c)) {
+ j = 0;
+ while (e = f[j++])fb.test(e.type || "") && c.push(e)
+ }
+ return k
+ }, cleanData: function (a) {
+ for (var b, c, d, e, f = n.event.special, g = 0; void 0 !== (c = a[g]); g++) {
+ if (n.acceptData(c) && (e = c[L.expando], e && (b = L.cache[e]))) {
+ if (b.events)for (d in b.events)f[d] ? n.event.remove(c, d) : n.removeEvent(c, d, b.handle);
+ L.cache[e] && delete L.cache[e]
+ }
+ delete M.cache[c[M.expando]]
+ }
+ }
+ }), n.fn.extend({
+ text: function (a) {
+ return J(this, function (a) {
+ return void 0 === a ? n.text(this) : this.empty().each(function () {
+ (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && (this.textContent = a)
+ })
+ }, null, a, arguments.length)
+ }, append: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = jb(this, a);
+ b.appendChild(a)
+ }
+ })
+ }, prepend: function () {
+ return this.domManip(arguments, function (a) {
+ if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
+ var b = jb(this, a);
+ b.insertBefore(a, b.firstChild)
+ }
+ })
+ }, before: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this)
+ })
+ }, after: function () {
+ return this.domManip(arguments, function (a) {
+ this.parentNode && this.parentNode.insertBefore(a, this.nextSibling)
+ })
+ }, remove: function (a, b) {
+ for (var c, d = a ? n.filter(a, this) : this, e = 0; null != (c = d[e]); e++)b || 1 !== c.nodeType || n.cleanData(ob(c)), c.parentNode && (b && n.contains(c.ownerDocument, c) && mb(ob(c, "script")), c.parentNode.removeChild(c));
+ return this
+ }, empty: function () {
+ for (var a, b = 0; null != (a = this[b]); b++)1 === a.nodeType && (n.cleanData(ob(a, !1)), a.textContent = "");
+ return this
+ }, clone: function (a, b) {
+ return a = null == a ? !1 : a, b = null == b ? a : b, this.map(function () {
+ return n.clone(this, a, b)
+ })
+ }, html: function (a) {
+ return J(this, function (a) {
+ var b = this[0] || {}, c = 0, d = this.length;
+ if (void 0 === a && 1 === b.nodeType)return b.innerHTML;
+ if ("string" == typeof a && !db.test(a) && !ib[(bb.exec(a) || ["", ""])[1].toLowerCase()]) {
+ a = a.replace(ab, "<$1></$2>");
+ try {
+ for (; d > c; c++)b = this[c] || {}, 1 === b.nodeType && (n.cleanData(ob(b, !1)), b.innerHTML = a);
+ b = 0
+ } catch (e) {
+ }
+ }
+ b && this.empty().append(a)
+ }, null, a, arguments.length)
+ }, replaceWith: function () {
+ var a = arguments[0];
+ return this.domManip(arguments, function (b) {
+ a = this.parentNode, n.cleanData(ob(this)), a && a.replaceChild(b, this)
+ }), a && (a.length || a.nodeType) ? this : this.remove()
+ }, detach: function (a) {
+ return this.remove(a, !0)
+ }, domManip: function (a, b) {
+ a = e.apply([], a);
+ var c, d, f, g, h, i, j = 0, l = this.length, m = this, o = l - 1, p = a[0], q = n.isFunction(p);
+ if (q || l > 1 && "string" == typeof p && !k.checkClone && eb.test(p))return this.each(function (c) {
+ var d = m.eq(c);
+ q && (a[0] = p.call(this, c, d.html())), d.domManip(a, b)
+ });
+ if (l && (c = n.buildFragment(a, this[0].ownerDocument, !1, this), d = c.firstChild, 1 === c.childNodes.length && (c = d), d)) {
+ for (f = n.map(ob(c, "script"), kb), g = f.length; l > j; j++)h = c, j !== o && (h = n.clone(h, !0, !0), g && n.merge(f, ob(h, "script"))), b.call(this[j], h, j);
+ if (g)for (i = f[f.length - 1].ownerDocument, n.map(f, lb), j = 0; g > j; j++)h = f[j], fb.test(h.type || "") && !L.access(h, "globalEval") && n.contains(i, h) && (h.src ? n._evalUrl && n._evalUrl(h.src) : n.globalEval(h.textContent.replace(hb, "")))
+ }
+ return this
+ }
+ }), n.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+ }, function (a, b) {
+ n.fn[a] = function (a) {
+ for (var c, d = [], e = n(a), g = e.length - 1, h = 0; g >= h; h++)c = h === g ? this : this.clone(!0), n(e[h])[b](c), f.apply(d, c.get());
+ return this.pushStack(d)
+ }
+ });
+ var qb, rb = {};
+
+ function sb(b, c) {
+ var d, e = n(c.createElement(b)).appendTo(c.body), f = a.getDefaultComputedStyle && (d = a.getDefaultComputedStyle(e[0])) ? d.display : n.css(e[0], "display");
+ return e.detach(), f
+ }
+
+ function tb(a) {
+ var b = l, c = rb[a];
+ return c || (c = sb(a, b), "none" !== c && c || (qb = (qb || n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement), b = qb[0].contentDocument, b.write(), b.close(), c = sb(a, b), qb.detach()), rb[a] = c), c
+ }
+
+ var ub = /^margin/, vb = new RegExp("^(" + Q + ")(?!px)[a-z%]+$", "i"), wb = function (b) {
+ return b.ownerDocument.defaultView.opener ? b.ownerDocument.defaultView.getComputedStyle(b, null) : a.getComputedStyle(b, null)
+ };
+
+ function xb(a, b, c) {
+ var d, e, f, g, h = a.style;
+ return c = c || wb(a), c && (g = c.getPropertyValue(b) || c[b]), c && ("" !== g || n.contains(a.ownerDocument, a) || (g = n.style(a, b)), vb.test(g) && ub.test(b) && (d = h.width, e = h.minWidth, f = h.maxWidth, h.minWidth = h.maxWidth = h.width = g, g = c.width, h.width = d, h.minWidth = e, h.maxWidth = f)), void 0 !== g ? g + "" : g
+ }
+
+ function yb(a, b) {
+ return {
+ get: function () {
+ return a() ? void delete this.get : (this.get = b).apply(this, arguments)
+ }
+ }
+ }
+
+ !function () {
+ var b, c, d = l.documentElement, e = l.createElement("div"), f = l.createElement("div");
+ if (f.style) {
+ f.style.backgroundClip = "content-box", f.cloneNode(!0).style.backgroundClip = "", k.clearCloneStyle = "content-box" === f.style.backgroundClip, e.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute", e.appendChild(f);
+ function g() {
+ f.style.cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute", f.innerHTML = "", d.appendChild(e);
+ var g = a.getComputedStyle(f, null);
+ b = "1%" !== g.top, c = "4px" === g.width, d.removeChild(e)
+ }
+
+ a.getComputedStyle && n.extend(k, {
+ pixelPosition: function () {
+ return g(), b
+ }, boxSizingReliable: function () {
+ return null == c && g(), c
+ }, reliableMarginRight: function () {
+ var b, c = f.appendChild(l.createElement("div"));
+ return c.style.cssText = f.style.cssText = "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0", c.style.marginRight = c.style.width = "0", f.style.width = "1px", d.appendChild(e), b = !parseFloat(a.getComputedStyle(c, null).marginRight), d.removeChild(e), f.removeChild(c), b
+ }
+ })
+ }
+ }(), n.swap = function (a, b, c, d) {
+ var e, f, g = {};
+ for (f in b)g[f] = a.style[f], a.style[f] = b[f];
+ e = c.apply(a, d || []);
+ for (f in b)a.style[f] = g[f];
+ return e
+ };
+ var zb = /^(none|table(?!-c[ea]).+)/, Ab = new RegExp("^(" + Q + ")(.*)$", "i"), Bb = new RegExp("^([+-])=(" + Q + ")", "i"), Cb = {
+ position: "absolute",
+ visibility: "hidden",
+ display: "block"
+ }, Db = {letterSpacing: "0", fontWeight: "400"}, Eb = ["Webkit", "O", "Moz", "ms"];
+
+ function Fb(a, b) {
+ if (b in a)return b;
+ var c = b[0].toUpperCase() + b.slice(1), d = b, e = Eb.length;
+ while (e--)if (b = Eb[e] + c, b in a)return b;
+ return d
+ }
+
+ function Gb(a, b, c) {
+ var d = Ab.exec(b);
+ return d ? Math.max(0, d[1] - (c || 0)) + (d[2] || "px") : b
+ }
+
+ function Hb(a, b, c, d, e) {
+ for (var f = c === (d ? "border" : "content") ? 4 : "width" === b ? 1 : 0, g = 0; 4 > f; f += 2)"margin" === c && (g += n.css(a, c + R[f], !0, e)), d ? ("content" === c && (g -= n.css(a, "padding" + R[f], !0, e)), "margin" !== c && (g -= n.css(a, "border" + R[f] + "Width", !0, e))) : (g += n.css(a, "padding" + R[f], !0, e), "padding" !== c && (g += n.css(a, "border" + R[f] + "Width", !0, e)));
+ return g
+ }
+
+ function Ib(a, b, c) {
+ var d = !0, e = "width" === b ? a.offsetWidth : a.offsetHeight, f = wb(a), g = "border-box" === n.css(a, "boxSizing", !1, f);
+ if (0 >= e || null == e) {
+ if (e = xb(a, b, f), (0 > e || null == e) && (e = a.style[b]), vb.test(e))return e;
+ d = g && (k.boxSizingReliable() || e === a.style[b]), e = parseFloat(e) || 0
+ }
+ return e + Hb(a, b, c || (g ? "border" : "content"), d, f) + "px"
+ }
+
+ function Jb(a, b) {
+ for (var c, d, e, f = [], g = 0, h = a.length; h > g; g++)d = a[g], d.style && (f[g] = L.get(d, "olddisplay"), c = d.style.display, b ? (f[g] || "none" !== c || (d.style.display = ""), "" === d.style.display && S(d) && (f[g] = L.access(d, "olddisplay", tb(d.nodeName)))) : (e = S(d), "none" === c && e || L.set(d, "olddisplay", e ? c : n.css(d, "display"))));
+ for (g = 0; h > g; g++)d = a[g], d.style && (b && "none" !== d.style.display && "" !== d.style.display || (d.style.display = b ? f[g] || "" : "none"));
+ return a
+ }
+
+ n.extend({
+ cssHooks: {
+ opacity: {
+ get: function (a, b) {
+ if (b) {
+ var c = xb(a, "opacity");
+ return "" === c ? "1" : c
+ }
+ }
+ }
+ },
+ cssNumber: {
+ 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: {"float": "cssFloat"},
+ style: function (a, b, c, d) {
+ if (a && 3 !== a.nodeType && 8 !== a.nodeType && a.style) {
+ var e, f, g, h = n.camelCase(b), i = a.style;
+ return b = n.cssProps[h] || (n.cssProps[h] = Fb(i, h)), g = n.cssHooks[b] || n.cssHooks[h], void 0 === c ? g && "get"in g && void 0 !== (e = g.get(a, !1, d)) ? e : i[b] : (f = typeof c, "string" === f && (e = Bb.exec(c)) && (c = (e[1] + 1) * e[2] + parseFloat(n.css(a, b)), f = "number"), null != c && c === c && ("number" !== f || n.cssNumber[h] || (c += "px"), k.clearCloneStyle || "" !== c || 0 !== b.indexOf("background") || (i[b] = "inherit"), g && "set"in g && void 0 === (c = g.set(a, c, d)) || (i[b] = c)), void 0)
+ }
+ },
+ css: function (a, b, c, d) {
+ var e, f, g, h = n.camelCase(b);
+ return b = n.cssProps[h] || (n.cssProps[h] = Fb(a.style, h)), g = n.cssHooks[b] || n.cssHooks[h], g && "get"in g && (e = g.get(a, !0, c)), void 0 === e && (e = xb(a, b, d)), "normal" === e && b in Db && (e = Db[b]), "" === c || c ? (f = parseFloat(e), c === !0 || n.isNumeric(f) ? f || 0 : e) : e
+ }
+ }), n.each(["height", "width"], function (a, b) {
+ n.cssHooks[b] = {
+ get: function (a, c, d) {
+ return c ? zb.test(n.css(a, "display")) && 0 === a.offsetWidth ? n.swap(a, Cb, function () {
+ return Ib(a, b, d)
+ }) : Ib(a, b, d) : void 0
+ }, set: function (a, c, d) {
+ var e = d && wb(a);
+ return Gb(a, c, d ? Hb(a, b, d, "border-box" === n.css(a, "boxSizing", !1, e), e) : 0)
+ }
+ }
+ }), n.cssHooks.marginRight = yb(k.reliableMarginRight, function (a, b) {
+ return b ? n.swap(a, {display: "inline-block"}, xb, [a, "marginRight"]) : void 0
+ }), n.each({margin: "", padding: "", border: "Width"}, function (a, b) {
+ n.cssHooks[a + b] = {
+ expand: function (c) {
+ for (var d = 0, e = {}, f = "string" == typeof c ? c.split(" ") : [c]; 4 > d; d++)e[a + R[d] + b] = f[d] || f[d - 2] || f[0];
+ return e
+ }
+ }, ub.test(a) || (n.cssHooks[a + b].set = Gb)
+ }), n.fn.extend({
+ css: function (a, b) {
+ return J(this, function (a, b, c) {
+ var d, e, f = {}, g = 0;
+ if (n.isArray(b)) {
+ for (d = wb(a), e = b.length; e > g; g++)f[b[g]] = n.css(a, b[g], !1, d);
+ return f
+ }
+ return void 0 !== c ? n.style(a, b, c) : n.css(a, b)
+ }, a, b, arguments.length > 1)
+ }, show: function () {
+ return Jb(this, !0)
+ }, hide: function () {
+ return Jb(this)
+ }, toggle: function (a) {
+ return "boolean" == typeof a ? a ? this.show() : this.hide() : this.each(function () {
+ S(this) ? n(this).show() : n(this).hide()
+ })
+ }
+ });
+ function Kb(a, b, c, d, e) {
+ return new Kb.prototype.init(a, b, c, d, e)
+ }
+
+ n.Tween = Kb, Kb.prototype = {
+ constructor: Kb, init: function (a, b, c, d, e, f) {
+ this.elem = a, this.prop = c, this.easing = e || "swing", this.options = b, this.start = this.now = this.cur(), this.end = d, this.unit = f || (n.cssNumber[c] ? "" : "px")
+ }, cur: function () {
+ var a = Kb.propHooks[this.prop];
+ return a && a.get ? a.get(this) : Kb.propHooks._default.get(this)
+ }, run: function (a) {
+ var b, c = Kb.propHooks[this.prop];
+ return this.pos = b = this.options.duration ? n.easing[this.easing](a, this.options.duration * a, 0, 1, this.options.duration) : a, this.now = (this.end - this.start) * b + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), c && c.set ? c.set(this) : Kb.propHooks._default.set(this), this
+ }
+ }, Kb.prototype.init.prototype = Kb.prototype, Kb.propHooks = {
+ _default: {
+ get: function (a) {
+ var b;
+ return null == a.elem[a.prop] || a.elem.style && null != a.elem.style[a.prop] ? (b = n.css(a.elem, a.prop, ""), b && "auto" !== b ? b : 0) : a.elem[a.prop]
+ }, set: function (a) {
+ n.fx.step[a.prop] ? n.fx.step[a.prop](a) : a.elem.style && (null != a.elem.style[n.cssProps[a.prop]] || n.cssHooks[a.prop]) ? n.style(a.elem, a.prop, a.now + a.unit) : a.elem[a.prop] = a.now
+ }
+ }
+ }, Kb.propHooks.scrollTop = Kb.propHooks.scrollLeft = {
+ set: function (a) {
+ a.elem.nodeType && a.elem.parentNode && (a.elem[a.prop] = a.now)
+ }
+ }, n.easing = {
+ linear: function (a) {
+ return a
+ }, swing: function (a) {
+ return .5 - Math.cos(a * Math.PI) / 2
+ }
+ }, n.fx = Kb.prototype.init, n.fx.step = {};
+ var Lb, Mb, Nb = /^(?:toggle|show|hide)$/, Ob = new RegExp("^(?:([+-])=|)(" + Q + ")([a-z%]*)$", "i"), Pb = /queueHooks$/, Qb = [Vb], Rb = {
+ "*": [function (a, b) {
+ var c = this.createTween(a, b), d = c.cur(), e = Ob.exec(b), f = e && e[3] || (n.cssNumber[a] ? "" : "px"), g = (n.cssNumber[a] || "px" !== f && +d) && Ob.exec(n.css(c.elem, a)), h = 1, i = 20;
+ if (g && g[3] !== f) {
+ f = f || g[3], e = e || [], g = +d || 1;
+ do h = h || ".5", g /= h, n.style(c.elem, a, g + f); while (h !== (h = c.cur() / d) && 1 !== h && --i)
+ }
+ return e && (g = c.start = +g || +d || 0, c.unit = f, c.end = e[1] ? g + (e[1] + 1) * e[2] : +e[2]), c
+ }]
+ };
+
+ function Sb() {
+ return setTimeout(function () {
+ Lb = void 0
+ }), Lb = n.now()
+ }
+
+ function Tb(a, b) {
+ var c, d = 0, e = {height: a};
+ for (b = b ? 1 : 0; 4 > d; d += 2 - b)c = R[d], e["margin" + c] = e["padding" + c] = a;
+ return b && (e.opacity = e.width = a), e
+ }
+
+ function Ub(a, b, c) {
+ for (var d, e = (Rb[b] || []).concat(Rb["*"]), f = 0, g = e.length; g > f; f++)if (d = e[f].call(c, b, a))return d
+ }
+
+ function Vb(a, b, c) {
+ var d, e, f, g, h, i, j, k, l = this, m = {}, o = a.style, p = a.nodeType && S(a), q = L.get(a, "fxshow");
+ c.queue || (h = n._queueHooks(a, "fx"), null == h.unqueued && (h.unqueued = 0, i = h.empty.fire, h.empty.fire = function () {
+ h.unqueued || i()
+ }), h.unqueued++, l.always(function () {
+ l.always(function () {
+ h.unqueued--, n.queue(a, "fx").length || h.empty.fire()
+ })
+ })), 1 === a.nodeType && ("height"in b || "width"in b) && (c.overflow = [o.overflow, o.overflowX, o.overflowY], j = n.css(a, "display"), k = "none" === j ? L.get(a, "olddisplay") || tb(a.nodeName) : j, "inline" === k && "none" === n.css(a, "float") && (o.display = "inline-block")), c.overflow && (o.overflow = "hidden", l.always(function () {
+ o.overflow = c.overflow[0], o.overflowX = c.overflow[1], o.overflowY = c.overflow[2]
+ }));
+ for (d in b)if (e = b[d], Nb.exec(e)) {
+ if (delete b[d], f = f || "toggle" === e, e === (p ? "hide" : "show")) {
+ if ("show" !== e || !q || void 0 === q[d])continue;
+ p = !0
+ }
+ m[d] = q && q[d] || n.style(a, d)
+ } else j = void 0;
+ if (n.isEmptyObject(m))"inline" === ("none" === j ? tb(a.nodeName) : j) && (o.display = j); else {
+ q ? "hidden"in q && (p = q.hidden) : q = L.access(a, "fxshow", {}), f && (q.hidden = !p), p ? n(a).show() : l.done(function () {
+ n(a).hide()
+ }), l.done(function () {
+ var b;
+ L.remove(a, "fxshow");
+ for (b in m)n.style(a, b, m[b])
+ });
+ for (d in m)g = Ub(p ? q[d] : 0, d, l), d in q || (q[d] = g.start, p && (g.end = g.start, g.start = "width" === d || "height" === d ? 1 : 0))
+ }
+ }
+
+ function Wb(a, b) {
+ var c, d, e, f, g;
+ for (c in a)if (d = n.camelCase(c), e = b[d], f = a[c], n.isArray(f) && (e = f[1], f = a[c] = f[0]), c !== d && (a[d] = f, delete a[c]), g = n.cssHooks[d], g && "expand"in g) {
+ f = g.expand(f), delete a[d];
+ for (c in f)c in a || (a[c] = f[c], b[c] = e)
+ } else b[d] = e
+ }
+
+ function Xb(a, b, c) {
+ var d, e, f = 0, g = Qb.length, h = n.Deferred().always(function () {
+ delete i.elem
+ }), i = function () {
+ if (e)return !1;
+ for (var b = Lb || Sb(), c = Math.max(0, j.startTime + j.duration - b), d = c / j.duration || 0, f = 1 - d, g = 0, i = j.tweens.length; i > g; g++)j.tweens[g].run(f);
+ return h.notifyWith(a, [j, f, c]), 1 > f && i ? c : (h.resolveWith(a, [j]), !1)
+ }, j = h.promise({
+ elem: a,
+ props: n.extend({}, b),
+ opts: n.extend(!0, {specialEasing: {}}, c),
+ originalProperties: b,
+ originalOptions: c,
+ startTime: Lb || Sb(),
+ duration: c.duration,
+ tweens: [],
+ createTween: function (b, c) {
+ var d = n.Tween(a, j.opts, b, c, j.opts.specialEasing[b] || j.opts.easing);
+ return j.tweens.push(d), d
+ },
+ stop: function (b) {
+ var c = 0, d = b ? j.tweens.length : 0;
+ if (e)return this;
+ for (e = !0; d > c; c++)j.tweens[c].run(1);
+ return b ? h.resolveWith(a, [j, b]) : h.rejectWith(a, [j, b]), this
+ }
+ }), k = j.props;
+ for (Wb(k, j.opts.specialEasing); g > f; f++)if (d = Qb[f].call(j, a, k, j.opts))return d;
+ return n.map(k, Ub, j), n.isFunction(j.opts.start) && j.opts.start.call(a, j), n.fx.timer(n.extend(i, {
+ elem: a,
+ anim: j,
+ queue: j.opts.queue
+ })), j.progress(j.opts.progress).done(j.opts.done, j.opts.complete).fail(j.opts.fail).always(j.opts.always)
+ }
+
+ n.Animation = n.extend(Xb, {
+ tweener: function (a, b) {
+ n.isFunction(a) ? (b = a, a = ["*"]) : a = a.split(" ");
+ for (var c, d = 0, e = a.length; e > d; d++)c = a[d], Rb[c] = Rb[c] || [], Rb[c].unshift(b)
+ }, prefilter: function (a, b) {
+ b ? Qb.unshift(a) : Qb.push(a)
+ }
+ }), n.speed = function (a, b, c) {
+ var d = a && "object" == typeof a ? n.extend({}, a) : {
+ complete: c || !c && b || n.isFunction(a) && a,
+ duration: a,
+ easing: c && b || b && !n.isFunction(b) && b
+ };
+ return d.duration = n.fx.off ? 0 : "number" == typeof d.duration ? d.duration : d.duration in n.fx.speeds ? n.fx.speeds[d.duration] : n.fx.speeds._default, (null == d.queue || d.queue === !0) && (d.queue = "fx"), d.old = d.complete, d.complete = function () {
+ n.isFunction(d.old) && d.old.call(this), d.queue && n.dequeue(this, d.queue)
+ }, d
+ }, n.fn.extend({
+ fadeTo: function (a, b, c, d) {
+ return this.filter(S).css("opacity", 0).show().end().animate({opacity: b}, a, c, d)
+ }, animate: function (a, b, c, d) {
+ var e = n.isEmptyObject(a), f = n.speed(b, c, d), g = function () {
+ var b = Xb(this, n.extend({}, a), f);
+ (e || L.get(this, "finish")) && b.stop(!0)
+ };
+ return g.finish = g, e || f.queue === !1 ? this.each(g) : this.queue(f.queue, g)
+ }, stop: function (a, b, c) {
+ var d = function (a) {
+ var b = a.stop;
+ delete a.stop, b(c)
+ };
+ return "string" != typeof a && (c = b, b = a, a = void 0), b && a !== !1 && this.queue(a || "fx", []), this.each(function () {
+ var b = !0, e = null != a && a + "queueHooks", f = n.timers, g = L.get(this);
+ if (e)g[e] && g[e].stop && d(g[e]); else for (e in g)g[e] && g[e].stop && Pb.test(e) && d(g[e]);
+ for (e = f.length; e--;)f[e].elem !== this || null != a && f[e].queue !== a || (f[e].anim.stop(c), b = !1, f.splice(e, 1));
+ (b || !c) && n.dequeue(this, a)
+ })
+ }, finish: function (a) {
+ return a !== !1 && (a = a || "fx"), this.each(function () {
+ var b, c = L.get(this), d = c[a + "queue"], e = c[a + "queueHooks"], f = n.timers, g = d ? d.length : 0;
+ for (c.finish = !0, n.queue(this, a, []), e && e.stop && e.stop.call(this, !0), b = f.length; b--;)f[b].elem === this && f[b].queue === a && (f[b].anim.stop(!0), f.splice(b, 1));
+ for (b = 0; g > b; b++)d[b] && d[b].finish && d[b].finish.call(this);
+ delete c.finish
+ })
+ }
+ }), n.each(["toggle", "show", "hide"], function (a, b) {
+ var c = n.fn[b];
+ n.fn[b] = function (a, d, e) {
+ return null == a || "boolean" == typeof a ? c.apply(this, arguments) : this.animate(Tb(b, !0), a, d, e)
+ }
+ }), n.each({
+ slideDown: Tb("show"),
+ slideUp: Tb("hide"),
+ slideToggle: Tb("toggle"),
+ fadeIn: {opacity: "show"},
+ fadeOut: {opacity: "hide"},
+ fadeToggle: {opacity: "toggle"}
+ }, function (a, b) {
+ n.fn[a] = function (a, c, d) {
+ return this.animate(b, a, c, d)
+ }
+ }), n.timers = [], n.fx.tick = function () {
+ var a, b = 0, c = n.timers;
+ for (Lb = n.now(); b < c.length; b++)a = c[b], a() || c[b] !== a || c.splice(b--, 1);
+ c.length || n.fx.stop(), Lb = void 0
+ }, n.fx.timer = function (a) {
+ n.timers.push(a), a() ? n.fx.start() : n.timers.pop()
+ }, n.fx.interval = 13, n.fx.start = function () {
+ Mb || (Mb = setInterval(n.fx.tick, n.fx.interval))
+ }, n.fx.stop = function () {
+ clearInterval(Mb), Mb = null
+ }, n.fx.speeds = {slow: 600, fast: 200, _default: 400}, n.fn.delay = function (a, b) {
+ return a = n.fx ? n.fx.speeds[a] || a : a, b = b || "fx", this.queue(b, function (b, c) {
+ var d = setTimeout(b, a);
+ c.stop = function () {
+ clearTimeout(d)
+ }
+ })
+ }, function () {
+ var a = l.createElement("input"), b = l.createElement("select"), c = b.appendChild(l.createElement("option"));
+ a.type = "checkbox", k.checkOn = "" !== a.value, k.optSelected = c.selected, b.disabled = !0, k.optDisabled = !c.disabled, a = l.createElement("input"), a.value = "t", a.type = "radio", k.radioValue = "t" === a.value
+ }();
+ var Yb, Zb, $b = n.expr.attrHandle;
+ n.fn.extend({
+ attr: function (a, b) {
+ return J(this, n.attr, a, b, arguments.length > 1)
+ }, removeAttr: function (a) {
+ return this.each(function () {
+ n.removeAttr(this, a)
+ })
+ }
+ }), n.extend({
+ attr: function (a, b, c) {
+ var d, e, f = a.nodeType;
+ if (a && 3 !== f && 8 !== f && 2 !== f)return typeof a.getAttribute === U ? n.prop(a, b, c) : (1 === f && n.isXMLDoc(a) || (b = b.toLowerCase(), d = n.attrHooks[b] || (n.expr.match.bool.test(b) ? Zb : Yb)), void 0 === c ? d && "get"in d && null !== (e = d.get(a, b)) ? e : (e = n.find.attr(a, b), null == e ? void 0 : e) : null !== c ? d && "set"in d && void 0 !== (e = d.set(a, c, b)) ? e : (a.setAttribute(b, c + ""), c) : void n.removeAttr(a, b))
+ }, removeAttr: function (a, b) {
+ var c, d, e = 0, f = b && b.match(E);
+ if (f && 1 === a.nodeType)while (c = f[e++])d = n.propFix[c] || c, n.expr.match.bool.test(c) && (a[d] = !1), a.removeAttribute(c)
+ }, attrHooks: {
+ type: {
+ set: function (a, b) {
+ if (!k.radioValue && "radio" === b && n.nodeName(a, "input")) {
+ var c = a.value;
+ return a.setAttribute("type", b), c && (a.value = c), b
+ }
+ }
+ }
+ }
+ }), Zb = {
+ set: function (a, b, c) {
+ return b === !1 ? n.removeAttr(a, c) : a.setAttribute(c, c), c
+ }
+ }, n.each(n.expr.match.bool.source.match(/\w+/g), function (a, b) {
+ var c = $b[b] || n.find.attr;
+ $b[b] = function (a, b, d) {
+ var e, f;
+ return d || (f = $b[b], $b[b] = e, e = null != c(a, b, d) ? b.toLowerCase() : null, $b[b] = f), e
+ }
+ });
+ var _b = /^(?:input|select|textarea|button)$/i;
+ n.fn.extend({
+ prop: function (a, b) {
+ return J(this, n.prop, a, b, arguments.length > 1)
+ }, removeProp: function (a) {
+ return this.each(function () {
+ delete this[n.propFix[a] || a]
+ })
+ }
+ }), n.extend({
+ propFix: {"for": "htmlFor", "class": "className"}, prop: function (a, b, c) {
+ var d, e, f, g = a.nodeType;
+ if (a && 3 !== g && 8 !== g && 2 !== g)return f = 1 !== g || !n.isXMLDoc(a), f && (b = n.propFix[b] || b, e = n.propHooks[b]), void 0 !== c ? e && "set"in e && void 0 !== (d = e.set(a, c, b)) ? d : a[b] = c : e && "get"in e && null !== (d = e.get(a, b)) ? d : a[b]
+ }, propHooks: {
+ tabIndex: {
+ get: function (a) {
+ return a.hasAttribute("tabindex") || _b.test(a.nodeName) || a.href ? a.tabIndex : -1
+ }
+ }
+ }
+ }), k.optSelected || (n.propHooks.selected = {
+ get: function (a) {
+ var b = a.parentNode;
+ return b && b.parentNode && b.parentNode.selectedIndex, null
+ }
+ }), n.each(["tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable"], function () {
+ n.propFix[this.toLowerCase()] = this
+ });
+ var ac = /[\t\r\n\f]/g;
+ n.fn.extend({
+ addClass: function (a) {
+ var b, c, d, e, f, g, h = "string" == typeof a && a, i = 0, j = this.length;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).addClass(a.call(this, b, this.className))
+ });
+ if (h)for (b = (a || "").match(E) || []; j > i; i++)if (c = this[i], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(ac, " ") : " ")) {
+ f = 0;
+ while (e = b[f++])d.indexOf(" " + e + " ") < 0 && (d += e + " ");
+ g = n.trim(d), c.className !== g && (c.className = g)
+ }
+ return this
+ }, removeClass: function (a) {
+ var b, c, d, e, f, g, h = 0 === arguments.length || "string" == typeof a && a, i = 0, j = this.length;
+ if (n.isFunction(a))return this.each(function (b) {
+ n(this).removeClass(a.call(this, b, this.className))
+ });
+ if (h)for (b = (a || "").match(E) || []; j > i; i++)if (c = this[i], d = 1 === c.nodeType && (c.className ? (" " + c.className + " ").replace(ac, " ") : "")) {
+ f = 0;
+ while (e = b[f++])while (d.indexOf(" " + e + " ") >= 0)d = d.replace(" " + e + " ", " ");
+ g = a ? n.trim(d) : "", c.className !== g && (c.className = g)
+ }
+ return this
+ }, toggleClass: function (a, b) {
+ var c = typeof a;
+ return "boolean" == typeof b && "string" === c ? b ? this.addClass(a) : this.removeClass(a) : this.each(n.isFunction(a) ? function (c) {
+ n(this).toggleClass(a.call(this, c, this.className, b), b)
+ } : function () {
+ if ("string" === c) {
+ var b, d = 0, e = n(this), f = a.match(E) || [];
+ while (b = f[d++])e.hasClass(b) ? e.removeClass(b) : e.addClass(b)
+ } else(c === U || "boolean" === c) && (this.className && L.set(this, "__className__", this.className), this.className = this.className || a === !1 ? "" : L.get(this, "__className__") || "")
+ })
+ }, hasClass: function (a) {
+ for (var b = " " + a + " ", c = 0, d = this.length; d > c; c++)if (1 === this[c].nodeType && (" " + this[c].className + " ").replace(ac, " ").indexOf(b) >= 0)return !0;
+ return !1
+ }
+ });
+ var bc = /\r/g;
+ n.fn.extend({
+ val: function (a) {
+ var b, c, d, e = this[0];
+ {
+ if (arguments.length)return d = n.isFunction(a), this.each(function (c) {
+ var e;
+ 1 === this.nodeType && (e = d ? a.call(this, c, n(this).val()) : a, null == e ? e = "" : "number" == typeof e ? e += "" : n.isArray(e) && (e = n.map(e, function (a) {
+ return null == a ? "" : a + ""
+ })), b = n.valHooks[this.type] || n.valHooks[this.nodeName.toLowerCase()], b && "set"in b && void 0 !== b.set(this, e, "value") || (this.value = e))
+ });
+ if (e)return b = n.valHooks[e.type] || n.valHooks[e.nodeName.toLowerCase()], b && "get"in b && void 0 !== (c = b.get(e, "value")) ? c : (c = e.value, "string" == typeof c ? c.replace(bc, "") : null == c ? "" : c)
+ }
+ }
+ }), n.extend({
+ valHooks: {
+ option: {
+ get: function (a) {
+ var b = n.find.attr(a, "value");
+ return null != b ? b : n.trim(n.text(a))
+ }
+ }, select: {
+ get: function (a) {
+ for (var b, c, d = a.options, e = a.selectedIndex, f = "select-one" === a.type || 0 > e, g = f ? null : [], h = f ? e + 1 : d.length, i = 0 > e ? h : f ? e : 0; h > i; i++)if (c = d[i], !(!c.selected && i !== e || (k.optDisabled ? c.disabled : null !== c.getAttribute("disabled")) || c.parentNode.disabled && n.nodeName(c.parentNode, "optgroup"))) {
+ if (b = n(c).val(), f)return b;
+ g.push(b)
+ }
+ return g
+ }, set: function (a, b) {
+ var c, d, e = a.options, f = n.makeArray(b), g = e.length;
+ while (g--)d = e[g], (d.selected = n.inArray(d.value, f) >= 0) && (c = !0);
+ return c || (a.selectedIndex = -1), f
+ }
+ }
+ }
+ }), n.each(["radio", "checkbox"], function () {
+ n.valHooks[this] = {
+ set: function (a, b) {
+ return n.isArray(b) ? a.checked = n.inArray(n(a).val(), b) >= 0 : void 0
+ }
+ }, k.checkOn || (n.valHooks[this].get = function (a) {
+ return null === a.getAttribute("value") ? "on" : a.value
+ })
+ }), n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function (a, b) {
+ n.fn[b] = function (a, c) {
+ return arguments.length > 0 ? this.on(b, null, a, c) : this.trigger(b)
+ }
+ }), n.fn.extend({
+ hover: function (a, b) {
+ return this.mouseenter(a).mouseleave(b || a)
+ }, bind: function (a, b, c) {
+ return this.on(a, null, b, c)
+ }, unbind: function (a, b) {
+ return this.off(a, null, b)
+ }, delegate: function (a, b, c, d) {
+ return this.on(b, a, c, d)
+ }, undelegate: function (a, b, c) {
+ return 1 === arguments.length ? this.off(a, "**") : this.off(b, a || "**", c)
+ }
+ });
+ var cc = n.now(), dc = /\?/;
+ n.parseJSON = function (a) {
+ return JSON.parse(a + "")
+ }, n.parseXML = function (a) {
+ var b, c;
+ if (!a || "string" != typeof a)return null;
+ try {
+ c = new DOMParser, b = c.parseFromString(a, "text/xml")
+ } catch (d) {
+ b = void 0
+ }
+ return (!b || b.getElementsByTagName("parsererror").length) && n.error("Invalid XML: " + a), b
+ };
+ var ec = /#.*$/, fc = /([?&])_=[^&]*/, gc = /^(.*?):[ \t]*([^\r\n]*)$/gm, hc = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, ic = /^(?:GET|HEAD)$/, jc = /^\/\//, kc = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, lc = {}, mc = {}, nc = "*/".concat("*"), oc = a.location.href, pc = kc.exec(oc.toLowerCase()) || [];
+
+ function qc(a) {
+ return function (b, c) {
+ "string" != typeof b && (c = b, b = "*");
+ var d, e = 0, f = b.toLowerCase().match(E) || [];
+ if (n.isFunction(c))while (d = f[e++])"+" === d[0] ? (d = d.slice(1) || "*", (a[d] = a[d] || []).unshift(c)) : (a[d] = a[d] || []).push(c)
+ }
+ }
+
+ function rc(a, b, c, d) {
+ var e = {}, f = a === mc;
+
+ function g(h) {
+ var i;
+ return e[h] = !0, n.each(a[h] || [], function (a, h) {
+ var j = h(b, c, d);
+ return "string" != typeof j || f || e[j] ? f ? !(i = j) : void 0 : (b.dataTypes.unshift(j), g(j), !1)
+ }), i
+ }
+
+ return g(b.dataTypes[0]) || !e["*"] && g("*")
+ }
+
+ function sc(a, b) {
+ var c, d, e = n.ajaxSettings.flatOptions || {};
+ for (c in b)void 0 !== b[c] && ((e[c] ? a : d || (d = {}))[c] = b[c]);
+ return d && n.extend(!0, a, d), a
+ }
+
+ function tc(a, b, c) {
+ var d, e, f, g, h = a.contents, i = a.dataTypes;
+ while ("*" === i[0])i.shift(), void 0 === d && (d = a.mimeType || b.getResponseHeader("Content-Type"));
+ if (d)for (e in h)if (h[e] && h[e].test(d)) {
+ i.unshift(e);
+ break
+ }
+ if (i[0]in c)f = i[0]; else {
+ for (e in c) {
+ if (!i[0] || a.converters[e + " " + i[0]]) {
+ f = e;
+ break
+ }
+ g || (g = e)
+ }
+ f = f || g
+ }
+ return f ? (f !== i[0] && i.unshift(f), c[f]) : void 0
+ }
+
+ function uc(a, b, c, d) {
+ var e, f, g, h, i, j = {}, k = a.dataTypes.slice();
+ if (k[1])for (g in a.converters)j[g.toLowerCase()] = a.converters[g];
+ f = k.shift();
+ while (f)if (a.responseFields[f] && (c[a.responseFields[f]] = b), !i && d && a.dataFilter && (b = a.dataFilter(b, a.dataType)), i = f, f = k.shift())if ("*" === f)f = i; else if ("*" !== i && i !== f) {
+ if (g = j[i + " " + f] || j["* " + f], !g)for (e in j)if (h = e.split(" "), h[1] === f && (g = j[i + " " + h[0]] || j["* " + h[0]])) {
+ g === !0 ? g = j[e] : j[e] !== !0 && (f = h[0], k.unshift(h[1]));
+ break
+ }
+ if (g !== !0)if (g && a["throws"])b = g(b); else try {
+ b = g(b)
+ } catch (l) {
+ return {state: "parsererror", error: g ? l : "No conversion from " + i + " to " + f}
+ }
+ }
+ return {state: "success", data: b}
+ }
+
+ n.extend({
+ active: 0,
+ lastModified: {},
+ etag: {},
+ ajaxSettings: {
+ url: oc,
+ type: "GET",
+ isLocal: hc.test(pc[1]),
+ global: !0,
+ processData: !0,
+ async: !0,
+ contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+ accepts: {
+ "*": nc,
+ text: "text/plain",
+ html: "text/html",
+ xml: "application/xml, text/xml",
+ json: "application/json, text/javascript"
+ },
+ contents: {xml: /xml/, html: /html/, json: /json/},
+ responseFields: {xml: "responseXML", text: "responseText", json: "responseJSON"},
+ converters: {"* text": String, "text html": !0, "text json": n.parseJSON, "text xml": n.parseXML},
+ flatOptions: {url: !0, context: !0}
+ },
+ ajaxSetup: function (a, b) {
+ return b ? sc(sc(a, n.ajaxSettings), b) : sc(n.ajaxSettings, a)
+ },
+ ajaxPrefilter: qc(lc),
+ ajaxTransport: qc(mc),
+ ajax: function (a, b) {
+ "object" == typeof a && (b = a, a = void 0), b = b || {};
+ var c, d, e, f, g, h, i, j, k = n.ajaxSetup({}, b), l = k.context || k, m = k.context && (l.nodeType || l.jquery) ? n(l) : n.event, o = n.Deferred(), p = n.Callbacks("once memory"), q = k.statusCode || {}, r = {}, s = {}, t = 0, u = "canceled", v = {
+ readyState: 0,
+ getResponseHeader: function (a) {
+ var b;
+ if (2 === t) {
+ if (!f) {
+ f = {};
+ while (b = gc.exec(e))f[b[1].toLowerCase()] = b[2]
+ }
+ b = f[a.toLowerCase()]
+ }
+ return null == b ? null : b
+ },
+ getAllResponseHeaders: function () {
+ return 2 === t ? e : null
+ },
+ setRequestHeader: function (a, b) {
+ var c = a.toLowerCase();
+ return t || (a = s[c] = s[c] || a, r[a] = b), this
+ },
+ overrideMimeType: function (a) {
+ return t || (k.mimeType = a), this
+ },
+ statusCode: function (a) {
+ var b;
+ if (a)if (2 > t)for (b in a)q[b] = [q[b], a[b]]; else v.always(a[v.status]);
+ return this
+ },
+ abort: function (a) {
+ var b = a || u;
+ return c && c.abort(b), x(0, b), this
+ }
+ };
+ if (o.promise(v).complete = p.add, v.success = v.done, v.error = v.fail, k.url = ((a || k.url || oc) + "").replace(ec, "").replace(jc, pc[1] + "//"), k.type = b.method || b.type || k.method || k.type, k.dataTypes = n.trim(k.dataType || "*").toLowerCase().match(E) || [""], null == k.crossDomain && (h = kc.exec(k.url.toLowerCase()), k.crossDomain = !(!h || h[1] === pc[1] && h[2] === pc[2] && (h[3] || ("http:" === h[1] ? "80" : "443")) === (pc[3] || ("http:" === pc[1] ? "80" : "443")))), k.data && k.processData && "string" != typeof k.data && (k.data = n.param(k.data, k.traditional)), rc(lc, k, b, v), 2 === t)return v;
+ i = n.event && k.global, i && 0 === n.active++ && n.event.trigger("ajaxStart"), k.type = k.type.toUpperCase(), k.hasContent = !ic.test(k.type), d = k.url, k.hasContent || (k.data && (d = k.url += (dc.test(d) ? "&" : "?") + k.data, delete k.data), k.cache === !1 && (k.url = fc.test(d) ? d.replace(fc, "$1_=" + cc++) : d + (dc.test(d) ? "&" : "?") + "_=" + cc++)), k.ifModified && (n.lastModified[d] && v.setRequestHeader("If-Modified-Since", n.lastModified[d]), n.etag[d] && v.setRequestHeader("If-None-Match", n.etag[d])), (k.data && k.hasContent && k.contentType !== !1 || b.contentType) && v.setRequestHeader("Content-Type", k.contentType), v.setRequestHeader("Accept", k.dataTypes[0] && k.accepts[k.dataTypes[0]] ? k.accepts[k.dataTypes[0]] + ("*" !== k.dataTypes[0] ? ", " + nc + "; q=0.01" : "") : k.accepts["*"]);
+ for (j in k.headers)v.setRequestHeader(j, k.headers[j]);
+ if (k.beforeSend && (k.beforeSend.call(l, v, k) === !1 || 2 === t))return v.abort();
+ u = "abort";
+ for (j in{success: 1, error: 1, complete: 1})v[j](k[j]);
+ if (c = rc(mc, k, b, v)) {
+ v.readyState = 1, i && m.trigger("ajaxSend", [v, k]), k.async && k.timeout > 0 && (g = setTimeout(function () {
+ v.abort("timeout")
+ }, k.timeout));
+ try {
+ t = 1, c.send(r, x)
+ } catch (w) {
+ if (!(2 > t))throw w;
+ x(-1, w)
+ }
+ } else x(-1, "No Transport");
+ function x(a, b, f, h) {
+ var j, r, s, u, w, x = b;
+ 2 !== t && (t = 2, g && clearTimeout(g), c = void 0, e = h || "", v.readyState = a > 0 ? 4 : 0, j = a >= 200 && 300 > a || 304 === a, f && (u = tc(k, v, f)), u = uc(k, u, v, j), j ? (k.ifModified && (w = v.getResponseHeader("Last-Modified"), w && (n.lastModified[d] = w), w = v.getResponseHeader("etag"), w && (n.etag[d] = w)), 204 === a || "HEAD" === k.type ? x = "nocontent" : 304 === a ? x = "notmodified" : (x = u.state, r = u.data, s = u.error, j = !s)) : (s = x, (a || !x) && (x = "error", 0 > a && (a = 0))), v.status = a, v.statusText = (b || x) + "", j ? o.resolveWith(l, [r, x, v]) : o.rejectWith(l, [v, x, s]), v.statusCode(q), q = void 0, i && m.trigger(j ? "ajaxSuccess" : "ajaxError", [v, k, j ? r : s]), p.fireWith(l, [v, x]), i && (m.trigger("ajaxComplete", [v, k]), --n.active || n.event.trigger("ajaxStop")))
+ }
+
+ return v
+ },
+ getJSON: function (a, b, c) {
+ return n.get(a, b, c, "json")
+ },
+ getScript: function (a, b) {
+ return n.get(a, void 0, b, "script")
+ }
+ }), n.each(["get", "post"], function (a, b) {
+ n[b] = function (a, c, d, e) {
+ return n.isFunction(c) && (e = e || d, d = c, c = void 0), n.ajax({
+ url: a,
+ type: b,
+ dataType: e,
+ data: c,
+ success: d
+ })
+ }
+ }), n._evalUrl = function (a) {
+ return n.ajax({url: a, type: "GET", dataType: "script", async: !1, global: !1, "throws": !0})
+ }, n.fn.extend({
+ wrapAll: function (a) {
+ var b;
+ return n.isFunction(a) ? this.each(function (b) {
+ n(this).wrapAll(a.call(this, b))
+ }) : (this[0] && (b = n(a, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && b.insertBefore(this[0]), b.map(function () {
+ var a = this;
+ while (a.firstElementChild)a = a.firstElementChild;
+ return a
+ }).append(this)), this)
+ }, wrapInner: function (a) {
+ return this.each(n.isFunction(a) ? function (b) {
+ n(this).wrapInner(a.call(this, b))
+ } : function () {
+ var b = n(this), c = b.contents();
+ c.length ? c.wrapAll(a) : b.append(a)
+ })
+ }, wrap: function (a) {
+ var b = n.isFunction(a);
+ return this.each(function (c) {
+ n(this).wrapAll(b ? a.call(this, c) : a)
+ })
+ }, unwrap: function () {
+ return this.parent().each(function () {
+ n.nodeName(this, "body") || n(this).replaceWith(this.childNodes)
+ }).end()
+ }
+ }), n.expr.filters.hidden = function (a) {
+ return a.offsetWidth <= 0 && a.offsetHeight <= 0
+ }, n.expr.filters.visible = function (a) {
+ return !n.expr.filters.hidden(a)
+ };
+ var vc = /%20/g, wc = /\[\]$/, xc = /\r?\n/g, yc = /^(?:submit|button|image|reset|file)$/i, zc = /^(?:input|select|textarea|keygen)/i;
+
+ function Ac(a, b, c, d) {
+ var e;
+ if (n.isArray(b))n.each(b, function (b, e) {
+ c || wc.test(a) ? d(a, e) : Ac(a + "[" + ("object" == typeof e ? b : "") + "]", e, c, d)
+ }); else if (c || "object" !== n.type(b))d(a, b); else for (e in b)Ac(a + "[" + e + "]", b[e], c, d)
+ }
+
+ n.param = function (a, b) {
+ var c, d = [], e = function (a, b) {
+ b = n.isFunction(b) ? b() : null == b ? "" : b, d[d.length] = encodeURIComponent(a) + "=" + encodeURIComponent(b)
+ };
+ if (void 0 === b && (b = n.ajaxSettings && n.ajaxSettings.traditional), n.isArray(a) || a.jquery && !n.isPlainObject(a))n.each(a, function () {
+ e(this.name, this.value)
+ }); else for (c in a)Ac(c, a[c], b, e);
+ return d.join("&").replace(vc, "+")
+ }, n.fn.extend({
+ serialize: function () {
+ return n.param(this.serializeArray())
+ }, serializeArray: function () {
+ return this.map(function () {
+ var a = n.prop(this, "elements");
+ return a ? n.makeArray(a) : this
+ }).filter(function () {
+ var a = this.type;
+ return this.name && !n(this).is(":disabled") && zc.test(this.nodeName) && !yc.test(a) && (this.checked || !T.test(a))
+ }).map(function (a, b) {
+ var c = n(this).val();
+ return null == c ? null : n.isArray(c) ? n.map(c, function (a) {
+ return {name: b.name, value: a.replace(xc, "\r\n")}
+ }) : {name: b.name, value: c.replace(xc, "\r\n")}
+ }).get()
+ }
+ }), n.ajaxSettings.xhr = function () {
+ try {
+ return new XMLHttpRequest
+ } catch (a) {
+ }
+ };
+ var Bc = 0, Cc = {}, Dc = {0: 200, 1223: 204}, Ec = n.ajaxSettings.xhr();
+ a.attachEvent && a.attachEvent("onunload", function () {
+ for (var a in Cc)Cc[a]()
+ }), k.cors = !!Ec && "withCredentials"in Ec, k.ajax = Ec = !!Ec, n.ajaxTransport(function (a) {
+ var b;
+ return k.cors || Ec && !a.crossDomain ? {
+ send: function (c, d) {
+ var e, f = a.xhr(), g = ++Bc;
+ if (f.open(a.type, a.url, a.async, a.username, a.password), a.xhrFields)for (e in a.xhrFields)f[e] = a.xhrFields[e];
+ a.mimeType && f.overrideMimeType && f.overrideMimeType(a.mimeType), a.crossDomain || c["X-Requested-With"] || (c["X-Requested-With"] = "XMLHttpRequest");
+ for (e in c)f.setRequestHeader(e, c[e]);
+ b = function (a) {
+ return function () {
+ b && (delete Cc[g], b = f.onload = f.onerror = null, "abort" === a ? f.abort() : "error" === a ? d(f.status, f.statusText) : d(Dc[f.status] || f.status, f.statusText, "string" == typeof f.responseText ? {text: f.responseText} : void 0, f.getAllResponseHeaders()))
+ }
+ }, f.onload = b(), f.onerror = b("error"), b = Cc[g] = b("abort");
+ try {
+ f.send(a.hasContent && a.data || null)
+ } catch (h) {
+ if (b)throw h
+ }
+ }, abort: function () {
+ b && b()
+ }
+ } : void 0
+ }), n.ajaxSetup({
+ accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},
+ contents: {script: /(?:java|ecma)script/},
+ converters: {
+ "text script": function (a) {
+ return n.globalEval(a), a
+ }
+ }
+ }), n.ajaxPrefilter("script", function (a) {
+ void 0 === a.cache && (a.cache = !1), a.crossDomain && (a.type = "GET")
+ }), n.ajaxTransport("script", function (a) {
+ if (a.crossDomain) {
+ var b, c;
+ return {
+ send: function (d, e) {
+ b = n("<script>").prop({
+ async: !0,
+ charset: a.scriptCharset,
+ src: a.url
+ }).on("load error", c = function (a) {
+ b.remove(), c = null, a && e("error" === a.type ? 404 : 200, a.type)
+ }), l.head.appendChild(b[0])
+ }, abort: function () {
+ c && c()
+ }
+ }
+ }
+ });
+ var Fc = [], Gc = /(=)\?(?=&|$)|\?\?/;
+ n.ajaxSetup({
+ jsonp: "callback", jsonpCallback: function () {
+ var a = Fc.pop() || n.expando + "_" + cc++;
+ return this[a] = !0, a
+ }
+ }), n.ajaxPrefilter("json jsonp", function (b, c, d) {
+ var e, f, g, h = b.jsonp !== !1 && (Gc.test(b.url) ? "url" : "string" == typeof b.data && !(b.contentType || "").indexOf("application/x-www-form-urlencoded") && Gc.test(b.data) && "data");
+ return h || "jsonp" === b.dataTypes[0] ? (e = b.jsonpCallback = n.isFunction(b.jsonpCallback) ? b.jsonpCallback() : b.jsonpCallback, h ? b[h] = b[h].replace(Gc, "$1" + e) : b.jsonp !== !1 && (b.url += (dc.test(b.url) ? "&" : "?") + b.jsonp + "=" + e), b.converters["script json"] = function () {
+ return g || n.error(e + " was not called"), g[0]
+ }, b.dataTypes[0] = "json", f = a[e], a[e] = function () {
+ g = arguments
+ }, d.always(function () {
+ a[e] = f, b[e] && (b.jsonpCallback = c.jsonpCallback, Fc.push(e)), g && n.isFunction(f) && f(g[0]), g = f = void 0
+ }), "script") : void 0
+ }), n.parseHTML = function (a, b, c) {
+ if (!a || "string" != typeof a)return null;
+ "boolean" == typeof b && (c = b, b = !1), b = b || l;
+ var d = v.exec(a), e = !c && [];
+ return d ? [b.createElement(d[1])] : (d = n.buildFragment([a], b, e), e && e.length && n(e).remove(), n.merge([], d.childNodes))
+ };
+ var Hc = n.fn.load;
+ n.fn.load = function (a, b, c) {
+ if ("string" != typeof a && Hc)return Hc.apply(this, arguments);
+ var d, e, f, g = this, h = a.indexOf(" ");
+ return h >= 0 && (d = n.trim(a.slice(h)), a = a.slice(0, h)), n.isFunction(b) ? (c = b, b = void 0) : b && "object" == typeof b && (e = "POST"), g.length > 0 && n.ajax({
+ url: a,
+ type: e,
+ dataType: "html",
+ data: b
+ }).done(function (a) {
+ f = arguments, g.html(d ? n("<div>").append(n.parseHTML(a)).find(d) : a)
+ }).complete(c && function (a, b) {
+ g.each(c, f || [a.responseText, b, a])
+ }), this
+ }, n.each(["ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend"], function (a, b) {
+ n.fn[b] = function (a) {
+ return this.on(b, a)
+ }
+ }), n.expr.filters.animated = function (a) {
+ return n.grep(n.timers, function (b) {
+ return a === b.elem
+ }).length
+ };
+ var Ic = a.document.documentElement;
+
+ function Jc(a) {
+ return n.isWindow(a) ? a : 9 === a.nodeType && a.defaultView
+ }
+
+ n.offset = {
+ setOffset: function (a, b, c) {
+ var d, e, f, g, h, i, j, k = n.css(a, "position"), l = n(a), m = {};
+ "static" === k && (a.style.position = "relative"), h = l.offset(), f = n.css(a, "top"), i = n.css(a, "left"), j = ("absolute" === k || "fixed" === k) && (f + i).indexOf("auto") > -1, j ? (d = l.position(), g = d.top, e = d.left) : (g = parseFloat(f) || 0, e = parseFloat(i) || 0), n.isFunction(b) && (b = b.call(a, c, h)), null != b.top && (m.top = b.top - h.top + g), null != b.left && (m.left = b.left - h.left + e), "using"in b ? b.using.call(a, m) : l.css(m)
+ }
+ }, n.fn.extend({
+ offset: function (a) {
+ if (arguments.length)return void 0 === a ? this : this.each(function (b) {
+ n.offset.setOffset(this, a, b)
+ });
+ var b, c, d = this[0], e = {top: 0, left: 0}, f = d && d.ownerDocument;
+ if (f)return b = f.documentElement, n.contains(b, d) ? (typeof d.getBoundingClientRect !== U && (e = d.getBoundingClientRect()), c = Jc(f), {
+ top: e.top + c.pageYOffset - b.clientTop,
+ left: e.left + c.pageXOffset - b.clientLeft
+ }) : e
+ }, position: function () {
+ if (this[0]) {
+ var a, b, c = this[0], d = {top: 0, left: 0};
+ return "fixed" === n.css(c, "position") ? b = c.getBoundingClientRect() : (a = this.offsetParent(), b = this.offset(), n.nodeName(a[0], "html") || (d = a.offset()), d.top += n.css(a[0], "borderTopWidth", !0), d.left += n.css(a[0], "borderLeftWidth", !0)), {
+ top: b.top - d.top - n.css(c, "marginTop", !0),
+ left: b.left - d.left - n.css(c, "marginLeft", !0)
+ }
+ }
+ }, offsetParent: function () {
+ return this.map(function () {
+ var a = this.offsetParent || Ic;
+ while (a && !n.nodeName(a, "html") && "static" === n.css(a, "position"))a = a.offsetParent;
+ return a || Ic
+ })
+ }
+ }), n.each({scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function (b, c) {
+ var d = "pageYOffset" === c;
+ n.fn[b] = function (e) {
+ return J(this, function (b, e, f) {
+ var g = Jc(b);
+ return void 0 === f ? g ? g[c] : b[e] : void(g ? g.scrollTo(d ? a.pageXOffset : f, d ? f : a.pageYOffset) : b[e] = f)
+ }, b, e, arguments.length, null)
+ }
+ }), n.each(["top", "left"], function (a, b) {
+ n.cssHooks[b] = yb(k.pixelPosition, function (a, c) {
+ return c ? (c = xb(a, b), vb.test(c) ? n(a).position()[b] + "px" : c) : void 0
+ })
+ }), n.each({Height: "height", Width: "width"}, function (a, b) {
+ n.each({padding: "inner" + a, content: b, "": "outer" + a}, function (c, d) {
+ n.fn[d] = function (d, e) {
+ var f = arguments.length && (c || "boolean" != typeof d), g = c || (d === !0 || e === !0 ? "margin" : "border");
+ return J(this, function (b, c, d) {
+ var e;
+ return n.isWindow(b) ? b.document.documentElement["client" + a] : 9 === b.nodeType ? (e = b.documentElement, Math.max(b.body["scroll" + a], e["scroll" + a], b.body["offset" + a], e["offset" + a], e["client" + a])) : void 0 === d ? n.css(b, c, g) : n.style(b, c, d, g)
+ }, b, f ? d : void 0, f, null)
+ }
+ })
+ }), n.fn.size = function () {
+ return this.length
+ }, n.fn.andSelf = n.fn.addBack, "function" == typeof define && define.amd && define("jquery", [], function () {
+ return n
+ });
+ var Kc = a.jQuery, Lc = a.$;
+ return n.noConflict = function (b) {
+ return a.$ === n && (a.$ = Lc), b && a.jQuery === n && (a.jQuery = Kc), n
+ }, typeof b === U && (a.jQuery = a.$ = n), n
+});
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.map b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.map
new file mode 100644
index 00000000..0710e4b6
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-2.1.3.min.map
@@ -0,0 +1,1130 @@
+{
+ "version": 3,
+ "file": "jquery-2.1.3.min.js",
+ "sources": ["jquery-2.1.3.js"],
+ "names": [
+ "global",
+ "factory",
+ "module",
+ "exports",
+ "document",
+ "w",
+ "Error",
+ "window",
+ "this",
+ "noGlobal",
+ "arr",
+ "slice",
+ "concat",
+ "push",
+ "indexOf",
+ "class2type",
+ "toString",
+ "hasOwn",
+ "hasOwnProperty",
+ "support",
+ "version",
+ "jQuery",
+ "selector",
+ "context",
+ "fn",
+ "init",
+ "rtrim",
+ "rmsPrefix",
+ "rdashAlpha",
+ "fcamelCase",
+ "all",
+ "letter",
+ "toUpperCase",
+ "prototype",
+ "jquery",
+ "constructor",
+ "length",
+ "toArray",
+ "call",
+ "get",
+ "num",
+ "pushStack",
+ "elems",
+ "ret",
+ "merge",
+ "prevObject",
+ "each",
+ "callback",
+ "args",
+ "map",
+ "elem",
+ "i",
+ "apply",
+ "arguments",
+ "first",
+ "eq",
+ "last",
+ "len",
+ "j",
+ "end",
+ "sort",
+ "splice",
+ "extend",
+ "options",
+ "name",
+ "src",
+ "copy",
+ "copyIsArray",
+ "clone",
+ "target",
+ "deep",
+ "isFunction",
+ "isPlainObject",
+ "isArray",
+ "undefined",
+ "expando",
+ "Math",
+ "random",
+ "replace",
+ "isReady",
+ "error",
+ "msg",
+ "noop",
+ "obj",
+ "type",
+ "Array",
+ "isWindow",
+ "isNumeric",
+ "parseFloat",
+ "nodeType",
+ "isEmptyObject",
+ "globalEval",
+ "code",
+ "script",
+ "indirect",
+ "eval",
+ "trim",
+ "createElement",
+ "text",
+ "head",
+ "appendChild",
+ "parentNode",
+ "removeChild",
+ "camelCase",
+ "string",
+ "nodeName",
+ "toLowerCase",
+ "value",
+ "isArraylike",
+ "makeArray",
+ "results",
+ "Object",
+ "inArray",
+ "second",
+ "grep",
+ "invert",
+ "callbackInverse",
+ "matches",
+ "callbackExpect",
+ "arg",
+ "guid",
+ "proxy",
+ "tmp",
+ "now",
+ "Date",
+ "split",
+ "Sizzle",
+ "Expr",
+ "getText",
+ "isXML",
+ "tokenize",
+ "compile",
+ "select",
+ "outermostContext",
+ "sortInput",
+ "hasDuplicate",
+ "setDocument",
+ "docElem",
+ "documentIsHTML",
+ "rbuggyQSA",
+ "rbuggyMatches",
+ "contains",
+ "preferredDoc",
+ "dirruns",
+ "done",
+ "classCache",
+ "createCache",
+ "tokenCache",
+ "compilerCache",
+ "sortOrder",
+ "a",
+ "b",
+ "MAX_NEGATIVE",
+ "pop",
+ "push_native",
+ "list",
+ "booleans",
+ "whitespace",
+ "characterEncoding",
+ "identifier",
+ "attributes",
+ "pseudos",
+ "rwhitespace",
+ "RegExp",
+ "rcomma",
+ "rcombinators",
+ "rattributeQuotes",
+ "rpseudo",
+ "ridentifier",
+ "matchExpr",
+ "ID",
+ "CLASS",
+ "TAG",
+ "ATTR",
+ "PSEUDO",
+ "CHILD",
+ "bool",
+ "needsContext",
+ "rinputs",
+ "rheader",
+ "rnative",
+ "rquickExpr",
+ "rsibling",
+ "rescape",
+ "runescape",
+ "funescape",
+ "_",
+ "escaped",
+ "escapedWhitespace",
+ "high",
+ "String",
+ "fromCharCode",
+ "unloadHandler",
+ "childNodes",
+ "e",
+ "els",
+ "seed",
+ "match",
+ "m",
+ "groups",
+ "old",
+ "nid",
+ "newContext",
+ "newSelector",
+ "ownerDocument",
+ "exec",
+ "getElementById",
+ "id",
+ "getElementsByTagName",
+ "getElementsByClassName",
+ "qsa",
+ "test",
+ "getAttribute",
+ "setAttribute",
+ "toSelector",
+ "testContext",
+ "join",
+ "querySelectorAll",
+ "qsaError",
+ "removeAttribute",
+ "keys",
+ "cache",
+ "key",
+ "cacheLength",
+ "shift",
+ "markFunction",
+ "assert",
+ "div",
+ "addHandle",
+ "attrs",
+ "handler",
+ "attrHandle",
+ "siblingCheck",
+ "cur",
+ "diff",
+ "sourceIndex",
+ "nextSibling",
+ "createInputPseudo",
+ "createButtonPseudo",
+ "createPositionalPseudo",
+ "argument",
+ "matchIndexes",
+ "documentElement",
+ "node",
+ "hasCompare",
+ "parent",
+ "doc",
+ "defaultView",
+ "top",
+ "addEventListener",
+ "attachEvent",
+ "className",
+ "createComment",
+ "getById",
+ "getElementsByName",
+ "find",
+ "filter",
+ "attrId",
+ "getAttributeNode",
+ "tag",
+ "innerHTML",
+ "input",
+ "matchesSelector",
+ "webkitMatchesSelector",
+ "mozMatchesSelector",
+ "oMatchesSelector",
+ "msMatchesSelector",
+ "disconnectedMatch",
+ "compareDocumentPosition",
+ "adown",
+ "bup",
+ "compare",
+ "sortDetached",
+ "aup",
+ "ap",
+ "bp",
+ "unshift",
+ "expr",
+ "elements",
+ "attr",
+ "val",
+ "specified",
+ "uniqueSort",
+ "duplicates",
+ "detectDuplicates",
+ "sortStable",
+ "textContent",
+ "firstChild",
+ "nodeValue",
+ "selectors",
+ "createPseudo",
+ "relative",
+ ">",
+ "dir",
+ " ",
+ "+",
+ "~",
+ "preFilter",
+ "excess",
+ "unquoted",
+ "nodeNameSelector",
+ "pattern",
+ "operator",
+ "check",
+ "result",
+ "what",
+ "simple",
+ "forward",
+ "ofType",
+ "xml",
+ "outerCache",
+ "nodeIndex",
+ "start",
+ "useCache",
+ "lastChild",
+ "pseudo",
+ "setFilters",
+ "idx",
+ "matched",
+ "not",
+ "matcher",
+ "unmatched",
+ "has",
+ "innerText",
+ "lang",
+ "elemLang",
+ "hash",
+ "location",
+ "root",
+ "focus",
+ "activeElement",
+ "hasFocus",
+ "href",
+ "tabIndex",
+ "enabled",
+ "disabled",
+ "checked",
+ "selected",
+ "selectedIndex",
+ "empty",
+ "header",
+ "button",
+ "even",
+ "odd",
+ "lt",
+ "gt",
+ "radio",
+ "checkbox",
+ "file",
+ "password",
+ "image",
+ "submit",
+ "reset",
+ "filters",
+ "parseOnly",
+ "tokens",
+ "soFar",
+ "preFilters",
+ "cached",
+ "addCombinator",
+ "combinator",
+ "base",
+ "checkNonElements",
+ "doneName",
+ "oldCache",
+ "newCache",
+ "elementMatcher",
+ "matchers",
+ "multipleContexts",
+ "contexts",
+ "condense",
+ "newUnmatched",
+ "mapped",
+ "setMatcher",
+ "postFilter",
+ "postFinder",
+ "postSelector",
+ "temp",
+ "preMap",
+ "postMap",
+ "preexisting",
+ "matcherIn",
+ "matcherOut",
+ "matcherFromTokens",
+ "checkContext",
+ "leadingRelative",
+ "implicitRelative",
+ "matchContext",
+ "matchAnyContext",
+ "matcherFromGroupMatchers",
+ "elementMatchers",
+ "setMatchers",
+ "bySet",
+ "byElement",
+ "superMatcher",
+ "outermost",
+ "matchedCount",
+ "setMatched",
+ "contextBackup",
+ "dirrunsUnique",
+ "token",
+ "compiled",
+ "div1",
+ "defaultValue",
+ "unique",
+ "isXMLDoc",
+ "rneedsContext",
+ "rsingleTag",
+ "risSimple",
+ "winnow",
+ "qualifier",
+ "self",
+ "is",
+ "rootjQuery",
+ "parseHTML",
+ "ready",
+ "rparentsprev",
+ "guaranteedUnique",
+ "children",
+ "contents",
+ "next",
+ "prev",
+ "until",
+ "truncate",
+ "sibling",
+ "n",
+ "targets",
+ "l",
+ "closest",
+ "pos",
+ "index",
+ "prevAll",
+ "add",
+ "addBack",
+ "parents",
+ "parentsUntil",
+ "nextAll",
+ "nextUntil",
+ "prevUntil",
+ "siblings",
+ "contentDocument",
+ "reverse",
+ "rnotwhite",
+ "optionsCache",
+ "createOptions",
+ "object",
+ "flag",
+ "Callbacks",
+ "memory",
+ "fired",
+ "firing",
+ "firingStart",
+ "firingLength",
+ "firingIndex",
+ "stack",
+ "once",
+ "fire",
+ "data",
+ "stopOnFalse",
+ "disable",
+ "remove",
+ "lock",
+ "locked",
+ "fireWith",
+ "Deferred",
+ "func",
+ "tuples",
+ "state",
+ "promise",
+ "always",
+ "deferred",
+ "fail",
+ "then",
+ "fns",
+ "newDefer",
+ "tuple",
+ "returned",
+ "resolve",
+ "reject",
+ "progress",
+ "notify",
+ "pipe",
+ "stateString",
+ "when",
+ "subordinate",
+ "resolveValues",
+ "remaining",
+ "updateFunc",
+ "values",
+ "progressValues",
+ "notifyWith",
+ "resolveWith",
+ "progressContexts",
+ "resolveContexts",
+ "readyList",
+ "readyWait",
+ "holdReady",
+ "hold",
+ "wait",
+ "triggerHandler",
+ "off",
+ "completed",
+ "removeEventListener",
+ "readyState",
+ "setTimeout",
+ "access",
+ "chainable",
+ "emptyGet",
+ "raw",
+ "bulk",
+ "acceptData",
+ "owner",
+ "Data",
+ "defineProperty",
+ "uid",
+ "accepts",
+ "descriptor",
+ "unlock",
+ "defineProperties",
+ "set",
+ "prop",
+ "stored",
+ "camel",
+ "hasData",
+ "discard",
+ "data_priv",
+ "data_user",
+ "rbrace",
+ "rmultiDash",
+ "dataAttr",
+ "parseJSON",
+ "removeData",
+ "_data",
+ "_removeData",
+ "camelKey",
+ "queue",
+ "dequeue",
+ "startLength",
+ "hooks",
+ "_queueHooks",
+ "stop",
+ "setter",
+ "clearQueue",
+ "count",
+ "defer",
+ "pnum",
+ "source",
+ "cssExpand",
+ "isHidden",
+ "el",
+ "css",
+ "rcheckableType",
+ "fragment",
+ "createDocumentFragment",
+ "checkClone",
+ "cloneNode",
+ "noCloneChecked",
+ "strundefined",
+ "focusinBubbles",
+ "rkeyEvent",
+ "rmouseEvent",
+ "rfocusMorph",
+ "rtypenamespace",
+ "returnTrue",
+ "returnFalse",
+ "safeActiveElement",
+ "err",
+ "event",
+ "types",
+ "handleObjIn",
+ "eventHandle",
+ "events",
+ "t",
+ "handleObj",
+ "special",
+ "handlers",
+ "namespaces",
+ "origType",
+ "elemData",
+ "handle",
+ "triggered",
+ "dispatch",
+ "delegateType",
+ "bindType",
+ "namespace",
+ "delegateCount",
+ "setup",
+ "mappedTypes",
+ "origCount",
+ "teardown",
+ "removeEvent",
+ "trigger",
+ "onlyHandlers",
+ "bubbleType",
+ "ontype",
+ "eventPath",
+ "Event",
+ "isTrigger",
+ "namespace_re",
+ "noBubble",
+ "parentWindow",
+ "isPropagationStopped",
+ "preventDefault",
+ "isDefaultPrevented",
+ "_default",
+ "fix",
+ "handlerQueue",
+ "delegateTarget",
+ "preDispatch",
+ "currentTarget",
+ "isImmediatePropagationStopped",
+ "stopPropagation",
+ "postDispatch",
+ "sel",
+ "props",
+ "fixHooks",
+ "keyHooks",
+ "original",
+ "which",
+ "charCode",
+ "keyCode",
+ "mouseHooks",
+ "eventDoc",
+ "body",
+ "pageX",
+ "clientX",
+ "scrollLeft",
+ "clientLeft",
+ "pageY",
+ "clientY",
+ "scrollTop",
+ "clientTop",
+ "originalEvent",
+ "fixHook",
+ "load",
+ "blur",
+ "click",
+ "beforeunload",
+ "returnValue",
+ "simulate",
+ "bubble",
+ "isSimulated",
+ "defaultPrevented",
+ "timeStamp",
+ "stopImmediatePropagation",
+ "mouseenter",
+ "mouseleave",
+ "pointerenter",
+ "pointerleave",
+ "orig",
+ "related",
+ "relatedTarget",
+ "attaches",
+ "on",
+ "one",
+ "origFn",
+ "rxhtmlTag",
+ "rtagName",
+ "rhtml",
+ "rnoInnerhtml",
+ "rchecked",
+ "rscriptType",
+ "rscriptTypeMasked",
+ "rcleanScript",
+ "wrapMap",
+ "option",
+ "thead",
+ "col",
+ "tr",
+ "td",
+ "optgroup",
+ "tbody",
+ "tfoot",
+ "colgroup",
+ "caption",
+ "th",
+ "manipulationTarget",
+ "content",
+ "disableScript",
+ "restoreScript",
+ "setGlobalEval",
+ "refElements",
+ "cloneCopyEvent",
+ "dest",
+ "pdataOld",
+ "pdataCur",
+ "udataOld",
+ "udataCur",
+ "getAll",
+ "fixInput",
+ "dataAndEvents",
+ "deepDataAndEvents",
+ "srcElements",
+ "destElements",
+ "inPage",
+ "buildFragment",
+ "scripts",
+ "selection",
+ "wrap",
+ "nodes",
+ "createTextNode",
+ "cleanData",
+ "append",
+ "domManip",
+ "prepend",
+ "insertBefore",
+ "before",
+ "after",
+ "keepData",
+ "html",
+ "replaceWith",
+ "replaceChild",
+ "detach",
+ "hasScripts",
+ "iNoClone",
+ "_evalUrl",
+ "appendTo",
+ "prependTo",
+ "insertAfter",
+ "replaceAll",
+ "insert",
+ "iframe",
+ "elemdisplay",
+ "actualDisplay",
+ "style",
+ "display",
+ "getDefaultComputedStyle",
+ "defaultDisplay",
+ "write",
+ "close",
+ "rmargin",
+ "rnumnonpx",
+ "getStyles",
+ "opener",
+ "getComputedStyle",
+ "curCSS",
+ "computed",
+ "width",
+ "minWidth",
+ "maxWidth",
+ "getPropertyValue",
+ "addGetHookIf",
+ "conditionFn",
+ "hookFn",
+ "pixelPositionVal",
+ "boxSizingReliableVal",
+ "container",
+ "backgroundClip",
+ "clearCloneStyle",
+ "cssText",
+ "computePixelPositionAndBoxSizingReliable",
+ "divStyle",
+ "pixelPosition",
+ "boxSizingReliable",
+ "reliableMarginRight",
+ "marginDiv",
+ "marginRight",
+ "swap",
+ "rdisplayswap",
+ "rnumsplit",
+ "rrelNum",
+ "cssShow",
+ "position",
+ "visibility",
+ "cssNormalTransform",
+ "letterSpacing",
+ "fontWeight",
+ "cssPrefixes",
+ "vendorPropName",
+ "capName",
+ "origName",
+ "setPositiveNumber",
+ "subtract",
+ "max",
+ "augmentWidthOrHeight",
+ "extra",
+ "isBorderBox",
+ "styles",
+ "getWidthOrHeight",
+ "valueIsBorderBox",
+ "offsetWidth",
+ "offsetHeight",
+ "showHide",
+ "show",
+ "hidden",
+ "cssHooks",
+ "opacity",
+ "cssNumber",
+ "columnCount",
+ "fillOpacity",
+ "flexGrow",
+ "flexShrink",
+ "lineHeight",
+ "order",
+ "orphans",
+ "widows",
+ "zIndex",
+ "zoom",
+ "cssProps",
+ "float",
+ "margin",
+ "padding",
+ "border",
+ "prefix",
+ "suffix",
+ "expand",
+ "expanded",
+ "parts",
+ "hide",
+ "toggle",
+ "Tween",
+ "easing",
+ "unit",
+ "propHooks",
+ "run",
+ "percent",
+ "eased",
+ "duration",
+ "step",
+ "tween",
+ "fx",
+ "linear",
+ "p",
+ "swing",
+ "cos",
+ "PI",
+ "fxNow",
+ "timerId",
+ "rfxtypes",
+ "rfxnum",
+ "rrun",
+ "animationPrefilters",
+ "defaultPrefilter",
+ "tweeners",
+ "*",
+ "createTween",
+ "scale",
+ "maxIterations",
+ "createFxNow",
+ "genFx",
+ "includeWidth",
+ "height",
+ "animation",
+ "collection",
+ "opts",
+ "oldfire",
+ "checkDisplay",
+ "anim",
+ "dataShow",
+ "unqueued",
+ "overflow",
+ "overflowX",
+ "overflowY",
+ "propFilter",
+ "specialEasing",
+ "Animation",
+ "properties",
+ "stopped",
+ "tick",
+ "currentTime",
+ "startTime",
+ "tweens",
+ "originalProperties",
+ "originalOptions",
+ "gotoEnd",
+ "rejectWith",
+ "timer",
+ "complete",
+ "tweener",
+ "prefilter",
+ "speed",
+ "opt",
+ "speeds",
+ "fadeTo",
+ "to",
+ "animate",
+ "optall",
+ "doAnimation",
+ "finish",
+ "stopQueue",
+ "timers",
+ "cssFn",
+ "slideDown",
+ "slideUp",
+ "slideToggle",
+ "fadeIn",
+ "fadeOut",
+ "fadeToggle",
+ "interval",
+ "setInterval",
+ "clearInterval",
+ "slow",
+ "fast",
+ "delay",
+ "time",
+ "timeout",
+ "clearTimeout",
+ "checkOn",
+ "optSelected",
+ "optDisabled",
+ "radioValue",
+ "nodeHook",
+ "boolHook",
+ "removeAttr",
+ "nType",
+ "attrHooks",
+ "propName",
+ "attrNames",
+ "propFix",
+ "getter",
+ "rfocusable",
+ "removeProp",
+ "for",
+ "class",
+ "notxml",
+ "hasAttribute",
+ "rclass",
+ "addClass",
+ "classes",
+ "clazz",
+ "finalValue",
+ "proceed",
+ "removeClass",
+ "toggleClass",
+ "stateVal",
+ "classNames",
+ "hasClass",
+ "rreturn",
+ "valHooks",
+ "optionSet",
+ "hover",
+ "fnOver",
+ "fnOut",
+ "bind",
+ "unbind",
+ "delegate",
+ "undelegate",
+ "nonce",
+ "rquery",
+ "JSON",
+ "parse",
+ "parseXML",
+ "DOMParser",
+ "parseFromString",
+ "rhash",
+ "rts",
+ "rheaders",
+ "rlocalProtocol",
+ "rnoContent",
+ "rprotocol",
+ "rurl",
+ "prefilters",
+ "transports",
+ "allTypes",
+ "ajaxLocation",
+ "ajaxLocParts",
+ "addToPrefiltersOrTransports",
+ "structure",
+ "dataTypeExpression",
+ "dataType",
+ "dataTypes",
+ "inspectPrefiltersOrTransports",
+ "jqXHR",
+ "inspected",
+ "seekingTransport",
+ "inspect",
+ "prefilterOrFactory",
+ "dataTypeOrTransport",
+ "ajaxExtend",
+ "flatOptions",
+ "ajaxSettings",
+ "ajaxHandleResponses",
+ "s",
+ "responses",
+ "ct",
+ "finalDataType",
+ "firstDataType",
+ "mimeType",
+ "getResponseHeader",
+ "converters",
+ "ajaxConvert",
+ "response",
+ "isSuccess",
+ "conv2",
+ "current",
+ "conv",
+ "responseFields",
+ "dataFilter",
+ "active",
+ "lastModified",
+ "etag",
+ "url",
+ "isLocal",
+ "processData",
+ "async",
+ "contentType",
+ "json",
+ "* text",
+ "text html",
+ "text json",
+ "text xml",
+ "ajaxSetup",
+ "settings",
+ "ajaxPrefilter",
+ "ajaxTransport",
+ "ajax",
+ "transport",
+ "cacheURL",
+ "responseHeadersString",
+ "responseHeaders",
+ "timeoutTimer",
+ "fireGlobals",
+ "callbackContext",
+ "globalEventContext",
+ "completeDeferred",
+ "statusCode",
+ "requestHeaders",
+ "requestHeadersNames",
+ "strAbort",
+ "getAllResponseHeaders",
+ "setRequestHeader",
+ "lname",
+ "overrideMimeType",
+ "status",
+ "abort",
+ "statusText",
+ "finalText",
+ "success",
+ "method",
+ "crossDomain",
+ "param",
+ "traditional",
+ "hasContent",
+ "ifModified",
+ "headers",
+ "beforeSend",
+ "send",
+ "nativeStatusText",
+ "modified",
+ "getJSON",
+ "getScript",
+ "throws",
+ "wrapAll",
+ "firstElementChild",
+ "wrapInner",
+ "unwrap",
+ "visible",
+ "r20",
+ "rbracket",
+ "rCRLF",
+ "rsubmitterTypes",
+ "rsubmittable",
+ "buildParams",
+ "v",
+ "encodeURIComponent",
+ "serialize",
+ "serializeArray",
+ "xhr",
+ "XMLHttpRequest",
+ "xhrId",
+ "xhrCallbacks",
+ "xhrSuccessStatus",
+ 1223,
+ "xhrSupported",
+ "cors",
+ "open",
+ "username",
+ "xhrFields",
+ "onload",
+ "onerror",
+ "responseText",
+ "text script",
+ "charset",
+ "scriptCharset",
+ "evt",
+ "oldCallbacks",
+ "rjsonp",
+ "jsonp",
+ "jsonpCallback",
+ "originalSettings",
+ "callbackName",
+ "overwritten",
+ "responseContainer",
+ "jsonProp",
+ "keepScripts",
+ "parsed",
+ "_load",
+ "params",
+ "animated",
+ "getWindow",
+ "offset",
+ "setOffset",
+ "curPosition",
+ "curLeft",
+ "curCSSTop",
+ "curTop",
+ "curOffset",
+ "curCSSLeft",
+ "calculatePosition",
+ "curElem",
+ "left",
+ "using",
+ "win",
+ "box",
+ "getBoundingClientRect",
+ "pageYOffset",
+ "pageXOffset",
+ "offsetParent",
+ "parentOffset",
+ "scrollTo",
+ "Height",
+ "Width",
+ "defaultExtra",
+ "funcName",
+ "size",
+ "andSelf",
+ "define",
+ "amd",
+ "_jQuery",
+ "_$",
+ "$",
+ "noConflict"
+ ],
+ "mappings": "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"
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.js
new file mode 100644
index 00000000..d1f3a3f3
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.js
@@ -0,0 +1,526 @@
+/*!
+ * jQuery Migrate - v1.2.1 - 2013-05-08
+ * https://github.com/jquery/jquery-migrate
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
+ */
+(function (jQuery, window, undefined) {
+// See http://bugs.jquery.com/ticket/13335
+// "use strict";
+
+
+ var warnedAbout = {};
+
+// List of warnings already given; public read only
+ jQuery.migrateWarnings = [];
+
+// Set to true to prevent console output; migrateWarnings still maintained
+// jQuery.migrateMute = false;
+
+// Show a message on the console so devs know we're active
+ if (!jQuery.migrateMute && window.console && window.console.log) {
+ window.console.log("JQMIGRATE: Logging is active");
+ }
+
+// Set to false to disable traces that appear with warnings
+ if (jQuery.migrateTrace === undefined) {
+ jQuery.migrateTrace = true;
+ }
+
+// Forget any warnings we've already given; public
+ jQuery.migrateReset = function () {
+ warnedAbout = {};
+ jQuery.migrateWarnings.length = 0;
+ };
+
+ function migrateWarn(msg) {
+ var console = window.console;
+ if (!warnedAbout[msg]) {
+ warnedAbout[msg] = true;
+ jQuery.migrateWarnings.push(msg);
+ if (console && console.warn && !jQuery.migrateMute) {
+ console.warn("JQMIGRATE: " + msg);
+ if (jQuery.migrateTrace && console.trace) {
+ console.trace();
+ }
+ }
+ }
+ }
+
+ function migrateWarnProp(obj, prop, value, msg) {
+ if (Object.defineProperty) {
+ // On ES5 browsers (non-oldIE), warn if the code tries to get prop;
+ // allow property to be overwritten in case some other plugin wants it
+ try {
+ Object.defineProperty(obj, prop, {
+ configurable: true,
+ enumerable: true,
+ get: function () {
+ migrateWarn(msg);
+ return value;
+ },
+ set: function (newValue) {
+ migrateWarn(msg);
+ value = newValue;
+ }
+ });
+ return;
+ } catch (err) {
+ // IE8 is a dope about Object.defineProperty, can't warn there
+ }
+ }
+
+ // Non-ES5 (or broken) browser; just set the property
+ jQuery._definePropertyBroken = true;
+ obj[prop] = value;
+ }
+
+ if (document.compatMode === "BackCompat") {
+ // jQuery has never supported or tested Quirks Mode
+ migrateWarn("jQuery is not compatible with Quirks Mode");
+ }
+
+
+ var attrFn = jQuery("<input/>", {size: 1}).attr("size") && jQuery.attrFn,
+ oldAttr = jQuery.attr,
+ valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
+ function () {
+ return null;
+ },
+ valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
+ function () {
+ return undefined;
+ },
+ rnoType = /^(?:input|button)$/i,
+ rnoAttrNodeType = /^[238]$/,
+ rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+ ruseDefault = /^(?:checked|selected)$/i;
+
+// jQuery.attrFn
+ migrateWarnProp(jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated");
+
+ jQuery.attr = function (elem, name, value, pass) {
+ var lowerName = name.toLowerCase(),
+ nType = elem && elem.nodeType;
+
+ if (pass) {
+ // Since pass is used internally, we only warn for new jQuery
+ // versions where there isn't a pass arg in the formal params
+ if (oldAttr.length < 4) {
+ migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+ }
+ if (elem && !rnoAttrNodeType.test(nType) &&
+ (attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name]))) {
+ return jQuery(elem)[name](value);
+ }
+ }
+
+ // Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
+ // for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
+ if (name === "type" && value !== undefined && rnoType.test(elem.nodeName) && elem.parentNode) {
+ migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
+ }
+
+ // Restore boolHook for boolean property/attribute synchronization
+ if (!jQuery.attrHooks[lowerName] && rboolean.test(lowerName)) {
+ jQuery.attrHooks[lowerName] = {
+ get: function (elem, name) {
+ // Align boolean attributes with corresponding properties
+ // Fall back to attribute presence where some booleans are not supported
+ var attrNode,
+ property = jQuery.prop(elem, name);
+ return property === true || typeof property !== "boolean" &&
+ ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+
+ name.toLowerCase() :
+ undefined;
+ },
+ set: function (elem, value, name) {
+ var propName;
+ if (value === false) {
+ // Remove boolean attributes when set to false
+ jQuery.removeAttr(elem, name);
+ } else {
+ // value is true since we know at this point it's type boolean and not false
+ // Set boolean attributes to the same name and set the DOM property
+ propName = jQuery.propFix[name] || name;
+ if (propName in elem) {
+ // Only set the IDL specifically if it already exists on the element
+ elem[propName] = true;
+ }
+
+ elem.setAttribute(name, name.toLowerCase());
+ }
+ return name;
+ }
+ };
+
+ // Warn only for attributes that can remain distinct from their properties post-1.9
+ if (ruseDefault.test(lowerName)) {
+ migrateWarn("jQuery.fn.attr('" + lowerName + "') may use property instead of attribute");
+ }
+ }
+
+ return oldAttr.call(jQuery, elem, name, value);
+ };
+
+// attrHooks: value
+ jQuery.attrHooks.value = {
+ get: function (elem, name) {
+ var nodeName = ( elem.nodeName || "" ).toLowerCase();
+ if (nodeName === "button") {
+ return valueAttrGet.apply(this, arguments);
+ }
+ if (nodeName !== "input" && nodeName !== "option") {
+ migrateWarn("jQuery.fn.attr('value') no longer gets properties");
+ }
+ return name in elem ?
+ elem.value :
+ null;
+ },
+ set: function (elem, value) {
+ var nodeName = ( elem.nodeName || "" ).toLowerCase();
+ if (nodeName === "button") {
+ return valueAttrSet.apply(this, arguments);
+ }
+ if (nodeName !== "input" && nodeName !== "option") {
+ migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
+ }
+ // Does not return so that setAttribute is also used
+ elem.value = value;
+ }
+ };
+
+
+ var matched, browser,
+ oldInit = jQuery.fn.init,
+ oldParseJSON = jQuery.parseJSON,
+ // Note: XSS check is done below after string is trimmed
+ rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
+
+// $(html) "looks like html" rule change
+ jQuery.fn.init = function (selector, context, rootjQuery) {
+ var match;
+
+ if (selector && typeof selector === "string" && !jQuery.isPlainObject(context) &&
+ (match = rquickExpr.exec(jQuery.trim(selector))) && match[0]) {
+ // This is an HTML string according to the "old" rules; is it still?
+ if (selector.charAt(0) !== "<") {
+ migrateWarn("$(html) HTML strings must start with '<' character");
+ }
+ if (match[3]) {
+ migrateWarn("$(html) HTML text after last tag is ignored");
+ }
+ // Consistently reject any HTML-like string starting with a hash (#9521)
+ // Note that this may break jQuery 1.6.x code that otherwise would work.
+ if (match[0].charAt(0) === "#") {
+ migrateWarn("HTML string cannot start with a '#' character");
+ jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
+ }
+ // Now process using loose rules; let pre-1.8 play too
+ if (context && context.context) {
+ // jQuery object as context; parseHTML expects a DOM object
+ context = context.context;
+ }
+ if (jQuery.parseHTML) {
+ return oldInit.call(this, jQuery.parseHTML(match[2], context, true),
+ context, rootjQuery);
+ }
+ }
+ return oldInit.apply(this, arguments);
+ };
+ jQuery.fn.init.prototype = jQuery.fn;
+
+// Let $.parseJSON(falsy_value) return null
+ jQuery.parseJSON = function (json) {
+ if (!json && json !== null) {
+ migrateWarn("jQuery.parseJSON requires a valid JSON string");
+ return null;
+ }
+ return oldParseJSON.apply(this, arguments);
+ };
+
+ jQuery.uaMatch = function (ua) {
+ ua = ua.toLowerCase();
+
+ var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+ /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+ /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+ /(msie) ([\w.]+)/.exec(ua) ||
+ ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+ [];
+
+ return {
+ browser: match[1] || "",
+ version: match[2] || "0"
+ };
+ };
+
+// Don't clobber any existing jQuery.browser in case it's different
+ if (!jQuery.browser) {
+ matched = jQuery.uaMatch(navigator.userAgent);
+ browser = {};
+
+ if (matched.browser) {
+ browser[matched.browser] = true;
+ browser.version = matched.version;
+ }
+
+ // Chrome is Webkit, but Webkit is also Safari.
+ if (browser.chrome) {
+ browser.webkit = true;
+ } else if (browser.webkit) {
+ browser.safari = true;
+ }
+
+ jQuery.browser = browser;
+ }
+
+// Warn if the code tries to get jQuery.browser
+ migrateWarnProp(jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated");
+
+ jQuery.sub = function () {
+ function jQuerySub(selector, context) {
+ return new jQuerySub.fn.init(selector, context);
+ }
+
+ jQuery.extend(true, jQuerySub, this);
+ jQuerySub.superclass = this;
+ jQuerySub.fn = jQuerySub.prototype = this();
+ jQuerySub.fn.constructor = jQuerySub;
+ jQuerySub.sub = this.sub;
+ jQuerySub.fn.init = function init(selector, context) {
+ if (context && context instanceof jQuery && !(context instanceof jQuerySub)) {
+ context = jQuerySub(context);
+ }
+
+ return jQuery.fn.init.call(this, selector, context, rootjQuerySub);
+ };
+ jQuerySub.fn.init.prototype = jQuerySub.fn;
+ var rootjQuerySub = jQuerySub(document);
+ migrateWarn("jQuery.sub() is deprecated");
+ return jQuerySub;
+ };
+
+
+// Ensure that $.ajax gets the new parseJSON defined in core.js
+ jQuery.ajaxSetup({
+ converters: {
+ "text json": jQuery.parseJSON
+ }
+ });
+
+
+ var oldFnData = jQuery.fn.data;
+
+ jQuery.fn.data = function (name) {
+ var ret, evt,
+ elem = this[0];
+
+ // Handles 1.7 which has this behavior and 1.8 which doesn't
+ if (elem && name === "events" && arguments.length === 1) {
+ ret = jQuery.data(elem, name);
+ evt = jQuery._data(elem, name);
+ if (( ret === undefined || ret === evt ) && evt !== undefined) {
+ migrateWarn("Use of jQuery.fn.data('events') is deprecated");
+ return evt;
+ }
+ }
+ return oldFnData.apply(this, arguments);
+ };
+
+
+ var rscriptType = /\/(java|ecma)script/i,
+ oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
+
+ jQuery.fn.andSelf = function () {
+ migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
+ return oldSelf.apply(this, arguments);
+ };
+
+// Since jQuery.clean is used internally on older versions, we only shim if it's missing
+ if (!jQuery.clean) {
+ jQuery.clean = function (elems, context, fragment, scripts) {
+ // Set context per 1.8 logic
+ context = context || document;
+ context = !context.nodeType && context[0] || context;
+ context = context.ownerDocument || context;
+
+ migrateWarn("jQuery.clean() is deprecated");
+
+ var i, elem, handleScript, jsTags,
+ ret = [];
+
+ jQuery.merge(ret, jQuery.buildFragment(elems, context).childNodes);
+
+ // Complex logic lifted directly from jQuery 1.8
+ if (fragment) {
+ // Special handling of each script element
+ handleScript = function (elem) {
+ // Check if we consider it executable
+ if (!elem.type || rscriptType.test(elem.type)) {
+ // Detach the script and store it in the scripts array (if provided) or the fragment
+ // Return truthy to indicate that it has been handled
+ return scripts ?
+ scripts.push(elem.parentNode ? elem.parentNode.removeChild(elem) : elem) :
+ fragment.appendChild(elem);
+ }
+ };
+
+ for (i = 0; (elem = ret[i]) != null; i++) {
+ // Check if we're done after handling an executable script
+ if (!( jQuery.nodeName(elem, "script") && handleScript(elem) )) {
+ // Append to fragment and handle embedded scripts
+ fragment.appendChild(elem);
+ if (typeof elem.getElementsByTagName !== "undefined") {
+ // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+ jsTags = jQuery.grep(jQuery.merge([], elem.getElementsByTagName("script")), handleScript);
+
+ // Splice the scripts into ret after their former ancestor and advance our index beyond them
+ ret.splice.apply(ret, [i + 1, 0].concat(jsTags));
+ i += jsTags.length;
+ }
+ }
+ }
+ }
+
+ return ret;
+ };
+ }
+
+ var eventAdd = jQuery.event.add,
+ eventRemove = jQuery.event.remove,
+ eventTrigger = jQuery.event.trigger,
+ oldToggle = jQuery.fn.toggle,
+ oldLive = jQuery.fn.live,
+ oldDie = jQuery.fn.die,
+ ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
+ rajaxEvent = new RegExp("\\b(?:" + ajaxEvents + ")\\b"),
+ rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+ hoverHack = function (events) {
+ if (typeof( events ) !== "string" || jQuery.event.special.hover) {
+ return events;
+ }
+ if (rhoverHack.test(events)) {
+ migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
+ }
+ return events && events.replace(rhoverHack, "mouseenter$1 mouseleave$1");
+ };
+
+// Event props removed in 1.9, put them back if needed; no practical way to warn them
+ if (jQuery.event.props && jQuery.event.props[0] !== "attrChange") {
+ jQuery.event.props.unshift("attrChange", "attrName", "relatedNode", "srcElement");
+ }
+
+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
+ if (jQuery.event.dispatch) {
+ migrateWarnProp(jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated");
+ }
+
+// Support for 'hover' pseudo-event and ajax event warnings
+ jQuery.event.add = function (elem, types, handler, data, selector) {
+ if (elem !== document && rajaxEvent.test(types)) {
+ migrateWarn("AJAX events should be attached to document: " + types);
+ }
+ eventAdd.call(this, elem, hoverHack(types || ""), handler, data, selector);
+ };
+ jQuery.event.remove = function (elem, types, handler, selector, mappedTypes) {
+ eventRemove.call(this, elem, hoverHack(types) || "", handler, selector, mappedTypes);
+ };
+
+ jQuery.fn.error = function () {
+ var args = Array.prototype.slice.call(arguments, 0);
+ migrateWarn("jQuery.fn.error() is deprecated");
+ args.splice(0, 0, "error");
+ if (arguments.length) {
+ return this.bind.apply(this, args);
+ }
+ // error event should not bubble to window, although it does pre-1.7
+ this.triggerHandler.apply(this, args);
+ return this;
+ };
+
+ jQuery.fn.toggle = function (fn, fn2) {
+
+ // Don't mess with animation or css toggles
+ if (!jQuery.isFunction(fn) || !jQuery.isFunction(fn2)) {
+ return oldToggle.apply(this, arguments);
+ }
+ migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
+
+ // Save reference to arguments for access in closure
+ var args = arguments,
+ guid = fn.guid || jQuery.guid++,
+ i = 0,
+ toggler = function (event) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery._data(this, "lastToggle" + fn.guid) || 0 ) % i;
+ jQuery._data(this, "lastToggle" + fn.guid, lastToggle + 1);
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[lastToggle].apply(this, arguments) || false;
+ };
+
+ // link all the functions, so any of them can unbind this click handler
+ toggler.guid = guid;
+ while (i < args.length) {
+ args[i++].guid = guid;
+ }
+
+ return this.click(toggler);
+ };
+
+ jQuery.fn.live = function (types, data, fn) {
+ migrateWarn("jQuery.fn.live() is deprecated");
+ if (oldLive) {
+ return oldLive.apply(this, arguments);
+ }
+ jQuery(this.context).on(types, this.selector, data, fn);
+ return this;
+ };
+
+ jQuery.fn.die = function (types, fn) {
+ migrateWarn("jQuery.fn.die() is deprecated");
+ if (oldDie) {
+ return oldDie.apply(this, arguments);
+ }
+ jQuery(this.context).off(types, this.selector || "**", fn);
+ return this;
+ };
+
+// Turn global events into document-triggered events
+ jQuery.event.trigger = function (event, data, elem, onlyHandlers) {
+ if (!elem && !rajaxEvent.test(event)) {
+ migrateWarn("Global events are undocumented and deprecated");
+ }
+ return eventTrigger.call(this, event, data, elem || document, onlyHandlers);
+ };
+ jQuery.each(ajaxEvents.split("|"),
+ function (_, name) {
+ jQuery.event.special[name] = {
+ setup: function () {
+ var elem = this;
+
+ // The document needs no shimming; must be !== for oldIE
+ if (elem !== document) {
+ jQuery.event.add(document, name + "." + jQuery.guid, function () {
+ jQuery.event.trigger(name, null, elem, true);
+ });
+ jQuery._data(this, name, jQuery.guid++);
+ }
+ return false;
+ },
+ teardown: function () {
+ if (this !== document) {
+ jQuery.event.remove(document, name + "." + jQuery._data(this, name));
+ }
+ return false;
+ }
+ };
+ }
+ );
+
+
+})(jQuery, window);
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.min.js b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.min.js
new file mode 100644
index 00000000..b51cf38b
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/jquery/jquery-migrate-1.2.1.min.js
@@ -0,0 +1,125 @@
+/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
+jQuery.migrateMute === void 0 && (jQuery.migrateMute = !0), function (e, t, n) {
+ function r(n) {
+ var r = t.console;
+ i[n] || (i[n] = !0, e.migrateWarnings.push(n), r && r.warn && !e.migrateMute && (r.warn("JQMIGRATE: " + n), e.migrateTrace && r.trace && r.trace()))
+ }
+
+ function a(t, a, i, o) {
+ if (Object.defineProperty)try {
+ return Object.defineProperty(t, a, {
+ configurable: !0, enumerable: !0, get: function () {
+ return r(o), i
+ }, set: function (e) {
+ r(o), i = e
+ }
+ }), n
+ } catch (s) {
+ }
+ e._definePropertyBroken = !0, t[a] = i
+ }
+
+ var i = {};
+ e.migrateWarnings = [], !e.migrateMute && t.console && t.console.log && t.console.log("JQMIGRATE: Logging is active"), e.migrateTrace === n && (e.migrateTrace = !0), e.migrateReset = function () {
+ i = {}, e.migrateWarnings.length = 0
+ }, "BackCompat" === document.compatMode && r("jQuery is not compatible with Quirks Mode");
+ var o = e("<input/>", {size: 1}).attr("size") && e.attrFn, s = e.attr, u = e.attrHooks.value && e.attrHooks.value.get || function () {
+ return null
+ }, c = e.attrHooks.value && e.attrHooks.value.set || function () {
+ return n
+ }, l = /^(?:input|button)$/i, d = /^[238]$/, p = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, f = /^(?:checked|selected)$/i;
+ a(e, "attrFn", o || {}, "jQuery.attrFn is deprecated"), e.attr = function (t, a, i, u) {
+ var c = a.toLowerCase(), g = t && t.nodeType;
+ return u && (4 > s.length && r("jQuery.fn.attr( props, pass ) is deprecated"), t && !d.test(g) && (o ? a in o : e.isFunction(e.fn[a]))) ? e(t)[a](i) : ("type" === a && i !== n && l.test(t.nodeName) && t.parentNode && r("Can't change the 'type' of an input or button in IE 6/7/8"), !e.attrHooks[c] && p.test(c) && (e.attrHooks[c] = {
+ get: function (t, r) {
+ var a, i = e.prop(t, r);
+ return i === !0 || "boolean" != typeof i && (a = t.getAttributeNode(r)) && a.nodeValue !== !1 ? r.toLowerCase() : n
+ }, set: function (t, n, r) {
+ var a;
+ return n === !1 ? e.removeAttr(t, r) : (a = e.propFix[r] || r, a in t && (t[a] = !0), t.setAttribute(r, r.toLowerCase())), r
+ }
+ }, f.test(c) && r("jQuery.fn.attr('" + c + "') may use property instead of attribute")), s.call(e, t, a, i))
+ }, e.attrHooks.value = {
+ get: function (e, t) {
+ var n = (e.nodeName || "").toLowerCase();
+ return "button" === n ? u.apply(this, arguments) : ("input" !== n && "option" !== n && r("jQuery.fn.attr('value') no longer gets properties"), t in e ? e.value : null)
+ }, set: function (e, t) {
+ var a = (e.nodeName || "").toLowerCase();
+ return "button" === a ? c.apply(this, arguments) : ("input" !== a && "option" !== a && r("jQuery.fn.attr('value', val) no longer sets properties"), e.value = t, n)
+ }
+ };
+ var g, h, v = e.fn.init, m = e.parseJSON, y = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
+ e.fn.init = function (t, n, a) {
+ var i;
+ return t && "string" == typeof t && !e.isPlainObject(n) && (i = y.exec(e.trim(t))) && i[0] && ("<" !== t.charAt(0) && r("$(html) HTML strings must start with '<' character"), i[3] && r("$(html) HTML text after last tag is ignored"), "#" === i[0].charAt(0) && (r("HTML string cannot start with a '#' character"), e.error("JQMIGRATE: Invalid selector string (XSS)")), n && n.context && (n = n.context), e.parseHTML) ? v.call(this, e.parseHTML(i[2], n, !0), n, a) : v.apply(this, arguments)
+ }, e.fn.init.prototype = e.fn, e.parseJSON = function (e) {
+ return e || null === e ? m.apply(this, arguments) : (r("jQuery.parseJSON requires a valid JSON string"), null)
+ }, e.uaMatch = function (e) {
+ e = e.toLowerCase();
+ var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || 0 > e.indexOf("compatible") && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || [];
+ return {browser: t[1] || "", version: t[2] || "0"}
+ }, e.browser || (g = e.uaMatch(navigator.userAgent), h = {}, g.browser && (h[g.browser] = !0, h.version = g.version), h.chrome ? h.webkit = !0 : h.webkit && (h.safari = !0), e.browser = h), a(e, "browser", e.browser, "jQuery.browser is deprecated"), e.sub = function () {
+ function t(e, n) {
+ return new t.fn.init(e, n)
+ }
+
+ e.extend(!0, t, this), t.superclass = this, t.fn = t.prototype = this(), t.fn.constructor = t, t.sub = this.sub, t.fn.init = function (r, a) {
+ return a && a instanceof e && !(a instanceof t) && (a = t(a)), e.fn.init.call(this, r, a, n)
+ }, t.fn.init.prototype = t.fn;
+ var n = t(document);
+ return r("jQuery.sub() is deprecated"), t
+ }, e.ajaxSetup({converters: {"text json": e.parseJSON}});
+ var b = e.fn.data;
+ e.fn.data = function (t) {
+ var a, i, o = this[0];
+ return !o || "events" !== t || 1 !== arguments.length || (a = e.data(o, t), i = e._data(o, t), a !== n && a !== i || i === n) ? b.apply(this, arguments) : (r("Use of jQuery.fn.data('events') is deprecated"), i)
+ };
+ var j = /\/(java|ecma)script/i, w = e.fn.andSelf || e.fn.addBack;
+ e.fn.andSelf = function () {
+ return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"), w.apply(this, arguments)
+ }, e.clean || (e.clean = function (t, a, i, o) {
+ a = a || document, a = !a.nodeType && a[0] || a, a = a.ownerDocument || a, r("jQuery.clean() is deprecated");
+ var s, u, c, l, d = [];
+ if (e.merge(d, e.buildFragment(t, a).childNodes), i)for (c = function (e) {
+ return !e.type || j.test(e.type) ? o ? o.push(e.parentNode ? e.parentNode.removeChild(e) : e) : i.appendChild(e) : n
+ }, s = 0; null != (u = d[s]); s++)e.nodeName(u, "script") && c(u) || (i.appendChild(u), u.getElementsByTagName !== n && (l = e.grep(e.merge([], u.getElementsByTagName("script")), c), d.splice.apply(d, [s + 1, 0].concat(l)), s += l.length));
+ return d
+ });
+ var Q = e.event.add, x = e.event.remove, k = e.event.trigger, N = e.fn.toggle, T = e.fn.live, M = e.fn.die, S = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess", C = RegExp("\\b(?:" + S + ")\\b"), H = /(?:^|\s)hover(\.\S+|)\b/, A = function (t) {
+ return "string" != typeof t || e.event.special.hover ? t : (H.test(t) && r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"), t && t.replace(H, "mouseenter$1 mouseleave$1"))
+ };
+ e.event.props && "attrChange" !== e.event.props[0] && e.event.props.unshift("attrChange", "attrName", "relatedNode", "srcElement"), e.event.dispatch && a(e.event, "handle", e.event.dispatch, "jQuery.event.handle is undocumented and deprecated"), e.event.add = function (e, t, n, a, i) {
+ e !== document && C.test(t) && r("AJAX events should be attached to document: " + t), Q.call(this, e, A(t || ""), n, a, i)
+ }, e.event.remove = function (e, t, n, r, a) {
+ x.call(this, e, A(t) || "", n, r, a)
+ }, e.fn.error = function () {
+ var e = Array.prototype.slice.call(arguments, 0);
+ return r("jQuery.fn.error() is deprecated"), e.splice(0, 0, "error"), arguments.length ? this.bind.apply(this, e) : (this.triggerHandler.apply(this, e), this)
+ }, e.fn.toggle = function (t, n) {
+ if (!e.isFunction(t) || !e.isFunction(n))return N.apply(this, arguments);
+ r("jQuery.fn.toggle(handler, handler...) is deprecated");
+ var a = arguments, i = t.guid || e.guid++, o = 0, s = function (n) {
+ var r = (e._data(this, "lastToggle" + t.guid) || 0) % o;
+ return e._data(this, "lastToggle" + t.guid, r + 1), n.preventDefault(), a[r].apply(this, arguments) || !1
+ };
+ for (s.guid = i; a.length > o;)a[o++].guid = i;
+ return this.click(s)
+ }, e.fn.live = function (t, n, a) {
+ return r("jQuery.fn.live() is deprecated"), T ? T.apply(this, arguments) : (e(this.context).on(t, this.selector, n, a), this)
+ }, e.fn.die = function (t, n) {
+ return r("jQuery.fn.die() is deprecated"), M ? M.apply(this, arguments) : (e(this.context).off(t, this.selector || "**", n), this)
+ }, e.event.trigger = function (e, t, n, a) {
+ return n || C.test(e) || r("Global events are undocumented and deprecated"), k.call(this, e, t, n || document, a)
+ }, e.each(S.split("|"), function (t, n) {
+ e.event.special[n] = {
+ setup: function () {
+ var t = this;
+ return t !== document && (e.event.add(document, n + "." + e.guid, function () {
+ e.event.trigger(n, null, t, !0)
+ }), e._data(this, n, e.guid++)), !1
+ }, teardown: function () {
+ return this !== document && e.event.remove(document, n + "." + e._data(this, n)), !1
+ }
+ }
+ })
+}(jQuery, window); \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ngict-component.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ngict-component.css
new file mode 100644
index 00000000..c1142ae4
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/ngict-component.css
@@ -0,0 +1,467 @@
+body {
+ color: #333;
+ font-size: 14px;
+ font-family: "Microsoft yahei", arial;
+!important;
+}
+
+/*fontIcon*/
+[class^="ict-"], [class*=" ict-"] {
+ padding-right: 3px;
+}
+
+/*common color*/
+.blue1 {
+ background-color: #5b9bd1;
+ color: #fff;
+}
+
+.blue1:hover {
+ background-color: #487ca9;
+ color: #fff;
+}
+
+.blue2 {
+ background-color: #57b5e3;
+ color: #fff;
+}
+
+.blue2:hover {
+ background-color: #43a1cf;
+ color: #fff;
+}
+
+.red {
+ background-color: #e35b5a;
+ color: #fff;
+}
+
+.red:hover {
+ background-color: #d45150;
+ color: #fff;
+}
+
+.green {
+ background-color: #44b6ae;
+ color: #fff;
+}
+
+.green:hover {
+ background-color: #329d96;
+ color: #fff;
+}
+
+.gold {
+ background-color: #c0af69;
+ color: #fff;
+}
+
+.gold:hover {
+ background-color: #ad9a4d;
+ color: #fff;
+}
+
+.grey {
+ background-color: #e5e5e5;
+ color: #333;
+}
+
+.grey:hover {
+ background-color: #d8d8d8;
+ color: #333;
+}
+
+.dark_grey {
+ background-color: #333;
+ color: #fff;
+}
+
+.dark_grey:hover {
+ background-color: # 101010;
+ color: #fff;
+}
+
+.white {
+ background-color: #fff;
+ border: 1px solid #e4e4e4;
+ color: #333;
+}
+
+.white:hover {
+ background-color: #e5e5e5;
+ color: #333;
+}
+
+/***
+Responsive & Scrollable Tables
+***/
+
+.table-scrollable {
+ width: 100%;
+ overflow-x: auto;
+ overflow-y: hidden;
+ border: 1px solid #dddddd;
+}
+
+.table-scrollable > .table {
+ width: 100% !important;
+ margin: 0 !important;
+ margin-bottom: 0;
+ background-color: #fff;
+}
+
+.table-scrollable > .table > thead > tr > th,
+.table-scrollable > .table > tbody > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > thead > tr > td,
+.table-scrollable > .table > tbody > tr > td,
+.table-scrollable > .table > tfoot > tr > td {
+ white-space: nowrap;
+}
+
+.table-scrollable > .table-bordered {
+ border: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:first-child,
+.table-scrollable > .table-bordered > tbody > tr > th:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:first-child,
+.table-scrollable > .table-bordered > thead > tr > td:first-child,
+.table-scrollable > .table-bordered > tbody > tr > td:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr > th:last-child,
+.table-scrollable > .table-bordered > tbody > tr > th:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:last-child,
+.table-scrollable > .table-bordered > thead > tr > td:last-child,
+.table-scrollable > .table-bordered > tbody > tr > td:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+
+.table-scrollable > .table-bordered > thead > tr:last-child > th,
+.table-scrollable > .table-bordered > tbody > tr:last-child > th,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > th,
+.table-scrollable > .table-bordered > thead > tr:last-child > td,
+.table-scrollable > .table-bordered > tbody > tr:last-child > td,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+}
+
+/*form*/
+.form {
+ padding: 0 !important;
+}
+
+.form-body {
+ padding: 10px;
+}
+
+.form-actions {
+ padding: 20px 10px;
+ margin-top: 20px;
+ *zoom: 1;
+}
+
+.form-actions.nobg {
+ background-color: transparent;
+}
+
+.form-actions.top {
+ margin-top: 0;
+ margin-bottom: 20px;
+ border-top: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+
+.form-actions.fluid {
+ padding: 20px 0;
+}
+
+.form-actions.fluid > [class^="col-"] {
+ padding-left: 13px;
+}
+
+.form-actions:before,
+.form-actions:after {
+ display: table;
+ line-height: 0;
+ content: "";
+}
+
+.form-actions:after {
+ clear: both;
+}
+
+.form-section {
+ margin: 30px 0px 25px 0px;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #eee;
+}
+
+.form .form-section:first-child {
+ margin-top: 5px;
+}
+
+.help-inline {
+ font-size: 13px;
+ color: #737373;
+ display: inline-block;
+ padding: 5px;
+}
+
+/* left, right aligned form actions */
+.form-actions.right {
+ padding-left: 0;
+ padding-right: 10px;
+ text-align: right;
+}
+
+.form-actions.left {
+ padding-left: 10px;
+ padding-right: 0;
+ text-align: left;
+}
+
+/* Checkbox */
+.form-group .checkbox {
+ padding-left: 0;
+}
+
+.checkbox-list > label {
+ display: block;
+}
+
+.checkbox-list > label.checkbox-inline {
+ display: inline-block;
+}
+
+.checkbox-list > label.checkbox-inline:first-child {
+ padding-left: 0;
+}
+
+/* Radios */
+
+.radio-list > label {
+ display: block;
+}
+
+.radio-list > label.radio-inline {
+ display: inline-block;
+}
+
+.radio-list > label.radio-inline:first-child {
+ padding-left: 0;
+}
+
+.form-horizontal .radio-list .radio {
+ padding-top: 1px;
+}
+
+.form-horizontal .radio-list > label {
+ margin-bottom: 0;
+}
+
+.form-horizontal .radio > span {
+ margin-top: 2px;
+}
+
+.help-block {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+
+.form-inline input {
+ margin-bottom: 0px !important;
+}
+
+.control-label {
+ margin-top: 2px;
+}
+
+.form-control-static {
+ font-size: 14px;
+ padding-top: 7px;
+}
+
+.control-label .required {
+ color: #e02222;
+ font-size: 12px;
+ padding-left: 2px;
+}
+
+/*TAB*/
+.nav-tabs {
+ border: 0;
+ font-weight: bold;
+}
+
+.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
+ border: 0;
+ border-top: 3px solid #F3565D;
+}
+
+.nav-tabs > li > a {
+ border-radius: 0;
+ font-weight: bold;
+}
+
+.nav-tabs > li > a:hover {
+ background-color: #f1f3fa;
+ border: 1Px solid #f1f3fa;
+}
+
+/*button*/
+.btn {
+ min-width: 80px;
+ letter-spacing: 1px;
+}
+
+.btnGroup .btn {
+ margin-right: 15px;
+}
+
+.pagination-panel .btn {
+ min-width: 4px;
+}
+
+/*radius*/
+.radius_l {
+ border-radius: 20px;
+}
+
+.radius_m {
+ border-radius: 8px;
+}
+
+.radius_s {
+ border-radius: 3px;
+}
+
+/*Progress Bars*/
+.progress {
+ border: 0;
+ background-image: none !important;
+ filter: none !important;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+
+}
+
+.form-wizard .steps > li.active > a.step .number {
+ background-color: #45B6AF
+}
+
+.progress > .progress-bar-success {
+ background-color: #45B6AF
+}
+
+/*label*/
+label {
+ font-weight: 400;
+ margin-bottom: 15px;
+}
+
+/*表单中的组合*/
+.input-group-btn-vertical.fa {
+ font-size: 12px;
+}
+
+.spinner {
+ width: 60px;
+ margin-left: 10px;
+ margin-right: 30px;
+}
+
+.spinner input {
+ text-align: right;
+}
+
+.input-group-btn-vertical {
+ position: relative;
+ white-space: nowrap;
+ width: 1%;
+ vertical-align: middle;
+ display: table-cell;
+}
+
+.input-group-btn-vertical > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+ padding: 6px;
+ margin-left: -1px;
+ position: relative;
+ border-radius: 0;
+}
+
+.input-group-btn-vertical > .btn {
+ min-width: 20px;
+}
+
+.input-group-btn-vertical > .btn:first-child {
+ border-top-right-radius: 4px;
+}
+
+.input-group-btn-vertical > .btn:last-child {
+ margin-top: -2px;
+ border-bottom-right-radius: 4px;
+}
+
+.input-group-btn-vertical i {
+ position: absolute;
+ top: -2px;
+ left: 5px;
+}
+
+.input-group .form-control {
+ height: 26px !important;
+}
+
+/*separator-line*/
+.separator-line {
+ height: 1px;
+ width: 100%;
+ background: #ddd;
+ overflow: hidden;
+ margin-bottom: 15px;
+ margin-top: 6px;
+}
+
+/*link*/
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+
+/*html滑块组件*/
+input[type="range"] {
+ margin-top: 2px;
+ background-color: #f0f3f9;
+ border: 1px solid #ccd6e8;
+ border-radius: 15px;
+ width: 400px;
+ -webkit-appearance: none;
+ height: 15px;
+
+}
+
+input[type="range"]::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ cursor: pointer;
+ top: -5px;
+ height: 28px;
+ width: 15px;
+ transform: translateY(-4px);
+ background: none repeat scroll 0 0 #f0f3f9;
+ background-color: #9cc2cb;
+ border-radius: 20px;
+}
+
+input[type="range"]:focus {
+ outline: none;
+} \ No newline at end of file
diff --git a/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/plugins.css b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/plugins.css
new file mode 100644
index 00000000..b2c98263
--- /dev/null
+++ b/uiframe-iui/src/main/resources/webroot/vendor/ict/ict-wizard/plugins.css
@@ -0,0 +1,1532 @@
+/**************************
+ PLUGIN CSS CUSTOMIZATIONS
+**************************/
+
+/***
+Calendar with full calendar
+***/
+.external-event {
+ display: inline-block;
+ cursor: move;
+ margin-bottom: 5px;
+ margin-left: 5px;
+}
+
+.portlet .event-form-title {
+ font-size: 14px;
+ margin-top: 4px;
+ font-weight: 400;
+ margin-bottom: 10px;
+}
+
+.portlet.calendar .fc-button {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ text-shadow: none;
+ border: 0;
+ padding: 6px 8px 30px 8px;
+ margin-left: 2px;
+ border-top-style: none;
+ border-bottom-style: none;
+ border-right-style: solid;
+ border-left-style: solid;
+ border-color: #ddd;
+ background: transparent;
+ color: #fff;
+ top: -46px;
+}
+
+.portlet.calendar .fc-header {
+ margin-bottom: -21px;
+}
+
+.portlet.calendar .fc-button-prev {
+ padding-right: 10px;
+ padding-left: 8px;
+}
+
+.portlet.calendar .fc-button-next {
+ padding-right: 8px;
+ padding-left: 10px;
+}
+
+.portlet.calendar .fc-button.fc-state-active,
+.portlet.calendar .fc-button.fc-state-hover {
+ color: #666;
+ background-color: #F9F9F9;
+}
+
+.portlet.calendar .fc-button.fc-state-disabled {
+ color: #ddd;
+}
+
+.portlet.calendar .fc-text-arrow {
+ font-size: 22px;
+ font-family: "Courier New", Courier, monospace;
+ vertical-align: baseline;
+}
+
+/* begin: event element */
+.portlet.calendar .fc-event {
+ border: 0px;
+ background-color: #69a4e0;
+ color: #fff;
+}
+
+.portlet.calendar .fc-event-inner {
+ border: 0px;
+}
+
+.portlet.calendar .fc-event-time {
+ float: left;
+ text-align: left;
+ color: #fff;
+ font-size: 13px;
+ font-weight: 300;
+}
+
+.portlet.calendar .fc-event-title {
+ text-align: left;
+ float: left;
+ color: #fff;
+ font-size: 13px;
+ font-weight: 300;
+}
+
+/* end: event element */
+
+.portlet.calendar .fc-header-title h2 {
+ font-size: 14px;
+ line-height: 20px;
+ font-weight: 400;
+ color: #111;
+}
+
+.portlet.calendar .fc-widget-header {
+ background-image: none;
+ filter: none;
+ background-color: #eee;
+ text-transform: uppercase;
+ font-weight: 300;
+}
+
+.portlet.calendar .mobile .fc-button {
+ margin-left: 2px;
+}
+
+.portlet.calendar .mobile .fc-button {
+ padding: 0px 6px 20px 6px;
+ margin-left: 2px;
+ border: 0;
+ background-color: #ddd;
+ background-image: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+ color: #000;
+ text-shadow: none;
+ text-align: center;
+}
+
+.portlet.calendar .mobile .fc-state-hover,
+.portlet.calendar .mobile .fc-state-active {
+ background-color: #eee;
+}
+
+.portlet.calendar .mobile .fc-button-prev {
+ margin-right: 5px;
+ margin-top: -2px;
+}
+
+.portlet.calendar .mobile .fc-button-next {
+ margin-right: -0px;
+ margin-top: -2px;
+}
+
+.portlet.calendar .mobile .fc-header-space {
+ margin: 0px;
+ padding: 0px;
+ width: 0px;
+}
+
+.portlet.calendar .mobile .fc-state-disabled {
+ color: #bbb;
+}
+
+.portlet.calendar .mobile .fc-header-left {
+ position: absolute;
+ z-index: 10;
+}
+
+.portlet.calendar .mobile .fc-header-right {
+ position: absolute;
+ z-index: 9;
+}
+
+.portlet.calendar .mobile .fc-header-left .fc-button {
+ top: -2px;
+}
+
+.portlet.calendar .mobile .fc-header-right {
+ position: relative;
+ right: 0;
+}
+
+.portlet.calendar .mobile .fc-header-right .fc-button {
+ top: 35px;
+}
+
+.portlet.calendar .mobile .fc-content {
+ margin-top: 53px;
+}
+
+/***
+Form wizard
+***/
+
+.form-wizard .progress {
+ margin-bottom: 30px;
+}
+
+.form-wizard .steps {
+/ / padding : 10 px 0;
+/ / margin-bottom : 15 px;
+}
+
+.form-wizard .steps {
+ background-color: #fff;
+ background-image: none;
+ filter: none;
+ border: 0px;
+ box-shadow: none;
+}
+
+.form-wizard .steps li a {
+ background-color: #fff;
+ background-image: none;
+ filter: none;
+ border: 0px;
+ box-shadow: none;
+}
+
+.form-wizard .steps li a:hover {
+ background: none;
+}
+
+.form-wizard .step:hover {
+ text-decoration: none;
+}
+
+.form-wizard .step .number {
+ background-color: #eee;
+ display: inline-block;
+ text-align: center !important;
+ font-size: 16px;
+ font-weight: 300;
+ padding: 11px 15px 13px 15px;
+ margin-right: 10px;
+ height: 45px;
+ width: 45px;
+ -webkit-border-radius: 50% !important;
+ -moz-border-radius: 50% !important;
+ border-radius: 50% !important;
+}
+
+.form-wizard .step .desc {
+ display: inline-block;
+ font-size: 16px;
+ font-weight: 300;
+}
+
+.form-wizard .active .step .number {
+ background-color: #35aa47;
+ color: #fff;
+}
+
+.form-wizard .active .step .desc {
+ color: #333;
+ font-weight: 400;
+}
+
+.form-wizard .step i {
+ display: none;
+}
+
+.form-wizard .done .step .number {
+ background-color: #f2ae43;
+ color: #fff;
+}
+
+.form-wizard .done .step .desc {
+ font-weight: 400;
+}
+
+.form-wizard .done .step i {
+ font-size: 12px;
+ font-weight: normal;
+ color: #999;
+ display: inline-block;
+}
+
+@media (min-width: 768px) and (max-width: 1280px) {
+ .form-wizard .step .desc {
+ margin-top: 10px;
+ display: block;
+ }
+}
+
+@media (max-width: 768px) {
+ .form-wizard .steps > li > a {
+ text-align: left;
+ }
+}
+
+/***
+Google Maps
+***/
+.gmaps {
+ height: 300px;
+ width: 100%;
+}
+
+/* important! bootstrap sets max-width on img to 100% which conflicts with google map canvas*/
+.gmaps img {
+ max-width: none;
+}
+
+#gmap_static div {
+ background-repeat: no-repeat;
+ background-position: 50% 50%;
+ height: 100%;
+ display: block;
+ height: 300px;
+}
+
+#gmap_routes_instructions {
+ margin-top: 10px;
+ margin-bottom: 0px;
+}
+
+/***
+SlimScrollBar plugins css changes
+***/
+.scroller {
+ padding: 0px;
+ margin: 0px;
+ padding-right: 12px;
+ overflow: hidden;
+}
+
+.scroller-footer {
+ margin-top: 10px;
+}
+
+.scroller-footer:after,
+.scroller-footer:before {
+ content: "";
+ display: table;
+ line-height: 0;
+}
+
+.scroller-footer:after {
+ clear: both;
+}
+
+.portlet-body .slimScrollBar {
+ margin-right: 0px;
+}
+
+/***
+jqvmap changes
+***/
+.jqvmap-zoomin {
+ height: 16px;
+ width: 16px;
+ background-color: #666;
+}
+
+.jqvmap-zoomout {
+ height: 16px;
+ width: 16px;
+ background-color: #666;
+}
+
+.vmaps {
+ position: relative;
+ overflow: hidden;
+ height: 300px;
+}
+
+/***
+Error state for WYSIWYG Editors
+***/
+.has-error .md-editor,
+.has-error .wysihtml5-sandbox,
+.has-error .cke {
+ border: 1px solid #B94A48 !important;
+}
+
+.has-success .md-editor,
+.has-success .wysihtml5-sandbox,
+.has-success .cke {
+ border: 1px solid #468847 !important;
+}
+
+/***
+Select2 plugin css changes
+***/
+
+/* enable form validation classes for select2 dropdowns */
+.has-error .select2-container .select2-choice {
+ border-color: #B94A48;
+}
+
+.has-error .select2-container.select2-dropdown-open .select2-choice {
+ border-color: #e5e5e5;
+}
+
+.has-error .select2-container.select2-dropdown-open .select2-choice > span {
+ color: #999999;
+}
+
+.has-success .select2-container .select2-choice {
+ border-color: #468847;
+}
+
+.has-success .select2-container.select2-dropdown-open .select2-choice {
+ border-color: #e5e5e5;
+}
+
+.has-success .select2-container.select2-dropdown-open .select2-choice > span {
+ color: #999999;
+}
+
+/***
+Jansy File Input plugin css changes
+***/
+.fileinput {
+ margin-bottom: 0;
+}
+
+/***
+WYSIWYG
+***/
+.wysihtml5-toolbar li {
+ margin: 0px;
+ height: 29px;
+}
+
+.wysihtml5-toolbar li .dropdown-menu {
+ margin-top: 5px;
+}
+
+/***
+CKEditor css changes
+***/
+.cke_bottom,
+.cke_inner,
+.cke_top,
+.cke_reset,
+.cke_dialog_title,
+.cke_dialog_footer,
+.cke_dialog {
+ background-image: none !important;
+ filter: none;
+ border-top: 0;
+ border-bottom: 0;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+ text-shadow: none;
+}
+
+.cke_dialog_ui_button,
+.cke_dialog_tab {
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+ text-shadow: none !important;
+}
+
+.cke_dialog_ui_button:hover,
+.cke_dialog_tab:hover {
+ text-decoration: none;
+ text-shadow: none;
+}
+
+.cke_dialog_ui_input_text {
+ background-image: none !important;
+ filter: none;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+.cke_combo_button,
+.cke_button,
+.cke_toolbar,
+.cke_toolgroup {
+ background-image: none !important;
+ filter: none !important;
+ border: 0;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+.cke_button,
+.cke_combo_button,
+.cke_panel_grouptitle,
+.cke_hc.cke_panel_listItem a {
+ background-image: none !important;
+ filter: none;
+ text-shadow: none;
+ -webkit-border-radius: 0px !important;
+ -moz-border-radius: 0px !important;
+ -ms-border-radius: 0px !important;
+ -o-border-radius: 0px !important;
+}
+
+.cke_button:hover,
+.cke_combo_button:hover {
+ background-color: #ddd;
+}
+
+.cke_toolbar_break {
+ background-image: none !important;
+ filter: none !important;
+ border: 0;
+ box-shadow: none !important;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ -ms-box-shadow: none !important;
+ -o-box-shadow: none !important;
+}
+
+/***
+Modify tags input plugin css
+***/
+div.tagsinput {
+ min-height: 35px;
+ height: auto !important;
+ margin: 0;
+ padding: 5px 5px 0px 5px;
+ overflow: auto;
+}
+
+div.tagsinput span.tag {
+ background: #aaa;
+ color: #fff;
+ border: 0;
+ padding: 3px 6px;
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+
+div.tagsinput input {
+ padding: 3px 6px;
+ width: 75px !important;
+}
+
+div.tagsinput span.tag a {
+ color: #fff;
+}
+
+div.tagsinput .not_valid {
+ color: #fff;
+ padding: 3px 6px;
+ background-color: #e02222;
+}
+
+/***
+Gritter notification modify
+***/
+
+#gritter-notice-wrapper {
+ right: 1px !important;
+}
+
+.gritter-close {
+ left: auto !important;
+ right: 3px !important;
+}
+
+.gritter-title {
+ font-family: 'Open Sans';
+ font-size: 18px;
+ font-weight: 300;
+}
+
+/***
+jQuery UI Sliders(new in v1.1.1)
+***/
+.slider {
+ border: 0;
+ padding: 0;
+ display: block;
+ margin: 12px 5px;
+ min-height: 11px;
+}
+
+.ui-slider-vertical {
+ width: 11px;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+ top: -3px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+ left: -3px;
+}
+
+.ui-slider-vertical,
+.ui-slider-handle {
+ filter: none !important;
+ background-image: none !important;
+}
+
+/***
+Dropzone css changes(new in v1.1.1)
+***/
+.dropzone {
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ border-radius: 0px;
+}
+
+/***
+Dashboard Charts(new in v1.2.1)
+***/
+.easy-pie-chart,
+.sparkline-chart {
+ text-align: center;
+}
+
+.sparkline-chart {
+ margin-top: 15px;
+ position: relative;
+}
+
+.easy-pie-chart .number {
+ font-size: 16px;
+ font-weight: 300;
+ width: 85px;
+ margin: 0 auto;
+}
+
+.sparkline-chart .number {
+ width: 100px;
+ margin: 0 auto;
+ margin-bottom: 10px;
+}
+
+.sparkline-chart .title,
+.easy-pie-chart .title {
+ display: block;
+ text-align: center;
+ color: #333;
+ font-weight: 300;
+ font-size: 16px;
+ margin-top: 5px;
+ margin-bottom: 10px;
+}
+
+.sparkline-chart .title:hover,
+.easy-pie-chart .title:hover {
+ color: #666;
+ text-decoration: none;
+}
+
+.sparkline-chart .title > i,
+.easy-pie-chart .title > i {
+ margin-top: 5px;
+}
+
+/***
+Fancy box fix overlay fix(in v1.2.4)
+***/
+.fancybox-overlay {
+ z-index: 10000;
+}
+
+/***
+Datatables Plugin(in v1.3)
+***/
+.dataTable {
+ width: 100% !important;
+ clear: both;
+ /*margin-top: 5px;*/
+}
+
+.dataTables_filter label {
+ line-height: 32px;
+}
+
+.dataTable .row-details {
+ margin-top: 3px;
+ display: inline-block;
+ cursor: pointer;
+ width: 14px;
+ height: 14px;
+}
+
+.dataTable .row-details.row-details-close {
+ background: url("../img/datatable-row-openclose.png") no-repeat 0 0;
+}
+
+.dataTable .row-details.row-details-open {
+ background: url("../img/datatable-row-openclose.png") no-repeat 0 -23px;
+}
+
+.dataTable .details {
+ background-color: #eee;
+}
+
+.dataTable .details td,
+.dataTable .details th {
+ padding: 4px;
+ background: none;
+ border: 0;
+}
+
+.dataTable .details tr:hover td,
+.dataTable .details tr:hover th {
+ background: none;
+}
+
+.dataTable .details tr:nth-child(odd) td,
+.dataTable .details tr:nth-child(odd) th {
+ background-color: #fff;
+}
+
+.dataTable .details tr:nth-child(even) td,
+.dataTable .details tr:nth-child(even) th {
+ background-color: #eee;
+}
+
+.dataTable > thead > tr > th.sorting,
+.dataTable > thead > tr > th.sorting_asc,
+.dataTable > thead > tr > th.sorting_desc {
+ padding-right: 18px;
+}
+
+.dataTable .table-checkbox {
+ width: 8px !important;
+}
+
+@media (max-width: 768px) {
+ .dataTables_wrapper .dataTables_length .form-control,
+ .dataTables_wrapper .dataTables_filter .form-control {
+ display: inline-block;
+ }
+
+ /* .dataTables_wrapper .dataTables_info {
+ top: 17px;
+ }*/
+ /* .dataTables_wrapper .dataTables_paginate {
+ margin-top: -15px;
+ }*/
+}
+
+@media (max-width: 480px) {
+ .dataTables_wrapper .dataTables_filter .form-control {
+ width: 175px !important;
+ }
+
+ .dataTables_wrapper .dataTables_paginate {
+ float: left;
+ margin-top: 20px;
+ }
+}
+
+.dataTables_processing {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ min-width: 125px;
+ margin-left: 0;
+ padding: 7px;
+ text-align: center;
+ color: #333;
+ font-size: 13px;
+ border: 1px solid #ddd;
+ background-color: #eee;
+ vertical-align: middle;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.dataTables_processing span {
+ line-height: 15px;
+ vertical-align: middle;
+}
+
+.dataTables_empty {
+ text-align: center;
+}
+
+/***
+Extended Datatable
+***/
+.dataTables_extended_wrapper {
+ position: relative !important;
+ clear: both !important;
+}
+
+.dataTables_extended_wrapper .seperator {
+ padding: 0 2px;
+}
+
+.dataTables_extended_wrapper .dataTables_paginate,
+.dataTables_extended_wrapper .dataTables_length,
+.dataTables_extended_wrapper .dataTables_info {
+ display: inline-block;
+ float: none !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ position: static !important;
+ font-size: 13px;
+}
+
+@media (max-width: 480px) {
+
+ .dataTables_extended_wrapper .dataTables_paginate,
+ .dataTables_extended_wrapper .dataTables_length,
+ .dataTables_extended_wrapper .dataTables_info {
+ display: block;
+ margin-bottom: 10px !important;
+ }
+
+ .dataTables_extended_wrapper .seperator {
+ display: none;
+ }
+}
+
+.dataTables_extended_wrapper .dataTables_length label {
+ margin: 0 !important;
+ padding: 0 !important;
+ font-size: 13px;
+ float: none !important;
+ display: inline-block !important;
+}
+
+.table-container .table-actions-wrapper {
+ display: none;
+}
+
+/***
+Password Strength(in v1.4)
+***/
+.password-strength .password-verdict {
+ display: inline-block;
+ margin-top: 6px;
+ margin-left: 5px;
+}
+
+.password-strength .progress {
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+
+.password-strength .progress-bar {
+ padding: 2px;
+}
+
+/***
+Uniform disabled checkbox, radio button fix(in v1.4)
+***/
+
+.table .uniform-inline {
+ padding: 0;
+ margin: 0;
+}
+
+.checker {
+ margin-top: -2px !important;
+ margin-right: 2px !important;
+ display: inline;
+}
+
+.checker input,
+.radio input {
+ outline: none !important;
+}
+
+div.checker.disabled span,
+div.checker.disabled.active span {
+ background-position: -152px -260px;
+}
+
+div.checker.disabled:hover,
+div.radio.disabled:hover {
+ cursor: not-allowed;
+}
+
+div.radio,
+div.checker {
+ margin-right: 0;
+ margin-left: 3px;
+}
+
+/***
+jQuery Sparkline
+***/
+.jqstooltip {
+ width: auto !important;
+ height: auto !important;
+}
+
+/***
+jQuery Multi Select
+***/
+
+.ms-container .ms-list {
+ border: 1px solid #e5e5e5;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+
+}
+
+.ms-container .ms-optgroup-label {
+ font-size: 14px;
+}
+
+.ms-container .ms-selectable li.ms-elem-selectable,
+.ms-container .ms-selection li.ms-elem-selection {
+ font-size: 13px;
+}
+
+.ms-container .ms-list.ms-focus {
+ border-color: #999999;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.ms-container .ms-selectable li.ms-hover,
+.ms-container .ms-selection li.ms-hover {
+ color: #333;
+ background-color: #eee;
+}
+
+.ms-container .form-control {
+ margin-bottom: 5px;
+}
+
+/***
+Bootstrap Colorpicker
+***/
+.input-group.color .input-group-btn i {
+ position: absolute;
+ display: block;
+ cursor: pointer;
+ width: 20px;
+ height: 20px;
+ right: 6px;
+}
+
+.colorpicker.dropdown-menu {
+ padding: 5px;
+}
+
+/* change z-index when opened in modal */
+.modal-open .colorpicker {
+ z-index: 10055 !important;
+}
+
+/***
+Bootstrap Datetimepicker
+***/
+
+.datetimepicker table td {
+ font-weight: 300 !important;
+ font-family: 'Open Sans' !important;
+}
+
+.datetimepicker table th {
+ font-family: 'Open Sans' !important;
+ font-weight: 400 !important;
+}
+
+.datetimepicker.dropdown-menu {
+ padding: 5px;
+}
+
+.datetimepicker .active {
+ background-color: #4b8df8 !important;
+ background-image: none !important;
+ filter: none !important;
+}
+
+.datetimepicker .active:hover {
+ background-color: #2678FC !important;
+ background-image: none !important;
+ filter: none !important;
+
+}
+
+/* change z-index when opened in modal */
+.modal-open .datetimepicker {
+ z-index: 10055 !important;
+}
+
+/***
+Bootstrap Time Picker
+***/
+.bootstrap-timepicker-widget table td a {
+ padding: 4px 0;
+}
+
+.bootstrap-timepicker-widget input,
+.bootstrap-timepicker-widget input:focus {
+ outline: none !important;
+ border: 0;
+}
+
+.modal-open .bootstrap-timepicker-widget {
+ z-index: 10055 !important;
+}
+
+.bootstrap-timepicker-widget.timepicker-orient-bottom:before,
+.bootstrap-timepicker-widget.timepicker-orient-bottom:after {
+ top: auto;
+}
+
+/***
+Bootstrap Datepicker
+***/
+
+.datepicker.dropdown-menu {
+ padding: 5px;
+}
+
+.datepicker .selected {
+ background-color: #909090 !important;
+ background-image: none !important;
+ filter: none !important;
+}
+
+.datepicker .active {
+ background-color: #4b8df8 !important;
+ background-image: none !important;
+ filter: none !important;
+}
+
+.datepicker .active:hover {
+ background-color: #2678FC !important;
+ background-image: none !important;
+ filter: none !important;
+}
+
+.datepicker .input-daterange input {
+ text-align: left;
+}
+
+/* change z-index when opened in modal */
+.modal-open .datepicker {
+ z-index: 10055 !important;
+}
+
+.datepicker table td {
+ font-weight: 300 !important;
+ font-family: 'Open Sans' !important;
+}
+
+.datepicker table th {
+ font-family: 'Open Sans' !important;
+ font-weight: 400 !important;
+}
+
+/***
+Clockface
+***/
+
+.modal-open .clockface {
+ z-index: 10055 !important;
+}
+
+.clockface .cell .inner.active,
+.clockface .cell .outer.active {
+ background-color: #4b8df8 !important;
+ background-image: none;
+ filter: none;
+}
+
+/***
+Bootstrap Daterangepicker
+***/
+
+.modal-open .daterangepicker {
+ z-index: 10055 !important;
+}
+
+.daterangepicker td {
+ text-shadow: none;
+}
+
+.daterangepicker td.active {
+ background-color: #4b8df8;
+ background-image: none;
+ filter: none;
+}
+
+.daterangepicker th {
+ font-weight: 400;
+ font-size: 14px;
+}
+
+.daterangepicker .ranges input[type="text"] {
+ width: 70px !important;
+ font-size: 11px;
+ vertical-align: middle;
+}
+
+.daterangepicker .ranges label {
+ font-weight: 300;
+ display: block;
+}
+
+.daterangepicker .ranges .btn {
+ margin-top: 10px;
+}
+
+.daterangepicker.dropdown-menu {
+ padding: 5px;
+}
+
+.daterangepicker .ranges li {
+ color: #333;
+}
+
+.daterangepicker .ranges li.active,
+.daterangepicker .ranges li:hover {
+ background: #4b8df8 !important;
+ border: 1px solid #4b8df8 !important;
+ color: #fff;
+}
+
+.daterangepicker .range_inputs input {
+ margin-bottom: 0 !important;
+}
+
+/***
+Bootstrap Editable
+***/
+
+.editable-input table,
+.editable-input table th,
+.editable-input table td,
+.editable-input table tr {
+ border: 0 !important;
+}
+
+.editable-input .combodate select {
+ margin-bottom: 5px;
+}
+
+/***
+FuelUX Spinners
+***/
+
+.spinner-buttons.btn-group-vertical .btn {
+ text-align: center;
+ margin: 0;
+ height: 17px;
+ width: 22px;
+ padding-left: 6px;
+ padding-right: 6px;
+ padding-top: 0px;
+}
+
+/***
+NoUI Range Sliders
+***/
+.noUi-handle {
+ height: 20px;
+ width: 20px;
+ margin: -3px 0 0 -20px;
+}
+
+.noUi-base {
+ height: 16px;
+}
+
+.noUi-connect {
+ background: #ffb848;
+}
+
+/***
+Toastr Notifications
+***/
+.toast {
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+.toast {
+ background-color: #030303;
+}
+
+.toast-success {
+ background-color: #51a351;
+}
+
+.toast-error {
+ background-color: #bd362f;
+}
+
+.toast-info {
+ background-color: #2f96b4;
+}
+
+.toast-warning {
+ background-color: #f89406;
+}
+
+.toast .toast-close-button {
+ display: inline-block;
+ margin-top: 0px;
+ margin-right: 0px;
+ text-indent: -100000px;
+ width: 11px;
+ height: 16px;
+ background-repeat: no-repeat !important;
+ background-image: url("../img/portlet-remove-icon-white.png") !important;
+}
+
+.toast-top-center {
+ top: 12px;
+ margin: 0 auto;
+ left: 50%;
+ margin-left: -150px;
+}
+
+.toast-bottom-center {
+ bottom: 12px;
+ margin: 0 auto;
+ left: 50%;
+ margin-left: -150px;
+}
+
+/***
+Google reCaptcha
+***/
+.form-recaptcha-img {
+ margin-bottom: 10px;
+ clear: both;
+ border: 1px solid #e5e5e5;
+ padding: 5px;
+}
+
+iframe[src="about:blank"] {
+ display: none;
+}
+
+/***
+Bootstrap Markdown
+***/
+.md-input {
+ padding: 5px !important;
+ border-bottom: 0 !important;
+}
+
+.md-editor .btn-toolbar {
+ margin-left: 0px;
+}
+
+.md-editor.active {
+ border: 1px solid #999999;
+ -webkit-box-shadow: none !important;
+ -moz-box-shadow: none !important;
+ box-shadow: none !important;
+}
+
+/***
+Bootstrap Datepaginator
+***/
+.datepaginator a {
+ font-family: 'Open Sans';
+ font-size: 13px;
+ font-weight: 300;
+}
+
+.datepicker .today {
+ background-image: none !important;
+ filter: none !important;
+}
+
+#dp-calendar {
+ right: 4px !important;
+}
+
+/***
+Font Awesome 4.0 Demo
+***/
+.fa-item {
+ font-size: 14px;
+ padding: 10px 10px 10px 20px;
+}
+
+.fa-item i {
+ font-size: 16px;
+ display: inline-block;
+ width: 20px;
+}
+
+.fa-item:hover {
+ cursor: pointer;
+ background: #eee;
+}
+
+/***
+Bootstrap Modal
+***/
+/* fix: content shifting to the right on modal open */
+.modal-open.page-overflow .page-container,
+.modal-open.page-overflow .page-container .navbar-fixed-top,
+.modal-open.page-overflow .page-container .navbar-fixed-bottom,
+.modal-open.page-overflow .modal-scrollable {
+ overflow-y: auto !important;
+}
+
+.modal-scrollable {
+ overflow: hidden !important;
+}
+
+/***
+jQuery Notific8 Plugin
+***/
+
+.jquery-notific8-message {
+ font-size: 13px;
+}
+
+[class*="jquery-notific8"],
+[class*="jquery-notific8"]:after,
+[class*="jquery-notific8"]:before {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+
+.right .jquery-notific8-close-sticky span,
+.left .jquery-notific8-close-sticky span {
+ font-size: 10px;
+}
+
+.jquery-notific8-heading {
+ font-weight: 300;
+ font-size: 16px;
+}
+
+/***
+jQuery File Upload
+***/
+
+.blueimp-gallery .close {
+ background-image: url("../img/portlet-remove-icon-white.png") !important;
+ margin-top: -2px;
+}
+
+.blueimp-gallery .prev,
+.blueimp-gallery .next {
+ border-radius: 23px !important;
+}
+
+/***
+Bootstrap Switch
+***/
+
+.has-switch {
+ border-color: #e5e5e5;
+}
+
+.has-switch:focus {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+/***
+Jstree
+***/
+
+.jstree-default .jstree-clicked {
+ border: 0;
+ background-color: #e1e1e1;
+ box-shadow: none;
+}
+
+.jstree-default .jstree-hovered {
+ border: 0;
+ background-color: #eee;
+ box-shadow: none;
+}
+
+.jstree-default .jstree-wholerow-clicked,
+.jstree-wholerow .jstree-wholerow-clicked {
+ background: none;
+ border: 0;
+ background-color: #e1e1e1;
+ box-shadow: none;
+}
+
+.jstree-default .jstree-wholerow-hovered,
+.jstree-wholerow .jstree-wholerow-hovered {
+ border: 0;
+ background-color: #eee;
+ box-shadow: none;
+}
+
+.jstree-icon.icon-lg {
+ margin-top: 1px;
+}
+
+.jstree-open > .jstree-anchor > .fa-folder:before {
+ margin-left: 2px;
+ content: "\f07c";
+}
+
+.jstree-default.jstree-rtl .jstree-last {
+ background: transparent;
+ background-repeat: no-repeat;
+}
+
+.vakata-context,
+.vakata-context ul {
+ padding: 0;
+ min-width: 125px;
+ background-color: #ffffff;
+ -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+ font-size: 14px;
+ font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+ border: 1px solid #ddd;
+}
+
+.vakata-context li a {
+ padding: 0 10px;
+}
+
+.vakata-context .vakata-context-hover > a,
+.vakata-context li a:hover {
+ background-color: #eee;
+ color: #333;
+ box-shadow: none;
+}
+
+.vakata-context li a span,
+.vakata-context li a ins {
+ display: none;
+}
+
+.vakata-context .vakata-context-separator a,
+.vakata-context-rtl .vakata-context-separator a {
+ margin: 0;
+}
+
+.jstree-rename-input {
+ background-color: #ffffff !important;
+ border: 1px solid #e5e5e5 !important;
+ outline: none !important;
+ padding: 2px 6px !important;
+ margin-right: -4px !important;
+}
+
+/***
+Bootstrap Select
+***/
+
+.bootstrap-select .btn {
+ border-color: #e5e5e5;
+}
+
+.bootstrap-select.open .btn1 {
+ border-color: #999999;
+}
+
+.bootstrap-select.open.dropup .btn1 {
+ border-color: #999999;
+}
+
+.bootstrap-select .btn:focus {
+ outline: none !important;
+ outline-offset: 0;
+}
+
+.bootstrap-select.btn-group .dropdown-menu {
+ margin-top: 1px;
+}
+
+.bootstrap-select.btn-group .dropdown-menu > li > dt > .text {
+ font-weight: 600;
+ font-family: 'Open Sans';
+ font-size: 14px;
+}
+
+.bootstrap-select.btn-group .dropdown-menu .text-muted {
+ color: #999 !important;
+}
+
+.bootstrap-select .caret {
+ border: 0;
+ width: auto;
+ height: auto;
+ margin-top: -10px !important;
+}
+
+.bootstrap-select .caret:before {
+ content: "\f107";
+ display: inline-block;
+ border: 0;
+ font-family: FontAwesome;
+ font-style: normal;
+ font-weight: normal;
+}
+
+.bootstrap-select .selected i {
+ color: #aaa;
+}
+
+/***
+Pace - Page Progress
+***/
+
+.pace .pace-progress {
+ z-index: 10000;
+ top: 40px;
+ height: 2px;
+}
+
+.pace .pace-progress-inner {
+ box-shadow: none;
+}
+
+.pace .pace-activity {
+ top: 44px;
+ right: 22px;
+ border-radius: 10px !important;
+}
+
+@media (max-width: 480px) {
+
+ .page-header-fixed .pace .pace-progress {
+ top: 82px;
+ }
+
+ .page-header-fixed .pace .pace-activity {
+ top: 88px;
+ right: 15px;
+ }
+
+}